Warning: fopen(/var/projects/prod/php/www/proglife/proglife_main_storage/storage/logs/error.log): failed to open stream: Permission denied in /var/projects/prod/php/www/proglife/proglife/system/library/log.php on line 22 Отображение данных дальномера с использованием Raspberry Pi Pico и MicroPython - Я у мамы программист
0
0
0
Ваш город: 

Отображение данных дальномера с использованием Raspberry Pi Pico и MicroPython

Отображение данных дальномера с использованием Raspberry Pi Pico и MicroPython

В этой статье вы познакомитесь с простым проектом на Raspberry Pi Pico: научитесь связывать ультразвуковой датчик с платой Pico и измерять расстояние до объекта, а затем отображать расстояние на модуле OLED-дисплея с помощью MicroPython.

Для проекта потребуются:

  1. Плата Raspberry Pi Pico
  2. Соединительные провода
  3. Макетная плата
  4. Ультразвуковой дальномер HC-SR04
  5. Дисплей OLED i2c

Схема подключения ультразвукового датчика к Raspberry Pi Pico


Пины УЗ дальномера
Пины 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




Программирование Raspberry Pi Pico с использованием MicroPython

Сначала загрузите файлы кода из репозитория 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("",0,8)
    oled.text(">> "+str(distance_cm)+" cm",2,25)
    oled.show()
    utime.sleep(1)
Статья переведена и подготовлена командой проекта Я у мамы PRO{...}ГРАММИСТ

Источник: circuitdigest.com

Raspberry Pi Pico, MicroPython, проект на Raspberry, Raspberry Pi, проект с дальномером

Фотографии
Похожие статьи
15.09.2021
Управление светодиодами с помощью ИК пульта
Управление светодиодами с помощью ИК пульта
В этом проекте вы научитесь управлять светодиодами с ИК пульта...
30.09.2021
Работа с многофункциональным датчиком BME280
Работа с многофункциональным датчиком BME280
В этом небольшом уроке рассмотрим, как работать с датчиком давления, температуры и влажности BME280...