Працюємо з 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Твердотельное реле 10А

Твердотельное реле 10А

Реле без механических контактов на 10 А. Силовым элементом данного реле является симистор.Гальваниче..

127.49грн.

Кусачки PLATO 170

Кусачки PLATO 170

Долгоиграющие кусачки с удобными мощными ручкамиПрименяются при монтаже любительских электронных про..

73.30грн.

Arduino Nano I2C двухсторонняя связь между контроллерами

Arduino Nano I2C двухсторонняя связь между контроллерами

Продолжаем разбор технологии обмена данными по коммуникации I2C В предыдущей статье рассматривался ..

3-осевой акселерометр ADXL345

3-осевой акселерометр ADXL345

Трёхосевой гравитационный акселерометр. Напряжение питания 3 ... 5 В Диапазон измерения настраивае..

41.60грн.

Цифровой датчик температуры и влажности DHT22

Цифровой датчик температуры и влажности DHT22

Опрос данных с датчика производится микроконтроллером по протоколу WIREМаркировка AM2302Диапазо..

99.64грн.