User manual

56
6.1.1 Zo werkt het
Een deel van dit programma zal u bekend voorkomen, enkele elementen echter helemaal niet, omdat wij op
deze plaats een intermezzo in het objectgeoriënteerde programma maken. Aan het begin worden, zoals
bekend, de bibliotheken geïmporteerd. Dit keer wordt slechts een enkele variabele,
LED, voor de GPIO-
port 18 vastgelegd, deze wordt als uitgang geïnitialiseerd.
print ("Strg+C beëindigt het programma") Omdat ook dit programma met een try...except-
constructie loopt en door de gebruikers moet worden gestopt, wanneer betreffende informatie wordt
weergegeven voor de gebruiker.
p = GPIO.PWM(LED, 50) De functie GPIO.PWM() uit de GPIO-bibliotheek is beslissend voor uitvoer van PWM-
signalen. Deze functie heeft twee parameters nodig, de GPIO-poort en de frequentie van het PWM-signaal. In
ons geval wordt de GPIO-poort via de variabele
LED vastgelegd, de frequentie is 50 Hertz (trillingen per
seconde).
Waarom 50 Hertz de ideale frequentie is voor PWM
Het menselijke oog neem lichtwisselingen sneller dan 20 Hertz niet meer waar. Omdat het wissel-
spanningsnet in Europa een frequentie van 50 Hertz gebruikt, knipperen veel verlichtingseenheden met
deze frequentie, die niet meer door het oog wordt waargenomen. Wanneer een LED met meer dan 20
Hertz, maar minder dan 50 Hertz knippert, kunnen er interferenties ontstaan met andere lichtbronnen,
waardoor het dimeffect niet meer gelijkmatig lijkt.
GPIO.PWM() creëert een zogenaamd object, dat in de variabele p wordt opgeslagen. Dergelijke objecten zijn
veel meer dan alleen eenvoudige variabelen. Objecten kunnen verschillende eigenschappen bezitten en door
zogenaamde methoden worden beïnvloed. Methoden worden, door een punt gescheiden, direct achter de
objectnaam aangegeven.
p.start(0) De methode start() start het genereren van het PWM-signaal. Hiervoor moet nog een puls-
verhouding worden aangegeven. In ons geval is de pulsverhouding
0, de LED is dus altijd uitgeschakeld. Nu
start de gesloten lus, waarin direct achtereenvolgend twee lussen zijn ingebouwd, die afwisselend de LED
lichter en donkerder laten worden.
for c in range(0, 101, 2): De lus telt in stappen van 2 van 0 tot en met 100. Als einde van een for-lus
wordt altijd de waarde aangegeven, die net niet wordt bereikt, in ons geval
101.
p.ChangeDutyCycle(c) In elke lusdoorloop zet de methode ChangeDutyCycle() de pulsverhouding van
het PWM-object op de waarde van de lusteller, dus elke keer 2% hoger, tot het tijdens de laatste doorloop op
100% staat en de LED met volle lichtsterkte brandt.
time.sleep(0.1) In elke lusdoorloop wordt 0,1 seconde gewacht, voordat de volgende doorloop de
pulsverhouding weer met 2% verhoogd.
for c in range(100, -1, -2):
p.ChangeDutyCycle(c); time.sleep(0.1)