Доброе время суток всем.
Пришли из китая ультразвуковые влагозащищенные сенсоры DYP-ME007Y.
Все мой попытки найти работоспособный код для проверки этих сенсоров ни к чему не привели. Зато нашел datasheet, правда на китайском языке :-).
В итоге родился код, может кому-нибудь пригодиться:
01 | #include <SoftwareSerial.h> |
03 | SoftwareSerial mySerial = SoftwareSerial(10,11); |
19 | mySerial.begin (9600); |
22 | Serial .println( "start" ); |
26 | for ( byte loopstep = 0; loopstep <= 3; loopstep++) { |
27 | read_buffer[loopstep] = 0; |
35 | if (mySerial.available() < 1) { |
41 | readByte = mySerial.read(); |
43 | for ( byte loopstep = 0; loopstep <= 2; loopstep++) { |
44 | read_buffer[loopstep] = read_buffer[loopstep + 01]; |
47 | read_buffer[03] = readByte; |
51 | if (read_buffer[00] != 0xff) { |
55 | crcCalc = read_buffer[00] + read_buffer[01] + read_buffer[02]; |
56 | if (read_buffer[03] != crcCalc) { |
62 | distance = (read_buffer[01] * 0xff) + read_buffer[02]; |
67 | outText = String(outText + read_buffer[00]); |
68 | outText = String(outText + "+" ); |
69 | outText = String(outText + read_buffer[01]); |
70 | outText = String(outText + "+" ); |
71 | outText = String(outText + read_buffer[02]); |
72 | outText = String(outText + "+" ); |
73 | outText = String(outText + read_buffer[03]); |
74 | outText = String(outText + " = " ); |
75 | outText = String(outText + distance); |
76 | outText = String(outText + " mm" ); |
78 | Serial .println(outText); |
86 | while (mySerial.available() > 0) { |
87 | readByte = mySerial.read(); |
Результат работы кода:
Дополнение:
1) Сенсоры чувствительны к напряжению питания, если оно меньше 4,8 вольта, могут показывать всякую чушь. Я их запитывал с отдельного блока питания. Ардуина получала питание от USB порта. Использовал Arduino UNO.
2) Есть вариант сенсора подключенный кабелем к блоку управления, в принципе, кому нужно, можно сделать парктроник для авто.

Буду рад, если кому-то помог.
А ссылочку на ебей? :)
Брал на aliexpress, ссылка: http://www.aliexpress.com/item/2PCS-X-DC-5V-Waterproof-Ultrasonic-Sensor-Distance-Measuring-Module-30cm-3-5m-FREE-SHIPPING/1649087988.html
Стоят конечно не совсем адекватно,только если очень припрет....
В Росии что-то отдаленно похожее на эти сенсоры начинается со 150$...
Делаю для друзей управление воротами на автомойке, по цене эти сенсоры оказались самыми оптимальными...
Здравствуйте, MickeySL!
Датчик постоянно показывает разные значения, при этом неправильно. Питание подается от Arduino = 5.1 вольта. Почему так может быть?
Возможные варианты:
1) Был у меня один такой датчик в партии. Была неисправна катушка (которую можно отверткой регулировать).
2) Посмотри по "даташиту" диаграмму направленности, возможно в стороне от датчика есть препятствия которые он периодически ловит.
3) Проверь показания направив датчик на твердое и большое препятствие (бетонную стену например), если расстояние правильное, значит датчик исправен. Ультразвук не на всех поверхностях дает правильное значение расстояния до объекта.
а может купить датчики от парктроника и с ними баловать?
http://ru.aliexpress.com/item/Rear-or-Front-View-Car-Parking-Sensor-Reve...
http://ru.aliexpress.com/item/Wholesale-4pcs-Assistance-Reversing-Radar-...
Китайцы, они такие китайцы... :-)
Пришла следующая партия датчиков. Плата управления абсолютно идентична, отлицаются прошивкой микроконтроллера. Значит на сегодня есть два варианта:
1) Подключаем питание к плате управления, светодиод (на плате) начинает часто мигать. Это первый вариант, для тестирования подходит код из первого поста этой темы.
2) Подключаем питание к плате управления, светодиод не мигает. Это второй вариант, код для проверки смотрите ниже:
01
#define Distance_Trig 11
02
#define Distance_Echo 10
03
04
int
impulseTime;
05
int
Distance;
06
String outText;
07
08
void
setup
() {
09
//
10
Serial
.begin (9600);
11
Serial
.println(
"start"
);
12
//
13
pinMode(Distance_Trig ,OUTPUT);
14
15
pinMode(Distance_Echo ,INPUT);
16
digitalWrite(Distance_Echo ,HIGH);
17
}
18
19
void
loop
() {
20
//
21
digitalWrite(Distance_Trig, HIGH);
22
delayMicroseconds(10);
23
digitalWrite(Distance_Trig, LOW);
24
25
impulseTime = pulseIn(Distance_Echo, HIGH);
26
Distance = impulseTime/58;
27
//
28
delay(1000);
29
//
30
outText =
"distance: "
;
31
outText = String(outText + Distance);
32
outText = String(outText +
" mm"
);
33
34
Serial
.println(outText);
35
}
а может купить датчики от парктроника и с ними баловать?
http://ru.aliexpress.com/item/Rear-or-Front-View-Car-Parking-Sensor-Reve...
http://ru.aliexpress.com/item/Wholesale-4pcs-Assistance-Reversing-Radar-...
Потратил пару дней на поиск готовых решений или изысканий на подключение к ардуине датчиков от автомобиля. Результат - 0
да ну
http://compcar.ru/forum/showthread.php?t=7309&page=6
http://arduino.ru/forum/apparatnye-voprosy/rebyata-pomogite-podklyuchit-datchiki-parkovki-ot-parktronika-k-arduino
хотя первая более продуктивная как по мне
а вот что стоит посмотреть
http://compcar.ru/forum/showthread.php?t=7309&p=81212&viewfull=1#post81212
там кстати код еще прикладывался для ардуины чтобы считать
а конвертируется по последнеей ссылке просто. для A датчика первый байт разворачиваем и получаем расстояние в сантиметрах
хотя для датчика A на расстоянии 2м либо ошибка, либо датчик там врет
видел эти темки. Но как мне показалось до конечного результата там еще не дошли. А времени ковыряться в протоколе передачи данных от датчика нету.
К тому же возможно датчики от производителя к производителю могут меняться по своим техническим характеристикам, а следовательно и обрабатывать сигнал от них надо по разному. Для этого хорошо иметь готовую библиотеку с кучей настроек
Китайцы указывают что минимальная дистанция для подобного сенсора около 30 см. А в реальности он может видеть ближе? Т.е. что он выдает при припятствии в 5 см от него?
Есть сейчас где в наличии в Москве? Кто знает?