freeduino + URM04 v2.0 Ultrasonic Sensor + IO Expansion Shield = не работает
- Войдите на сайт для отправки комментариев
Здравствуйте, у меня вопрос о подключении "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]);
}
}
попробуй поменять - Serial.begin(115200);
Не помогает.
Пробовал ещё не смотреть за процессом через "Serial Monitor"(мало-ли порт занимаю) а просто моргать диодом если что произойдёт. Нет эффекта.
Думаю, что это либо из-за того, что я не правильно передаю данные(контрольную сумму не правильно считаю, не та ч-та или ещё что), либо аппаратные проблемы. Но как проверить детали без доп. затрат(купить новую деталь или деталь для тестов)?
Может у кого есть заведомо рабочий скетч для этих-же компонентов, или кто знает, как можно их протестировать.
я бы на твоем месте заказал бы этот..
http://www.ebay.com/itm/New-Arduino-Ultrasonic-Module-HC-SR04-Distance-S...
элементарный, дешевый, и работает прекрасно...программируется легко..
Может можно эмулировать работу RS485 подсоединив сенсор URM04 напрямую к портам Freeduino?
Или кинуть провода от выходов rs485(A и B) "IO Expansion Shield" на входы Freeduino?
Да я уже купил этот URM04 V2.0, теперь голову ломаю. Думал круто, если есть разъёмчик на плате именно такой, какой нужно. Но...
Написал о проблеме на форуме производителя девайса (dfrobot.com), там проблему решили. Расширили описание девайса и добавили скетч с примером работы. Хорошо, когда работает такая служба поддержки :)