Главная » Статьи » Как подключить |
Ультразвуковой дальномер HC-SR04
По случаю приобрел себе ультразвуковой дальномер HC-SR04. Девайс представляет из себя модуль с двумя пъезоизлучателями, один из которых служит излучателем, а второй - приемником ультразвуковой волны; плюс управляющая электроника для управления излучателем и приемником. Для подключения модуль имеет 4-х контактный разъем: два из которых питание (требуется 5 вольт), и еще два для общения с микроконтроллером.
Интерфейс связи тут организован очень просто: на вход подаем короткий импульс длительностью 10-15 микросекунд и ждем импульса на выходе. Как только до приемника дойдет отраженная волна, модуль сам рассчитает расстояние и выдаст на ногу Echo импульс высокого уровня длинной до 25 мс. Длина выходного импульса будет пропорциональна расстоянию до препятствия от которого отразилась ультразвуковая волна. Нам остается только поймать этот импульс, посчитать его длину и перевести это значение в расстояние.
Технические характеристики:
Характеристики потырены с документации на модуль. Кроме этого производитель приводит формулу, по которой рассчитывать расстояние в зависимости от длительности импульса.
S=F/58 ; где S - дистанция в сантиметрах, F - длина импульса в микросекундах
Как видно, даже знать скорость звука не обязательно.
Для испытаний собрал вот такую схему:
Модуль соединяется к микроконтроллеру напрямую. Резисторы подтяжки ставить не нужно, они уже есть на плате модуля.
И так, нам нужно ловить всего один импульс, и затем посчитать его длину. По началу хотел подбить под это дело одно из внешних прерываний микроконтроллера, при этом прерывание должно было происходить как по переднему фронту (переход с низкого в высокое состояние), так и по заднему фронту (с высокого на низкое). Тоесть придется на лету менять конфигурацию этого прерывания. Плюс к этому нужно задействовать один из таймеров, который должен измерять длину импульса. Слишком сложно для маленькой операции фиксирования сигнала.. В Bascom-AVR на этот случай есть специальная команда Pulsein. Вот пример того, как поймать сигнал с помощью этой команды:
Pulsein A , Pind , 5 , 1
здесь, в переменную A запишется значение длины импульса в десятках микросекунд, снятого с ноги Pind.5. Единица на конце команды говорит, что нужно ловить сигнал высокого уровня. Если изменить на 0, тогда контроллер будет ловить сигнал низкого уровня.
Эта команда не использует прерываний и хардверного таймера, но способна определить появление импульса и зафиксировать его длину с разрешением 10 мкс. Команда использует для хранения длины импульса 2-х байтный тип переменной, поэтому максимальная длина принятого сигнала может быть 655,35 мс. Этого вполне хватает для поставленной задачи, но по необходимости можно отредактировать файл библиотеки mcs.lib и изменить максимальную длительность фиксируемого импульса.
Полный листинг программы представлен ниже
$regfile = "m8def.dat"
$crystal = 8000000
'конфигурация подключения дисплея к портам МК
Config Lcd = 16 * 2
Config Lcdpin=Pin,Rs=Portc.5,E=Portc.4,Db4=Portc.3,Db5=Portc.2,Db6=Portc.1,Db7=Portc.0
Config Portd.4 = Output 'выход для подключения ноги Trigger
Trigger Alias Portd.4
Trigger = 0
Config Portd.5 = Input 'вход для импульса Echo
Config Portd.7 = Output 'конфигурация для подключения светодиода
Led Alias Portd.7
Led = 0
Dim A As Word 'сюда копируется значение длины сигнала
Dim S As Single 'переменная для хранения расстояния
Const K = 0.1725 'коэффициент для перевода длины импульса в расстояние
Waitms 50
Cursor Off
Cls
Lcd "Sonar HC-SR04"
Locate 2 , 1
Lcd "AVRproject.ru"
Led = 1
Waitms 100
Led = 0
Wait 3
Do
Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
Waitus 15
Trigger = 0
Waitus 10
Pulsein A , Pind , 5 , 1 'ловим импульс высокого уровня на PinD.5
S = A * K 'переводим значения
Cls
Lcd Fusing(s , "###.#") 'выводим данные на LCD, расстояние в сантиметрах
If S < 20 Then 'если растояние меньше заданного предела
Sound , Portb.0 , 200 , 500 'подадим голос через динамик на PortB.0
Led = 1 'и мигнем светодиодом
Waitms 20
Led = 0
End If
Waitms 100
Loop
End
На дисплей выводится число, показывающее расстояние до препятствия в сантиметрах. Еще добавил проверку на минимальное расстояние, если оно меньше 20-и сантиметров, будет выдан звуковой сигнал. По этому же принципу можно без проблем собрать парктроник своими руками :)
А теперь испытания:
Честно говоря не ожидал таких отличных результатов! Точность измерения проверял только до 50 см, показания прыгали не больше ± 0,5 см. И больше зависили от того, насколько вертикальна плоскость препятствия. Так же сигнал плохо отражается или вообще не отражается от ворсистых поверхностей. Оно и понятно, законы физики не обойдешь. В общем, модуль очень даже не плох!
Также есть модель сонара HC-SR04 для Proteus, её можно взять по ссылке ниже:
| |
Просмотров: 69126 | Комментарии: 55
| Теги: |
Всего комментариев: 55 | 1 2 » | ||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
1-30 31-55 | |||||||||||||||||||||||||||||
авторизация
рубрики
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |
метки