V tem vodiču bomo predstavili kako lahko prek programa python s PWM-jem (pulznoširinsko modulacijo) krmilimo servo motor.
Za napajanje servomotorja bomo uporabili zunanjo 5V napajanje, povezati je potrebno negativno polariteto napajalnika in Gnd na GPIO od Raspberry Pi.
Vezava:
Rdeča žica je povezana na + napajanja, rjava žica je povezana z Gnd in negativnim priključkom napajanja, rumena pa je povezana na GPIO17 ali pin 11.
Program:
duty=5 #spremenljivka hrani vrednost delovnega cikla v procentih
def levo():
global duty #uporabimo globalni spremenljivko v funkciji
if duty>4:
duty=duty-1
servo.start(duty) #inicializira PWM z duty delovnim ciklom
print(duty)
def desno():
global duty #uporabimo globalni spremenljivko v funkciji
if duty<12:
duty=duty+1
servo.start(duty ) #inicializira PWM z duty delovnim ciklom
print(duty)
from Tkinter import *
root = Tk()
gumb = Button(root, text= '->', command = desno) #ustvarimo gumb, ki klice desno()
gumb.pack()
gumb = Button(root, text= '<-', command = levo) #ustvarimo gumb, ki klice levo()
gumb.pack()
import RPi.GPIO as GPIO #konfiguracija za GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT) # pin 11 nastavimo kot izhod
servo=GPIO.PWM(11,50) #frekvenca 50Hz na pinu 11
servo.start(0) # začetni delovni cikel 0%
root.mainloop()
Razlaga: Prek gumbov v uporabniškem oknu nastavljamo kot/pozicijo servo motorja z nastavljanjem delovnega cikla od 4% do 12%.
Nasvet:
Za natančnejši nadzor nad motorji predlagamo razširitvena vezja, ki omogočajo boljši nadzor nad nižjenivojskimi perifernimi enotami in ponujano več digitalnih izhodov/vhodov, analognih vhodov…
Tako lahko mikrokrmilnik skrbi za vhode in izhode ter prek vodila komunicira z Raspberry Pi, ki lahko opravlja zahtevnejše preračune, izris grafike in internetno komunikacijo.