Raspberry Pi - Knop

Deze tutorial legt uit hoe u een Raspberry Pi gebruikt met een knop. In detail leert u:

De knop wordt ook wel pushbutton, tactiele knop of momentary switch genoemd. Het is een fundamenteel onderdeel dat in veel Raspberry Pi projecten wordt gebruikt. Het is eenvoudig te gebruiken, maar kan voor beginners verwarrend zijn vanwege mechanische en fysieke aspecten en het gebruik ervan. Deze tutorial vereenvoudigt het voor beginners.

Hardware Vereist

1×Raspberry Pi 5
1×Breadboard-montage knop met kap
1×Breadboard-montage knop kit
1×Paneel-montage drukknop
1×Drukknopmodule
1×Breadboard (experimenteerprint)
1×Jumperdraden
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over de Knop

Bij het gebruik van een knop lopen beginners vaak tegen twee veelvoorkomende problemen aan:

1. Floating input probleem:

  • Symptoom: De waarde die wordt gelezen vanaf de input pin komt niet overeen met de staat van het indrukken van de knop.
  • Oorzaak: Er wordt geen pull-up of pull-down weerstand gebruikt op de input pin.
  • Oplossing: Gebruik een pull-up of pull-down weerstand; dit wordt behandeld in deze tutorial.

2. Chattering fenomeen:

  • Symptoom: De Raspberry Pi code detecteert meerdere knopdrukken terwijl u de knop slechts één keer indrukt.
  • Oorzaak: Mechanische en fysieke eigenschappen zorgen ervoor dat de status van de knop (of schakelaar) snel wisselt tussen LOW en HIGH meerdere keren.
  • Oplossing: Om dit probleem op te lossen behandelt de tutorial Raspberry Pi - Knop - Debounce het gebruik van debounce technieken.

Voor toepassingen waarbij precieze drukdetectie vereist is, is dit een belangrijke overweging.

※ Notiz:

Verwar de knop niet met het volgende:

De Knop Pinout

Er zijn diverse soorten drukknoppen, die globaal in twee groepen kunnen worden ingedeeld:

  • PCB-montage drukknop (geschikt voor montage op een breadboard)
  • Paneel-montage drukknop
Drukknop

Een PCB-montage knop heeft meestal vier pinnen.

Knop pinout

Deze pinnen zijn intern in paren met elkaar verbonden. Er hoeven daarom maar twee van de vier pinnen te worden gebruikt die onderling niet verbonden zijn.

Er zijn vier manieren om de knop aan te sluiten, waarvan er twee symmetrisch zijn (zie afbeelding).

Hoe gebruik je een knop

? Waarom gebruiken we maar twee van de vier pinnen bij een knop?

⇒ Om ervoor te zorgen dat de knop stevig op het PCB (printed circuit board) blijft zitten en druk kan weerstaan.

Een paneel-montage drukknop heeft meestal twee pinnen.

tweepins drukknop pinout
image source: diyables.io

De drukknopmodule bevat een ingebouwde pull-down weerstand, waardoor de uitgang LOW blijft als de knop niet is ingedrukt. De module heeft drie pinnen:

  • GND: Verbind deze pin met aarde (ground).
  • VCC: Verbind deze pin met een 3.3V voedingsspanning.
  • OUT: Verbind deze pin met een digitale input op uw Raspberry Pi.

Met deze configuratie geeft de module LOW wanneer de knop niet is ingedrukt en HIGH wanneer de knop wel is ingedrukt.

Hoe Het Werkt

  • Wanneer de knop niet ingedrukt is, zijn pin A en pin B niet verbonden.
  • Wanneer de knop wel ingedrukt is, worden pin A en pin B met elkaar verbonden.
Hoe de knop werkt

Raspberry Pi - Knop

Een pin van de knop wordt verbonden met VCC of GND. De andere pin van dezelfde knop wordt verbonden met een pin van de Raspberry Pi. Door de status te controleren van een Raspberry Pi pin die als input is ingesteld, kunnen we bepalen of een knop is ingedrukt.

Knopstatus en Drukstatus

De verbinding tussen de knop en Raspberry Pi, evenals de configuratie van de Raspberry Pi pin, bepalen de relatie tussen de knopstatus en de drukstatus.

Er zijn twee manieren om een knop te gebruiken met Raspberry Pi:

  1. Verbind een pin van de knop met VCC en de andere pin met een Raspberry Pi pin met een pull-down weerstand.
    • Wanneer de knop wordt ingedrukt, is de Raspberry Pi pin HIGH. Anders is deze LOW.
    • Er kan gebruik worden gemaakt van een interne of externe weerstand. De interne weerstand is ingebouwd in de Raspberry Pi en kan via code worden ingesteld.
  • Verbind een pin van de knop met GND en de andere pin met een Raspberry Pi pin met een pull-up weerstand.
    • Wanneer de knop wordt ingedrukt, is de Raspberry Pi pin LOW. Anders is deze HIGH.
    • Er kan gebruik worden gemaakt van een interne of externe weerstand. De interne weerstand is ingebouwd in de Raspberry Pi en kan via code worden ingesteld.

    ※ Notiz:

    Wanneer geen pull-down of pull-up weerstand wordt gebruikt, komt de input pin in een “floating” toestand als de knop niet is ingedrukt. Dit betekent dat de status zowel HIGH als LOW kan zijn (onstabiel), wat leidt tot incorrecte detectie.

    • Slechtste praktijk: initialiseer de Raspberry Pi pin als input zonder pull-up of pull-down weerstand (GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_OFF)) en gebruik geen externe weerstand.
    • Beste praktijk: initialiseer de Raspberry Pi pin als interne pull-up input (GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)). Er is dan geen externe weerstand nodig.

    Voor het gemak van beginners gebruikt deze tutorial de meest eenvoudige aanpak: de Raspberry Pi pin instellen als interne pull-up input zonder externe weerstand. U hoeft zich geen zorgen te maken over de aansluiting van pull-up/pull-down weerstanden. Het enige wat nodig is, is de juiste code in Raspberry Pi.

    Aansluitschema

    • Aansluitschema tussen Raspberry Pi en PCB-montage knop
    Raspberry Pi Knop Aansluitschema

    This image is created using Fritzing. Click to enlarge image

    • Aansluitschema tussen Raspberry Pi en paneel-montage knop
    Raspberry Pi tweepins drukknop Aansluitschema

    This image is created using Fritzing. Click to enlarge image

    Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

    Raspberry Pi Schroevenklemaansluiting-Shield

    Hoe te Programmeren voor Knop

    • Gebruik de functie GPIO.setup() om de Raspberry Pi pin te initialiseren als interne pull-up input. Bijvoorbeeld pin 16:
    GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    • Gebruik de functie GPIO.input() om de status van de Raspberry Pi pin te lezen.
    button_state = GPIO.input(16)

    ※ Notiz:

    Er zijn twee veelvoorkomende gebruikscases:

    • De eerste: als de inputstatus HIGH is, voer dan een actie uit. Als de inputstatus LOW is, voer dan de tegenovergestelde actie uit.
    • De tweede: als de inputstatus wisselt van LOW naar HIGH (of van HIGH naar LOW), onderneem dan een actie.

    Afhankelijk van de toepassing kiest u een van deze twee. Bijvoorbeeld, bij het gebruik van een knop om een LED te bedienen:

    • Als u wilt dat de LED AAN is wanneer de knop is ingedrukt en UIT wanneer de knop niet is ingedrukt, dan gebruikt u de eerste gebruiksvariant.
    • Als u wilt dat de LED wisselt tussen AAN en UIT bij elke druk op de knop, dan gebruikt u de tweede gebruiksvariant.

    Raspberry Pi Code – Status van de knop uitlezen

    Snelle Stappen

    • Zorg dat u Raspbian of een ander compatibel besturingssysteem geïnstalleerd heeft op uw Raspberry Pi.
    • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
    • Zorg dat uw Raspberry Pi verbonden is met internet als u libraries moet installeren.
    • Als dit de eerste keer is dat u een Raspberry Pi gebruikt, zie hoe de Raspberry Pi in te stellen
    • Verbind uw pc met Raspberry Pi via SSH met de ingebouwde SSH-client op Linux en macOS, of via PuTTY op Windows. Zie hoe uw pc verbinden met Raspberry Pi via SSH.
    • Controleer of u de RPi.GPIO library geïnstalleerd heeft. Zo niet, installeer deze met het volgende commando:
    sudo apt-get update sudo apt-get install python3-rpi.gpio
    • Maak een Python scriptbestand button.py en voeg de volgende code toe:
    # Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-button import RPi.GPIO as GPIO import time # Define the GPIO pin connected to the button BUTTON_PIN = 16 # Set the GPIO mode to BCM GPIO.setmode(GPIO.BCM) # Initialize the pushbutton pin as an input with a pull-up resistor # The pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Print out the button's state print(button_state) # Small delay to avoid unnecessary printing time.sleep(0.1) except KeyboardInterrupt: print("\nExiting...") # Clean up GPIO settings GPIO.cleanup()
    • Sla het bestand op en voer het Python script uit met het volgende commando in de terminal:
    python3 button.py
    • Druk meerdere keren op de knop en laat hem weer los.
    • Bekijk de uitvoer in de Serial Monitor.
    PuTTY - Raspberry Pi
    1 1 1 0 0 0 0 0 0 1 1 1

    1 betekent HIGH, 0 betekent LOW.

    Het script draait in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

    Code Uitleg

    Bekijk de regel-voor-regel uitleg in de commentaren bij de broncode!

    Raspberry Pi Code – Detecteren van knopdruk events

    Snelle Stappen

    • Maak een Python scriptbestand button_pressed.py en voeg de volgende code toe:
    # Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/tutorials/raspberry-pi/raspberry-pi-button import RPi.GPIO as GPIO import time # Define the GPIO pin connected to the button BUTTON_PIN = 16 # Set the GPIO mode to BCM GPIO.setmode(GPIO.BCM) # Initialize the pushbutton pin as an input with a pull-up resistor # The pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Variable to keep track of the previous button state prev_button_state = GPIO.input(BUTTON_PIN) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Check if the button state has changed (press or release event) if button_state != prev_button_state: if button_state == GPIO.LOW: # Button is pressed print("The button is pressed!") else: # Button is released print("The button is released!") # Update the previous button state prev_button_state = button_state # Small delay to avoid unnecessary reading time.sleep(0.1) except KeyboardInterrupt: print("\nExiting...") # Clean up GPIO settings GPIO.cleanup()
    • Sla het bestand op en voer het Python script uit met het volgende commando in de terminal:
    python3 button_pressed.py
    • Houd de knop een moment ingedrukt.
    • Bekijk de uitvoer in de Serial Monitor.
    PuTTY - Raspberry Pi
    The button is pressed The button is released

    Het script draait in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

    Code Uitleg

    Bekijk de regel-voor-regel uitleg in de commentaren bij de broncode!

    ※ Notiz:

    • Ook als u de knop maar één keer indrukt en loslaat, kan de uitvoer in de terminal meerdere druk- en loslaat-events weergeven. Dit is het verwachte gedrag van de knop. Dit fenomeen wordt “chattering” genoemd. Meer informatie hierover vindt u in de tutorial Raspberry Pi - Knop Debounce.
    • Als u de knopmodule gebruikt, stel dan de pin in op inputmodus met GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_OFF). Met deze configuratie geeft de module LOW uit wanneer de knop niet is ingedrukt, en HIGH wanneer de knop wel is ingedrukt.

    Video Tutorial

    We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

    Daag uzelf uit

    • Wanneer de knop is ingedrukt, moet de LED worden ingeschakeld.
    • Wanneer de knop niet is ingedrukt, moet de LED worden uitgeschakeld.
    • Elke keer dat de knop wordt ingedrukt, moet de LED schakelen tussen AAN en UIT.

    Extra Kennis

    Wanneer moet u wel en niet een pull-down/pull-up weerstand gebruiken op een input pin?

    • Als een sensor een gesloten of open toestand heeft, is een pull-up of pull-down weerstand nodig om deze toestanden te definiëren als LOW en HIGH. Voorbeelden van dergelijke sensoren zijn pushbuttons, schakelaars en magneetcontactschakelaars (deursensor).
    • Als een sensor twee gedefinieerde spanningsniveaus heeft (LOW en HIGH), is een pull-up of pull-down weerstand NIET noodzakelijk. Voorbeelden hiervan zijn bewegingssensoren en touch-sensoren.

    ※ ONZE BERICHTEN

    • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!