Описание:
В этом уроке мы напишем скрипт Python для Raspberry Pi, который будет управлять сервоприводом, подключёнными к Trema+Expander Hat. Сервопривод — механизм с мотором, который можно повернуть на нужный угол. Мы будем использовать сервопривод с пределами угла поворота от 0 до 180 градусов и будем поворачивать его в зависимости от общей загрузки центрального процессора (ЦП) Raspberry. 0 градусов будет соответствовать 0% загрузки, а 180 градусов 100% загрузки. Для красоты можно нарисовать шкалу для сервопривода и прикрепить на качалку сервопривода стрелку.
Нам понадобится:
- Raspberry Pi
- Trema+Expander Hat
- Сервопривод
- SD карта не менее 8 ГБ
- Периферия (Клавиатура, мышь, дисплей)
- Блок питания 6...12 В., 3 А.
Подключение:
Если Ваша Raspberry не настроена, Вы можете воспользоваться этой инструкцией.
Для удобства подключения мы воспользуемся Trema+Expander Hat.
Установим Trema+Expander Hat на Raspberry Pi (в данном случае это Raspberry Pi 3 model B, но процедура для других Raspberry схожая):
Теперь можно нарисовать или распечатать на принтере шкалу для сервопривода и вставить сервопривод в неё:
Далее подключим сервопривод к выводу номер 0 колодки EXT на Trema+Expander Hat и внешнее питание (от 6 до 12 вольт постоянного тока не менее 3 ампер), т.к. сервопривод может потреблят много энергии и это может привести к перезагрузке Raspberry, если питание поступает на серво через USB:
Thonny Python IDE
Для написания скриптов мы будем использовать всё тот же Thonny Python IDE. Если Вы не знаете что это и как его запустить — обратитесь к уроку №1.
Для работы с расширителем выводов установим библиотеку pyiArduinoI2Cexpander. Как устанавливать библиотеки мы описали в статье "Установка и использование модулей (библиотек) Python". Все действия необходимо выполнить так же, заменив pyiArduinoI2Crelay
на pyiArduinoI2Cexpander
.
Скрипт:
Вводим следующий код в окно редактора:
# Подключаем библиотеку для работы с системой и процессами import psutil # Подключаем библиотеку для работы с расширителем # выводов Trema+Expander Hat from pyiArduinoI2Cexpander import * # Создаём переменную для вычисления загрузки ЦП cpu = 0 # Создаём объект расширителя выводов exp = pyiArduinoI2Cexpander() # Входим в бесконечный цикл while True: # Опрашиваем загрузку процессора 20 раз с интервалом в # одну десятую доли секунды и вычисляем среднее # арифметическое с приведением результата от 0 до 180 градусов for d in range(20): cpu +=psutil.cpu_percent(.1) degree = int(cpu / 20 * 1.8) # Устанавливаем сервопривод в полученный ранее угол exp.servoWrite(0, degree) # Обнуляем переменную загрузки ЦП cpu = 0
Нажимаем кнопку «Run»: сохраняем скрипт:
После сохранения программа начнёт выполняться. Сервопривод начнёт реагировать на изменения нагрузки на ЦП. Теперь попробуем открыть браузер (если он ещё не открыт) и посмотрим что произойдёт со стрелкой.
Обсуждение