CircuitPython

Для работы с дальномером используем библиотеку robotclass_udm (ссылка в конце урока). Всё, что нам нужно сделать для её установки — это скопировать файл adafruit_udm.mpy в папку lib на накопителе CIRCUITPY.

Более подробно о работе с библиотеками CircuitPython мы писали в одном из ранних наших уроков: Библиотеки для CircuitPython

УСТАНОВКА ЗАВИСИМОСТЕЙ

Чтобы библиотека robotclass_udm заработала, необходимо будет добавить еще две «зависимости»:

  • adafruit_bus_device
  • adafruit_register

Все эти библиотеки есть в сборнике от Adafruit. Точно также, копируем их на накопитель CIRCUITPY.

Программа

Для составления программы используем среду разработки Mu.

Пусть, тестовая программа будет непрерывно выводить в последовательный порт дистанцию до препятствия. Начнём с подключения всех необходимых библиотек. Помним, что в python это делается с помощью команды import.

Кроме robotclass_udm нам будут нужны еще три библиотеки:

  • time — предоставляет функцию sleep для организации паузы;
  • board — хранит названия всех контактов платы контроллера и их синонимы.
import time
import board
from robotclass_udm import *

Затем создаём объект I2C, который организует работу с шиной. Следом — объект класса RobotClass_UDM, в котором описаны нужные для работы с датчиком функции.

i2c = board.I2C()
sonic = RobotClass_UDM(i2c)

Функция getDistance возвращает измеренную датчиком дистанцию в сантиметрах. Будем вызывать её в суперцикле каждые 100 миллисекунд. Вся программа целиком:

import time
import board

from robotclass_udm import *

i2c = board.I2C()
sonic = RobotClass_UDM(i2c)

while True:
    data = sonic.getDistance()
    print("distance = %d" % data)
    time.sleep(0.1)

Сохраняем программу и открываем монитор последовательного порта (кнопка «Последовательный»). Пробуем приближать и удалять датчик от препятствия.

distance = 23
distance = 24
distance = 24
distance = 55
distance = 57
...

Медианный фильтр

В программу датчика УДМ-40 встроен медианный фильтр, который позволит избежать спонтанных выбросов измеряемой дистанции. Например, фильтром можно устранить такой выброс в потоке данных: 33,33,33,452,33. Включить его можно функцией filterSet, а выключить — filterUnset.

sonic.filterSet()

Версия прошивки

Узнать текущую версию прошивки можно с помощью функции getVersion:

data = sonic.getVersion()
print("version = %d" % data)

Изменено: