Raspberry Pi GPIO-pinnen gebruiken voor knoppen – zo doe je dat in Python

Marco den Teuling
0

Wil je de Raspberry Pi GPIO-pinnen gebruiken om knoppen aan te sluiten? Zo programmeer je dat in Python en voorkom je het probleem van ‘bouncen’ dat hierbij optreedt.

Wat is bouncen bij knoppen?

Een algemeen probleem met mechanische knoppen en schakelaars is het zogenaamde bouncen (denderen). Dit probleem wordt veroorzaakt doordat het sluitcontact de rustcontacten niet onmiddellijk en permanent overbrugt.

Het beweeglijke sluitcontact onderbreekt en sluit de contacten verschillende keren na elkaar totdat uiteindelijk een stabiele toestand is bereikt. Daar kun je bij het aansluiten op de Raspberry Pi pinnen en programmeren rekening mee houden.

Raspberry Pi GPIO-pinnen gebruiken voor knoppen

De Raspberry Pi leest de GPIO-pinnen zo snel uit dat hij de toestandsveranderingen bij bouncen inter­preteert als het meervoudig snel indrukken.

Het bouncen duurt gewoonlijk slechts enkele milliseconden en is te voorkomen door een condensator van 10 tot 100 nF parallel aan de drukknop of schakelaar te solderen. Je kunt er ook bij het programmeren rekening mee houden.

De drukknop kun je bijvoorbeeld aansluiten tussen pin 5 (GPIO3) en pin 6 (massa), pin 5 is bestemd voor aansluiten van een aan-uitknop voor de Pi. Je kunt maar keuze andere pinnen gebruiken om knoppen aan te sluiten, zoals uitgelegd in het overzicht van GPIO-pinnen.

bouncen gpio-pinnen raspberry

Programmeren in Python en bouncen negeren

De GPIO-pinnen gebruiken gaat het makkelijkst als je eerst de GPIO-bibliotheek toevoegt in je code met import RPi.GPIO as GPIO (zoals ook hier beschreven), die allerlei functies toevoegt voor de pinnen.

Voor de functie add_event_detect() is er de parameter bouncetime, waarmee je kunt opgeven hoeveel milliseconden de Rasp­berry Pi zo’n snelle toestandsverandering moet negeren – in het onderstaande voorbeeld 500 milliseconden:

GPIO.add_event_detect(

5, GPIO.BOTH,

callback=buttonPress,

bouncetime=500

)

De knop is in dit voorbeeld aangesloten op pin 5. Aangezien je de aan-uitknop normaal niet snel achter elkaar zult indrukken, is een bouncetime van een halve seconde geen probleem.


Ontvang gratis meer workshops over Raspberry Pi en Python, schrijf je in voor de nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

Gebruiken voor andere soorten knoppen

Voor andere toepassingen dan een aan-uitknop, zoals gebruikersinvoer, moet je de waarde van de bouncetime verlagen, bijvoorbeeld tot 100 milli­seconden, en daarnaast nog een condensator aansluiten.

Voor knoppen moet je ook overwegen of je echt op beide signaal­flanken wilt reageren door GPIO.BOTH te specificeren, of slechts op één.

In het laatste geval moet je weer rekening houden met de schakellogica: bij active low betekent GPIO.FALLING dat je de knop indrukt, en GPIO.RISING dat je hem loslaat.

Knoppen uitlezen met de Raspberry Pi

Het probleem van bouncen bij het uitlezen van knoppen is te zien in onderstaande grafiek. Het beweeglijke sluitcontact onderbreekt en sluit de contacten verschillende keren na elkaar totdat uiteindelijk een stabiele toestand is bereikt.

Mechanische drukknoppen en schakelaars maken niet onmiddellijk stabiel contact. In plaats daarvan is er bij het indrukken een reeks contactonderbrekingen, het zogenaamde bouncen.

Meer doen met de Raspberry Pi GPIO-pinnen

De Raspberry Pi dankt zijn succes in de hobbywereld aan zijn GPIO-aansluitingen. Met de juiste Python-bibliotheek en onze instructies lukken zelfs complexe taken.

In de inleiding Raspberry Pi GPIO pinnen: een overzicht van de aansluitingen wordt de lay-out van de GPIO-pinnen beschreven.

In deze serie komen de volgende onderwerpen aan bod:

Meer projecten voor de Raspberry Pi vind je bij Raspberry Pi projects

(Deze informatie is afkomstig uit het artikel in c’t 4/2022, pagina 134, van Mirko Dölle en Marco den Teuling)

 

Meer praktische instructies voor Windows: c’t 11/2024

Meer over

Zelfbouw

Deel dit artikel

Marco den Teuling
Marco den TeulingHad als eerste eigen computer ooit een 16-bit systeem, waar van de 48 kilobyte toch echt niet ‘genoeg voor iedereen’ was. Sleutelt graag aan pc’s, van de hardware tot het uitpluizen van de BIOS-instellingen. Vindt ‘Software as a Service’ een onbedoeld ironische naamgeving.

Lees ook

Windows Subsystem for Linux installeren met commandline

Tijdens de ontwikkeling varieerden de tips om Windows Subsystem for Linux (2) te installeren. Nu is de commandline de handigste manier. We beschrijven...

Windows Subsystem for Linux – een kijkje in de virtuele machine

De Linux-omgevingen in Windows Subsystem for Linux (WSL), zijn anders dan met een gewone distributie zoals die op pc of een virtuele machine. Met enke...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er