роботы робототехника микроконтроллеры

HC-SR04: ПОДКЛЮЧЕНИЕ УЛЬТРАЗВУКОВОГО ДАТЧИКА РАССТОЯНИЯ

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

Что нам понадобится?

Для опытов с ультразвуковым датчиком расстояния HC-SR04 нам понадобится плата ESP32 DEVKIT V1, пара макетных плат, соединительные проводники-перемычки, резистор с номиналом около 220 Ом и кабель micro USB для подключения платы к компьютеру.

Ультразвуковой датчик расстояния HC-SR04

Ультразвуковой датчик расстояния HC-SR04

Ультразвуковой датчик расстояния HC-SR04
Вид спереди и сверху

Ультразвуковой датчик HC-SR04 используется для определения расстояния до объекта. Он включает в себя пьезоэлектрический ультразвуковой передатчик, излучающий ультразвуковые волны с частотой 40 кГц, и приемник, принимающий отраженную ультразвуковую волну. Также 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


Схема подключения датчика HC-SR04

Для экспериментов с HC-SR04 подключим вывод Trig, например, к выводу D25 (GPIO25) платы микроконтроллера ESP32. А вывод Echo – к выводу D27 (GPIO27) через ограничительный резистор с номиналом 220 Ом. Резистор необходим для защиты входа микроконтроллера от возможного высокого напряжения на выходе Echo. Максимальное напряжение, которое можно подавать на вывод ESP32, не должно превышать 3.6 В, а выходной сигнал датчика (Echo) имеет TTL-уровень – 5 В.

Принципиальная схема подключения датчика HC-SR04

Принципиальная схема подключения датчика HC-SR04
(расположение выводов HC-SR04 на схеме показана условно)


Для согласования уровней можно также использовать делитель напряжения на двух резисторах. Использование согласования уровней предпочтительно в более серьезных схемах, а для простых экспериментов можно обойтись даже без ограничительного резистора, так как входы 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 — время ожидания (тайм-аут) в микросекундах
Если текущее входное значение пина отличается от pulse_level, функция сначала ждет, пока вход пина не станет равным pulse_level, а затем измеряет длительность, в течение которой пин равен pulse_level. Если же пин уже равен pulse_level, то отсчет времени начинается немедленно. Функция вернет -2, если был превышен тайм-аут ожидания, и -1, если был превышен тайм-аут во время основного измерения.

Значение, полученное от функции time_pulse_us, мы будем умножать на скорость звука (343 м/с), умноженную на 100 и деленную на 1000000 (для перевода в сантиметры). Сделаем расчеты заранее, чтобы не нагружать микроконтроллер.

343 * 100 / 1000000 = 0.0343

Выводить полученное значение будем с точностью до одного знака после запятой, используя функцию round(). Первым аргументом этой функции является округляемое значение, а вторым – число знаков после запятой.

В результате программа может выглядеть, например, так:

# из модуля 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-странички проекта к себе на микроконтроллер и воспользуйтесь примерами использования на той же странице.

Удачный Вам экспериментов!



myROBOT.ru Хотите узнать больше об использовании и программировании микроконтроллеров? Попробуйте посмотреть другие статьи в разделе "Шаг за шагом" для создания полезных и забавных проектов!
Как сделать робота
ПОПУЛЯРНЫЕ СТАТЬИ
Драйвер двигателей L293D
Драйвер двигателей L293D
Для управления двигателями мини робота необходимо устройство, которое бы преобразовывало управляющие сигналы малой мощности в токи, достаточные для управления моторами. Такое устройство называют драйвером двигателей.
Как сделать простейшего робота
Как сделать простейшего робота
О том, как сделать робота в домашних условиях, используя лишь микросхему драйвера моторов и пару фотоэлементов. В зависимости от способа соединения моторов, микросхемы и фотоэлементов робот будет двигаться на свет или, наоборот, прятаться в темноту, следовать по линии или бежать за вашей рукой.
Первые проекты на микроконтроллере ESP32
Первые проекты на микроконтроллере ESP32
В качестве первых проектов на ESP32 рассмотрим примеры мигания светодиодами и напишем программу "бегущие огни". Это классика при изучении микроконтроллеров.
Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как сделать простого робота на микроконтроллере (Часть 1). Управляем электромоторами
Как самому сделать робота, используя драйвер управления двигателями L293D и микроконтроллер ATmega8. Схема робота и примеры простейших программ для управления моторами.
НОВЫЕ СТАТЬИ
Можно ли сделать BEAM-робота на Raspberry Pi?
Можно ли сделать BEAM-робота на Raspberry Pi?
Ответ Марка Тилдена с уникальной фотографией одной из новых работ маэстро.
Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Изучаем Python: TOP-5 лучших сайтов для изучения Питона
Самоучитель, интерактивный учебник, наглядные задачи и примеры программ.
Роботы на одной микросхеме своими руками
Роботы на одной микросхеме своими руками
Подборками статей myROBOT.ru. Практика создания роботов: схемы и советы по изготовлению. Чтобы сделать роботов, нет необходимости даже писать программы. Все роботы начнут работать сразу же, как только Вы подключите к ним питание.
ПОПУЛЯРНОЕ НА САЙТЕ
Драйвер программатора USBASP для Windows 7, 8, 10
Драйвер программатора USBASP для Windows 7, 8, 10
Универсальный драйвер программатора USBasp v 2.0 USB ISP без необходимости принудительного отключения сертификата драйвера или использования Zadig, достаточно скачать драйвер USBasp и запустить файл InstallDriver.exe.
Учимся программировать.<BR>Среда программирования на ЛОГО
Учимся программировать.
Среда программирования на ЛОГО
GAME LOGO — бесплатная среда программирования для увлекательного путешествия в мир программирования и информатики. Программирование на русском языке, удобный и красивый интерфейс, продуманный синтаксис.




Copyright © myrobot.ru, 2005-2023


Яндекс.Метрика   Рейтинг@Mail.ru