Использование ультразвукового дальномера

Вот раздобыл я себе интересную штуку - ультразвуковой датчик расстояния. Называется этот датчик HC-SR04.

Ультразвуковой дальномер HC-SR04

Его краткую документацию я уже положил в наш раздел для загрузки файлов -

. Ну и конечно первая мысль - попробовать подключить его к нашей плате Марсоход.

Собственно протокол общения с датчиком обещает быть простым. У датчика всего 4 контакта: питание +5В, GND, Trig и Echo. Если не считать питания, то получается всего 2 сигнала для обмена.

Документация к датчику написана немного коряво, поэтому расскажу сам как там все должно работать.

Временная диаграмма сигналов между ультразвуковым дальномером HC-SR04 и платой Марсоход

На сигнал Trig нужно подавать короткие импульсы длительностью 10мкс. Этот импульс запускает эхо-локатор. Он уже сам генерирует пачку ультразвуковых импульсов (40кГц) для излучателя и сам ловит отраженное эхо. По времени распространения звука туда и назад датчик определяет расстояние. Нам же сам датчик на контакт Echo выдает импульс с длительностью пропорциональной расстоянию. Длительность сигнала Echo от 150мкс до 25мс. Если ответа нет, то длительность Echo около 40мс. Расстояние до объекта можно вычислить разделив длительность в микросекундах эха на 58. Получаются расстояние в сантиметрах. Максимальное расстояние, которое можно мерить судя по документации - 5 метров.
Рекомендуемый период опроса датчика 50-10мс. Диаграмма направленности датчика не очень острая - примерно градусов под тридцать.

В принципе сам код для работы с датчиком c платы Марсоход я написал довольно быстро на Verilog. Посимулировал - похоже все правильно должно работать. А вот реальные испытания показали, что не все так хорошо. Довольно большая проблема - питание датчика. По документации ему нужно +5В и естественно вопрос - где их взять? Плату Марсоход я питаю от аккумулятора и напряжение там у него +4,2В. Этого оказалось не достаточно датчику расстояния.

Странным образом оказалось, что датчик работает довольно стабильно при напряжении питания +3,3В, но небольшое падение напряжения и все, начинает глючить.

Как я понял сам датчик сделан на базе микроконтроллера PIC и видимо ему очень важно иметь стабильное питание. Спасибо Юре, он мне сделал переходничек к плате Марсоход, который повышает напряжение и делает его стабильным +5В. Вот такая платка:

 плата питания для датчика расстояния

Возможно Юра потом напишет отдельную статью, как сделать такой "повышатель" напряжения. Я сейчас не буду на этом останавливаться.

Вот на этой картинке все устройство в сборе:

Датчик расстояния

Проект для платы Марсоход, который я сделал измеряет расстояние и отображает его на светодиодах в двоичном виде. Правда отображаемое число нужно умножить на 2, чтобы получились сантиметры.

Весь проект можно взять здесь:

Вот как работает мой девайс:

К моему большому сожалению я обнаружил ряд недостатков этого датчика:

  • Измерять расстояние до поверхностей, которые находятся под углом к лучу датчика не получается. Угол падения равен углу отражения - видимо из-за этого луч не возвращается, а уходит дальше, отразившись от поверхности.
  • Некоторые поверхности обладают плохими отражающими свойствами. Это мягкие ковры, пледы и так далее.

Из-за этих проблем не получается применить этот датчик так как я себе задумал в очередном проекте. Видимо придется искать другие способы измерять расстояние, может быть какие-то оптические датчики или еще что-то.

Была так же мысль выпаять из этого дальномера собственно излучатели и подключить непосредстчвенно к ПЛИС платы Марсоход. Возможно, исключив из устройства "слабое звено" в виде PIC контроллера удалось бы повысить потребительские свойства устройства? Ну пока еще не знаю. Нужно подумать..

 

 


 


Добавить комментарий