Глючит ультразвуковой дальномер 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