HC-SR04: ПОДКЛЮЧЕНИЕ УЛЬТРАЗВУКОВОГО ДАТЧИКА РАССТОЯНИЯ
Что нам понадобится?
Для опытов с ультразвуковым датчиком расстояния HC-SR04 нам понадобится плата ESP32 DEVKIT V1, пара макетных плат, соединительные проводники-перемычки, резистор с номиналом около 220 Ом и кабель micro USB для подключения платы к компьютеру.Ультразвуковой датчик расстояния HC-SR04
Ультразвуковой датчик расстояния HC-SR04
Вид спереди и сверху
Внешний вид датчика показан на рисунке. Рабочий диапазон определения препятствий находится в пределах от 2 см до 400 см. Точность — порядка 3 мм. Угол измерения — 15°. Напряжение питания — 5 В.
Принцип работы датчика отражен на временной диаграмме ниже. Для старта измерений на контакт Trig (Trigger) необходимо подать высокий уровень напряжения продолжительностью 10 микросекунд. Передатчик (Transmitter) произведет 8 ультразвуковых импульсов, следующих с частотой 40 кГц. Когда приемник (Receiver) примет отраженную ультразвуковую волну, на контакте Echo появится напряжение высокого уровня на время, пропорциональное расстоянию до препятствия.
Измерив длительность импульса на контакте Echo в микросекундах и зная, что скорость звука в воздухе составляет 343 м/c при температуре 20 °C и нормальном давлении, можно узнать расстояние до препятствия.
Например, если мы хотим получить расстояние в сантиметрах, то переведем скорость звука из м/с в сантиметры в микросекунду. Для этого умножим 343 на 100 и разделим на 1000000. Получившуюся величину нужно умножить на измеренное в микросекундах время, поделенное на 2 (нам необходимо учитывать, что ультразвуковая волна прошла двойное расстояние от датчика до препятствия: туда и обратно).
Схема подключения датчика HC-SR04
Для экспериментов с HC-SR04 подключим вывод Trig, например, к выводу D25 (GPIO25) платы микроконтроллера ESP32. А вывод Echo – к выводу D27 (GPIO27) через ограничительный резистор с номиналом 220 Ом. Резистор необходим для защиты входа микроконтроллера от возможного высокого напряжения на выходе Echo. Максимальное напряжение, которое можно подавать на вывод ESP32, не должно превышать 3.6 В, а выходной сигнал датчика (Echo) имеет TTL-уровень – 5 В.Для согласования уровней можно также использовать делитель напряжения на двух резисторах. Использование согласования уровней предпочтительно в более серьезных схемах, а для простых экспериментов можно обойтись даже без ограничительного резистора, так как входы ESP32 спокойно работают с TTL-уровнями, хотя это и не желательно.
Полная монтажная схема подключения HC-SR04 приведена в начале статьи.
Программа для работы с датчиком
Для работы программы нам понадобятся микросекундные функции. Одна из них находится в модуле time и называется sleep_us. Эта функция обеспечивает микросекундные задержки. Вторая функция находится в модуле machine и называется time_pulse_us. Функция возвращает длительность импульса на указанном пине в микросекундах. Эта функция является очень полезной, поэтому рассмотрим ее работу подробнее. Пример вызова функции может выглядеть следующим образом:machine.time_pulse_us(pin, pulse_level, timeout_us = 1000000)
Аргументы функции:
- pin — пин, на котором производится измерение длительности импульса
- pulse_level — должен быть 0 для определения длительности импульса низкого уровня или 1 для определения длительности импульса высокого уровня
- timeout_us — время ожидания (тайм-аут) в микросекундах
Значение, полученное от функции time_pulse_us, мы будем умножать на скорость звука (343 м/с), умноженную на 100 и деленную на 1000000 (для перевода в сантиметры). Сделаем расчеты заранее, чтобы не нагружать микроконтроллер.
В результате программа может выглядеть, например, так:
# из модуля machine импортируем класс Pin и функцию time_pulse_us
from machine import Pin, time_pulse_us
# из модуля time импортируем функции sleep и sleep_us
from time import sleep, sleep_us
# создадим функцию distance для работы датчиком
# функция будет принимать объекты пинов для trigger и echo
# и возвращать расстояние в сантиметрах
def distance(trigger, echo):
# подаем на trigger низкий уровень на 2 микросекунды
trigger.value(0)
sleep_us(2)
# подаем на trigger высокий уровень на 10 микросекунд
trigger.value(1)
sleep_us(10)
trigger.value(0)
# возвращаем измеренную на echo
# длительность импульса высокого уровня в микросекундах,
# умноженную на скорость звука и деленную на 2
return time_pulse_us(echo, 1) * 0.0343 / 2
# создаем объект Pin для Trigger с режимом выхода
trigger_pin = Pin(25, Pin.OUT)
# создаем объект Pin для Echo с режимом входа
echo_pin = Pin(27, Pin.IN)
# организуем бесконечный цикл
while True:
# присваиваем переменной d значение,
# возвращаемое функцией, в которую передаем объекты Pin
d = distance(trigger_pin, echo_pin)
# печатаем d с округлением до десятых
print(round(d, 1))
# ждем полсекунды
sleep(0.5)
Запустим Iguana IDE. Скопируем в нее текст программы. Подключим микроконтроллер к компьютеру с помощью USB-кабеля. Откроем соединение с помощью кнопки "Open" и нажмем кнопку "DOWNLOAD & RUN". В терминале каждые полсекунды будет печататься измеренное датчиком расстояние в сантиметрах. Поднесите к датчику ладонь, подвигайте ей вперед-назад перед датчиком. Наблюдайте изменение значения в терминале. Подробнее о загрузке и запуске программ можно прочитать в статье "ПЕРВЫЙ ПРОЕКТ НА МИКРОКОНТРОЛЛЕРЕ ESP32".
Для работы с ультразвуковым датчиком можно также воспользоваться популярной библиотекой "HC-SR04 Sensor driver in micropython", которую написал Роберто Санчес. Чтобы начать ее использовать, скопируйте файл "hcsr04.py" с github-странички проекта к себе на микроконтроллер и воспользуйтесь примерами использования на той же странице.
Удачный Вам экспериментов!
Хотите узнать больше об использовании и программировании микроконтроллеров? Попробуйте посмотреть другие статьи в разделе "Шаг за шагом" для создания полезных и забавных проектов!
ПОПУЛЯРНЫЕ СТАТЬИ |
Драйвер двигателей L293D
Для управления двигателями мини робота необходимо устройство, которое бы преобразовывало управляющие сигналы малой мощности в токи, достаточные для управления моторами. Такое устройство называют драйвером двигателей.
Как сделать простейшего робота
О том, как сделать робота в домашних условиях, используя лишь микросхему драйвера моторов и пару фотоэлементов. В зависимости от способа соединения моторов, микросхемы и фотоэлементов робот будет двигаться на свет или, наоборот, прятаться в темноту, следовать по линии или бежать за вашей рукой.
Первые проекты на микроконтроллере ESP32
В качестве первых проектов на ESP32 рассмотрим примеры мигания светодиодами и напишем программу "бегущие огни". Это классика при изучении микроконтроллеров.
Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как самому сделать робота, используя драйвер управления двигателями L293D и микроконтроллер ATmega8. Схема робота и примеры простейших программ для управления моторами.
НОВЫЕ СТАТЬИ |
Можно ли сделать BEAM-робота на Raspberry Pi?
Ответ Марка Тилдена с уникальной фотографией одной из новых работ маэстро.
Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Самоучитель, интерактивный учебник, наглядные задачи и примеры программ.
Роботы на одной микросхеме своими руками
Подборками статей myROBOT.ru. Практика создания роботов: схемы и советы по изготовлению. Чтобы сделать роботов, нет необходимости даже писать программы. Все роботы начнут работать сразу же, как только Вы подключите к ним питание.
ПОПУЛЯРНОЕ НА САЙТЕ |
Драйвер программатора USBASP для Windows 7, 8, 10
Универсальный драйвер программатора USBasp v 2.0 USB ISP без необходимости принудительного отключения сертификата драйвера или использования Zadig, достаточно скачать драйвер USBasp и запустить файл InstallDriver.exe.
Учимся программировать.
Среда программирования на ЛОГО
GAME LOGO — бесплатная среда программирования для увлекательного путешествия в мир программирования и информатики. Программирование на русском языке, удобный и красивый интерфейс, продуманный синтаксис.