Image
12.8.2019 1 Comments

IoT prakticky - programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov

Mini seriál je zameraný na obsluhu hardvéru pripojeného na dosku Raspberry PI. V tejto časti na praktických príkladoch ukážeme PWM výstup, čiže generovanie impulzovo šírkovej modulácie na GPIO výstupoch. Pomocou PWM sa ovládajú aj servomotory v modelárstve a robotike.

Príklady sú v vo videu

Prídavný hardvér, prípadne rozširujúce moduly sa pripájajú cez 40-pinový GPIO (General Purpose Input/Output) konektor. Obsahuje 26 vstupno – výstupných portov, pričom niektoré z nich sa dajú prekonfigurovať tak aby fungovali ako špeciálne porty (SPI, I2C, UART RS232...). Na konektore sú vyvedené aj napájacie napätia 3,3 a 5 V. Vývojová doska Raspberry PI má jedno obmedzenie. Nemá analógové vstupy a výstupy. Analógový výstup je možné v niektorých aplikáciách simulovať digitálnym výstupom na ktorom sa generuje PWM signál. PWM znamená Pulse Width Modulation, čiže impulzovo šírková modulácia, ktorá umožňuje meniť výstupné napätie na pine nie analógovo, ale prostredníctvom premenlivej šírky pulzov. 

Vľavo nižší a vpravo vyšší výkon daný šírkou impulzov v úrovni logická 1

Na výstupe sú impulzy s amplitúdou 5V s premenlivým pomerom medzi časom zapnutia a vypnutia. Ak na PWM výstup pripojíte LED diódu, maximálny jas sa dosiahne ak je na výstupe trvalo hodnota HIGH. Ak má byť hodnota napätia polovičná, pomer impulzov zapnuté/vypnuté je 50: 50. Ak potrebujete štvrtinový jas, pomer zapnuté/vypnute je 25:75 Pri tomto princípe regulácie, ktorá sa mimochodom využíva aj na reguláciu jasu podsvietenia lacnejších monitorov LED diódy nesvietia kontinuálne, ale blikajú mnohokrát za sekundu a čím je doba ich zopnutia kratšia, tým je nižšia intenzita podsvietenia. 

V  príklade ukážeme reguláciu jasu LED diódy pripojenej cez obmedzovací rezistor na pin GPIO2

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
p = GPIO.PWM(2,50)          # 50Hz frekvencia
p.start(0)
 
while 1:
    for n in range (100):
       p.ChangeDutyCycle(n)
       time.sleep(0.02)
 
    for n in range (100):
       p.ChangeDutyCycle(100-n)
       time.sleep(0.010)

Pripomíname , že kód stačí napísať, alebo skopírovať do editora Mu, ktorý nájdete v používateľskom rozhraní operačného systému Raspbian v hlavnom menu, v položke Programovanie a následne spustiť. 

Skúste zapojiť dve LED diódy a nastavovať rôznu úroveň jasu a môžete taktiež experimentovať az zo zmenou frekvencie. Môžete skúsiť s doskou s LED diódami pohybovať, aby ste videli či LED svietia kontinuálne, alebo blikajú

Upozorňujeme, že nie každý pin portu sa dá použiť kedykoľvek a na čokoľvek. Napríklad porty GPIO2 a GPIO3 môžete na všeobecné účely použiť iba v prípade aj nie je aktivovaná komunikácia na I2C zbernici. Prečo sme ich teda použili v cvičnom príklade? Aby sme vás upozornili na túto vlastnosť. Na obrázku sú zeleným vyznačené porty, ktoré môžete využiť kedykoľvek a žltým porty, ktoré sa dajú využiť len za určitých okolností.  Pri implicitnom nastavení je komunikácia cez I2C zakázaná. 

Ukážeme aj obsluhu serva, ktoré často využívajú modelári a konštruktéri robotov.

Servá sú k dispozícii v rôznych veľkostiach, väčšie sú schopné dodať pomerne vysoký krútiaci moment

Servo je k riadiacej jednotke pripojené pomocou troch vodičov. Na červenom vodiči je kladné napájacie napätie, na čiernom (niekedy hnedom) vodiči je zem a na oranžový vodič sa privádzajú signály. Ovláda sa pomocou PWM. Frekvencia impulzov privádzaných na oranžový vodič je 50 Hz, čo je čas trvania periódy 20 ms. Uhol natočenia sa ovláda šírkou impulzu. U modelárskeho serva SG90 je šírka pulzu 0.5 až 2.5 ms a tejto hodnote zodpovedá uhol natočenia  0°až 180. Príkazom ChangeDutyCycle(hodnota) sa nastavuje pomer šírky impulzov v rozsahu 0 – 100, čiže v percentách  Napríklad dĺžka 1,5 ms  je 7,5% z 20 ms a nastaví uhol uhol 90 °. Oranžový vodič je vo vnútri serva pripojený na riadiacu elektroniku, nemá veľký prúdový odber, takže ho môžete pripojiť priamo na port.

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
 
p = GPIO.PWM(2, 50) #PWM s frekvenciou 50Hz
p.start(2.5) # počiatocna poloha poloha
try:
  while True:
    p.ChangeDutyCycle(5)
   time.sleep(0.5)
   p.ChangeDutyCycle(7.5)
   time.sleep(0.5)
   p.ChangeDutyCycle(10)
   time.sleep(0.5)
   p.ChangeDutyCycle(12.5)
   time.sleep(0.5)
   p.ChangeDutyCycle(10)
   time.sleep(0.5)
   p.ChangeDutyCycle(7.5)
   time.sleep(0.5)
   p.ChangeDutyCycle(5)
   time.sleep(0.5)
   p.ChangeDutyCycle(2.5)
   time.sleep(0.5)
except KeyboardInterrupt:
 p.stop()
 GPIO.cleanup()

 

Aby ste mohli zadávať hodnotu uhla natočenia v stupňoch môžete použiť vzorec 

Sirka_Impulzu = uhol/18 + 2

 

import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
 
p = GPIO.PWM(2, 50) #PWM s frekvenciou 50Hz
p.start(2.5) # pociatocná poloha
 
def nastavUhol(uhol):
   sirkaImpulzu = uhol/18 + 2
   p.ChangeDutyCycle(sirkaImpulzu)
 
while True:
   nastavUhol(0)
   time.sleep(0.5)
   nastavUhol(45)
   time.sleep(0.5)
   nastavUhol(90)
   time.sleep(0.5)
   nastavUhol(135)
   time.sleep(0.5)
   nastavUhol(180)
   time.sleep(0.5)
   nastavUhol(0)
   time.sleep(1)

Ostatné časti seriálu:

Programovanie Raspberry Pi v Pythone 1: Konfigurácia https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---1-cast--konfiguracia

Programovanie Raspberry Pi v Pythone 2: Vstupy a výstupyhttps://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone---2-cast--vstupy-a-vystupy

Programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov https://www.pcrevue.sk/a/IoT-prakticky---programovanie-Raspberry-Pi-v-Pythone-3--PWM-vystup-a-ovladanie-servomotorov

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Mikrokontroléry

Robotika – ovládanie modelov Lego Technic mikropočítačom BBC Micro:bit 1 - servá pre Lego

23.08.2019 00:00

Vlani sme cez prázdniny v trojici článkov Robotický podvozok, Segway z Lega a Digitálne dvojča predstavili možnosti robotickej stavebnice Lego Mindstorms. Čitateľov možnosti tejto stavebnice zaujali, ...

Mikrokontroléry

Robotika: možnosti programovania a senzorová výbava pokročilého robota InO-Bot

17.08.2019 00:10

Postupne sme predstavili niekoľko robotov, ktoré sa používajú, alebo začínajú používať na školách, pri výučbe logického myslenia, algoritmizácie a následne programovania. Zatiaľ čo roboty Bee-Bot a Bl ...

Mikrokontroléry

IoT prakticky - programovanie Raspberry Pi v Pythone 6: 1-Wire zbernica

16.08.2019 00:01

Mini seriál je zameraný na obsluhu hardvéru pripojeného na dosku Raspberry PI. V tejto časti na praktických príkladoch ukážeme možnosti komunikácie pomocou zbernice 1-Wire.  Príklady sú v vo videu & ...

q

1 Comments

  1. Dakujem. reakcia na: IoT prakticky - programovanie Raspberry Pi v Pythone 3: PWM výstup a ovládanie servomotorov
    13.8.2019 16:08
    Aj ked poznam tuto dosku, aj serva, aj pwm a vsetko okolo, nedalo mi neprecitat si to. Vo svete plnom informacii si vazim ze vznikaju taketo clanky po slovensky. Drzim palce.
    Reagovať

Vyhľadávanie

eFocus_2019

Najnovšie videá