Сервопривод - это механический привод с автоматической коррекцией состояния через внутреннюю отрицательную обратную связь, в соответствии с параметрами, заданными извне.
Сервоприводы используют чаще всего в робототехнике, в мини самолетах управляя закрылками. Вообщем сервоприводы используют там, где нужен мотор который может регулировать уровень оборота.
У Сервопривода три контакта (VCC,GND и пин управления) Если с пинами VCC и GND все понятно - это контакты питания + и -. То вот с пином управления сложнее. Этот пин отвечает за уровень поворота сервопривода. И на него подается PWM (он же ШИМ) сигнал. Чем больше ШИМ сигнал подается, тем больше уровень отклонения шкива сервопривода.
В данном примере будем использовать сервопривод sg90 он один из самых популярных и самых дешевых сервоприводов. У него угол поворота 180 градусов. Для сервопривода sg90 частота сигнала ШИМ составляет 50Гц. Чтобы узнать частоту работы вашего сервопривода, проверьте таблицу данных для вашей модели сервы. Как только частота выбрана, другая важная вещь - это Скважность (DUTY RATIO) ШИМ-сигнала.
В таблице ниже показано положение сервопривода для конкретной скважности. Вы можете получить любой угол между ними, выбрав соответствующее значение. Таким образом, для 45º сервопривода скважность должна быть 5 или 5%.
Распиновка Raspberry pi:
Итак, чтоб начать управлять сервоприводом нужно его подключить по схеме:
Программа будет написана на языке python. Она будет демонстрировать повороты сервопривода согласно таблицы скважности. Сам код выглядит следующим образом:
import RPi.GPIO as IO #Подключение библиотеки для работы с GPIO
import time #Подключение библиотеки для работы с временем
IO.setwarnings(False) #Не показывать предупреждений
IO.setmode (IO.BCM)
IO.setup(19,IO.OUT) # GPIO19 объявляем как выход
p = IO.PWM(19,50) # объявляем GPIO19 как ШИМ с частотой 50mhz
p.start(7.5) # скважность ШИМ 7.5%
while 1: #бесконечный цикл
p.ChangeDutyCycle(7.5) # Поворот сервы на 90º
time.sleep(1) # задержка 1 секунда
p.ChangeDutyCycle(12.5) #Поворот сервы на 180º
time.sleep(1) # задержка 1 секунда
p.ChangeDutyCycle(2.5) #Вернуться на позицию в 0º
time.sleep(1) # задержка 1 секунда
Саму программу можно скачать по ссылке: https://yadi.sk/d/tbOkrl4CuOKtwA
Все теперь при запуске программы, серва будет поворачиваться на 90 градусов потом на 180 градусов и обратно вернется в нулевую точку.