07.07 - 14.07 вихідні
Обробимо замовлення з 15.07

Итак ставим перед собой задачу: управлять серво-мотором от 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Электромагнитное реле 24 В

Электромагнитное реле 24 В

Имеет одну группу переключающихся контактовТок коммутации при переменном напряжении 250 В - 10 А,при..

14.75грн.

Датчик вибрации SW-420

Датчик вибрации SW-420

Датчик вибрации имеет дискретный выходЧувствительнось датчика настраивается подстроечным резисторомР..

16.76грн.

Кодовый замок из набора резисторов

Кодовый замок из набора резисторов

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

Датчик напряжения сети 220В

Датчик напряжения сети 220В

Гальванически изолированный датчик наличия напряжения в сети 220ВНапряжение питания логики 3 ... 5 В..

59.01грн.

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

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

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

34.00грн.