User manual

47
6.1.1 Tako deluje
Del tega programa se vam bo zdel znan, nekateri elementi pa vam bodo popolnoma
neznani, saj na tem mestu naredimo ekskurz v programiranje, ki je orientirano na objekt. Na
začetku se uvozijo knjižnice, tako kot vam je že znano. Tokrat se za GPIO-vrata 18 določi
ena sama spremenljivka LED, ki se inicializira kot izhod.
print ("Ctrl+C zaključi program")
Ker tudi ta program deluje s konstruktom try...except in ga mora ustaviti uporabnik, je
prikazana ustrezna informacija za uporabnika.
p = GPIO.PWM(LED, 50)
Funkcija GPIO.PWM() iz GPIO-knjižnice je odločilna za izhodne PWM-signale. Ta funkcija
potrebuje dva parametra: GPIO-vrata in frekvenco PWM-signala. V našem primeru se GPIO-
vrata določijo s spremenljivko LED, frekvenca pa je 50 Hz (nihaji na sekundo).
Zakaj je 50 Hz idealna frekvenca za pulznoširinsko modulacijo
Spremembe svetlobe, ki so hitrejše od 20 Hz, človeško oko več ne zaznava. Ker električno
omrežje z izmenično napetostjo v Evropi uporablja frekvenco 50 Hz, številna svetlobna
telesa utripajo s to frekvenco, ki jo oko ne zazna. Če bi LED utripala z več kot 20 Hz, vendar
manj kot 50 Hz, bi lahko prihajalo do motenj z drugimi viri svetlobe, pri čemer učinek
zatemnitve ne bi več deloval enakomerno.
GPIO.PWM() ustvarja tako imenovani objekt, ki je shranjen v spremenljivki p. Takšni objekti
so veliko več kot samo enostavne spremenljivke. Objekti lahko imajo različne lastnosti, nanje
pa je možno vplivati s tako imenovanimi metodami. Metode so ločene s piko, ki je navedena
neposredno za imenom objekta.
p.start(0)
Metoda start() začne generacijo PWM-signala. Pri tem je treba navesti še delovni cikel. V
našem primeru je delovni cikel 0, LED je torej vedno izklopljena. Sedaj se začne neskončna
zanka, v kateri se neposredno ena za drugo nahajata dve zanki, ki skrbita, da LED
izmenično postaja svetlejša in temnejša.
for c in range(0, 101, 2):
Zanka šteje v korakih po 2 od 0 do 100. Kot konec zanke for je vedno navedena vrednost,
ki ravno ni dosežena, v našem primeru 101.
p.ChangeDutyCycle(c)
V vsakem prehodu zanke metoda ChangeDutyCycle() nastavi delovni cikel PWM-objekta
na vrednost zančnega števca, torej vsakič za 2 % višje, dokler se pri zadnjem prehodu ne
nahaja na 100 % in LED ne sveti s svojo polno svetilnostjo.
time.sleep(0.1)
Pri vsakem prehodu zanke znaša čakalni čas 0,1 sekunde, dokler naslednji prehod ponovno
ne poviša delovnega cikla za 2 %.
for c in range(100, -1, -2):
p.ChangeDutyCycle(c); time.sleep(0.1)
Potem ko LED doseže polno svetilnost, jo druga zanka v skladu z isto shemo ponovno
zmanjšuje. Ta zanka šteje od 100 navzdol v korakih po -2. Ta cikel se ponavlja, dokler
uporabnik ne pritisne kombinacije tipk [Ctrl]+[C].