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)