Вот раздобыл я себе интересную штуку - ультразвуковой датчик расстояния. Называется этот датчик HC-SR04.
Его краткую документацию я уже положил в наш раздел для загрузки файлов -
Собственно протокол общения с датчиком обещает быть простым. У датчика всего 4 контакта: питание +5В, GND, Trig и Echo. Если не считать питания, то получается всего 2 сигнала для обмена.
Документация к датчику написана немного коряво, поэтому расскажу сам как там все должно работать.
На сигнал Trig нужно подавать короткие импульсы длительностью 10мкс. Этот импульс запускает эхо-локатор. Он уже сам генерирует пачку ультразвуковых импульсов (40кГц) для излучателя и сам ловит отраженное эхо. По времени распространения звука туда и назад датчик определяет расстояние. Нам же сам датчик на контакт Echo выдает импульс с длительностью пропорциональной расстоянию. Длительность сигнала Echo от 150мкс до 25мс. Если ответа нет, то длительность Echo около 40мс. Расстояние до объекта можно вычислить разделив длительность в микросекундах эха на 58. Получаются расстояние в сантиметрах. Максимальное расстояние, которое можно мерить судя по документации - 5 метров.
Рекомендуемый период опроса датчика 50-10мс. Диаграмма направленности датчика не очень острая - примерно градусов под тридцать.
В принципе сам код для работы с датчиком c платы Марсоход я написал довольно быстро на Verilog. Посимулировал - похоже все правильно должно работать. А вот реальные испытания показали, что не все так хорошо. Довольно большая проблема - питание датчика. По документации ему нужно +5В и естественно вопрос - где их взять? Плату Марсоход я питаю от аккумулятора и напряжение там у него +4,2В. Этого оказалось не достаточно датчику расстояния.
Странным образом оказалось, что датчик работает довольно стабильно при напряжении питания +3,3В, но небольшое падение напряжения и все, начинает глючить.
Как я понял сам датчик сделан на базе микроконтроллера PIC и видимо ему очень важно иметь стабильное питание. Спасибо Юре, он мне сделал переходничек к плате Марсоход, который повышает напряжение и делает его стабильным +5В. Вот такая платка:
Возможно Юра потом напишет отдельную статью, как сделать такой "повышатель" напряжения. Я сейчас не буду на этом останавливаться.
Вот на этой картинке все устройство в сборе:
Проект для платы Марсоход, который я сделал измеряет расстояние и отображает его на светодиодах в двоичном виде. Правда отображаемое число нужно умножить на 2, чтобы получились сантиметры.
Весь проект можно взять здесь:
Вот как работает мой девайс:
К моему большому сожалению я обнаружил ряд недостатков этого датчика:
- Измерять расстояние до поверхностей, которые находятся под углом к лучу датчика не получается. Угол падения равен углу отражения - видимо из-за этого луч не возвращается, а уходит дальше, отразившись от поверхности.
- Некоторые поверхности обладают плохими отражающими свойствами. Это мягкие ковры, пледы и так далее.
Из-за этих проблем не получается применить этот датчик так как я себе задумал в очередном проекте. Видимо придется искать другие способы измерять расстояние, может быть какие-то оптические датчики или еще что-то.
Была так же мысль выпаять из этого дальномера собственно излучатели и подключить непосредстчвенно к ПЛИС платы Марсоход. Возможно, исключив из устройства "слабое звено" в виде PIC контроллера удалось бы повысить потребительские свойства устройства? Ну пока еще не знаю. Нужно подумать..
Подробнее...