Les 7 -GPIO
In deze les komen aan bod:
- GPIO pinnen – General Purpose Input Output pinnen
- Het laten knipperen van een LED lamp
- Met een schakelaar een LED lamp aan en uit zetten
- Een stoplicht maken van 3 LED lampen
In deze les komen aan bod:
GPIO, General Purpose Input Output pinnen, zijn pinnen die je kunt verbinden met allerlei elektronica en apparatuur. Een pin wordt ook wel een poort genoemd (iets wat open en dicht kan). Iedere pin kun je zelf, vanuit de Raspberry Pi, aansturen en controleren. Je kunt simpel gezegd, een pin aan of uitzetten. Zo kun je bijvoorbeeld een lampje aan en uit zetten, zelfs een motor aan zetten. Je kunt ook een pin aansluiten op een component om iets uit te lezen. Je kunt bijvoorbeeld stroom meten, temperatuur meten of licht meten.
Een pin kan input geven. Input (spreek uit: inpoet) betekent invoer van gegevens die via een pin binnenkomen. Zo kun je bijvoorbeeld een signaal krijgen van een temperatuursensor, of van een elektrisch circuit.
Een pin kan ook dienen als output. Output (spreek uit: outpoet) betekent een signaal dat naar buiten gaat, bijvoorbeeld een signaal om een lampje aan te zetten of uit te zetten. Het Nederlands woord voor output is: uitvoer.
Hier zie je een foto van de 40 pinnen. Iedere pin heeft een eigen betekenis. In onderstaand schema zie je wat alle pinnen betekenen:
Met behulp van de GPIO pinnen gaan we elektrische circuits maken. Een ander woord hiervoor is een stroomkring. Om een stroomkring te maken heb je elektriciteit nodig, en de elektriciteit moet rond gaan, zoals in onderstaande afbeelding:
De batterij levert stroom, de stroom loopt van plus (+) naar min (–). De stroom zorgt ervoor dat de lamp gaat branden.
Je kunt elektrische stroom goed vergelijken met het stromen van water door een pijp.
De waterpomp lijkt op de batterij bij elektriciteit. Deze zorgt ervoor dat het water gaat stromen. Door het stromende water kan het waterrad gaan draaien, net als het lampje dat gaat branden.
Hieronder leggen we verder uit hoe elektrische stroom werkt. We vergelijken begrippen uit de elektriciteit uit met water.
Voltage is het verschil in elektrische energie tussen twee punten in een circuit. Voltage noem je ook wel elektrische spanning.
Het is vergelijkbaar met waterdruk, deze druk zorgt voor het stromen van het water (in een pijp, bijvoorbeeld).
Voltage wordt uitgedrukt in de eenheid Volt. Een batterij kan bijvoorbeeld 5 Volt sterk zijn. De Raspberry Pi levert 3,3 Volt, zoals we later zullen zien.
Uit het stopcontact komt 220 Volt.
Een weerstand is een component die stroom gedeeltelijk tegenhoudt. Als je bijvoorbeeld een LED lamp gebruikt, Dan gebruik je een weerstand om de stroom te verminderen. Een LED lamp kan niet teveel stroom aan, dan gaat het kapot. Om de LED lamp te beschermen gebruik je een weerstand.
Weerstand wordt uitgedrukt in de eenheid Ohm.
Ground (spreek uit: kraunt) betekent Aarde. Aarde betekent hier een voltage van 0 volt en betekent dat de stroom hier naartoe zal afvloeien. In dit hoofdstuk gebruiken we Aarde (Ground) om een elektrisch circuit af te sluiten.
Stel je hebt een batterij van 5 volt, die verbind je met Aarde (ground). Dan zal er een stroom lopen van de batterij naar Aarde.
Hier volgt een overzicht van de onderdelen die we in dit hoofdstuk gebruiken:
Breadboard |
Breadboard (spreek uit: bretboord): dit is een plaat waar je elektrische elementen op kunt prikken, zodat je een elektrische experimenten kunt uitvoeren. Het bestaat uit gaatjes waar je kabels en componenten in kunt prikken, zodat je circuits kan maken. |
LED-lamp
|
Dit is een speciaal soort lampje. Het werkt alleen als de stroom de goede kant op loopt. |
Weerstand![]() |
Een weerstand heb je nodig in een elektrisch circuit om de stroom af te remmen. |
GPIO-kabel (Male-to-female)![]() |
Man-Vrouw kabeltjeDit draadje gebruik je om een GPIO pin te verbinden met het breadboard. |
GPIO-kabel (Male-to-male)![]() |
Man-Man kabeltjeDit draadje kun je gebruiken om twee gaten in het breadboard met elkaar te verbinden. |
Drukknop![]() |
Deze drukknop kun je als schakelaar gebruiken om een stroompje aan en uit zetten. |
Het breadboard (spreek uit: bretboord), bestaat uit gaatjes. De plus (+) gaatjes zijn verticaal allemaal met elkaar verbonden. De min (–) gaatjes zijn ook allemaal verticaal verbonden. De rijen gaatjes onder de A, B, C, D etc. zijn horizontaal verbonden. Zo kun je makkelijk elektrische circuits maken.
We beginnen met het maken van een eenvoudige schakeling, met een LED lampje. De Raspberry Pi levert de stroom om het lampje te laten branden.
Opdracht 1.
Voor deze oefening heb je nodig:
A:
Weerstand van 330 Ohm. Let op de kleurcode: oranje – oranje – bruin (-goud)
B:
Bevestig de weerstand op de 5e Eén poot in de tweede kolom links en één poot in kolom D. Zie onderstaande tekening.
C:
Je gaat nu het LED lampje bevestigen op het breadboard. Het is belangrijk dat je dit op de goede manier doet, anders werkt hij niet. De lange poot van het lampje moet aan de kant van het voltage, in dit geval in het gat De korte poot bevestig je aan het gat E5, zoals in de tekening.
D:
Bevestig nu een kabeltje op de GPIO: de 3e pin rechts: GND (Ground, aarde, 0 Volt) en verbind deze met het breadboard (zie tekening).
E:
Bevestig het andere kabeltje op de 1e pin links: 3,3 Volt. Verbindt deze met de breadboard op
F:
Er loopt nu een stroompje tussen de Pin 1 (3,3 Volt) en Pin 6 (Ground). Het LED lampje gaat branden!
We gaan nu een stapje verder. We gaan nu zorgen dat we het lampje aan en uit kunnen schakelen. Daarom verbinden we het met een andere poort.
A:
Verplaats het kabeltje van pin 1 met 3,3 Volt naar GPIO 17, de 6e poort van boven in het linker rijtje (zie plaatje hieronder).
B:
Ga naar het hoofdmenu, dan naar Programming, vervolgens naar Python 3 (IDLE):
C:
Een Python IDLE venster is nu geopend, het heet ook wel een Python Shell.
We werken eerst vanuit de shell. Typ de volgende regel:
import RPi.GPIO as GPIO
Hiermee importeren we de GPIO module, omdat we met de GPIO poorten willen communiceren.
D:
Dan typ je de volgende regel:
GPIO.setmode(GPIO.BCM)
Met deze opdracht kiezen we voor een schema voor de GPIO poorten. Er zijn meerdere schema’s mogelijk, wij gebruiken BCM.
E:
Vervolgens wil je de juiste poort instellen. We gebruiken poort 17 als output (zie ook plaatje):
GPIO.setup(17, GPIO.OUT)
F:
Nu zetten we poort 17 aan, met het volgende commando:
GPIO.output(17, True)
Het lampje gaat branden!
G:
En nu zet je het lampje weer uit:
GPIO.output(17, False)
H:
Zet het lampje nog een paar keer aan en uit.
I:
Je sluit af met dit commando:
GPIO.cleanup()
Met dit commando zorg je ervoor dat alle GPIO poorten weer veilig gebruikt kunnen worden.
We gaan nu hetzelfde doen als hierboven, alleen maken we er een programmaatje van.
Als je een opdracht wilt herhalen zolang er aan een bepaalde voorwaarde is voldaan, kun je een while (spreek uit: waail) – loop gebruiken. De Nederlandse vertaling van while is: “terwijl”.
Dit is een voorbeeld:
Opdracht 4.
a) Open een nieuw Python bestand: File / New File
b) Neem het volgende programmaatje over (ook het commentaar)
c) Bewaar het bestand onder de naam: testWhile.py.
d) Probeer het programmaatje uit.
Je kunt ook een oneindige lus maken met een while-loop. Zo’n while-loop loopt eindeloos door, totdat je het afbreekt met de toetscombinatie: CTRL+C. (De control toets en de C toets tegelijk indrukken.)
We gaan het oefenen, dan zal het duidelijker worden.
Opdracht 5.
a) Neem het onderstaand programmaatje over.
b) Bewaar het onder de naam testOneindig.py
c) Run het programmaatje en stop het met CTRL+C
Als je CTRL+C gebruikt, krijg je een foutmelding (in het rood), maar dat geeft niet.
In de volgende oefening gaan we een LED lamp aan en uit laten knipperen.
Opdracht 6.
a) We willen de GPIO pinnen besturen, daartoe hebben we de juiste module nodig. Die importeren we zo:
import RPi.GPIO as GPIO |
b) We willen vervolgens dat ons LED lampje een paar tellen aan en uit gaat. We gebruiken daarvoor de slaap (in het Engels: sleep) functie. Voor deze teller hebben we een module nodig die met tijd werkt (Engels: time):
import time |
c) Er zijn meerdere manieren om de pinnen (poorten) aan te sturen. D.w.z. er zijn meerdere manieren om de poorten een nummer te geven. Het schema dat wij gebruiken heet het BCM schema. Het Engelse woord voor schema is mode (spreek uit: mood).
GPIO.setmode(GPIO.BCM) |
d) Vervolgens wil je de juiste poort instellen. We gebruiken poort 17 als ouput:
GPIO.setup(17, GPIO.OUT) |
e) Nu gebruiken we een while True lus (een while-loop). In een while lus worden de opdrachten continu herhaald, totdat de lus onderbroken wordt, in ons geval met de toets CTRL+C.
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) while True:
|
f) Bewaar het programma onder de naam LEDblink.py
g) Run het programma.
Stop het programma met de toetscombinatie CTRL+C
h) Sluit het geheel af door in de Shell het commando te geven:
GPIO.cleanup() |
We gaan nu een schakelaar toevoegen, zodat je het lampje aan en uit kunt zetten.
Opdracht 7.
a) Je gebruikt de eerdere opstelling uit opdracht 2. Vervolgens heb je nog nodig:
een male-to-male kabeltje,
een drukknop,
een weerstand van 10.000 Ohm (plaatje)
twee female-to-male kabeltje (draadjes) en
één male-to-male kabeltje.
b) Verbindt een kabeltje tussen de 3,3 Volt pin (de eerste pin links) van de GPIO met het eerste gat linksboven van het breadboard (zie plaatje hieronder).
c) Verbindt de male-to-male kabel in de eerste kolom(+), laatste rij (30), met het gat in kolom a, rij 30.
d) Vervolgens plaats je de drukknop op e28, e30, h30 en h28.
e) Plaats de 10.000 Ohm weerstand in gat d28 en kolom – 28.
f) Verbind een kabel tussen a28 en GPIO23. Dit wordt het input kanaal.
g) Tot slot verbind je een kabel van – 1 met GND (3e pin rechts). Hiermee heb je de schakeling verbonden met Aarde en daardoor compleet gemaakt.
h) Maak een bestandje met onderstaande code:
i) Bewaar het bestand onder de naam LEDbutton.py
j) Run het programmaatje en druk op de druktoets.
Opdracht 8.
a) Maak een programmaatje dat ervoor zorgt dat je met één keer drukken op de drukknop de LED lamp aan zet, en de lamp weer uitzet als je de knop opnieuw indrukt.
Tip 1: gebruik een variabele Light die je op True zet als het licht aan is en False als het licht uit is.
Tip 2: gebruik de if functie ( if Light: ) om te bepalen of het licht aan of uit is.
Tip 3: gebruik de slaap functie (sleep) van de timer, om het input signaal te vertragen. Hiervoor moet je de module time importeren.
Zie bijvoorbeeld opdracht 6.
b) Noem dit programmaatje LEDswitch.py
We gaan nu een stoplicht maken, met een groene, gele en rode LED lamp.
Opdracht 9.
a) Breidt het breadboard uit met:
• een geel en een groen LED lampje,
• 2 weerstandjes van 330 Ohm.
• en kabeltjes.
Zie plaatje hierboven.
Verbindt een kabeltje tussen GPIO pin 23 en A17 van het breadboard.
Verbindt een kabeltje tussen GPIO pin24 en A24 van het breadboard.
b) Open een nieuw bestand.
c) Neem de volgende regels over:
In de eerste twee regels importeren we de nodige modules.
Daaronder gebruiken we variabelen voor de verschillende LED lampjes.
d) Vul het vervolgens aan met de volgende regels, waar de GPIO poorten op OUPUT worden gezet:
e) Gebruik nu een While True: lus voor het stoplicht. Je begint met het rode licht:
f) Vul nu zelf het programmaatje aan voor de andere lichten. Eerst groen, dan geel, met enkele seconden pauze ertussen.
g) Sla het bestand op onder de naam Stoplicht.py
h) Run het programma.
We gaan nu een drukknop toevoegen aan het stoplicht.
Opdracht 10.
a) Voeg een drukknop toe aan het circuit:
b) Ga naar het breadboard. Verbindt een male-to-male kabeltje in de eerste kolom(+), laatste rij (30), met het gat in kolom a, rij 30.
c) Vervolgens plaats je de drukknop op e28, e30, h28 en h30.
d) Plaats de 10.000 Ohm weerstand in gat d28 en kolom – 28.
e) Verbind een kabel tussen a28 en GPIO25. Dit wordt het input kanaal.
f) Tot slot verbind je een kabel van de 1e pin links, 3,3 Volt met + 1. Hiermee zorg je voor spanning voor de drukknop.
g) Open vervolgens het bestand Stoplicht.py.
h) Kopieer de inhoud van dit bestand naar een nieuw bestand.
i) Noem dit nieuwe bestand: StoplichtButton.py.
Je wilt met de drukknop het stoplicht aan zetten, dit zet je in een while-loop. Je laat het programma wachten totdat het knopje wordt ingedrukt.
Vervolgens laat je het stoplicht éénmaal werken, dan gaat hij weer op rood.
Vervolgens laat je het programma weer wachten totdat de drukknop weer wordt ingedrukt.
j) Pas het programmaatje aan.
GPIO.setmode(GPIO.BCM) | BCM staat voor Broadcom, de naam van de chip. |
De weerstandjes die we gebruiken hebben een kleurcode. De kleuren hebben de volgende betekenis