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.
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
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
- Lecția 98-1: Cum să aprinzi și să stingi un LED cu Arduino
- Lecția 98-2: Cum să aprinzi și să stingi un LED folosind un buton cu Arduino
- Lecția 98-3: Cum să aprinzi/stingi un LED cu comutare folosind un buton cu Arduino
- Lecția 98-4: Estomparea unui LED folosind Arduino: Controlul luminozității
- Lecția 98-5: Estompează lumina când un buton este apăsat folosind Arduino
- Lecția 98-6: Joc LED cu balansoar folosind Arduino
- Lecția 98-7: Lumină care merge folosind Arduino și 5 LED-uri
- Lecția 98-9: Contor de nivel de tensiune LED folosind Arduino sau lumină care merge cu potențiometru
- Lecția 98-10: Semnal rutier cu Arduino
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
This code has not been parsed yet. Please return to the admin panel to parse it.
Lucruri de care ai putea avea nevoie
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
Resurse și referințe
-
DocumentațieDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
Extern
-
Extern
-
Extern
Fișiere📁
Biblioteci Arduino (zip)
-
Codul sursă al kitului de învățare Smart Car 3-în-1 de la SunFounder
3in1-kit-main-v2.zip12.80 MB
Manualul utilizatorului
-
Manual de asamblare pentru SunFounder 3-in-1 Arduino Smart CarAcest document prezintă asamblarea pas cu pas a SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB