Вопросы по ультразвуковому дальномеру URM37 v3.2

Тема в разделе "Arduino & Shields", создана пользователем leoben, 15 фев 2012.

  1. leoben

    leoben Нуб

    Имеется URM37 и 2 серво. Оба серво подключены к IO Shield к пинам 8 и 9. URM37 подключено и настроено по данной статье http://www.quadmotor.org/doku.php (пины 6 и 7).
    1. Похоже что при передачи данных с датчика информация вещается на все пины и соответственно серво приводы начинают сходить с ума. Как с этим бороться? (код прилагается)
    2. Можно ли заставить URM37 давать более точные показания? не в сантиметрах а в мм...
    Код (Text):

    #include <Servo.h>
    #include "URMSerial.h"

    #define DISTANCE 1

    URMSerial urm;
    Servo s_ver;
    Servo s_gor;
    int g = 0;
    int v = 0;
    int i = 0;
    int value;

    void setup()
    {
      Serial.begin(9600);
      urm.begin(6,7,9600);
      s_gor.attach(8);
      s_ver.attach(9);
      s_gor.write(90);
      s_ver.write(90);
    }

    void loop()
    {
      while(Serial.available() == 0);
      for(v = 100; v > 80; v--)
      {
        s_ver.write(v);
        if(v%2 == 0)
        {
          for(g = 60; g < 120; g++)
          {
            s_gor.write(g);
            urm.requestMeasurementOrTimeout(DISTANCE, value);
            Serial.println(value);
            delay(15);
          }
        }
        else
        {
          for(g = 120; g > 60; g--)
          {
            s_gor.write(g);
            urm.requestMeasurementOrTimeout(DISTANCE, value);
            Serial.println(value);
            delay(15);
          }
        }
      }
    }
     
     
  2. Dmitriy Kunin

    Dmitriy Kunin Гик

    У меня оно так-же неадекватно дёргает сервами, решения пока не нашёл, но видео на ютубе с работающими примерами есть, надо разбираться, что не так...
    Собственно, это один из затыков, почему не пишу статью до конца...
     
  3. leoben

    leoben Нуб

    Придумал вариант вполне рабочий, но скорость "сканирования" при таком подходе удручает...
    Код (Text):
    servo.attach(9);
    servo.write(pos);
    delay(25);
    servo.detach();
    urm.requestMeasurementOrTimeout(DISTANCE, value);
    Serial.println(value);
    А как на счет подключения серво к самому URM37? Пробовали? Получилось? И если да то как? :)
     
  4. Dmitriy Kunin

    Dmitriy Kunin Гик

    Не получилось, с аналогичным результатом...
     
  5. <Lame>

    <Lame> Гик

    К самому urm получилось!!!!:)
    я с ним вообще только второй день вожусь.:cool:
    Это делается очень легко и просто подключаете так:
    на 5v(urm) - 5v(arduino)
    gnd(urm) - gnd(arduino)
    nc(urm) - 5v(arduino)
    tx(urm) - pin2(arduino)
    rx(urm) - pin3(arduino)
    moto(urm) - оранжевый проводок на сервоприводе.
    И подключаем красный и коричневый проводки серва к питанию!
    Записываем на ардуино следующий код:
    (Компилируется только на версии ПО 2300!!!

    #include "URMSerial.h"

    #define DISTANCE 1
    #define TEMPERATURE 2
    #define ERROR 3
    #define NOTREADY 4
    #define TIMEOUT 5
    URMSerial urm;
    void setup() {
    Serial.begin(9600);
    urm.begin(2,3,9600);
    Serial.println("URM37 Library by Miles Burton - Distance and Servo. Version 2.0 modified by <Lame>")
    urm.setServoMax(180);
    urm.setServoMin(0);
    }


    void loop()
    {
    for(int angle=0; angle<180; angle++)
    {
    // Set servo angle
    urm.setServo(angle);

    Serial.print("Measurement: ");
    Serial.print(getMeasurement()); // Output measurement
    Serial.print(" At: ");
    Serial.print(angle);
    Serial.print("*\n");
    }
    }

    int value; // This value will be populated
    int getMeasurement()
    {

    switch(urm.requestMeasurementOrTimeout(DISTANCE, value)) // Find out the type of request
    {
    case DISTANCE:
    Serial.println(value);
    return value;
    break;
    case TEMPERATURE:
    return value;
    break;
    case ERROR:
    Serial.println("Error");
    break;
    case NOTREADY:
    Serial.println("Not Ready");
    break;
    case TIMEOUT:
    Serial.println("Timeout");
    break;
    }
    return -1;
    }
    Запускаем serial monitor и радуемся!