Caută cod

Lecția 98-10: Semafoare cu Arduino

Lecția 98-10: Semafoare cu Arduino

Semaforoarele sunt unul dintre acele sisteme cotidiene la care rareori ne gândim — până când construim unul. În acest proiect, vei folosi un Arduino pentru a simula o secvență reală de semafor: verde aprins, apoi galben, apoi roșu, fiecare pentru propria durată configurabilă, repetându-se la nesfârșit. Este un proiect perfect pentru începători, deoarece te învață logica temporizării secvențiale, controlul mai multor ieșiri și relația dintre ceea ce scrii în cod și ceea ce vezi în lumea fizică.

Semafor în viața reală cu trei culori

Dincolo de demonstrația din clasă, logica temporizării pe care o înveți aici apare peste tot:

  • Construirea unui model realist de semafor pentru o machetă de cale ferată sau dioramă
  • Crearea unui sistem de indicatoare temporizate pentru un atelier sau garaj (de exemplu, semnale „intrare permisă" / „așteptați")
  • Învățarea fundamentelor pentru semnale de trecere pentru pietoni cu faze declanșate de buton
  • Prototiparea unei secvențe de relee temporizate pentru sarcini industriale sau de automatizare casnică
  • Învățarea copiilor despre secvențiere, temporizare și electronică cu un obiect familiar și recognoscibil

Partea cea mai bună: întregul ansamblu funcționează autonom odată încărcat. Programezi Arduino o singură dată de pe computer, apoi îl alimentezi de la o baterie sau un adaptor și funcționează la nesfârșit — nu este necesar un PC (în video la 12:27).

LED-uri roșu, verde și galben pe breadboard pentru proiectul de semafor
LED-uri roșu, verde și galben pe breadboard pentru proiectul de semafor

Cum funcționează semaforul

Un semafor este de fapt doar o secvență temporizată de trei ieșiri. Arduino aprinde câte un LED pe rând, așteaptă un număr stabilit de secunde, îl stinge și trece la următorul. Ciclul se repetă apoi. În exemplul de temporizare din video, verdele rămâne aprins 3 secunde, galbenul 1 secundă și roșul 3 secunde — dar toate acestea sunt ajustabile în cod (în video la 49:44).

temporizare semafor: lumina roșie
temporizare semafor: lumina roșie
temporizare semafor: lumina galbenă
temporizare semafor: lumina galbenă
temporizare semafor: lumina verde
temporizare semafor: lumina verde

Motivul pentru care secvența pare realistă este că duratele oglindesc fluxul real de trafic: verdele și roșul sunt mai lungi pentru că vehiculele au nevoie de timp să traverseze intersecția, în timp ce galbenul este scurt pentru că este doar un avertisment de tranziție. Le poți regla pentru a se potrivi oricărui scenariu dorit.

Hardware și componente

Lista de piese pentru acest proiect este minimă:

  • 1 × placă Arduino (Uno, Nano sau Mega — orice cu cel puțin 3 pini digitali)
  • 3 × LED-uri (roșu, galben/portocaliu și verde — culorile diferite fac efectul evident)
  • 3 × rezistențe (300 Ω până la 1 kΩ funcționează bine; video-ul folosește 1 kΩ)
  • 1 × breadboard
  • Fire de conexiune
  • Opțional: o baterie litiu-ion sau un adaptor de alimentare de 5 V pentru a-l rula autonom

Video-ul recomandă utilizarea a trei LED-uri de culori distincte, astfel încât efectul de semafor să fie imediat vizibil — altfel ar trebui să le etichetezi (în video la 02:04).

Înțelegerea limitării curentului LED-ului

Fiecare LED are nevoie de o rezistență de limitare a curentului în serie. Iată de ce: un LED are o tensiune directă aproape fixă (de obicei în jur de 2 V pentru LED-urile standard de 5 mm), iar dacă îl conectezi direct la 5 V, curentul va crește brusc și îl va distruge. Rezistența absoarbe tensiunea în exces.

Folosind legea lui Ohm, dacă LED-ul scade 2 V și sursa este de 5 V, atunci 3 V trebuie să cadă pe rezistență. Cu un curent țintă de aproximativ 10 mA, valoarea rezistenței rezultă la aproximativ 300 Ω (în video la 04:41). În practică, orice de la 300 Ω până la 1 kΩ va funcționa — valorile mai mari pur și simplu fac LED-ul mai slab.

Ghid de cablare

Schema semaforului cu Arduino
Schema semaforului cu Arduino
Cablarea semaforului cu LED-uri Arduino
Cablarea semaforului cu LED-uri Arduino

Fiecare LED este cablat identic: anodul (piciorul mai lung) se conectează la un pin digital Arduino, iar catodul (piciorul mai scurt, partea plată a corpului LED-ului) se conectează printr-o rezistență la masă.

În cablarea din video, LED-ul roșu se conectează la pinul 2, LED-ul galben/portocaliu la pinul 3 și LED-ul verde la pinul 4 (în video la 50:50). Toate cele trei rezistențe împart o șină comună de masă pe breadboard. Ordinea culorilor pe breadboard nu contează — ceea ce contează este că numerele pinilor din codul tău corespund pinilor pe care i-ai folosit efectiv.

Un sfat util din videoclip: rezistorul poate fi plasat pe oricare parte a LED-ului. Îl poți pune între pinul Arduino și anodul LED-ului, sau între catodul LED-ului și masă — electric este același lucru (în videoclip la 51:52).

Explicația codului

Programul complet este disponibil sub articol. Aici ne vom concentra pe părțile pe care vei dori să le personalizezi.

La începutul sketch-ului, trei definiții de pini asociază fiecare LED unui pin digital. Dacă ai conectat LED-urile la pini diferiți, modifică aceste valori:

const int greenLED = 4;
const int yellowLED = 3;
const int redLED = 2;

Urmează constantele de temporizare. Acestea controlează cât timp rămâne aprins fiecare LED, în milisecunde. Videoclipul folosește implicit 5000 ms pentru verde, 1000 ms pentru galben și 5000 ms pentru roșu — dar în timpul demonstrației acestea au fost modificate la 3 s / 1 s / 3 s, iar mai târziu la 10 s / 3 s / 10 s (în videoclip la 56:27):

const int greenOnTime = 5000;
const int yellowOnTime = 1000;
const int redOnTime = 5000;

Pentru a schimba ritmul semaforului tău, trebuie doar să editezi aceste trei valori. Vrei o intersecție lentă și realistă? Încearcă 10000, 3000, 10000. Vrei o demonstrație rapidă? Încearcă 1000, 300, 1000.

În interiorul loop(), secvența este simplă: aprinde verde, așteaptă, stinge verde; aprinde galben, așteaptă, stinge galben; aprinde roșu, așteaptă, stinge roșu; apoi revino la verde. Monitorul serial afișează fiecare schimbare de stare, astfel încât să poți verifica dacă temporizarea corespunde așteptărilor tale.

Demonstrație live

Odată ce codul este încărcat, Arduino rulează ciclul de unul singur. În videoclip, LED-ul verde se aprinde primul, apoi după durata sa galbenul se aprinde scurt, apoi roșu, iar ciclul se reia imediat (în videoclip la 55:20).

Monitorul serial reflectă acest lucru în text — "green LED on", "green off", "yellow on" și așa mai departe — ceea ce este o modalitate excelentă de a confirma că valorile tale de temporizare funcționează conform intenției. Când ești gata să îl rulezi fără cablu, deconectează USB-ul și conectează o baterie litiu-ion sau un adaptor de 5 V; Arduino va continua să ruleze ciclul fără un computer (în videoclip la 56:11).

Proiecte similare din acest videoclip

Capitole

  • [00:00] Prezentarea generală a celor 10 proiecte cu LED-uri Arduino
  • [01:22] Introducere în cursul pas cu pas Arduino
  • [02:29] Ce este un LED: simbol, anod și catod
  • [03:49] Calcularea rezistorului limitator de curent pentru LED
  • [49:25] Introducere în proiectul semaforului
  • [49:44] Explicarea temporizării semaforului
  • [50:34] Schema de conectare pentru semafor
  • [52:13] Explicația codului pentru semafor
  • [54:32] Demonstrație live cu monitorul serial
  • [55:30] Modificarea valorilor de temporizare
  • [56:11] Rularea semaforului pe baterie

Imagini

traffic light timing: green light
traffic light timing: green light
temporizare semafor: lumina galbenă
temporizare semafor: lumina galbenă
temporizare semafor: lumina roșie
temporizare semafor: lumina roșie
Schemă semafor Arduino
Schemă semafor Arduino
traffic_lights
traffic_lights
Cablaj semafor cu LED-uri Arduino
Cablaj semafor cu LED-uri Arduino
LED-uri roșu, verde și galben pe breadboard pentru proiectul de semafor
LED-uri roșu, verde și galben pe breadboard pentru proiectul de semafor
942-Lessson 98-LED-10: Arduino code traffic light
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