Rasberry Pi. Урок 8. Использование сервопривода.

В этом уроке Вы узнаете, как пользоваться сервоприводом на Python.

learn_raspberry_pi_overview.jpg

Сервоприводы контролируются импульсами разной длины. Для этого нужно достаточно точное тактирование. У Raspberry Pi есть один разъем, который генерирует импульс для аппаратного обеспечения без помощи операционной системы. У Occidentalis есть интерфейс, который использует этот разъем, чтобы управлять сервоприводом.

 

Вам понадобится

Для этого проекта нужно следующее:
learn_raspberry_pi_pi.jpg
Raspberry Pi
learn_raspberry_pi_cobbler.jpg Модульная плата для кабеля и 26-пиновый кабель  IDC
learn_raspberry_pi_jumpers_web.jpg
Набор двухсторонних штекерных джамперов
learn_raspberry_pi_breadboard_half_web.jpg
Макетная плата половинного размера
learn_raspberry_pi_motor_servo.jpg
Сервопривод
learn_raspberry_pi_occidentalis.pngAdafruit Occidentalis 0.2 или более новый дистрибутив этой операционной системы.
learn_raspberry_pi_batterybox.jpgОбойма для четырех АА или ААА батареек и сами батарейки

Сервоприводы

Позиция сервопривода определяется длиной импульса. Сервопривод ожидает получение импульса примерно каждые 20 миллисекунд. Если частота импульса высокая на одну миллисекунду, то сервопривод станет в позицию «ноль», если на 1,5 миллисекунды  — в центральную позицию, а если на 2 миллисекунды — в позицию 180 градусов.
learn_raspberry_pi_servos.png

Крайние позиции разных сервоприводов могут отличаться. Многие сервоприводы могут осуществлять поворот до 170 градусов. Также бывают и «непрерывные» сервоприводы, которые могут вращаться на все 360 градусов.

Модуль ядра «ШИМ и Серво» (PWM and Servo)

Adafruit и Sean Cross разработали модуль ядра со встроенным дистрибутивом Occidentalis. Подробнее про создание Occidentalis здесь. Если Вы хотите использовать модуль с Raspbian или каким-либо другим дистрибутивом, Вы найдете информацию об установке модуля ядра для своей среды здесь.

Наш модуль называется «ШИМ и Серво», посколько помимо управления сервоприводами, он может вырабатывать ШИМ-сигналы (широтно-импульсная модуляция), которые могут использоваться (при наличии дополнительной электроники) для управлением питания моторов или индикаторов. В этом уроке мы не будем касаться функции ШИМ.

Модуль «ШИМ и Серво» использует файловый тип интерфейса, в котором можно контролировать работу выходного разъема и, как результат, работу сервопривода с помощью чтения и записи специальных файлов.

Список файлов, которые модуль использует, чтобы приводить в действие сервопривод, приведен ниже. Все эти файлы находятся в каталоге /sys/class/rpi-pwm/pwm0/ Вашего Raspberry Pi.

Файл

Описание

active Будет иметь значение 1 для активного состояния, 0 — для неактивного. Прочитав этот файл можно узнать активен ли выходной разъем, а записав его — сделать активным или неактивным.
delayed Если значение 1, то любые изменения в других файлах не будут иметь никаких последствий, пока Вы не активируете выходной разъем с помощью файла выше.
mode Записывайте этот файл, чтобы перевести разъем в режим ШИМ, серво или аудио. Конечно же, в данном случае нам нужен режим серво. Обратите внимание, что разъем также используется разъемом Pi для аудио, поэтому Вы не сможете одновременно использовать звук и контролировать сервопривод.
servo_max Записывайте этот файл, чтобы задать максимальную величину позиции сервопривода. Мы зададим значение 180, чтобы сервопривод можно было привести в любую позицию между 0 и 180.
servo Величина, которую Вы назначите для этого файла, задает длину импульса сервопривода в соответствии с servo_max. То есть если мы зададим значение 90 при servo_max 180, сервопривод будет приведен в центральную позицию.

Аппаратное обеспечение

Только один из разъемов Pi может генерировать импульсы нужным нам образом. Это разъем GPIO 18. Мы подключим его к управляющему выводу сервопривода. Питание сервопривода осуществляется через внешнюю батарейку, поскольку питание через Pi скорее всего приведет ко сбою, так как сервопривод при работе потребляет очень много тока. Сервоприводу требуется 4,8-6В постоянного тока для моторчика, но уровень сигнала (выходной импульс) может быть 3,3В. Именно поэтому можно просто присоединить сигнальную шину напрямую к GPIO-разъему Pi.

learn_raspberry_pi_fritzing.png
Кабель Pi Cobbler используется, чтобы подключить Raspberry Pi к макетной плате. Если Вы раньше не сталкивались с этим кабелем, советуем Вам ознакомиться с Уроком 4 из этой серии.
У сервоприводов обычно есть три штыревых цоколя. Красный и коричневый цоколи используются для подачи питания (красный — плюс), а третий цоколь (желтый или оранжевый) — для управляющего сигнала. Чтобы подключить цоколи к макетной плате, используйте двухсторонние штекерные джампера.
learn_raspberry_pi_overview.jpg

Программное обеспечение

Для этого проекта не нужно устанавливать никакие библиотеки Python.Программа для Python, которая заставит сервопривод двигаться выглядит так:

# Servo Control

import time

def set(property, value):

try:

f = open(«/sys/class/rpi-pwm/pwm0/» + property, ‘w’)

f.write(value)

f.close()

except:

print(«Error writing to: « + property + » value: « + value)

 

 

def setServo(angle):

set(«servo», str(angle))

 

 

set(«delayed», «0»)

set(«mode», «servo»)

set(«servo_max», «180»)

set(«active», «1»)

 

delay_period = 0.01

 

while True:

for angle in range(0, 180):

setServo(angle)

time.sleep(delay_period)

for angle in range(0, 180):

setServo(180 - angle)

time.sleep(delay_period)

Чтобы сделать запись файлов проще, я написал служебную программу ‘set’.  Первый параметр для нее — это файл, который должен быть записан, или характеристика, а второй параметр — значение, которое нужно записать.

В самом начале нужно сделать несколько записей, чтобы выключить режим с задержками, включить режим серво, задать максимальную величину серво как 180 и активировать выходной разъем.

Переменная (delay_period) содержит время в секундах между каждым шагом сервопривода.

Цикл while будет продолжаться вечно или пока программа не будет остановлена нажатием CTRL-C. В этом цикле есть два почти одинаковых цикла for. Первый отсчитывает угол от 0 до 180, а второй задает угол сервопривода как 180, то есть угол, на который повернется назад серворычаг от 180 до 0 градусов.

Чтобы установить программу, подключитесь к Pi через SSH, а затем введите команду:

$ nano servo.py

Скопируйте код выше в редактор и нажмите CTRL-X и Y, чтобы сохранить файл.

learn_raspberry_pi_install.png

Чтобы запустить программу сервопривода, введите следующую команду в окно SSH:

$ python servo.py

Сервопривод должен сразу же начать двигаться.

Тестируем и настраиваем

Если Вы хотите, чтобы сервопривод двигался быстрей, уменьшите параметр delay_period, например до 0.001. А чтобы замедлить его, увеличьте до 0.1.

Если Вы хотите управлять более чем одним сервоприводом одновременно, то проще всего сделать это с помощью чего-то наподобие I2C 16-канальный серво/ШИМ контроллера.