Caută cod

Lecția 98-8: Mers pe lumină cu buton și LED-uri cu Arduino

Lecția 98-8: Mers pe lumină cu buton și LED-uri cu Arduino

Acest proiect vă arată cum să construiți o „lumină călătoare" care avansează cu un pas de fiecare dată când apăsați un buton. În loc de o lumină care rulează pe propriul temporizator, obțineți un control direct, tactil: fiecare apăsare mută LED-ul aprins cu o poziție înainte, iar după ultimul LED revine la primul. Acesta este unul dintre cele mai utile blocuri de construcție în învățarea Arduino, deoarece vă învață cum să combinați o intrare digitală (butonul) cu o mașină de stări rotativă (care LED este aprins în prezent) — un model pe care îl veți reutiliza constant.

5 leds on breadboard with push button shown connected to Arduino UNO
5 leds on breadboard with push button shown connected to Arduino UNO

Odată ce înțelegeți acest model, aceeași logică alimentează o gamă largă de proiecte reale. Iată câteva idei practice pe care le puteți construi cu el:

  • Un selector de meniu pe un dispozitiv în care fiecare apăsare evidențiază următoarea opțiune.
  • Un indicator de pași secvențiali pentru o mașină sau un proces (pasul 1, pasul 2, pasul 3...).
  • Un afișaj de scor sau nivel pe care îl avansați manual cu un buton.
  • Un indicator „următorul canal" sau „următorul mod" pentru un controler de iluminare.
  • Un simplu joc sau buzzer de quiz în care jucătorii fac pe rând să se aprindă următoarea lampă.
  • Un releu sau secvențiator de sarcină în care fiecare apăsare activează următoarea ieșire în ordine.

Avantajul cheie față de o lumină automată este controlul: nimic nu se întâmplă până când nu apăsați, astfel încât lumina avansează doar când dumneavoastră decideți. Videoclipul notează, de asemenea, că aceeași idee de comutare și secvențiere poate acționa un releu pentru a comuta o lumină de curent alternativ sau pentru a controla un motor, nu doar LED-uri (în video la 19:52).

Hardware și componente

Lista de piese este scurtă și ieftină:

  • O placă Arduino (Uno, Nano, Mega sau orice placă compatibilă).
  • Cinci LED-uri — de 5 mm sau 3 mm, orice culori doriți.
  • Cinci rezistențe de limitare a curentului, de la 200 Ω la 1000 Ω (videoclipul folosește 1 kΩ).
  • Un întrerupător cu buton (un întrerupător tactil momentan este ideal).
  • Un breadboard și câteva fire jumper DuPont.

O notă rapidă despre LED-uri: catodul este piciorul mai scurt și partea cu marginea plată, în timp ce anodul este piciorul mai lung (în video la 03:13). Valoarea rezistenței nu este critică — o rezistență mai mare face pur și simplu LED-ul mai slab, astfel încât orice de la aproximativ 300 Ω până la 1000 Ω va funcționa bine (în video la 05:33).

Ghid de cablare

Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button

Cablarea este în esență aceeași ca o lumină călătoare standard cu cinci LED-uri, cu un buton adăugat. Anodul fiecărui LED se conectează la propriul pin Arduino, iar fiecare catod se conectează prin propria rezistență la o șină de masă comună pe breadboard. În această construcție LED-urile sunt conectate la pinii 3, 4, 5, 6 și 7 (în video la 31:37). Butonul este plasat pe breadboard cu un picior la masă și celălalt picior la pinul 2 — același pin pe care codul îl folosește pentru buton (în video la 37:04).

Deoarece codul activează rezistența internă de pull-up a Arduino, nu este nevoie de o rezistență externă pe buton. Când butonul nu este apăsat, pinul citește HIGH, iar când îl apăsați, pinul este tras la masă și citește LOW (în video la 14:02).

Explicația codului

Programul complet este disponibil sub acest articol. Aici ne concentrăm pe părțile pe care veți dori de fapt să le modificați.

În partea de sus a schiței, fiecare LED și butonul sunt atribuite unui pin. Aici personalizați construcția pentru a se potrivi cu cablarea dumneavoastră:

const int pushButtonPin = 2; // push button pin
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;

int LED_ON = LED1; // which LED is currently lit

Variabila LED_ON este inima proiectului. Ea reține care LED este aprins în prezent, începând cu LED1. De fiecare dată când apăsați butonul, codul avansează LED_ON la următorul LED din secvență și îl stinge pe cel anterior, astfel încât doar un LED este aprins la un moment dat.

Există, de asemenea, o mică întârziere după fiecare apăsare:

delay(200); // debounce / give the user time between presses

Această pauză de 200 milisecunde împiedică o singură apăsare fizică să fie înregistrată ca multiple apăsări. Dacă degetul tremură sau butonul pare prea sensibil, măriți acest număr; dacă doriți un răspuns mai rapid, reduceți-l. Fiți conștienți că setarea lui prea mică poate face lumina să sară înainte neașteptat (în video la 41:20).

Logica principală se află în loop(). Aceasta citește butonul și doar când butonul este apăsat (citire LOW) avansează lumina. Secvența folosește un lanț de verificări if / else if pentru a trece de la LED1 la LED2 la LED3 și așa mai departe, revenind la LED1 după ultimul. Dacă doriți să schimbați direcția sau ordinea LED-urilor, acesta este blocul de editat — pur și simplu reatribuiți care pin urmează după care.

Proiect live și demonstrație

După încărcarea codului, apăsarea butonului aprinde primul LED; eliberarea acestuia lasă LED-ul aprins. Următoarea apăsare mută lumina la al doilea LED, apoi la al treilea, al patrulea și al cincilea, iar următoarea apăsare revine la primul — o rotație continuă (în video la 40:22).

Un efect secundar plăcut al întârzierii de 200 milisecunde este că, dacă țineți butonul apăsat, lumina continuă să avanseze singură la fiecare 200 milisecunde, transformând efectiv proiectul într-o lumină automată care merge cât timp butonul este ținut apăsat (în video la 42:07). Eliberați butonul și se oprește pe LED-ul curent. Acest lucru vă oferă atât pas cu pas manual, cât și funcționare fără mâini de la un singur buton.

Dacă ați prefera ca lumina să funcționeze automat fără niciun buton, aceasta este o construcție separată. Versiunea automată este acoperită în Lecția 98-7: Lumină care merge folosind Arduino și 5 LED-uri.

Proiecte conexe din acest video

Capitole

  • [00:00] Prezentare generală a celor 10 proiecte LED cu Arduino
  • [01:22] Introducere în cursul pas cu pas Arduino
  • [02:29] Înțelegerea LED-urilor: simboluri, polaritate și pini
  • [03:49] Calcularea rezistenței de limitare a curentului pentru LED
  • [30:47] Lumină care merge cu 5 LED-uri: cablare și principiu
  • [32:52] Codul luminii care merge: pini, temporizare și buclă
  • [36:41] Avansarea luminii cu un buton
  • [37:44] Lumină care merge cu buton: parcurgerea codului
  • [40:22] Demonstrație și ajustarea întârzierii la apăsare
  • [57:16] Observații finale și încheierea cursului

Imagini

wiring for Arduino walking light LEDs with push button
wiring for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
5 LED-uri pe breadboard cu buton conectat la Arduino UNO
5 LED-uri pe breadboard cu buton conectat la Arduino UNO
940-Lessson 98-LED-8: Arduino code walking LED light with push button
Limba: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Fișiere📁

Biblioteci Arduino (zip)

Manualul utilizatorului