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

Мини выключатель 250 В 3 А

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

8.52грн.

Концевик с колесом для 3D принтера или CNC ramps 1.4

Концевик с колесом для 3D принтера или CNC ramps 1.4

Концевой выключатель для установки на 3D-принтер или CNC-станок системы ramps 1.4В комплекте ка..

34.61грн.

OLED шилд для контроллера WeMos D1 mini

OLED шилд для контроллера WeMos D1 mini

Шилд OLED под WiFi-контроллер WeMos D1 mini с диагональю 0,66" и разрешением 64x..

102.82грн.

Гироскоп + акселерометр GY-521

Гироскоп + акселерометр GY-521

Трёхосевые гироскоп и акселерометр в одном модуле на основе микросхемы MPU-6050Интерфейс подклю..

45.46грн.

Модуль стабилизатора напряжения 3,3 В

Модуль стабилизатора напряжения 3,3 В

Модуль предназначен для питания различных электронных устройств, модулей, работающих на напряжении 3..

11.89грн.