0.00р.
Оформить заказВ этой статье вы познакомитесь с простым проектом на Raspberry Pi Pico: научитесь связывать ультразвуковой датчик с платой Pico и измерять расстояние до объекта, а затем отображать расстояние на модуле OLED-дисплея с помощью MicroPython.
Для проекта потребуются:
Пины УЗ дальномера | Пины Raspberry Pi Pico | Пины OLED дисплея |
VCC | VBUS (PIN: 40) | - |
Echo | GPIO2 (PIN: 4) | - |
Trigger | GPIO3 (PIN: 5) | - |
GND | GND (PIN: 38) | GND |
- | 3.3v (PIN: 36) | VCC |
- | GPIO16 (PIN: 21) | SDA |
- | GPIO17 (PIN: 22) | SCL |
Сначала загрузите файлы кода из репозитория GitHub на Raspberry Pi Pico. Затем откройте папку “T4_Interfacing_HC-SR04_Ultrasonic_sensor”. Эта папка содержит две вложенные папки - “codes” и “images". В папке "codes” есть два файла python - это main.py и ssd1306.py.
Внутри main.py у нас есть machine.py библиотека и библиотека ssd1306.py. Machine.py библиотека - это встроенная библиотека MicroPython, в которой представлены функции для основных операций, таких как I2C, АЦП, SPI и т.д. В ssd1306.py библиотека используется для OLED-дисплея. В utime.py библиотека используется для предоставления временных задержек в программе.
from machine import Pin, I2C from ssd1306 import SSD1306_I2C import utime
Переменные "trigger” и “echo” используются в качестве объекта для соответствующих функций вывода. Пин trigger, который подключен к GPIO 3 платы pico, устанавливается в качестве выхода (OUTPUT) с помощью pin.OUT, в то время как вывод echo устанавливается в качестве входного с помощью pin.INPUT.
trigger = Pin(3, Pin.OUT) echo = Pin(2, Pin.IN)
Функция ultrasonic() может использоваться для расчета времени отклика пина echo ультразвукового датчика. Внутри функции на пин trigger сначала подается низкий. Далее предусмотрена задержка в 2 микросекунды и устанавливается высокий сигнал пина trigger на 10 микросекунд, после чего на него снова подается низкий сигнал. После этого фиксируется разница в переменных signalon и signaloff, которые использовались для хранения времени, когда на вывод echo подается высокий и низкий сигнал соответственно. Переменную timepassed использована, чтобы вернуть разницу между переменной signalon и переменной signaloff.
def ultrasonic(): timepassed=0 trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) trigger.low() while echo.value() == 0: signaloff = utime.ticks_us() while echo.value() == 1: signalon = utime.ticks_us() timepassed = signalon - signaloff return timepassed
Приведенный ниже код используется для инициализации связи I2C и OLED-дисплея.
WIDTH = 128 # ширина Oled дисплея HEIGHT = 64 # высота дисплея i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000) # инициализация I2C, используя пины GP8 и GP9 (по умолчанию I2C0 pins) print("I2C Address : "+hex(i2c.scan()[0]).upper()) # адрес модуля OLED print("I2C Configuration: "+str(i2c)) # конфигурация I2C для дисплея oled = SSD1306_I2C(WIDTH, HEIGHT, i2c) # инициализация дисплея
Метод oled.fill(0) используется для очистки экрана OLED-дисплея в следующем коде. Затем, используя функцию oled.text (), отображается текст в соответствующем месте. Эти сообщения будут отображаться на OLED-дисплее с помощью метода oled.show (). Utime.sleep(4) используется для обеспечения задержки в 4 секунды.
oled.fill(0) # впишите свой текст oled.text("Hello!",5,8) oled.text("INTERFACING THE",5,30) oled.text("ULTRASONNIC",28,40) oled.text("SENSOR",50,50) # обновление экрана для отображения изображения и текста oled.show() utime.sleep(4)
В цикле while ниже вы можете обнаружить, что функция ultrasonic() вызывается для возврата времени отклика между импульсами trigger и echo. Затем переменная distance_cm используется для вычисления расстояния с помощью формулы. Функция round() используется для фиксации десятичных знаков измеренного расстояния до 2-го десятичного знака. Затем расстояние отображается на OLED-дисплее с помощью функции oled.text ().
while True: oled.fill(0) measured_time = ultrasonic() distance_cm = (measured_time * 0.0343) / 2 distance_cm = round(distance_cm,2) oled.text("ObjectDistance:",0,8) oled.text(">> "+str(distance_cm)+" cm",2,25) oled.show() utime.sleep(1)
Откройте “main.py” и “ssd1306.py” файлы в Thonny IDE. Для начала нажмите кнопки “ctrl+shift+s” на клавиатуре, чтобы сохранить “ssd1306.py” файл в плате контроллера. Перед сохранением данных убедитесь, что ваша плата Pico подключена к ПК. Когда вы сохраните код, откроется всплывающее окно, как показано ниже. Сначала вы должны выбрать Raspberry Pi Pico, а затем сохранить код как "ssd1306.py". То же самое нужно повторить и для “main.py” . Этот метод позволяет запускать программное обеспечение всякий раз, когда вы включаете Pico.
Полный код:
from machine import Pin, I2C from ssd1306 import SSD1306_I2C import utime trigger = Pin(3, Pin.OUT) echo = Pin(2, Pin.IN) def ultrasonnic(): timepassed=0 trigger.low() utime.sleep_us(2) trigger.high() utime.sleep_us(5) trigger.low() while echo.value() == 0: signaloff = utime.ticks_us() while echo.value() == 1: signalon = utime.ticks_us() timepassed = signalon - signaloff return timepassed WIDTH = 128 # oled display width HEIGHT = 64 # oled display height i2c = I2C(0, scl=Pin(17), sda=Pin(16), freq=200000) # Init I2C using pins GP8 & GP9 (default I2C0 pins) print("I2C Address : "+hex(i2c.scan()[0]).upper()) # Display device address print("I2C Configuration: "+str(i2c)) # Display I2C config oled = SSD1306_I2C(WIDTH, HEIGHT, i2c) # Init oled display # Clear the oled display in case it has junk on it. oled.fill(0) # Add some text oled.text("CIRCUIT DIGEST",5,8) oled.text("INTERFACING THE",5,30) oled.text("ULTRASONNIC",28,40) oled.text("SENSOR",50,50) # Finally update the oled display so the image & text is displayed oled.show() utime.sleep(4) while True: oled.fill(0) measured_time = ultrasonnic() distance_cm = (measured_time * 0.0343) / 2 distance_cm = round(distance_cm,2) oled.text("Статья переведена и подготовлена командой проекта Я у мамы PRO{...}ГРАММИСТ",0,8) oled.text(">> "+str(distance_cm)+" cm",2,25) oled.show() utime.sleep(1)
Источник: circuitdigest.com