Raspberry Pi:Примеры/Управление несколькими сервоприводами с помощью Servo HAT

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.


Черновик


Управление несколькими сервоприводами с помощью Servo HAT

Данный пример демонстрирует как задать угол поворота нескольким сервоприводам с помощью Servo HAT.

Servo HAT позволяет подключать до 16 сервоприводов или других устройств, управляемыми ШИМ-сигналом через интерфейс I2C.

Чтобы использовать данный модуль необходимо активировать интерфейс I2C


Для использования модуля загрузим модуль Python, разработанный Adafruit:

git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
cd Adafruit_Python_PCA9685
sudo python setup.py install

или можно установить через pip для python 2.X:

sudo pip install adafruit-pca9685

или для python 3.X:

sudo pip3 install adafruit-pca9685

Вставьте код программы из раздела код, сохраните и запустите(запускать нужно из графического интерфейса,а не по SSH).

В коде программы управление осуществляется по двум канала сразу(0 и 1). Вы можете закомментировать ненужный канал.

Запустите программу и вы увидите графический интерфейс со слайдером:

Изменяйте положение ползунка и понаблюдайте за положением рычага сервопривода.

В программе сначала создается новый объект:

pwm = Adafruit_PCA9685.PCA9685()

при создании передается адрес I2C оборудования(если не указать будет использован адрес по умолчанию 0x40). На модуле есть специальные контактные площадки, перемыкая которые, можно изменить адрес ведомого устройства на шине I2C.

После задается частота ШИМ-сигнала, равная 50Гц:

pwm.setPWMFreq(50)

что соответствует подаче импульсов каждые 20мс.

ШИМ-сигнал передается на один из каналов с помощью команды:

pwm.setPWM(0, 0, pulse_len)

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

Необходимое оборудование

Схема

Будьте осторожны при обращении с портами GPIO вашего Raspberry Pi. Помните входы и выходы GPIO расссчитаны на напряжение +3,3В


Сервоприводы подключаются к удобной колодке выводов модуля расширения, смонтированного поверх платы Raspberry Pi. Модуль Servo HAT получает питание от вывода 3.3V платы Raspberry Pi. Цепь питания модуля изолирована от цепи питания сервоприводов, которым необходим внешний источник питания 5В.

Контактная колодка модуля позволяет подключать все сервоприводы последовательно один за другим. Не забывайте следить за полярностью выводов.


Все манипуляции по подключению производите только при отключенном питании платы Raspberry Pi


Код

Python 2.X

from Tkinter import *
import Adafruit_PCA9685
import time

pwm = Adafruit_PCA9685.PCA9685() # по умолчанию, если не введен адрес устройства, используется адрес 0x40
pwm.setPWMFreq(50)  

class App:
	
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        scale = Scale(frame, from_=0, to=180, 
              orient=HORIZONTAL, command=self.update)
        scale.grid(row=0)


    def update(self, angle):
        pulse_len = int(float(angle) * 500.0 / 180.0) + 110
        pwm.setPWM(0, 0, pulse_len)
        pwm.setPWM(1, 0, pulse_len)

root = Tk()
root.wm_title('Servo Control')
app = App(root)
root.geometry("200x50+0+0")
root.mainloop()

Python 3.X

from tkinter import *
import Adafruit_PCA9685
import time

pwm = Adafruit_PCA9685.PCA9685() # по умолчанию, если не введен адрес устройства, используется адрес 0x40
pwm.setPWMFreq(50)  

class App:
	
    def __init__(self, master):
        frame = Frame(master)
        frame.pack()
        scale = Scale(frame, from_=0, to=180, 
              orient=HORIZONTAL, command=self.update)
        scale.grid(row=0)


    def update(self, angle):
        pulse_len = int(float(angle) * 500.0 / 180.0) + 110
        pwm.setPWM(0, 0, pulse_len)
        pwm.setPWM(1, 0, pulse_len)

root = Tk()
root.wm_title('Servo Control')
app = App(root)
root.geometry("200x50+0+0")
root.mainloop()

См.также

Внешние ссылки