Вооообщем купил я дальномер, все работает но через день начались проблемы, дальномер показывает дистанцию и вдруг показывает ноль, я не знаю что делать жду 3 минуты потом все нормально. Оказываеться дело в том что дальномер постоянно показывает ноль когда значение стоит определенно и не изменяёться или когда значение слишком большое допусти 600. Помогите не знаю что делать[/URL][/IMG]
У вас выбора нет. Если датчик сбоит, все равно что-то делать нужно. Учитывая условия возврата нулевого значения, запоминать последнее корректное значение вполне себе решение. Можете дальномер поменять на более умный или зрячий. Дублирующий сенсор рядом поставить - другой ультразвуковой, ИК, лазерный дальномер, ... Расстояние измерять всеми тремя коллегиально.
Попробуй с этой библиотекой: https://code.google.com/p/arduino-new-ping/ А вообще большая часть партии этих сенсоров с ebay/ali/dx за последние полгода-год в результате оптимизации схемы китайцами имеет аппаратную проблему - они иногда виснут и оживают только при прикасании пальцем к корпусу или сбросе питания.
Добрый день! Что бы не создавать новую тему, напишу здесь. Подключил дальномер SR04. Показывает расстояние только до 40-43 см. (должен до 450) Попробовал разные поверхности, попробовал разные скетчи, пробовал уно и мегу. Одно и то же. Что может быть? Последний скетч такой: Код (C++): const int trigPin = 9; const int echoPin = 8; void setup() { pinMode(trigPin, OUTPUT); // триггер - выходной пин pinMode(echoPin, INPUT); // эхо - входной Serial.begin(9600); // инициализация послед. порта } void loop() { long distance = getDistance(); // получаем дистанцию с датчика Serial.println(distance); // выводим в последовательный порт delay(100); } // Определение дистанции до объекта в см long getDistance() { long distacne_cm = getEchoTiming() * 1.7 * 0.01; return distacne_cm; } // Определение времени задержки long getEchoTiming() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); // генерируем импульс запуска delayMicroseconds(10); digitalWrite(trigPin, LOW); // определение на пине echoPin длительности уровня HIGH, мксек: long duration = pulseIn(echoPin, HIGH); return duration; }
Не совсем понял. У меня нет нулевых показаний, просто если препятствие передвигать далее 40-43 см. то показания так и остаются 43
Ага, я отвечал не на ваш вопрос. А по вашему вопросу- хорошо бы посмотреть, обновлюятся ли показания или застревают на 43, не обновляясь. Импульсы echo видите?
Обновляются. Работает точно, по линейке проверял. Но как только препятствие в виде коробки или иного предмета отодвигаешь более чем на 45 см. показания обновляются, но скачат в пределах 40-43 см. Пробовал с разными поверхностями, думал отражает коряво, но нет. С разными ардуино тоже пробовал
остается с разными датчиками попробовать. Хорошо бы посмотреть сигнал echo на осциллографе, если нет осциллографа- есть программы осциллографа для звуковых карт. Сигнал на карту через делитель подаете и смотрите.