Проблемы с дальномером URM37

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Vasiliy, 18 июн 2011.

  1. nailxx

    nailxx Официальный Нерд Администратор

    Вы можете «распушить» его через breadboard или изготовить раздвоенный провод.
     
  2. Hubble

    Hubble Нерд

    Здравствуйте. Извините, если просмотрел, кто-нибудь знает как менять режимы работы датчика. Ничего не пойму. В мануале написано след. (I) 44 для записи, (II){00,01,02} - адрес (т.е., насколько я понимаю, если мне нужен 2-ой режим, будет 01),(III) затем байт данных (кучу материала пересмотрел, никак не пойму, что туда писать. Для 3-го режима туда вроде пишут aa или bb, а что писать для 1 и 2?), (IV)ну и сумма, здесь все понятно.
     
  3. Razor

    Razor Нерд

    Всем привет, тоже мучаюсь с этим дальномером. Подключил так:
    URM1 (+5V) → D13
    URM2 (GND) → GND
    URM 7 (NC) → D12
    URM8 (RX) → D11
    URM9 (TX) → D10
    Естественно, пины D13 и D12 переведены в OUTPUT и на них HIGH. Скачал с гитхаба библиотеку, скопировал оттуда папку lib\URMSerial в папку libraries, код примера не компилируется, потому что "'URMSerial' does not name a type". В плане программирования на C/C++ я нуб, так что надеюсь, вы укажете мне на место, где я затупил.

    Код практически такой же, как в примере, но, на всякий случай, запосчу:
    Код (Text):
    /*
      длинный копирайт
    */
     
    #include <URMSerial.h>
     
    // The measurement we're taking
    #define DISTANCE 1
    #define TEMPERATURE 2
    #define ERROR 3
    #define NOTREADY 4
    #define TIMEOUT 5
     
    URMSerial urm;
     
    int value; // This value will be populated
    int getMeasurement()
    {
        // Request a distance reading from the URM37
        switch(urm.requestMeasurementOrTimeout(DISTANCE, value)) // Find out the type of request
        {
            case DISTANCE: // Double check the reading we recieve is of DISTANCE type
                //  Serial.println(value); // Fetch the distance in centimeters from the URM37
                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;
    }
     
    void setup() {
        Serial.begin(9600);               // Sets the baud rate to 9600
     
        // Отсебятина отсюда...
        pinMode(13, OUTPUT);
        pinMode(12, OUTPUT);
        digitalWrite(13, HIGH);
        digitalWrite(12, HIGH);
        urm.begin(11,10,9600);              // RX Pin, TX Pin, Baud Rate,
        // ...и до сюда.
     
        //urm.setMode(MODE_SERIAL);
        Serial.println("URM37 Library by Miles Burton - Distance. Version 2.0");  // Shameless plug
    }
     
    void loop()
    {
        Serial.println("Measurement: ");
        Serial.println(getMeasurement());  // Output measurement
        delay(500);
    }
    Ну и пути к либе, для наглядности, что куда я скопировал:
    ..\arduino-1.0.3\libraries\URMSerial\URMSerial.cpp
    ..\arduino-1.0.3\libraries\URMSerial\URMSerial.h

    UPD: попробовал, как сказанно в гайде по либам, поместить их в "Мои документы", не помогло.
    ..\Мои документы\Arduino\libraries\URMSerial\URMSerial.cpp
    ..\Мои документы\Arduino\librariesURMSerial\URMSerial.h
     
  4. Hubble

    Hubble Нерд

    Сори, не смогу указать непосредственно на ошибку, но возможно мой ответ все-таки как-то поможет. С сонаром я разобрался. Сперва отвечу на свой пост выше: последовательный режим работы датчика активен всегда, его нельзя включать или выключать. Выбирать можно только между 2-мя режимами, которые работают параллельно с последовательным. Т. к. я использую контроллер TI msp430g2553 и пишу в среде code composer мне пришлось самому набросать простенькую библиотеку. Код там сильно отличается от выше приведенного. Могу лишь сказать, что датчик вовсе не сложен в освоении. Попробуйте сами реализовать то, что вы хотите от датчика. В случае снятия показаний термометра, просто установите последовательный канал между сонаром и устройством, которое будет отправлять/принимать пакеты, отправьте по очереди команды {ox11, 0x00, 0x00, 0x11}, и так же по очереди примите 3 возвращаемых значения {high, low, sum}. High при t выше 0 равна 0, тогда на вывод(монитор) нужно передать только значения байта low.

    P.S. Будет ли работать код, если закомментить эту сточку urm.begin(11,10,9600)?
     
    Razor нравится это.
  5. Razor

    Razor Нерд

    Итак, попробую поставить заключительную точку в топике. Дальномер работает довольно просто, главное не использовать ту библиотеку :).
    Вот здесь актуальные либы с рабочими "из коробки" примерами, все завелось за несколько секунд.
     
  6. ИгорьК

    ИгорьК Оракул Модератор

    С указанными в предыдущем посте либами заработало вот это. А родные примеры не заработали. Возможно не разобрался пока. Arduino UNO.
     
  7. RedGanibal

    RedGanibal Нуб

    Всем доброго времени суток! Подскажите: пытаюсь подключить дальномер urm37 и загружаю код, но ничего не работает, а именно не меняется показатель расстояния. Плата в режиме ttl.
    Код (Text):
    #include <NewSoftSerial.h>
    #include <URMSerial.h>

    URMSerial urm;

    int value; // This value will be populated
    int getMeasurement()
    {
    // Request a distance reading from the URM37
    switch(urm.requestMeasurementOrTimeout(DISTANCE, value)) // Find out the type of request
    {
    case DISTANCE: // Double check the reading we recieve is of DISTANCE type
    // Serial.println(value); // Fetch the distance in centimeters from the URM37
    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;
    }

    void setup() {
    Serial.begin(9600); // Sets the baud rate to 9600
    urm.begin(1,0,9600); // RX Pin, TX Pin, Baud Rate
    Serial.println("URM37 Library by Miles Burton - Distance. Version 2.0"); // Shameless plug
    }

    void loop()
    {
    Serial.println("Measurement: ");
    Serial.println(getMeasurement()); // Output measurement
    delay(500);
    }
     
  8. Hubble

    Hubble Нерд

    Первый раз всегда так)) Главное не пугайтесь и идите до конца, проблема обязательно решится! Прочтите внимательно всю тему, возможно найдете подсказку. По сабжу, было бы не плохо удостовериться, что вы все правильно подключили. Еще было бы неплохо увидеть, что вы ему отправляете.