Отже ставимо перед собою задачу: керувати серво-мотором від 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 мс. Ширина цього імпульса буде перетворена в кут повороту серво.
Датчик напруги мережі 220В
Гальванічно ізольований датчик наявності напруги мережі 220ВНапруга живлення логіки 3 ... 5 ВРозмір ..
91.66грн.
Перетворювач рівнів 5В 3,3В 8-канальний
Модуль 8-канального перетворювача логічних рівнів на спеціалізованій мікросхемі TXS0108E.Застосовуєт..
37.71грн.
Набір датчиків ваги 200кг
4 тензодатчика для вимірювання ваги до 200 кг при мостовому з'єданніКожний окремий датчик розрахован..
186.88грн.
Arduino Nano 3.0
Мініатюрна плата контролера з лінійки Aduino на базі мікропроцесора ATMEGA328P-AU Arduino Nano V 3...
218.27грн.