Arduino Nano - Knop

Deze tutorial legt uit hoe u een Arduino Nano gebruikt met een knop. We leren in detail:

De knop wordt ook wel een pushbutton, tactiele knop of momentary switch genoemd. Het is een fundamenteel component dat vaak wordt gebruikt in Arduino-projecten. Het is eenvoudig te gebruiken, maar kan voor beginners verwarrend zijn vanwege mechanische en fysieke aspecten en de verschillende manieren waarop het gebruikt kan worden. Deze tutorial maakt het eenvoudiger voor beginners.

Hardware Benodigd

1×Official Arduino Nano
1×Alternatief: DIYables ATMEGA328P Nano Development Board
1×USB A naar Mini-B USB kabel
1×Breadboard-knop met kap
1×Breadboard-knopset
1×Paneelknop (Panel-mount Push Button)
1×Drukknopmodule
1×Breadboard (experimenteerprint)
1×Jumper draden
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Breakout Uitbreidingsboard voor Arduino Nano
1×(Aanbevolen) Stromsplitter voor Arduino Nano

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

Beginners komen vaak twee veelvoorkomende problemen tegen bij het gebruik van een knop:

1. Floating input probleem:

  • Symptoom: De gelezen waarde van de invoerpin komt niet overeen met de ingedrukte status van de knop.
  • Oorzaak: De invoerpin is niet aangesloten op een pull-up of pull-down weerstand.
  • Oplossing: Gebruik een pull-up of pull-down weerstand, de stappen hiervoor worden uitgelegd in deze tutorial.

2. Chattering fenomeen:

  • Symptoom: De knop wordt maar één keer ingedrukt, maar de Arduino-code detecteert meerdere drukken.
  • Oorzaak: Mechanische en fysieke eigenschappen zorgen ervoor dat de knop (of schakelaar) status meerdere keren snel wisselt tussen LOW en HIGH.
  • Oplossing: Om dit op te lossen komen debounce-technieken aan bod in de tutorial Arduino Nano - Knop - Debounce. Alleen toepassingen die een precieze detectie van het aantal drukken vereisen, hoeven hier rekening mee te houden.

※ Notiz:

Verwar de knop niet met de volgende:

De Pinout van de Knop

De push button, ook wel pushbutton, tactiele knop of momentary switch genoemd, is een type schakelaar die sluit zodra de knop wordt ingedrukt en open gaat bij loslaten. Er bestaan verschillende soorten push buttons, die grofweg in twee groepen ingedeeld kunnen worden:

  • PCB-mount push button (geschikt voor montage op een breadboard)
  • Paneelmonteerbare knop (panel-mount push button)
Push button

Een PCB-mount knop heeft meestal vier pinnen.

Button pinout

Deze pinnen zijn echter steeds per paar intern verbonden. Daardoor hoeven er eigenlijk maar twee van de vier pinnen gebruikt te worden die niet intern verbonden zijn.

Er zijn vier mogelijke aansluitwijzen voor de knop, waarvan er twee symmetrisch zijn (zoals te zien op de afbeelding).

Hoe een knop te gebruiken

? Waarom worden er van een knop met vier pinnen toch maar twee pinnen gebruikt?

⇒ Om ervoor te zorgen dat de knop stevig op de PCB (printed circuit board) gemonteerd zit en bestand is tegen indrukking.

Een paneelknop (panel-mount button) heeft meestal twee pinnen.

Tweepins pushbutton pinout
image source: diyables.io

De push button module heeft een ingebouwde pull-down weerstand, die ervoor zorgt dat de uitgang LOW blijft wanneer de knop niet is ingedrukt. Deze module heeft drie pinnen:

  • GND: Verbind deze pin met massa (ground).
  • VCC: Verbind deze pin met 5V of 3.3V voeding.
  • OUT: Verbind deze pin met een digitale invoer op uw Arduino.

Met deze configuratie geeft de module LOW als de knop NIET is ingedrukt en geeft HIGH wanneer de knop wel wordt ingedrukt.

Hoe Werkt Het

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

Arduino Nano - Knop

Een van de pinnetjes van een knop wordt verbonden met VCC of GND. Het andere pinnetje wordt verbonden met een pin van de Arduino Nano. Door de status van die Arduino Nano-pin, die als input is ingesteld, te lezen, kunnen we bepalen of de knop wel of niet is ingedrukt.

Knopstatus en Indrukstatus

De verbinding tussen de knop en Arduino Nano en de configuratie van de Arduino-pin bepalen de relatie tussen de status van de knop en de indrukstatus.

Er zijn twee manieren om een knop met Arduino te gebruiken:

  1. Eén pin van de knop is aangesloten op VCC, de andere op een Arduino-pin met een pull-down weerstand
    • Wanneer de knop wordt ingedrukt, zal de Arduino-pin HIGH zijn. Anders is de Arduino-pin LOW
    • In dit geval is een externe weerstand vereist.

    *ii. Eén pin van de knop is aangesloten op GND, de andere op een Arduino-pin met een pull-up weerstand

    • Wanneer de knop wordt ingedrukt, is de Arduino-pin LOW. Anders is deze HIGH
    • We kunnen een interne of externe pull-up weerstand gebruiken. De interne weerstand is standaard ingebouwd in de Arduino Nano en kan ingesteld worden met Arduino code.

    ※ Notiz:

    • Als u géén externe pull-up of pull-down weerstand gebruikt, zal de status van de invoerpin “zwevend” zijn wanneer de knop NIET is ingedrukt. Dit betekent dat de status HIGH of LOW kan zijn (onstabiel), wat leidt tot foutieve detectie.
    • Slechte praktijk: Stel de Arduino-pin in als input (pinMode(BUTTON_PIN, INPUT)) zonder externe pull-up of pull-down weerstanden te gebruiken.
    • Beste praktijk: Stel de Arduino-pin in als interne pull-up input (pinMode(BUTTON_PIN, INPUT_PULLUP)). Dit vereist geen externe weerstanden.

    Voor het gemak van beginners gebruikt deze tutorial de meest eenvoudige methode: het instellen van de Arduino Nano-pin als interne pull-up input zonder externe weerstand. Beginners hoeven zich dus geen zorgen te maken over het aansluiten van pull-up/-down weerstanden. Alles gebeurt met Arduino Nano code.

Bedradingsschema

  • Bedradingsschema tussen Arduino Nano en PCB-mount knop
Arduino Nano knop bedradingsschema

This image is created using Fritzing. Click to enlarge image

  • Bedradingsschema tussen Arduino Nano en paneelknop (twee pinnen)
Arduino Nano twee-pins pushbutton bedradingsschema

This image is created using Fritzing. Click to enlarge image

Programmeren voor de Knop

  • Gebruik de functie pinMode() om de Arduino Nano-pin in te stellen als interne pull-up input.
  • Bijvoorbeeld, pin 2:
pinMode(2, INPUT_PULLUP);
  • Gebruik vervolgens de functie digitalRead() om de status van de Arduino Nano-pin uit te lezen.
int button_state = digitalRead(BUTTON_PIN);

※ Notiz:

Er zijn twee veelvoorkomende gebruiksscenario’s:

  • Ten eerste: Als de invoer HIGH is, voer dan één actie uit. Als de invoer LOW is, voer de tegenovergestelde actie uit.
  • Ten tweede: Als de invoer wisselt van LOW naar HIGH (of van HIGH naar LOW), voer dan een actie uit.

We kiezen er één op basis van de toepassing. Bijvoorbeeld bij het gebruik van een knop om een LED te bedienen:

  • Wilt u dat de LED AAN is als de knop wordt ingedrukt en UIT als de knop NIET wordt ingedrukt, gebruik dan het eerste scenario.
  • Wilt u dat de LED elke keer dat u de knop indrukt wisselt tussen AAN en UIT, gebruik dan het tweede scenario.

Detecteren van statusverandering van LOW naar HIGH

const int BUTTON_PIN = 2; // het nummer van de pushbutton pin int prev_button_state = HIGH; // vorige status van de invoerpin int button_state; // huidige uitlezing van de invoerpin void setup() { // Initialiseer de seriële communicatie met de seriële monitor. Serial.begin(9600); // initialiseer de pushbutton pin als pull-up input // de pull-up input pin is HIGH wanneer de schakelaar open is en LOW als de schakelaar gesloten is. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // lees de status van de schakelaar/knop: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == LOW && button_state == HIGH) Serial.println("De status is veranderd van LOW naar HIGH"); // sla de laatste status op prev_button_state = button_state; }

Arduino Nano Code

Snelle Stappen

  • Verbind uw Arduino Nano via USB met een computer.
  • Start de Arduino IDE, selecteer het juiste bord en de juiste poort.
  • Kopieer onderstaande code en open deze in Arduino IDE.
/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: int button_state = digitalRead(BUTTON_PIN); // print out the button's state Serial.println(button_state); }
  • Klik op de knop Upload in Arduino IDE om de code te compileren en naar Arduino Nano te uploaden.
Hoe code te uploaden naar Arduino Nano
  • Open de Seriële Monitor.
  • Druk meerdere keren op de knop en laat los.
  • Bekijk de resultaten in de Seriële Monitor.
COM6
Send
1 1 1 0 0 0 0 0 0 1 1 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

1 is HIGH, 0 is LOW.

Code Uitleg

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

Arduino Nano Code Wijzigen

Laten we de code aanpassen zodat deze het indrukken en loslaten van de knop kan herkennen.

Snelle Stappen

  • Pas de code als volgt aan:
/* * Deze Arduino Nano code is ontwikkeld door newbiely.nl * Deze Arduino Nano code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-nano/arduino-nano-button */ #define BUTTON_PIN 2 // The number of the pushbutton pin int prev_button_state = LOW; // The previous state from the input pin int button_state; // The current reading from the input pin void setup() { // Initialize the Serial to communicate with the Serial Monitor. Serial.begin(9600); // Configure the Arduino Nano pin as a pull-up input // The pull-up input pin is HIGH when the button is open and LOW when pressed. pinMode(BUTTON_PIN, INPUT_PULLUP); } void loop() { // read the state of the switch/button: button_state = digitalRead(BUTTON_PIN); if(prev_button_state == HIGH && button_state == LOW) Serial.println("The button is pressed"); else if(prev_button_state == LOW && button_state == HIGH) Serial.println("The button is released"); // save the the last state prev_button_state = button_state; }
  • Klik op de knop Upload in Arduino IDE om de code te compileren en te uploaden naar het Arduino Nano bord.
Arduino IDE Upload Code
  • Open de Seriële Monitor.
  • Druk de knop in en houd vast.
  • Laat de knop los en bekijk het resultaat in de Seriële Monitor.
COM6
Send
The button is pressed The button is released
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

  • Zelfs als u de knop maar één keer indrukt en loslaat, kan de output in de Seriële Monitor meerdere druk- en loslaatmeldingen tonen. Dit is het typische gedrag van een knop en wordt het "chattering fenomeen" genoemd. Voor een oplossing verwijzen wij naar de tutorial Arduino Nano - Knop Debounce.
  • Wij hebben een bibliotheek ontwikkeld, ezButton, om het werken met meerdere knoppen eenvoudiger te maken voor beginners. Meer informatie vindt u in de ezButton bibliotheek tutorial.
  • Voor de knopmodule stelt u de pin in met pinMode(BUTTON_PIN, INPUT). De module geeft LOW wanneer niet ingedrukt en HIGH tijdens indrukken.

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 het gebruik van de knop met Arduino Nano helemaal onder de knie te krijgen.

Daag uzelf uit

  • Wanneer de knop wordt ingedrukt, gaat de LED aan.
  • Wanneer de knop niet ingedrukt is, gaat de LED uit.
  • Elke keer dat u de knop indrukt, wisselt de LED tussen AAN en UIT.

Aanvullende Kennis

Wanneer is het gepast om een pull-down of pull-up weerstand te gebruiken voor een inputpin? En wanneer juist niet?

  • Als een sensor slechts gesloten of open kan zijn, is een pull-up of pull-down weerstand nodig om de signalen LOW en HIGH te maken. Voorbeelden hiervan zijn pushknoppen, schakelaars en magneetschakelaars (deursensoren).
  • Als een sensor twee gedefinieerde spanningsniveaus heeft (LOW en HIGH), is geen pull-up of pull-down weerstand nodig. Bijvoorbeeld bewegingssensoren en touch sensoren.

Functie Referenties

※ 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!