Arduino - Knop
De knop is een basiscomponent die veel wordt gebruikt in vele Arduino-projecten. Het lijkt eenvoudig, maar dat is het niet altijd vanwege mechanische en fysieke eigenschappen. Beginners kunnen er veel problemen mee ondervinden. Deze handleiding maakt het makkelijk voor beginners. Laten we beginnen!
※ Notiz:
Voordat we verder gaan met de knop, willen we twee veelvoorkomende fouten bespreken die nieuwkomers vaak tegenkomen:
- Het probleem van "floating input":
- Symptoom: Wanneer een knop wordt aangesloten op een Arduino-ingangspin, is de status van die pin willekeurig en komt deze niet overeen met de druktoestand van de knop.
- Oorzaak: Er wordt géén pull-down of pull-up weerstand gebruikt bij de knop-pin.
- Oplossing: ⇒ Gebruik een pull-down of pull-up weerstand op de ingangspin. Dit wordt later in deze handleiding uitgelegd.
- Symptoom: De Arduino-code leest de status van de knop en detecteert het indrukken door een statusverandering te detecteren (HIGH naar LOW of LOW naar HIGH). Bij één druk op de knop registreert de Arduino meerdere drukken in plaats van één.
- Oorzaak: Door mechanische en fysieke eigenschappen schakelt de toestand van de ingangspin bij één druk snel meerdere malen tussen LOW en HIGH.
- Oplossing: ⇒ Debounce. Dit wordt uitgelegd in de tutorial Arduino - Knop - Debounce.
Het chattering fenomeen veroorzaakt alleen in sommige toepassingen problemen, namelijk wanneer het exacte aantal drukken moet worden gedetecteerd. In andere toepassingen is het onschadelijk.
Hardware benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Over de knop
De drukknop, ook wel pushbutton, tactiele knop of momentary switch genoemd, is een type schakelaar die sluit wanneer de knop wordt ingedrukt en vastgehouden en opent wanneer deze losgelaten wordt. Er zijn verschillende types drukknoppen, die globaal in twee groepen worden ingedeeld:
- PCB-montage drukknoppen (breadboard-monteerbaar)
- Paneel-montage drukknoppen

Pinout
De PCB-monteerbare knoppen hebben meestal vier pinnen.

Deze pinnen zijn intern in paren met elkaar verbonden. Daarom hoeven we maar twee van de vier pinnen te gebruiken, namelijk die pinnen die NIET intern verbonden zijn.
Er zijn vier manieren (eigenlijk twee door symmetrie) om de knop aan te sluiten (zie afbeelding).

? Waarom kunnen we maar twee pinnen gebruiken terwijl de knop er vier heeft?
⇒ De extra pinnen zorgen ervoor dat de knop stevig staat op de PCB (printplaat) en bestand is tegen de drukkracht.
De paneel-montage knoppen hebben meestal twee pinnen.

De push button module bevat een ingebouwde pull-down weerstand, die ervoor zorgt dat de uitgang LOW blijft wanneer de knop niet is ingedrukt. Hij heeft drie pinnen:
- GND: Verbind met aarde (ground).
- VCC: Verbind met 5V of 3.3V voeding.
- OUT: Verbind met een digitale ingang van de Arduino.
Met deze configuratie is de uitgang LOW als de knop niet is ingedrukt, en HIGH wanneer de knop wél wordt ingedrukt.
Hoe werkt het
- Wanneer de knop NIET wordt ingedrukt, is pin A niet verbonden met pin B
- Wanneer de knop wordt ingedrukt, is pin A verbonden met pin B

Arduino - Knop
Één pin van de knop wordt verbonden met VCC of GND. De andere pin wordt verbonden met een Arduino-pin.
Door de status te lezen van de Arduino-pin (ingesteld als input) kunnen we bepalen of de knop wel of niet is ingedrukt.
Knopstatus en druktoestand
De relatie tussen de knopstatus en of deze wordt ingedrukt hangt af van hoe de knop is aangesloten op de Arduino en hoe de Arduino-pin is ingesteld.
Er zijn twee manieren om een knop te gebruiken met Arduino:
- Eén knop-pin is verbonden met VCC, de andere met een Arduino-pin via een pull-down weerstand
- Als de knop wordt ingedrukt, is de Arduino-pin HIGH. Als de knop niet wordt ingedrukt, is de Arduino-pin LOW.
- Er moet een externe weerstand worden gebruikt.
- Eén knop-pin is verbonden met GND, de andere met een Arduino-pin via een pull-up weerstand
- Als de knop wordt ingedrukt, is de Arduino-pin LOW. Als de knop niet wordt ingedrukt, is de Arduino-pin HIGH.
- Dit kan met een interne of externe weerstand. De interne weerstand is ingebouwd in de Arduino en kan via de code geactiveerd worden.
※ Notiz:
Als u geen pull-down of pull-up weerstand gebruikt, dan zal de toestand van de input-pin “floating” (zwevend) zijn als de knop niet is ingedrukt. Dit betekent dat de toestand zowel HIGH als LOW kan zijn (onstabiel), wat leidt tot verkeerde detectie.
- De slechtste aanpak: de Arduino-pin als input initialiseren (met pinMode(BUTTON_PIN, INPUT)) zonder een pull-down of pull-up weerstand te gebruiken.
- De beste aanpak: de Arduino-pin als interne pull-up input initialiseren (met pinMode(BUTTON_PIN, INPUT_PULLUP)), dan is geen externe weerstand nodig.
Om het voor beginners makkelijk te maken, gebruikt deze tutorial de simpelste methode: de Arduino-pin initialiseren als interne pull-up input zonder externe weerstand. Beginners hoeven dus niet na te denken over het aansluiten van pull-up of pull-down weerstanden. Ze hoeven alleen de Arduino-code te gebruiken.
Bedradingsschema
- Bedradingsschema tussen Arduino en PCB-montage knop

This image is created using Fritzing. Click to enlarge image
- Bedradingsschema tussen Arduino en paneel-montage knop

This image is created using Fritzing. Click to enlarge image

Hoe programmeert u voor de knop
- Initialiseer de Arduino-pin als interne pull-up input met de functie pinMode(). Bijvoorbeeld pin 7:
- Lees de status van de Arduino-pin met de functie digitalRead().
※ Notiz:
Er zijn twee veelgebruikte gebruiksscenario’s:
- De eerste: Als de input HIGH is, voer dan een actie uit. Als de input LOW is, voer dan een andere actie uit.
- De tweede: Als de input verandert van LOW naar HIGH (of HIGH naar LOW), voer dan een actie uit.
Afhankelijk van de toepassing kiest u één van deze. Bijvoorbeeld bij het bedienen van een LED met een knop:
- Wilt u dat de LED AAN gaat als de knop ingedrukt is en UIT als de knop niet ingedrukt is, gebruik dan de eerste methode.
- Wilt u dat de LED telkens wisselt tussen AAN en UIT bij elke druk op de knop, gebruik dan de tweede methode.
Hoe detecteert u een statusverandering van LOW naar HIGH
Arduino Code
Snelle stappen
- Verbind Arduino met PC via USB-kabel
- Open Arduino IDE, selecteer het juiste board en de juiste poort
- Kopieer onderstaande code en open in Arduino IDE
- Klik op de Upload knop in Arduino IDE om de code te uploaden naar Arduino

- Open de Seriële Monitor
- Druk de knop meerdere keren in en laat los
- Zie het resultaat in de Seriële Monitor:
1 betekent HIGH, 0 betekent LOW.
Code uitleg
Lees de regel-voor-regel uitleg in de commentaarregels van de code!
Arduino Code aanpassen
Laten we de code aanpassen om indrukken en loslaten te detecteren
Snelle stappen
- Pas de code aan zoals hieronder
- Klik op de Upload knop in Arduino IDE om de code te uploaden naar Arduino

- Open de Seriële Monitor
- Druk op de knop en laat los
- Zie het resultaat in de Seriële Monitor
※ Notiz:
- Zelfs als u de knop slechts één keer indrukt en loslaat, kan de uitvoer in de Seriële Monitor meerdere druk- en loslaat gebeurtenissen tonen. Dit is normaal gedrag van de knop. Dit gedrag heet het “chattering” fenomeen. U kunt hier meer over lezen in de Arduino - Knop Debounce tutorial.
- Om het nog makkelijker te maken voor beginners, zeker bij gebruik van meerdere knoppen, is er een library gemaakt genaamd ezButton. U kunt hier meer leren over ezButton library.
- Gebruik pinMode(BUTTON_PIN, INPUT) voor de knop module. Deze geeft LOW wanneer niet ingedrukt en HIGH wanneer 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.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap voor stap door het proces.
Daag uzelf uit
- Zet een LED aan wanneer de knop wordt ingedrukt, en zet de LED uit wanneer de knop niet is ingedrukt.
- Laat een LED wisselen tussen AAN en UIT elke keer dat de knop wordt ingedrukt.
Extra kennis
? Wanneer moeten we wel of niet een pull-up of pull-down weerstand gebruiken bij een input-pin?
- Als de sensor ofwel gesloten (verbonden met VCC of GND) óf open (niet verbonden met iets) toestanden heeft, heeft u een pull-up of pull-down weerstand nodig om die toestanden te forceren tot twee vaste niveaus: LOW en HIGH. Bijvoorbeeld bij drukknoppen, schakelaars, magneetschakelaars (deursensoren) ...
- Als een sensor twee gedefinieerde spanningsniveaus heeft (LOW en HIGH), dan heeft u geen pull-up of pull-down weerstand nodig. Bijvoorbeeld bij bewegingssensoren, touch sensoren ...