freeduino + URM04 v2.0 Ultrasonic Sensor + IO Expansion Shield = не работает

rx
Offline
Зарегистрирован: 23.10.2011

Здравствуйте, у меня вопрос о подключении "URM04 V2.0 Ultrasonic sensor" (ультразвуковой дальномер) к плате Freeduino. Подключаю, затем запускаю скетч из примера и ничего не работает. Может кто сталкивался, или что посоветует.

Опишу шаг за шагом свои действия.
1. присоединяю к плате Freeduino (Duemilanove) плату "IO Expansion Shield For Arduino(V5)"
2. переключаю на ней перемычки в rs485.
3. подключаю "URM04 V2.0 Ultrasonic sensor"
4. заливаю скетч по USB проводу и наблюдаю за процессом через "Serial Monitor" в программе Arduino. Скетч гружу из мануала и свой (в конце сообщения), который пытается запустить измерения и затем считать дистанцию.

в это время
- при подключении URM04 мигает светодиодом 4 раза, значит в порядке
- в "Serial Monitor" вижу, что URM04 не отвечает на комманды.

такое ощущение, что не идёт передача данных по RS485. Как можно проверить работоспособность порта?

Свой скетч для тестирования такой:

 

#include <Metro.h> 

Metro TriggerMetro = Metro(2000,true); 
Metro distanceMetro = Metro(200); 


int EN = 2;

byte cmd[7];
byte address = 0x12;
boolean start = true;  

void setup()  
{
  pinMode(EN, OUTPUT);
  Serial.begin(19200);
}

void loop() 
{
  if(TriggerMetro.check()==1)
  {
    if(start){// send a command to a different address
      start=false;
      digitalWrite(EN, HIGH);
      for(int j= 0x11;j<0x18;j++){ 
        address=j;
        trigger();
      }
      digitalWrite(EN, LOW);
    }
  }
  if((distanceMetro.check()==1) && (!start))
  {
    digitalWrite(EN, HIGH);
    for(int j= 0x11;j<0x18;j++){ 
        address=j;
        getDistance();
      } 
      
    digitalWrite(EN, LOW);
  }
  
  if (Serial.available()){
    digitalWrite(EN, LOW);
    Serial.println(Serial.read());
  }
}


void trigger()// begin scan
{
  cmd[0]= 0x55;
  cmd[1]= 0xaa;
  cmd[2]= address;
  cmd[3]= 0x00;
  cmd[4]= 0x01;
  cmd[5]= cmd[0]+cmd[1]+cmd[2]+cmd[3]+cmd[4];
  for(int j=0;j<6;j++){
     Serial.print(cmd[j]);
  }
  
}


void getDistance()// 
{
  cmd[0]= 0x55;
  cmd[1]= 0xaa;
  cmd[2]= address;
  cmd[3]= 0x00;
  cmd[4]= 0x02;
  cmd[5]= cmd[0]+cmd[1]+cmd[2]+cmd[3]+cmd[4];
  for(int j=0;j<6;j++){
     Serial.print(cmd[j]);
  }
  
}

 

Mastino
Offline
Зарегистрирован: 03.12.2011

попробуй поменять - Serial.begin(115200);

rx
Offline
Зарегистрирован: 23.10.2011

Не помогает.  

Пробовал ещё не смотреть за процессом через "Serial Monitor"(мало-ли порт занимаю) а просто моргать диодом если что произойдёт. Нет эффекта.

Думаю, что это либо из-за того, что я не правильно передаю данные(контрольную сумму не правильно считаю, не та ч-та или ещё что), либо аппаратные проблемы. Но как проверить детали без доп. затрат(купить новую деталь или деталь для тестов)?

Может у кого есть заведомо рабочий скетч для этих-же компонентов, или кто знает, как можно их протестировать.

Mastino
Offline
Зарегистрирован: 03.12.2011

я бы на твоем месте заказал бы этот..
http://www.ebay.com/itm/New-Arduino-Ultrasonic-Module-HC-SR04-Distance-S...

элементарный, дешевый, и работает прекрасно...программируется легко..

rx
Offline
Зарегистрирован: 23.10.2011

Может можно эмулировать работу RS485 подсоединив сенсор URM04 напрямую к портам Freeduino?
Или кинуть провода от выходов rs485(A и B) "IO Expansion Shield" на входы Freeduino?  

rx
Offline
Зарегистрирован: 23.10.2011

Да я уже купил этот URM04 V2.0, теперь голову ломаю. Думал круто, если есть разъёмчик на плате именно такой, какой нужно. Но... 

rx
Offline
Зарегистрирован: 23.10.2011

Написал о проблеме на форуме производителя девайса (dfrobot.com), там проблему решили. Расширили описание девайса и добавили скетч с примером работы. Хорошо, когда работает такая служба поддержки :)