Часто бывают ситуации, когда нужно измерять расстояние до какого либо объекта электронными способами. Для этого существует много различных датчиков и электронных устройств. Один из таких датчиков HC-SR04, способен измерять расстояние до 4 метров с помощью ультразвука. Он достаточно распространён и дешёв, я купил его примерно за 4$.
Ультразвуковой датчик расстояния HC-SR04 (Вид сверху):
Ультразвуковой датчик расстояния HC-SR04 (Вид снизу):
Принцип работы датчика следующий: один из пьезоэлементов излучает ультразвуковую волну при подачи импульса длительностью 15 микросекунд, а другой пьезоэлемент принимает эту же отражённую волну от препятствия. Затем замеряется время задержки от передачи до приёма волны, далее вычисляется расстояние и передаётся сигнал на ногу Echo датчика, длительностью пропорциональной расстоянию до препятствия. Нам остаётся только подавать импульс на датчик, принять его и вычислить расстояние. Сегодня мы научимся работать с HC-SR04 на BASCOM-AVR.
Поставим перед собой задачу: собрать устройство, которое должно замерять расстояние до какого либо объекта с помощью датчика HC-SR04 и передавать данные через UART на ПК.
Для этой цели можно использовать практически любой AVR микроконтроллер, так как алгоритм очень простой. Я взял Atmega8, в итоге получилась следующая принципиальная схема устройства:
В качестве связующего звена с ПК используем USB - UART (COM - UART) переходник и любую терминальную программу на стороне ПК, например Terminal Emulator в BASCOM-AVR. Не забываем также выставить скорость (Baud) на 9600.
Я собрал схему на макетной плате с механическими контактами. Вот что получилось:
С "железной" частью разобрались, теперь приступим к программной.
На BASCOM-AVR я написал следующую программу для работы с датчиком:
$regfile = "m8def.dat" $crystal = 8000000 $baud = 9600 Config Portc.5 = Output Trig Alias Portc.5 Config Portc.4 = Input Dim S As Word Dim R As Single Do Trig = 1 Waitus 15 Trig = 0 Waitus 10 Pulsein S , Pinc , 4 , 1 R = S * 0.1725 Print R Waitms 50 Loop End
В трёх первых строках программы мы назначаем микроконтроллер и его тактовую частоту, а также скорость работы UART (в данном случае 9600 бод). Далее мы конфигурируем порт PORTC.5 микроконтроллера на выход, так как сюда у нас подключен пин Trig датчика расстояния. Порту PORTC.5 мы назначили имя Trig чтобы нам было легче писать\читать код, при обращении к этому имени мы обращаемся к PORTC.5. Также мы сконфигурировали PORTC.4 на вход, поскольку сюда мы подключили Echo датчика. Потом мы задаём переменные в которых будем хранить данные для расчёта и отображения. И тут начинается самое интересное, открываем операторные скобки бесконечного цикла (Do, Loop) и видим следующий код:
Trig = 1 Waitus 15 Trig = 0 Waitus 10
Здесь мы подаём кратковременный импульс длительностью 15 микросекунд на Trig и ждём 10 микросекунд.
Командой Pulsein S , Pinc , 4 , 1 мы замеряем длительность импульса на PINC.4 и заносим эту длительность в переменную S. Дальше вычисляем длину и записываем её в переменную R (R = S * 0.1725). 0.1725 - коэффициент для расчёта расстояния из длинны импульса. Командой Print R выводим в UART расстояние до препятствия.
Работа устройства в "железе":
При прошивке микроконтроллера не забываем установить фьюз-биты на работу от внутреннего тактового генератора на 8 МГц.
Вот скрин фьюз-битов:
Урок 20. Подключение семисегментного индикатора по трём проводам (74HC595)
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
МК AVR 8-бит | ATmega8A-AU | 1 | Поиск в магазине Отрон | |||
Ультразвуковой дальномер | HC-SR04 | 1 | Поиск в магазине Отрон | |||
Скачать список элементов (PDF)
Прикрепленные файлы:
- m8HC-SR04.rar (58 Кб)
Комментарии (14) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
[Автор]
[Автор]