Code zoeken

Les 98-2: Hoe je een LED aan- en uitzet met een drukknop en Arduino

Les 98-2: Hoe je een LED aan- en uitzet met een drukknop en Arduino

Dit project laat je zien hoe je een LED met een drukknop bestuurt met een Arduino. In plaats van de LED vanzelf te laten knipperen, bepaal jij wanneer hij gaat branden: houd de knop ingedrukt en de LED gaat aan, laat los en hij gaat uit. Het is de logische volgende stap na een simpele knipper-sketch, omdat het twee ideeën introduceert die in bijna elk Arduino-project dat je ooit zult bouwen voorkomen — een digitale ingang uitlezen, en die ingang gebruiken om een beslissing in code te nemen.

alle projecten van les 98, breadboards en componenten
alle projecten van les 98, breadboards en componenten

De echte waarde hier is leren hoe een microcontroller de fysieke wereld waarneemt. Een drukknop is het eenvoudigste menselijke invoerapparaat dat er bestaat, maar hetzelfde patroon — een ingang uitlezen, een voorwaarde testen, een uitgang aansturen — is precies hoe je een eindschakelaar op een 3D-printer zou uitlezen, een deur die opent in een beveiligingssysteem zou detecteren, of een motor vanaf een bedieningspaneel zou starten. Zodra je dit ene circuit begrijpt, kun je de LED vervangen door bijna alles.

Hier zijn enkele praktische dingen die je met dezelfde techniek kunt bouwen:

  • Een deurbel of oproepknop met momentcontact die een lamp laat branden zolang erop gedrukt wordt.
  • Een "dodemansschakelaar" die een relais (en alles wat het van stroom voorziet) alleen bekrachtigd houdt zolang de knop ingedrukt wordt.
  • Een handmatige testknop voor een machine, waarbij een indicator-LED bevestigt dat de invoer wordt geregistreerd.
  • Een startknop voor een motorregelaar of pomp, waarbij de LED als statuslampje fungeert.
  • Een eenvoudige spelbuzzer waarbij de eerste speler die drukt wint en de LED de winnaar aankondigt.
  • Een kalibratie- of "leer"-knop op een sensorproject die oplicht zolang de modus actief is.

Hardware en componenten

De onderdelenlijst is bewust klein, en daarom is dit een uitstekend eerste invoerproject:

  • Een Arduino-bord — Uno, Nano, Mega of een compatibel bord.
  • Eén LED, either 5 mm of 3 mm, in elke kleur.
  • Eén weerstand voor de LED, ergens tussen 200 Ω en 1000 Ω.
  • Eén drukknopschakelaar met momentcontact.
  • Een breadboard en wat DuPont-jumperdraden.
LED-5mm-amber
LED-5mm-amber

Als je je afvraagt waarom er überhaupt een weerstand nodig is, loopt het transcript door de berekening (in video op 03:49). Een typische LED verliest ongeveer 2 V over zichzelf en wil ongeveer 10 mA stroom. Bij een voeding van 5 V moet de resterende 3 V door de weerstand worden opgenomen, dus de wet van Ohm geeft R = 3 V / 0,01 A = 300 Ω. Alles van 300 Ω tot ongeveer 1000 Ω werkt — hoe hoger de waarde, hoe dimmer de LED, maar hoe veiliger en efficiënter het is. De stroom is niet kritisch; je ruilt eenvoudig helderheid in voor een lagere stroomopname.

Bedradingsgids

Arduino-schema voor LED met een drukknopschakelaar
Arduino-schema voor LED met een drukknopschakelaar
Arduino-bedrading voor LED met een drukknopschakelaar
Arduino-bedrading voor LED met een drukknopschakelaar

Het circuit is hetzelfde LED-circuit dat je voor een knipper-sketch zou gebruiken, met een drukknop toegevoegd. De anode van de LED (het langere pootje) wordt via de weerstand verbonden met Arduino-pin 3, en de kathode (het kortere pootje, gemarkeerd door de platte kant van de plastic rand) gaat naar aarde. De drukknop wordt tussen pin 2 en aarde aangesloten.

Een detail dat het waard is om te weten: de drukknop heeft vier pootjes, maar ze zijn intern gepaard. Twee van de pootjes zijn permanent met elkaar verbonden, en de andere twee zijn permanent met elkaar verbonden — door op de knop te drukken worden de twee paren overbrugd. Als je een multimeter hebt, gebruik dan de continuïteitsmodus (piep) om te vinden welke pootjes al verbonden zijn wanneer de knop niet is ingedrukt; die twee zijn het paar dat je niet moet gebruiken. Kies één pootje uit elk van de twee onafhankelijke paren (in video op 07:50).

330_ohm_resistor
330_ohm_resistor

Hoe de code werkt

De sketch is kort, en bijna alles ervan is configuratie die je kunt aanpassen. De drie regels bovenaan zijn degene die je daadwerkelijk zult aanraken:

const int pushButtonPin = 2;//define a pin number for push button
const int LEDPin = 3;//define a pin that is connected to LED
const int delayLED = 0;//how long the LED should stay ON

pushButtonPin is de digitale pin waarop de knop is aangesloten. Verander dit als je de knop naar een andere pin verplaatst — vergeet niet de fysieke draad overeenkomstig te verplaatsen.

LEDPin is de pin die de LED aanstuurt. Elke digitale pin voldoet, maar houd er rekening mee dat pins 0 en 1 door de seriële verbinding worden gebruikt, dus kun je die het beste vermijden.

delayLED is de meest interessante instelling. Het bepaalt hoe lang de LED aan blijft nadat je de knop loslaat, gemeten in milliseconden. Als je het op 0 zet, gaat de LED onmiddellijk uit zodra je je vinger optilt. Als je het op 1000 zet, blijft de LED een volle seconde branden na het loslaten, en 5000 houdt hem vijf seconden aan (in video op 16:31). Dit enkele getal verandert volledig hoe het project aanvoelt, en het is een goede manier om te zien hoe een variabele in code zich direct vertaalt naar waarneembaar gedrag.

Twee andere dingen in de setup zijn het vermelden waard. Ten eerste is de knop-pin geconfigureerd met INPUT_PULLUP in plaats van gewoon INPUT:

pinMode(pushButtonPin, INPUT_PULLUP);//define a pin for push button switch

Dit activeert de interne pull-up weerstand van de Arduino, die de pin op een stabiel HIGH-niveau houdt wanneer de knop niet is ingedrukt. Zonder dit zou een zwevende input-pin elektrische ruis opvangen en willekeurige waarden geven, en zou je een externe weerstand nodig hebben om dit op te lossen. Met de interne pull-up ingeschakeld blijft de bedrading eenvoudig: één kant van de knop naar de pin, de andere kant naar ground. Wanneer je de knop indrukt, wordt de pin naar ground getrokken en leest LOW (in video op 14:08).

Ten tweede wordt de seriële monitor gestart op 9600 baud zodat je de statusveranderingen kunt volgen terwijl ze gebeuren:

Serial.begin(9600);//initialize the serial monitor
Serial.println("Robojax LED with push button");//print this text on Serial Monitor

In de hoofdlus is de logica een simpele if/else. De code leest de knop-pin en vergelijkt deze met LOW. Als de knop is ingedrukt, gaat de LED-pin HIGH, wordt het bericht "LED ON" afgedrukt, en wacht de sketch delayLED milliseconden. Als de knop niet is ingedrukt, gaat de LED-pin LOW en gaat de LED uit. Omdat loop() steeds opnieuw wordt uitgevoerd, gebeurt deze controle duizenden keren per seconde, waardoor de reactie direct aanvoelt.

Live demonstratie

Met delayLED ingesteld op 1000 licht de LED op bij het indrukken van de knop en blijft een seconde branden nadat je hem loslaat. Verlaag de waarde naar 5000 en de LED blijft vijf seconden branden — lang genoeg om bij de knop weg te lopen en hem nog steeds te zien branden. Zet het op 0 en de LED volgt je vinger precies: indrukken, aan; loslaten, uit (in video op 17:02).

Zodra de code is geüpload, kun je de Arduino loskoppelen van USB en hem voeden met een batterij of een 5 V-adapter. Het board heeft geen computer nodig om te werken — het programma is opgeslagen in het geheugen en start automatisch elke keer dat het wordt ingeschakeld (in video op 12:27).

Als je liever wilt dat de LED aan blijft na één keer indrukken en uitgaat bij de volgende keer indrukken, is dat een ander gedrag dat togglen wordt genoemd, en dat wordt behandeld in Les 98-3: Hoe je een toggle-LED aan/uit zet met een drukknop en Arduino. De bedrading van de drukknop is identiek, dus je kunt dit exacte circuit hergebruiken.

Gerelateerde projecten uit deze video

Hoofdstukken

  • [00:00] Overzicht van de 10 projecten in deze video
  • [01:00] Inleiding tot de stapsgewijze Arduino-cursus
  • [02:29] Wat een LED is: symbool, anode, kathode en fysieke vorm
  • [03:49] De LED-weerstand berekenen met de wet van Ohm
  • [07:32] De LED en drukknop op het breadboard bedraden
  • [08:50] De code uitleggen: pins, setup en de hoofdlus
  • [12:43] Hoe een drukknopschakelaar werkt
  • [13:22] De drukknop bedraden naar pin 2 en ground
  • [13:43] Code-uitleg: INPUT_PULLUP en de knop uitlezen
  • [16:14] Demonstratie: delayLED wijzigen van 1 s naar 5 s naar 0
  • [19:52] Praktische toepassingen van een drukknop-toggle

Afbeeldingen

2 pin tactile push button switch
2 pin tactile push button switch
Arduino wiring for LED  with resistor
Arduino wiring for LED with resistor
Arduino schematic for LED
Arduino schematic for LED
Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
alle projecten van les 98, breadboards en componenten
alle projecten van les 98, breadboards en componenten
alle projecten van les 98, breadboards en componenten
alle projecten van les 98, breadboards en componenten
LED-5mm-amber
LED-5mm-amber
934-Lessson 98-LED-2: Arduino code push button to turn LED ON and OFF
Taal: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Bestanden📁

Arduino-bibliotheken (zip)

Gebruikershandleiding