Глючит ультразвуковой дальномер HC-SR04
- Войдите на сайт для отправки комментариев
Вс, 15/12/2013 - 23:08
Вот такие показания он мне выдает:, где малые числа, подносил руку, дальномер смотрит на потолок высотой 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; // Возвращаем значение }
Есть другой далномер, там очень редко, но тоже проскакивают рандомные значения.
Попробуйте, например, стену, чтобы расстояние было менее 150-ти см. Понаблюдайте за стабильностью показаний и отпишитесь сюда. По своему опыту скажу, что а) 230-250 см для HC-SR04 - достаточно далеко; б) скетч надо дополнить функцией, усредняющей показания и отбрасывающей заведомо неверные; в) HC-SR04 весьма чувствителен к качеству питания.
Вот показания у стены ~120см (второе, это время измерения в микросикундах)
Другой сонар, той же марки, видит нормально! Значит всетаки сонар дохляк? Но измеряет же иногда и правильно!
Значит всетаки сонар дохляк?
Отчего бы и нет ? Какая цена такие и сонары, сами понимаете.
Но измеряет же иногда и правильно!
Тогда боритесь с ним программными средствами (усреднение + отбрасывание).
Для начала исправьте, что бы не было переполнений:
Да, переполнение переменных - это зло!!!
Но, обращу внимание еще на такой момент: одинаковые по маркировке сенсоры у меня ведут себя по разному (были получены от разных китайцев в разные периоды времени).
В даташите написано, что максимальный ответ от сенсора 65мсек (вроде так). С моими сенсорами это не работает. Максимальный ответ примерно 200мсек и это надо учитывать
Так вот, если слать команды TRIG чаще, чем получен ECHO ответ, то сенсоры ведут себя по разному.
Один забивает на вторую команду и продолжает ждать ответа, а далее в зависимости от кода - можно получить разную хрень на выходе (очень похожую на ваши данные), а второй, при получении повторной команды, "сбрасывает" состояние ECHO и ведет себя так, как будто до его команды ничего не было
Подключив рядом 2 обозначенных типо одинаковых датчика и оба направив в потолок получил очень разные показания и долго ломал голову над этим поведением, а потом, разобравшись (уже с осциллографом), стал подписывать сенсоры, дабы их не путать
https://www.youtube.com/watch?v=oOdoP3dniYA