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

MickeySL
Offline
Зарегистрирован: 22.07.2014
Доброе время суток всем.
 
Пришли из китая ультразвуковые влагозащищенные сенсоры DYP-ME007Y.
Все мой попытки найти работоспособный код для проверки этих сенсоров ни к чему не привели. Зато нашел datasheet, правда на китайском языке :-). 
В итоге родился код, может кому-нибудь пригодиться:
#include <SoftwareSerial.h>

SoftwareSerial mySerial =  SoftwareSerial(10,11); 

#define echoPin 10
#define trigPin 11

unsigned int reading;
byte readByte;
byte read_buffer[4]; 
byte crcCalc;
word distance;
String outText;

void setup() {
  //
  // Настройка портов
  //
  mySerial.begin (9600);

  Serial.begin (9600);
  Serial.println("start");
  //
  // Очищаем буфер чтения
  //
  for (byte loopstep = 0; loopstep <= 3; loopstep++) {
    read_buffer[loopstep] = 0;
  }
}

void loop() {
  //
  // Проверка наличия данных в COM порту
  //
  if (mySerial.available() < 1) {
    return;  
  }
  //
  // Читаем в буфер
  //
  readByte = mySerial.read();
  
  for (byte loopstep = 0; loopstep <= 2; loopstep++) {
    read_buffer[loopstep] = read_buffer[loopstep + 01];
  }
  
  read_buffer[03] = readByte;   
  //
  // Анализ буфера
  //
  if (read_buffer[00] != 0xff) {
    return; // это не начало данных 
  };
  
  crcCalc = read_buffer[00] + read_buffer[01] + read_buffer[02];
  if (read_buffer[03] != crcCalc) {
    return; // контрольная сумма пакета данных не совпала
  };
  //
  // расчет расстояния
  //
  distance = (read_buffer[01] * 0xff) + read_buffer[02];
  //
  // вывод
  //
  outText = "bytes: ";
  outText = String(outText + read_buffer[00]);
  outText = String(outText + "+");
  outText = String(outText + read_buffer[01]);
  outText = String(outText + "+");
  outText = String(outText + read_buffer[02]);
  outText = String(outText + "+");
  outText = String(outText + read_buffer[03]);
  outText = String(outText + " = ");
  outText = String(outText + distance);
  outText = String(outText + " mm");
  
  Serial.println(outText);
  //
  // пауза - 1 секунда, можно любое значение
  //
  delay(1000);
  //
  // удаляем из буфера данные, которые во время паузы туда залезли
  //
  while (mySerial.available() > 0) {
     readByte = mySerial.read();
  }
}



 

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

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) Подключаем питание к плате управления, светодиод не мигает. Это второй вариант, код для проверки смотрите ниже:


#define Distance_Trig		11
#define Distance_Echo		10

int	impulseTime;
int	Distance;
String	outText;
 
void setup() {
	//
	Serial.begin (9600);
	Serial.println("start");
	//
	pinMode(Distance_Trig ,OUTPUT);
	
	pinMode(Distance_Echo ,INPUT);
	digitalWrite(Distance_Echo ,HIGH);
}
 
void loop() {
	//
	digitalWrite(Distance_Trig, HIGH);
	delayMicroseconds(10);
	digitalWrite(Distance_Trig, LOW);
	
	impulseTime		= pulseIn(Distance_Echo, HIGH);
	Distance		= impulseTime/58;
	//
	delay(1000);
	//
	outText = "distance: ";
	outText = String(outText + Distance);
	outText = String(outText + " mm");
   
	Serial.println(outText);
}

 

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 см от него?