Сегодня мы рассмотрим взаимодействие микроконтроллерной платы Raspberry Pi Pico с ультразвуковым датчиком, а также рассчитаем измеряемой с помощью него расстояние. Ультразвуковые датчики разнообразны и доступны на рынке, но тот, который мы собираемся использовать сегодня, является очень распространенным, и это HC-SR04. HC-SR04 является, пожалуй, лучшим ультразвуковым датчиком по низкой цене, и его очень легко использовать с большинством микроконтроллеров. Итак, давайте приступим.
HC-SR04 – это датчик, который используется во многих проектах и учебных схемах, которые вы можете найти в Интернете. HC-SR04 имеет немного сложную конструкцию, но очень прост в использовании и подключается к любому микроконтроллеру. Он имеет пару их ультразвуковых передатчика и приемника звука, которые используются для отправки и приема звуков для обнаружения объектов и препятствий.
Датчик имеет два контакта TRIG и ECHO, которые являются выходными и входными контактами для датчика соответственно. Поскольку мы собираемся использовать Raspberry Pi Pico, мы можем использовать его базовый код для создания работающей программы, а также мы можем превратить его в модуль с ЖК-дисплеем I2C для простоты визуализации данных. Датчик имеет радиус действия 400 см и минимальное расстояние 2-3 см. Также частота датчика составляет 40 кГц, на которой он передает и принимает ультразвуковой звук.
Чтобы измерить правильное расстояние, не забудьте установить точную скорость звука. Точность расстояния может отличаться в зависимости от температуры в вашем регионе, поэтому рассчитывайте скорость звука в соответствии с температурой.
Схема подключения Raspberry Pi Pico, ультразвукового датчика и ЖК-дисплея с интерфейсом I2C представлена далее.
Вот код для Raspberry Pi Pico:
from LQ_i2c import I2cLcd
from machine import Pin,I2C
from utime import sleep_us,ticks_us
echo=Pin(14,Pin.IN)
trig=Pin(15,Pin.OUT)
i2c = I2C(id=0,scl=Pin(5),sda=Pin(4),freq=100000)
lcd = I2cLcd(i2c, 0x3f, 2, 16) # LCD 16x2
lcd.move_to(0,0)
lcd.putstr("Ultrasonic")
lcd.move_to(0,1)
lcd.putstr("Sensor")
sleep_us(1000000)
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Distance :")
trig.value(0)
sleep_us(2)
while True:
try:
trig.high()
sleep_us(10)
trig.low()
while echo.value()==False:
st=ticks_us()
while echo.value()==True:
sto=ticks_us()
tt=sto-st
dis=(0.031594*tt)/2
print(dis)
lcd.move_to(4,1)
lcd.putstr(str(dis))
except KeyboardInterrupt:
break
Вначале мы импортируем некоторые важные модули, которые используются для работы кода, такие как функции I2cLcd из модуля LQ_i2c, функции Pin и I2C из модуля machine и функции sleep_us, ticks_us из модуля time. В этом коде мы используем модуль времени, который используется для вычисления времени в мкс.
Затем мы создаем два контакта в качестве входа и выхода для эхо- и триггерных контактов ультразвукового датчика. Далее мы создаем объект для инициализации I12C Lcd на порту I2C 0 (ноль), контакты которого определены в коде. Затем мы используем некоторые ЖК-команды для отображения исходного текста на ЖК-дисплее, устанавливая курсор и используя функции сна. Затем мы очищаем сигнал, переводя триггерный контакт в низкий уровень. Затем мы помещаем наш основной код в цикл while.
Мы создаем бесконечный цикл, прерываемый клавиатурой. В цикле мы переводим триггерный контакт в высокий уровень на 10 мкс, а затем снова переводим его в низкий уровень. Затем, когда вывод эха переходит в низкий уровень, мы начинаем отсчитывать время до тех пор, пока вывод эха не станет высоким. Таким образом мы рассчитываем общее время и с помощью простых вычислений находим расстояние. Но имейте в виду, что время исчисляется в мкс, поэтому скорость нужно измерять в см/мкс. Таким образом, 343 м/с будет 0,0343 см/мкс.
© digitrode.ru