Hoe laat je een LED knipperen op de Raspberry Pi?
In tegenstelling tot de Arduino heb je geen toegang tot de ingebouwde LED's op de Raspberry Pi. Ze geven alleen de voeding en toegang tot de µSD-kaart aan.
Om een LED te laten knipperen, heb je een externe LED nodig met een geschikte serieweerstand en startkabels. De meest verstandige manier om de schakeling op te zetten is op een breadboard met een T-cobbler. Deze opstelling vergemakkelijkt ook latere experimenten met meerdere LED's, knoppen en sensoren. Het programmeren gebeurt in de programmeertaal Python.
Het schema van de schakeling (knipperende LED op de Raspberry Pi)
Wat is een LED?
LED staat voor Light Emitting Diode (lichtdiode). Het laatste woord geeft de elektronische eigenschappen aan. Een diode is een halfgeleider die alleen stroom doorlaat in de ene richting en blokkeert in de andere richting. De twee "pootjes" worden anode en kathode genoemd. Als je goed kijkt, zie je dat de pootjes verschillende lengtes hebben. De positieve spanning wordt toegepast op het langere been, de anode; het kortere been, de kathode, is via een weerstand verbonden met massa. De weerstand is nodig vanwege een andere eigenschap van diodes. Allereerst is er een minimale spanning nodig om überhaupt een stroom te kunnen laten lopen: Dit wordt voorwaartse spanning genoemd. Bij hogere spanningen wordt de diode volledig geleidend. Daarom heb je een serieweerstand nodig om de stroom te beperken, omdat de pinnen van de microcontroller en ook van de Raspberry Pi maximaal met 15 tot 20 mA moeten worden belast. We gebruiken serieweerstanden in het bereik van 100 tot 330 Ω (Ohm).
De programmeertaal Python kan worden uitgebreid met programmamodules, vergelijkbaar met C/C++ met de bibliotheken. Voor onze knipperende LED hebben we twee van deze modules nodig: ten eerste "tijd" om de duur van het knipperen te definiëren. En ten tweede een module voor toegang tot de GPIO's (General Purpose Input/Output).
Hoe bestuur ik een LED met een Raspberry Pi?
Het importeren van de modules doe je aan het begin van het Python-programma; je hebt verschillende opties om dit te doen. Voorbeelden:
De volgende regel importeert de module tijd:
import tijd
Wanneer je de methode sleep aanroept, moet de modulenaam time voorafgegaan worden door een punt:
time.sleep(1)
In tegenstelling tot delay(), waar het tijdsinterval als argument in milliseconden wordt gegeven, worden bij time.sleep() de waarden in seconden gegeven, eventueel met een decimaalteken.
importeer RPi.GPIO als GPIO
Dit vereenvoudigt het aanroepen van de methoden in het programma, bijv.
GPIO.setmode(GPIO.BCM)
Derde voorbeeld voor een andere module voor GPIO-toegang:
uit gpiozero importeer LED
Alleen de klasse LED wordt geïmporteerd uit de module gpiozero. Met deze importmethode wordt de naam van de module niet meer voorafgegaan wanneer de methode/functie wordt aangeroepen.
Voorbeeldprogramma's voor het aansturen van een LED met een Raspberry Pi microcontroller
Eerste voorbeeld met de module RPi.GPIO:
importeer RPi.GPIO als GPIO
importeer tijd
GPIO.setmode(GPIO.BCM)# Pinnaam voor Broadcomm processor
GPIO.setup(26,GPIO.OUT)# GPIO26 (=phys. pin 37) wordt uitgang
while True:# Eindeloze lus, annuleren met Ctrl-C
GPIO.output(26,1)# GPIO 26 wordt HOOG geschakeld
time.sleep(1)
GPIO.output(26,0)# GPIO 26 wordt LAAGgeschakeld
time.sleep(1)
Tweede voorbeeld met de module gpiozero. Alleen LED en sleep zijn geïmporteerd.
uit gpiozero importeer LED
uit time importeer sleep
redLED = LED(26)# redLED is ingesteld op GPIO 26
while True:
redLED.on()# redLED is ingeschakeld
slaap(1)
redLED.off()# redLEDis uitgeschakeld
slaap(1)
Uitdaging: circuit uitbreiden en programmeren voor een verkeerslichtcyclus, bijv. rood(3s), rood/geel(1s), groen(3s), geel(1s), opnieuw starten met rood.
Voorgestelde oplossing zie nr. 02 De wisselende richtingaanwijzer