Ультразвуковой влагозащищенный сенсор DYP-ME007Y

MickeySL
Offline
Зарегистрирован: 22.07.2014
Доброе время суток всем.
 
Пришли из китая ультразвуковые влагозащищенные сенсоры DYP-ME007Y.
Все мой попытки найти работоспособный код для проверки этих сенсоров ни к чему не привели. Зато нашел datasheet, правда на китайском языке :-). 
В итоге родился код, может кому-нибудь пригодиться:
01#include <SoftwareSerial.h>
02 
03SoftwareSerial mySerial =  SoftwareSerial(10,11);
04 
05#define echoPin 10
06#define trigPin 11
07 
08unsigned int reading;
09byte readByte;
10byte read_buffer[4];
11byte crcCalc;
12word distance;
13String outText;
14 
15void setup() {
16  //
17  // Настройка портов
18  //
19  mySerial.begin (9600);
20 
21  Serial.begin (9600);
22  Serial.println("start");
23  //
24  // Очищаем буфер чтения
25  //
26  for (byte loopstep = 0; loopstep <= 3; loopstep++) {
27    read_buffer[loopstep] = 0;
28  }
29}
30 
31void loop() {
32  //
33  // Проверка наличия данных в COM порту
34  //
35  if (mySerial.available() < 1) {
36    return
37  }
38  //
39  // Читаем в буфер
40  //
41  readByte = mySerial.read();
42   
43  for (byte loopstep = 0; loopstep <= 2; loopstep++) {
44    read_buffer[loopstep] = read_buffer[loopstep + 01];
45  }
46   
47  read_buffer[03] = readByte;  
48  //
49  // Анализ буфера
50  //
51  if (read_buffer[00] != 0xff) {
52    return; // это не начало данных
53  };
54   
55  crcCalc = read_buffer[00] + read_buffer[01] + read_buffer[02];
56  if (read_buffer[03] != crcCalc) {
57    return; // контрольная сумма пакета данных не совпала
58  };
59  //
60  // расчет расстояния
61  //
62  distance = (read_buffer[01] * 0xff) + read_buffer[02];
63  //
64  // вывод
65  //
66  outText = "bytes: ";
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");
77   
78  Serial.println(outText);
79  //
80  // пауза - 1 секунда, можно любое значение
81  //
82  delay(1000);
83  //
84  // удаляем из буфера данные, которые во время паузы туда залезли
85  //
86  while (mySerial.available() > 0) {
87     readByte = mySerial.read();
88  }
89}

 

Результат работы кода:
Дополнение: 

1) Сенсоры чувствительны к напряжению питания, если оно меньше 4,8 вольта, могут показывать всякую чушь. Я их запитывал с отдельного блока питания. Ардуина получала питание от USB порта. Использовал Arduino UNO.

2) Есть вариант сенсора подключенный кабелем к блоку управления, в принципе, кому нужно, можно сделать парктроник для авто.

Буду рад, если кому-то помог.

 
 
 
 
avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

А ссылочку на ебей? :)

MickeySL
Offline
Зарегистрирован: 22.07.2014
avton
avton аватар
Offline
Зарегистрирован: 11.05.2014

Стоят конечно не совсем адекватно,только если очень припрет....

MickeySL
Offline
Зарегистрирован: 22.07.2014

В Росии что-то отдаленно похожее на эти сенсоры начинается со 150$...

Делаю для друзей управление воротами на автомойке, по цене эти сенсоры оказались самыми оптимальными...

DerMeister
Offline
Зарегистрирован: 27.10.2014

Здравствуйте, MickeySL!

Датчик постоянно показывает разные значения, при этом неправильно. Питание подается от Arduino = 5.1 вольта. Почему так может быть?

MickeySL
Offline
Зарегистрирован: 22.07.2014

Возможные варианты:

1) Был у меня один такой датчик в партии. Была неисправна катушка (которую можно отверткой регулировать).

2) Посмотри по "даташиту" диаграмму направленности, возможно в стороне от датчика есть препятствия которые он периодически ловит.

3) Проверь показания направив датчик на твердое и большое препятствие (бетонную стену например), если расстояние правильное, значит датчик исправен. Ультразвук не на всех поверхностях дает правильное значение расстояния до объекта.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а может купить датчики от парктроника и с ними баловать?

http://ru.aliexpress.com/item/Rear-or-Front-View-Car-Parking-Sensor-Reve...

http://ru.aliexpress.com/item/Wholesale-4pcs-Assistance-Reversing-Radar-...

MickeySL
Offline
Зарегистрирован: 22.07.2014

Китайцы, они такие китайцы... :-)

Пришла следующая партия датчиков. Плата управления абсолютно идентична, отлицаются прошивкой микроконтроллера. Значит на сегодня есть два варианта:

1) Подключаем питание к плате управления, светодиод (на плате) начинает часто мигать. Это первый вариант, для тестирования подходит код из первого поста этой темы.

2) Подключаем питание к плате управления, светодиод не мигает. Это второй вариант, код для проверки смотрите ниже:

01#define Distance_Trig       11
02#define Distance_Echo       10
03 
04int impulseTime;
05int Distance;
06String  outText;
07  
08void 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  
19void 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}

 

RainMan
Offline
Зарегистрирован: 21.06.2011

jeka_tm пишет:

а может купить датчики от парктроника и с ними баловать?

http://ru.aliexpress.com/item/Rear-or-Front-View-Car-Parking-Sensor-Reve...

http://ru.aliexpress.com/item/Wholesale-4pcs-Assistance-Reversing-Radar-...

Потратил пару дней на поиск готовых решений или изысканий на подключение к ардуине датчиков от автомобиля. Результат - 0

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да ну

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м либо ошибка, либо датчик там врет

RainMan
Offline
Зарегистрирован: 21.06.2011

видел эти темки. Но как мне показалось до конечного результата там еще не дошли. А времени ковыряться в протоколе передачи данных от датчика нету.

К тому же возможно датчики от  производителя к производителю могут меняться по своим техническим характеристикам, а следовательно и обрабатывать сигнал от них надо по разному. Для этого хорошо иметь готовую библиотеку с кучей настроек

dodgerz
Offline
Зарегистрирован: 30.11.2014

Китайцы указывают что минимальная дистанция для подобного сенсора около 30 см. А в реальности он может видеть ближе? Т.е. что он выдает при припятствии в 5 см от него?

Дмитрий Миллер-Ти
Offline
Зарегистрирован: 16.12.2020

Есть сейчас где в наличии в Москве? Кто знает?