Працюємо з 09:00 до 19:00 Пн-Сб
Київ біля ТЦ Квадрат бул.Перова

Итак ставим перед собой задачу: управлять серво-мотором от Raspberry PI, используя визуальный элемент на экране.

Мы будем генерировать широтно-импульсный сигнал PWM на дискретном выходе мини-компьютера и задавая длительность отдельного положительного импульса сигнала будем изменять угол поворота серво-двигателя. Так же мы должны изначально понимать, что на дискретном выходе Raspberry не получится супер-стабильных временных параметров сигнала, и поэтому серво всегда будет немного дёргать вместо стояния на месте.

Сам двигатель прийдется запитать от отдельного источника питания 5-6 В, чтобы не навредить любимой малинке.

Для данного проекта нам понадобятся такие составляющие:

  • Servo - мотор;
  • Монтажная плата и соединительные провода;
  • Резистор сопротивлением 1 кОм;
  • Блок питания 5 В 1 А (для двигателя)
Схема соединений показана на следующем рисунке.


Резистор 1 кОм не обязателен, но он защитит дискретный выход малинки от случайных замыканий. 

Выводы серво-мотора по цвету могут отличаться у разных моделей - обратите на это внимание и поищите инфу. Но чаще всего у них красный - вывод питания 5 В, коричневый - земля и сигнальный провод - оранжевый.

Двигатель можно запитать от сетевого блока питания или от блока батареек.

Интерфейс пользователя для задания угла поворота шпинделя серво будет основана готовой программе из интернета gui_slider.py на языке Python, созданной для управления яркостью света. Но мы изменим её для изменения задания мотору в градусах от 0 до 180. Выглядит это так как на рисунке.


Запускаем консольную или графическую часть линукса на Raspberry PI, открываем текстовый редактор (nano или IDLE) и вставляем в него следующий код. Даем файлу название servo.py.

Кстати такой графический интерфейс пользователя не будет виден из окна SSH.

Запускать программу необходимо от имени администратора. В командной консоли это будет выглядеть так sudo python servo.py

from Tkinter import *
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 100)
pwm.start(5)
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):
        duty = float(angle) / 10.0 + 2.5
        pwm.ChangeDutyCycle(duty)
root = Tk()
root.wm_title('Servo Control')
app = App(root)
root.geometry("200x50+0+0")
root.mainloop()

Сама графическая часть проекта основана на библиотеке Tkinter. Почитайте о ней по подробнее в вики. На ней можно строить сложные интерфейсы с кнопками, выпадающими списками, картинками...


Наша программа будет выдавать широтно-импульсный сигнал PWM частотой 100 Гц. Это означает, что положительный импульс будет генерироваться каждые 10 мс. Ширина этого импульса будет преобразована в угол поворота серво.

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Модуль расширения входов-выходов PCF8574A

Модуль расширения входов-выходов PCF8574A

Расширитель портов на основе специализированной микросхемы PCF8574AКоммуникационный интерфейс I..

54.71грн.

Трансформатор тока 0-20А

Трансформатор тока 0-20А

Трансформатор тока предназначен для измерения силы переменного тока, протекающего через провод. Для ..

62.13грн.

ATtiny обзор контроллеров

ATtiny обзор контроллеров

Обозначение Память программ (FLASH) [Kбайт] Память данных [байт] Kол-во линий ввода/..

AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Микросхема постоянной памяти EEPROMНапряжение питания 2,7 ... 5,5 ВОбъем 256 БайтКомуникация I2..

2.90грн.

Линейный подшипник 8мм

Линейный подшипник 8мм

Подшипник для линейного скольжения рабочего органа 3D-принтера или CNC по своим осям.Одевается на ци..

24.24грн.