Глючит ультразвуковой дальномер HC-SR04

Skaper
Offline
Зарегистрирован: 24.06.2012
Вот такие показания он мне выдает:, где малые числа, подносил руку, дальномер смотрит на потолок высотой 230-250см...
Sonar 0: -398 
Sonar 0: -396 
Sonar 0: -417 
Sonar 0: -423 
Sonar 0: 18 
Sonar 0: 14 
Sonar 0: 14 
Sonar 0: -419 
Sonar 0: -415 
Sonar 0: 9 
Sonar 0: -391 
Sonar 0: 10 
Sonar 0: -411 
Sonar 0: -404 
Sonar 0: -386 
Иногда всеже выдает верные показания, бывает что редко неправельные, но а так он живет своей жизнью, в чем может быть проблема? Вот скетч:
int  distance, time_sonar; //Переменные для сонара sonar()
const byte Trig = 6;
const byte Echo =8;
void setup(){
  Serial.begin(115200);
  pinMode(Echo, INPUT); 
  pinMode(Trig, OUTPUT); 
}

void loop()
{
    Serial.print("Sonar ");
    Serial.print(i);
    Serial.print(": ");
    Serial.print(sonar());
    Serial.print(" ");
    delay(350);
    Serial.println();
}
int sonar() { 
  digitalWrite(Trig, HIGH); // Подаем сигнал на выход микроконтроллера 
  delayMicroseconds(10); // Удерживаем 10 микросекунд 
  digitalWrite(Trig, LOW); // Затем убираем 
  time_sonar=pulseIn(Echo, HIGH); // Замеряем длину импульса 
  distance=time_sonar/29/2; // Пересчитываем в сантиметры 
  return distance; // Возвращаем значение 
}

 

 

Skaper
Offline
Зарегистрирован: 24.06.2012
Вот бывает и нормальные значения дает
Sonar : -438 
Sonar : -466 
Sonar : 227 
Sonar : 234 
Sonar : 227 
Sonar : 228 
Sonar : -451 
Sonar : 234 
Sonar : 228 
Sonar : -452 
Sonar : -457 
Sonar : 21 
Sonar : -474 
Sonar : 230 
Sonar : 226 
Sonar : 225 
Sonar : 226 
 
Skaper
Offline
Зарегистрирован: 24.06.2012

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

Araris
Offline
Зарегистрирован: 09.11.2012

Попробуйте, например, стену, чтобы расстояние было менее 150-ти см. Понаблюдайте за стабильностью показаний и отпишитесь сюда. По своему опыту скажу, что а) 230-250 см для HC-SR04 - достаточно далеко; б) скетч надо дополнить функцией, усредняющей показания и отбрасывающей заведомо неверные; в) HC-SR04 весьма чувствителен к качеству питания. 

Skaper
Offline
Зарегистрирован: 24.06.2012

Вот показания у стены ~120см (второе, это время измерения в микросикундах)

Sonar : 126 6488
Sonar : -60 6916
Sonar : 126 211808
Sonar : -46 7012
Sonar : 127 212340
Sonar : -50 7080
Sonar : 131 212160
Sonar : -60 7236
Sonar : -33 211680
Sonar : 116 212972
Sonar : -47 6540
Sonar : 124 212320
Sonar : -36 6904
Sonar : 124 212824
Sonar : -56 6932
Sonar : 123 211896
Sonar : -17 6860
Sonar : 125 213708
Sonar : -35 6964
Sonar : 126 212868
Sonar : 125 7008
 
 
Вот я водил перед ним рукой:
Sonar : 12 1408
Sonar : 11 1448
Sonar : 11 9360
Sonar : 11 9360
Sonar : 11 9360
Sonar : 11 9360
Sonar : 12 9360
Sonar : 11 9360
Sonar : 12 9360
Sonar : 14 9360
Sonar : -54 9360
Sonar : -50 212132
Sonar : 19 212212
Sonar : 20 1888
Sonar : 20 1824
Sonar : 21 1856
Sonar : 22 9364
Sonar : 23 9364
Sonar : 25 9364
Sonar : -56 9364
Sonar : -44 212064
Sonar : -60 212492
Sonar : -63 211720
Sonar : 26 211576
Sonar : -62 2216
 
 

 

Skaper
Offline
Зарегистрирован: 24.06.2012

Другой сонар, той же марки, видит нормально! Значит всетаки сонар дохляк? Но измеряет же иногда и правильно! 

Araris
Offline
Зарегистрирован: 09.11.2012

Skaper пишет:

Значит всетаки сонар дохляк?

Отчего бы и нет ? Какая цена такие и сонары, сами понимаете.

Skaper пишет:

Но измеряет же иногда и правильно! 

Тогда боритесь с ним программными средствами (усреднение + отбрасывание).

maksim
Offline
Зарегистрирован: 12.02.2012

Для начала исправьте, что бы не было переполнений:

unsigned long distance, time_sonar; //Переменные для сонара sonar()

 

sds
Offline
Зарегистрирован: 29.10.2012

Да, переполнение переменных - это зло!!!

Но, обращу внимание еще на такой момент: одинаковые по маркировке сенсоры у меня ведут себя по разному (были получены от разных китайцев в разные периоды времени).

В даташите написано, что максимальный ответ от сенсора 65мсек (вроде так). С моими сенсорами это не работает. Максимальный ответ примерно 200мсек и это надо учитывать

Так вот, если слать команды TRIG чаще, чем получен ECHO ответ, то сенсоры ведут себя по разному. 

Один забивает на вторую команду и продолжает ждать ответа, а далее в зависимости от кода - можно получить разную хрень на выходе (очень похожую на ваши данные), а второй, при получении повторной команды, "сбрасывает" состояние ECHO и ведет себя так, как будто до его команды ничего не было

Подключив рядом 2 обозначенных типо одинаковых датчика и оба направив в потолок получил очень разные показания и долго ломал голову над этим поведением, а потом, разобравшись (уже с осциллографом), стал подписывать сенсоры, дабы их не путать

ua3msi
Offline
Зарегистрирован: 07.05.2017