Подключение ультразвукового датчика к Raspberry Pi Pico и отображение расстояния на OLED дисплее


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

Внешний вид проекта подключения ультразвукового датчика к Raspberry Pi Pico

Также на нашем сайте вы можете посмотреть статьи про подключение ультразвукового датчика к микроконтроллеру AVR, платам Arduino и Raspberry Pi.

Необходимые компоненты

  1. Плата Raspberry Pi Pico (купить на AliExpress).
  2. Модуль OLED дисплея SSD1306 128×64 с диагональю 1.3 дюйма и интерфейсом I2C (купить на AliExpress).
  3. Ультразвуковой датчик HC-SR04 (купить на AliExpress).
  4. Макетная плата.
  5. Соединительные провода.

Принципы работы ультразвукового датчика HC-SR04

Внешний вид ультразвукового датчика HC-SR04 показан на следующем рисунке. На левом рисунке показана фронтальная сторона датчика, на которой размещены два датчика, а на рисунке справа показана тыльная сторона ультразвукового датчика.

Внешний вид ультразвукового датчика HC-SR04

Один датчик используется для излучения в окружающее пространство ультразвуковой волны с частотой 40 кГц, а другой принимает отраженную от препятствия ультразвуковую волну. У ультразвукового датчика есть контакты Vcc и GND, которые используются для подачи на него питания, и контакты Trigger и Echo, используемые непосредственно для измерения расстояния.

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

Временные диаграммы работы ультразвукового датчика показаны на рисунке ниже. Для запуска датчика в работу необходимо подать на его контакт Trigger напряжение высокого уровня HIGH(5V) на время не менее 10 микросекунд. Это приведет к излучению датчиком в окружающее пространство 8 ультразвуковых импульсов, следующих с частотой 40 кГц.

Временные диаграммы работы ультразвукового датчика HC-SR04

Когда датчик примет эту отраженную от препятствия ультразвуковую волну, он установит на своем контакте Echo напряжение высокого уровня (5V) на время, пропорциональное расстоянию до препятствия. Далее мы просто измеряем длительность этого импульса на контакте Echo в микросекундах и производим пересчет данного времени в расстояние по известной формуле. Учитывая, что скорость звука в воздухе равна примерно 340 м/с получаем время 29.412 микросекунд на каждый сантиметр расстояния. Поэтому для определения расстояния мы используем следующую простую формулу:

Distance = (Time/2) / 29.412

Деление на 2 в этой формуле необходимо из-за того, что ультразвуковая волна дважды проходит измеряемое нами расстояние – до препятствия и обратно.

Схема проекта

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

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

Как видно из схемы, мы использовали контакт VBUS платы Raspberry Pi Pico для подачи питания на модуль ультразвукового датчика, а для подачи питания на модуль OLED дисплея мы использовали контакт 3.3V платы. Контакты trigger и echo подключены к контактам GPIO3 и GPIO2 платы соответственно. Контакты SDA и SCL модуля OLED подключены к контактам GPIO16 и GPIO17 платы. Контакты земли (Ground) ультразвукового датчика и OLED дисплея подключены к контакту Ground платы Raspberry Pi.

Полная схема соединений проекта представлена в следующей таблице.

Контакт ультразвукового датчика Контакт платы 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

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Для начала вам необходимо скачать коды программ по следующей ссылке с репозитория GitHub. В скачанной папке откройте каталог “T4_Interfacing_HC-SR04_Ultrasonic_sensor”. Этот каталог содержит 2 подкаталога – “codes” и “images”. В подкаталоге “codes” содержатся 2 файла программ на python – main.py и ssd1306.py.

Внутри файла main.py содержатся библиотеки machine.py и ssd1306.py. Библиотека machine.py – это встроенная в MicroPython библиотека для выполнения базовых операций при работе с интерфейсами I2C, ADC, SPI и т.д. Библиотека ssd1306.py используется для работы с OLED дисплеем. Более поробно работу про работу с данной библиотекой вы можете прочитать в статье про подключение OLED дисплея к плате Raspberry Pi Pico. Библиотека utime.py используется для организации временных задержек в программе.

Переменные “trigger” и “echo” используются как объекты для работы с соответствующими функциями контактов. Контакт GPIO 3 платы, подключенный к trigger, конфигурируется для работы в качестве цифрового выхода (pin.OUT), а контакт GPIO 2 платы, подключенный к echo, конфигурируется для работы в качестве цифрового входа (Pin.IN).

Функция ultrasonic() используется для измерения расстояния до препятствия с помощью ультразвукового датчика. Внутри этой функции мы сначала подаем на контакт trigger уровень LOW на 2 мкс (чтобы "очистить" его), и затем подаем на контакт trigger уровень HIGH на 10 мкс. Затем мы снова подаем на него LOW. Затем мы вычисляем разницу между значениями, хранящимися в переменных signalon и signaloff, в результате чего мы вычисляем длительность импульса HIGH на контакте echo.

Далее мы инициализируем связь по интерфейсу I2C и OLED дисплей.

Метод oled.fill(0) используется для очистки экрана OLED дисплея. Далее с помощью функции oled.text() мы выводим текст в нужном нам месте на дисплее. Окончательное отображение строк текста на экране дисплея происходит после вызова функции oled.show(). Далее с помощью функции utime.sleep(4) обеспечивается задержка на 4 секунды.

Далее в цикле while происходит вызов запрограммированной нами функции ultrasonic() для определения расстояния до препятствия. Рассчитанное расстояние до препятствия сохраняется в переменной distance_cm. Функция round() используется для округления рассчитанного расстояния до двух знаков после запятой. Далее рассчитанное расстояние отображается на экране OLED дисплея с помощью функции oled.text().

Для тестирования работы проекта откройте файлы “main.py” и “ssd1306.py” в Thonny IDE. Чтобы сохранить файл “ssd1306.py” на плату Raspberry Pi Pico нажмите комбинацию клавиш “ctrl+shift+s” на клавиатуре. Убедитесь в том, что ваша плата подключена в это время к компьютеру. При сохранении кода программы откроется всплывающее окно, показанное на рисунке ниже. В этом окне вам необходимо выбрать Raspberry Pi Pico, после этого сохранить код программы под именем "ssd1306.py". Аналогичную процедуру необходимо повторить и для файла “main.py”. После этого вы сможете запускать эти программы на плате всегда, когда на нее подано питание.

Выбор места сохранения программы

Исходный код программы на MicroPython

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
706 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *