VIA
Semafoarele viitorului
Drumul până la concurs
8 pași. Click pe orice pas pentru detalii.
3 scenarii la concurs
Ce arătăm juriului în 5 minute.
Trafic echilibrat
Plimbi telefonul lângă fiecare placă → contoarele cresc → semafoarele decid cui să dea verde lung.
Ambulanță cascadă
Pornești sirena pe telefon lângă N3 → toate 3 plăcile trec instant la verde mașini. Undă verde reală.
Plug-and-play
Scoți N2 din priză → N1 și N3 se ajustează singure. Bagi N2 înapoi → în 3s e detectat din nou.
Materialele per placă
5 piese — costă ~110 lei total. Vezi inventar pentru link-uri de cumpărare.
Ce face VIA — versiunea finală
Nu doar 3 lucruri. 6 lucruri, integrate într-un sistem care comunică wireless:
-
Ciclu semafor real cu 4 stări — galben pe AMBELE tranziții (VERDE→GALBEN→ROȘU→GALBEN→VERDE). VERDE pentru mașini 8s (sau 12s dacă văd 2+ mașinuțe), ROȘU pentru mașini = VERDE pentru pietoni 6s (sau 9s dacă mulți pietoni recent).
-
Detectează sirena cu filtru tonal — algoritm Goertzel pe 600Hz și 750Hz (cele 2 tonuri ale sirenei europene). Ignoră palme, strigăte, vorbire — declanșează DOAR pe sunet tonal sustained 128ms. Plus buton long-press 1.5s ca trigger manual (backup garantat).
-
Coridor verde la ambulanță — în loc de „toate galbene clipind”, drumul devine VERDE și ambulanța primește prioritate. Cascade val 400ms: nodul care detectează intră primul, vecinii cu offset pe ID. Drumul „se deschide” în avans pe traseul ambulanței.
-
Triangulare mașinuțe prin RSSI — fiecare nod broadcast prin ESP-NOW RSSI-ul tag-urilor M1/M2/M3. Toate nodurile aleg care nod e mai aproape de fiecare mașină → arată direcția de călătorie origine→destinație („M1: N1→N2”). Histeresis 2 secunde, anti-flicker.
-
Green wave pentru 3 mașinuțe — când N1 vede 2+ mașinuțe aproape, trimite CORIDOR_REQ prin ESP-NOW. N2 și N3 forțează VERDE 8 secunde sincron. Mașinile au drum liber prin întreg sistemul.
-
Numără telefoane = pietoni virtuali — sniff probe requests WiFi pe canal 1, filtrez orice MAC care NU-i din OUI tag-urilor. Telefoanele din zonă cresc T-counter → ROȘU mașini se extinde automat (mai mult timp pentru pietonii potențiali).
Zero cloud, zero server, zero internet, zero parolă WiFi.
Tool-uri live pentru pitch
3 pagini ASCUNSE (nu apar în meniu) — accesibile direct pe URL:
-
/radar/ — dashboard live cu hartă schematică a intersecției, 3 carduri (stare, countdown, mașini, vecini, telefoane), timeline evenimente. Pollează endpoint cu 500ms. Juriul poate deschide pe telefonul lor să vadă live ce face sistemul.
-
/debug/ — pagină Web Serial pentru Chrome desktop. Conectează un nod prin USB, vezi Serial-ul colorat live. Streaming opțional spre endpoint → radar primește datele.
-
/cod-tata/ — tot firmware-ul N1/N2/N3 + M1/M2/M3 cu tabs + buton Copy. Pentru reflash rapid în atelier.
Setup pitch cu 1 cablu USB: N1 cablat la laptop (debug streaming on). N2 și N3 alimentate cu powerbank/încărcător de telefon (doar power). N1 retransmite prin Serial status-ul N2/N3 primit prin ESP-NOW → toate 3 carduri trăiesc pe radar.
Codul firmware
Toate sketch-urile ready-to-flash: /cod-tata/ cu tabs N1/N2/N3 + M1/M2/M3.
Plus lecția pas-cu-pas: Firmware Test 1 — de la blink la semafor complet, 5 micro-pași A→E.
Ce zici la concurs — pitch 5 minute
Repetă TARE, cu cronometru. Nu citi de pe foaie — spune din cap. Dacă uiți o frază, sari la următoarea, nu te bloca.
60 secunde — Deschidere
„Bună, sunt Darius. Am 12 ani. Am construit VIA — Semafoarele Viitorului.
Tata mi-a zis că la un semafor a stat 2 minute la roșu fără să treacă nicio mașină pe celălalt sens. Ăsta-i un semafor PROST — nu vede nimic, nu vorbește cu vecinii, doar numără secunde.
VIA face altfel. 3 plăci, 3 mașinuțe cu tag-uri WiFi, comunicând prin radio direct. Fără internet, fără router, fără centru de control.
Costă 110 lei pe intersecție. Comercial: 30.000 lei. 99.6% mai ieftin, complet open source pe forge.udev.ro.
Vă arăt în 3 scenarii ce face.”
3 minute — 3 scenarii demo
Scenariul 1 — Trafic real, green wave (60s):
„Pe macheta asta sunt 3 intersecții pe drumul principal: N1, N2, N3. La N3 se desprinde un drum spre spital. În fața lui N1 e un mic parking cu 3 locuri.
Iau o mașinuță cu tag WiFi și o pun aproape de N1. Pe OLED apare ‘M1:N1’. Iau a doua mașinuță, o pun lângă N1: ‘M:2’. Acum N1 vede aglomerație și trimite prin radio un mesaj la N2 și N3.
(arată radar pe laptop)
Pe dashboardul live vedeți: toate 3 noduri au trecut sincron pe VERDE timp de 8 secunde. Val verde pentru trafic real — mașinile nu mai opresc la fiecare intersecție. Asta-i ce fac aeroporturile când trec demnitari.”
Scenariul 2 — Ambulanța, coridor verde (90s):
„Acum cazul critic — ambulanța. N1 are microfon care ascultă tonurile specifice ale sirenei europene: 600 Hz și 750 Hz. Nu se declanșează la palme sau zgomot — doar la sirenă reală sustinută peste 128 milisecunde.
Cum vreți să nu fie probleme cu zgomotul din sală, pot apăsa LONG butonul N1 — același efect.
(apasă butonul N1 1.5s)
N1: detectat AMBULANȚĂ → trimite mesaj radio. În 400 milisecunde N2 intră în coridor verde. În 800 milisecunde N3 — observați pe machetă LED-ul roșu mașini clipește alert, dar drumul rămâne verde pentru ambulanță.
(arată radar)
Drumul de la N1 până la spital e evidențiat verde. Coridorul verde — ambulanța are drum liber, fără să se oprească la nicio intersecție. 10 secunde de prioritate, apoi sistemul revine la ciclu normal.”
Scenariul 3 — Direcție mașini + telefoane în zonă (60s):
„Și ultima parte. Iau o mașinuță și o plimb. Stă 3 secunde la N1 — pe OLED: ‘M1@N1’. O mut la N2 — așteaptă 2 secunde și apare: ‘M1: N1→N2’. Săgeată dinspre N1 spre N2.
Sistemul nu doar VEDE mașinile — știe din ce direcție vin. Triangulare prin RSSI între toate 3 noduri.
Plus: vedeți pe OLED ‘T:7’. Înseamnă că în zonă sunt 7 telefoane care emit probe requests WiFi. Asta-i numărul juriului plus al spectatorilor — am 7 potențiali pietoni care ar putea ajunge la semafor. Sistemul extinde automat verde-ul pentru pietoni dacă T crește.”
60 secunde — Închidere
„Recapitulare. Sistemul VIA:
- Vede mașinile prin WiFi, din ce direcție vin
- Aude sirenele cu filtru de frecvență
- Vorbește cu vecinii prin radio direct
- Adaptează durata stărilor la trafic și pietoni real
- Deschide coridor verde pentru ambulanță cu val 400ms
Zero cloud. Zero server. Zero internet. Zero parolă WiFi.
3 plăci × 110 lei = 330 lei pentru tot sistemul. Comercial echivalent: ~100.000 lei. Tot codul open source — 15 lecții în română pe forge.udev.ro pentru oricine vrea să facă la fel.
Aceste semafoare nu sunt ‘smart’. Sunt empatice — ascultă ce-i în jurul lor, nu execută orbește un timer.
Întrebări?”
Tips pentru ziua concursului
- Ai cronometru pe telefon. Repetă acasă să încadrezi în 5 min FIX.
- Pe laptop ai 3 tab-uri Chrome deschise:
forge.udev.ro/radar/— pentru juriu să vadă liveforge.udev.ro/debug/— conectat la N1 cu Streaming on (asta alimentează radar-ul)forge.udev.ro/cod-tata/— backup dacă trebuie reflash rapid
- Setup hardware: N1 cablat USB la laptop. N2 și N3 cu powerbank. Toate 3 vizibile pe radar.
- Buton long-press ESTE backup-ul pentru sirenă. Dacă microfonul ratează sau e prea zgomot în sală, apeși butonul 1.5s — același rezultat, garantat.
- Vorbește încet și clar. Privește juriul, nu plăcile.
- Dacă ceva nu merge live: „Pe radar vedeți TOTUL — uitați-vă acolo cât rezolv eu hardware-ul.” Backup soft 100%.
- Întrebare grea? „Bună întrebare, hai să verific pe pagina mea de jurnal” — deschizi forge.udev.ro pe telefon. Plus point pentru documentație.
Schema completă N1 — toate cablajele într-o privire
Asta-i starea finală a primei plăci (după Test 1 + Test 2). Dacă vrei să înțelegi tot ce-i pe N1 fără să citești 8 schițe pas-cu-pas, asta-i imaginea.
Cu piesele exact ca în atelier
LED-urile WS2812-1 rotunde negre, microfonul INMP441 rotund cu 6 pini, butonul PCB albastru, OLED-ul cu 4 pini.
Aceeași schemă în varianta abstractă (mai lizibilă)
Dacă schema de mai sus pare aglomerată, asta-i varianta cu blocuri stilizate — același cablaj, ELEMENTELE mai mari și pinii mai vizibili.
Detaliu: cum se înlănțuie cele 5 LED-uri WS2812
Fiecare modul WS2812 are 4 pini: VCC, GND, DIN, DOUT. Mulți copii
se blochează aici — nu-s sigur ce merge unde. Iată exact:
Cele 3 tipuri de fire:
VCC(roșu) — toate 5 LED-uri se conectează la rail-ul 5V de pe breadboard. Un singur fir de la ESP325Vla rail e suficient — apoi LED-urile iau curent din rail, paralel.GND(negru) — la fel, toate 5 la rail-ul GND. Un singur fir de la ESP32GNDla rail.DIN/DOUT(cobalt) — date pentru animație. Aici e trucul lanțului:- ESP32
GPIO 5→DIN[0](primul LED) DOUT[0]→DIN[1](un fir între LED 0 și 1)DOUT[1]→DIN[2]DOUT[2]→DIN[3]DOUT[3]→DIN[4]DOUT[4]rămâne neconectat (e capătul lanțului)
- ESP32
De ce nu 20 de fire (5 LED-uri × 4 pini)? Pentru că:
- Toate VCC merg în același loc (rail 5V) → cumulativ 1 fir de la ESP32
- Toate GND merg în același loc (rail GND) → cumulativ 1 fir de la ESP32
- Doar firele de date sunt individuale: 1 de la ESP32 + 4 între LED-uri
Total ~11 fire pe breadboard pentru cele 5 LED-uri.
Tabelul cu toți pinii folosiți pe N1
| Pin ESP32 | Conectat la | Rol |
|---|---|---|
5V | WS2812 VCC (primul LED din lanț) | Alimentare LED-uri (mai puternice ca 3.3V) |
3V3 | OLED VCC, INMP441 VCC | Alimentare pentru module digitale |
GND | OLED, INMP441, buton, WS2812 | Masa comună (toate piesele) |
GPIO 4 | Buton pin S | Citire buton pieton (INPUT_PULLUP) |
GPIO 5 | WS2812 DIN (primul LED) | Date pentru lanțul de LED-uri |
GPIO 14 | INMP441 SCK | Clock I2S microfon |
GPIO 15 | INMP441 WS | Word Select I2S |
GPIO 21 | OLED SDA | Date I2C (display) |
GPIO 22 | OLED SCL | Clock I2C (display) |
GPIO 32 | INMP441 SD | Date audio I2S |
8 pini GPIO + 3 alimentare = 11 fire individuale + împărțitul GND-ului între piese. Toate piesele pe același breadboard de 400 puncte.
Atenție: INMP441 pinul
L/Rse leagă la GND (selectează canalul stânga). Vezi lecția 07d — microfon I2S pentru detalii.
Vista de sistem — cum vorbește totul la concurs
3 noduri pe macheta + 3 mașinuțe cu tag-uri + telefonul cu sirena. 3 tipuri de semnale wireless între ele.
Niciun fir între noduri sau între tag-uri și plăci. Doar radio. Zero internet.
Schemele de cablare pas-cu-pas
Schițele de mai jos sunt grupate pe teste. Click pe „Test X” ca să le deschizi.
Test 1 — primul nod (LED + OLED + buton) · 5 pași
Pas 1 — Alimentare
Bagi ESP32-ul pe breadboard peste șanțul din mijloc (jumate de pini pe fiecare parte). Apoi două fire de la ESP32 spre rail-urile breadboard-ului:
Pas 2 — Lanțul de 5 LED-uri WS2812
Asta-i partea cu cele mai multe conexiuni — dar toate urmează un șablon: VCC la rail-ul +, GND la rail-ul −, DOUT → DIN între LED-uri în ordine.
Pas 3 — OLED-ul (display)
Patru fire: alimentare (3.3V + GND) și două fire I2C (SDA + SCL). Atenție: OLED-ul vrea 3.3V, NU 5V.
Pas 4 — Butonul
Doar 2 fire reale — S la GPIO 4 și GND la GND. Lasă pinul VCC
al modulului neconectat. ESP32 are pull-up intern (activat din cod cu
pinMode(BUTTON_PIN, INPUT_PULLUP)), deci când apeși butonul, S se leagă
la GND prin contactul intern al modulului → ESP32 vede LOW.
De ce nu legi VCC? Modulul tău are 3 pini (S/VCC/GND), dar pentru
firmware-ul VIA care folosește INPUT_PULLUP, dacă legi și VCC, butonul
devine “activ HIGH” și logica de citire se inversează. Mai simplu îl tratezi
ca un comutator de două fire.
Pas 5 — Leagă lanțul la ESP32
Trei fire de la ESP32 spre lanțul de LED-uri pe care l-ai construit la pasul 2: 5V, GND, GPIO 5 → DIN al primului LED.
Ce verifici la Test 1: LED-urile ciclează (verde mașini → galben → roșu pieton → verde pieton), OLED arată stare, butonul incrementează contor. Detalii în lecția firmware.
Test 2 — adaugi microfonul (sirenă) · 3 pași
Pas 1 — Așezi modulul pe breadboard
Pas 2 — Alimentare (3 fire)
VCC → 3.3V, GND → GND, L/R → GND (selectează canalul stânga).
Pas 3 — Cele 3 fire de date I2S
I2S folosește 3 fire: WS (word select), SCK (clock), SD (date audio).
Ce verifici la Test 2: Serial Monitor zice „OK: Microfon I2S”, iar la sirenă MP3 pe telefon OLED-ul afișează „!! SIRENA !!”. Versiunea simplificată pentru concurs detectează nivel sunet (FFT-ul mai precis vine după concurs).
Dacă nu merge — troubleshoot Test 2
| Simptom | Cauza probabilă | Fix |
|---|---|---|
| Serial Monitor blank sau caractere garbled (ÿÿÿ) | Baud rate diferit — codul scrie pe 115200, monitor-ul pe 9600 | Setezi Serial Monitor stânga-jos la 115200 |
| „OK: Microfon I2S” nu apare niciodată — cod blocat în setup | I2S i2s_driver_install eșuează — pini greșiți | Verifici cu schița PAS 3: WS→15, SCK→14, SD→32. Dacă pinii OK → schimbă INMP441-ul |
| Levelul oscilează random fără sunet în jur | Pinul L/R neconectat (floating) — microfonul nu știe ce canal alege | Lipești L/R → GND (canal stânga) — vezi PAS 2 |
| „!! SIRENA !!” apare mereu, chiar în liniște | PRAG_SIRENA prea jos, prinde zgomot ambiental | În cod crești pragul (~3000-5000 e ok în cameră obișnuită). Vezi Serial.println(level) ca să-l reglezi |
| Sirena pe telefon nu schimbă nimic, dar Serial vede zgomot | Sirena MP3 are frecvențe joase ignorate de I2S la samplerate mic | Foloseste un MP3 cu sirenă „europeană” (550-1700 Hz). Sau crește volumul telefonului |
| ESP32 brownout (se resetează la sunet tare) | Cablu USB subțire — INMP441 trage 1.5mA, dar OLED+LED-uri+ESP32 deja la limita 500mA | Cablu USB de date 1m, NU 3m subțire. Sau alimentare externă 5V pe rail |
Test 3 — mesh ESP-NOW între 2 plăci · 3 pași
Test 3 nu adaugă piese fizice noi — cele 2 plăci sunt identice cu N1, doar NODE_ID diferit. Comunică prin aer.
Pas 1 — Două plăci identice, fără fir între ele
Pas 2 — Handshake ALIVE
Fiecare placă emite mesaj ALIVE prin radio. Celelalte se notează ca vecini.
Pas 3 — Buton pe N1 → N2 se ajustează prin radio
SCORE N1=18 prin ESP-NOW → N2 își schimbă planul fără reprogramare.
Ce verifici la Test 3: ambele OLED-uri arată „Vecini: 1” în 5s. Scoți N2 din priză → N1 zice „Vecini: 0”. Apeși butonul N1 → N2 își ajustează durata stărilor.
Dacă nu merge — troubleshoot Test 3
| Simptom | Cauza probabilă | Fix |
|---|---|---|
| Ambele OLED-uri arată „Vecini: 0” după 30s | ESP-NOW nu inițializează — WiFi.mode(WIFI_STA) lipsește sau e pe WIFI_AP | În setup: WiFi.mode(WIFI_STA); esp_now_init(); — verifici cu Serial că nu returnează eroare |
| Cele 2 plăci au același NODE_ID afișat pe OLED | Ai uitat să schimbi #define NODE_ID între cele 2 reflasheri | Reflash N2 cu NODE_ID "N2". În setup pune Serial.println(NODE_ID) ca să verifici la fiecare reset |
| Mesajele se trimit dar callback recepție nu prinde nimic | Peer broadcast nu-i adăugat — fără asta nu poți recepționa | esp_now_add_peer cu MAC FF:FF:FF:FF:FF:FF, channel 1, encryption false |
| Vecinii apar și dispar la fiecare 2-3s | Canal WiFi diferit între plăci (router-ul din apropiere le mută) | Forțezi channel 1: esp_wifi_set_channel(1, WIFI_SECOND_CHAN_NONE) după WiFi.mode |
| N2 vede pe N1 dar invers nu | Setup-ul asimetric — esp_now_add_peer lipsește pe una din plăci | Copy-paste secvența de init pe ambele plăci, identic. Doar NODE_ID diferă |
| Butonul N1 apăsat — N2 nu reacționează deloc | Mesajul de scor nu trimite imediat pe apăsare, ci la următorul ALIVE | Adaugi esp_now_send(broadcast, &payload, sizeof(payload)) direct în handler-ul de buton |
| Lag mare (5s+) între butonul N1 și ajustarea N2 | INTERVAL_ALIVE prea mare (10s+) | Setezi la 2s — destul de des pentru demo, dar nu spam canal radio |
Test 4 — 3 plăci integrate + scenarii machetă · 3 scenarii
Test 4 nu adaugă piese fizice noi — cele 3 plăci sunt identice cu N1 și N2,
doar NODE_ID "N3". Tot focus-ul e pe integrare + scenarii reale + troubleshoot.
Scenariul 1 — Ambulanța
Pornești sirena MP3 lângă N3. Așteptat: N3 detectează → trimite mesaj „SIRENA” prin ESP-NOW → N1 și N2 trec instant la verde mașini (peste regula normală a semaforului).
Scenariul 2 — Plug-and-play
Scoți N2 din priză în mijlocul demo-ului. Așteptat: după 5 secunde N1 și N3 zic „Vecini: 1” (doar pe celălalt). Bagi N2 înapoi → în 5 secunde toate trei zic „Vecini: 2”.
Scenariul 3 — Pe macheta orașului
3 intersecții pe carton (Piața / Gară / Spital). Plăcile așezate la cele 3 cuere. Tag-urile WiFi (Faza 4.5) montate sub mașinuțe. Plimbi mașinuțele → contorul „Telefoane:” pe OLED-ul fiecărei intersecții crește/scade după zonă.
Dacă nu merge — troubleshoot Test 4
| Simptom | Cauza probabilă | Fix |
|---|---|---|
| A 3-a placă nu apare pe celelalte 2 (Vecini rămâne 1) | Brownout — USB hub-ul împarte 500mA între 3 plăci → fiecare primește 167mA, sub minim | Alimentezi N3 cu cablu USB separat direct în PC sau cu un încărcător 5V/1A |
| Scenariul „ambulanță”: doar 1 din 2 vecini trece la verde | Mesaj SIRENA pierdut radio (coliziune cu ALIVE) | Trimiți SIRENA de 3 ori la 100ms diferență — redundanță fără relay complicat |
| Plug-and-play: când scot N2, N1 și N3 cred că-i încă acolo | TIMP_VECIN_VECHI prea mare (>10s) | Setezi 5s în cod — după 5s fără ALIVE de la un vecin, îl scoți din listă |
| Plug-and-play: vecinul reapare după plug → contor nu se incrementează | Nu actualizezi „ultim_alive” la primire — vecinul rămâne expirat | În callback recepție: vecini[i].ultim_alive = millis() la fiecare mesaj |
| Mașinuțele cu tag-uri nu sunt văzute (Telefoane rămâne 0) | Tag-ul ESP32-C3 emite pe channel WiFi diferit de cel al N1 | Tag-ul: WiFi.scanNetworks(true, true, false, 100, 1) — forțează channel 1 |
| Lag mare la trecerea mașinuței între 2 intersecții | INTERVAL_ALIVE 500ms → spam radio → coliziuni | Mărești la 2s — destul pentru demo, fără spam |
| O placă se resetează random după 30 min | Memory leak în code (vector vecini creşte la infinit fără cleanup) | În loop, după parcurgerea vecinilor: șterge cei cu ultim_alive expirat > 10s |
| Toate plăcile fac „zumzet” pe OLED — text flicker | OLED refresh la fiecare loop iteration → conflict I2C cu altele | Refresh OLED max 5x/secundă: if (millis() - last_oled > 200) { oled.display(); last_oled = millis(); } |
Pseudo-cod Test 2 + Test 3 · pentru când scrii codul cu Tata
Test 2 — microfon:
setup:
+ configurez I2S pe GPIO 14 (SCK), 15 (WS), 32 (SD)
+ sample rate 16000 Hz, mono, canal stânga
loop:
+ citesc 512 mostre de la microfon
+ calculez nivelul (max - min)
+ dacă > PRAG_SIRENA → sar la VERDE_MASINI + afișez „!! SIRENA !!"
Test 3 — mesh:
setup:
+ WiFi.mode(WIFI_STA)
+ esp_now_init() + înregistrez peer broadcast + callback recepție
loop:
+ la fiecare 2s: trimit prin ESP-NOW { node_id, scor }
callback la recepție:
+ salvez { node_id_vecin, scor_vecin, timp }
+ afișez pe OLED, ajustez durata stărilor după scoruri
Codul real Arduino — îl scriem împreună după ce Test 1 merge. Librărie built-in: <esp_now.h>.
Codul Test 1 — DEPRECATED, vezi lecția dedicată
Notă: Codul pentru Test 1 a fost mutat în lecția 07b-firmware-test1 — spart în 5 micro-pași A→E ca să-l înțelegi linie cu linie, nu să compilezi 80 de linii odată.
Lecția conține: librării de instalat, cum conectezi USB-C la PC, cum flashezi pas cu pas, plus troubleshoot „dacă nu merge”.
Vezi simulatorul
Cele trei plăci pe care le vei pune pe macheta orașului — aici, în browser. Apasă buton pieton pe orice intersecție sau pornește sirena.
Vezi toți cei 8 pași în detaliu
- Pas 01 · gata · 16 mai
Cum am ajuns la VIA
De unde a pornit ideea cu semaforul empatic și ce vreau să demonstrez marți la concurs.
- Pas 02 · gata · duminică 17 → luni 18 mai · ~5 ore
Pregătire — fundamente
Lecții de parcurs
-
Breadboard — cum funcționează -
LED-uri — cum funcționează cu adevărat -
Rezistoare — gardienii curentului -
Tensiune și curent — analogia cu apa -
Câți amperi cere fiecare piesă — și cum să nu arzi nimic -
Arduino IDE — cum scrii și încarci cod pe ESP32 -
Cum citești cod Arduino fără să te pierzi -
ESP32 — ce face fiecare pin
- ▢ Citește cele 6 lecții, în orice ordine
- ▢ Instalează Arduino IDE și adaugă suportul ESP32 din Boards Manager
- ▢ Conectează ESP32-ul prin USB-C, verifică în Device Manager că apare COM port
- ▢ Inventariere fizică: scoate toate piesele pentru Test 1 (placa N1) pe masă
-
- Pas 03 · gata · marți 19 → miercuri 20 mai · ~2 ore (cablare 30 min + firmware A→E 90 min)
Test 1 — primul nod, LED-uri + OLED + buton (fără microfon)
Lecții de parcurs
- ▢ Cablezi ESP32 + 5 WS2812 + OLED + buton după schema Test 1
- ▢ Flashezi codul cu
NODE_ID "N1" - ▢ Verifici LED-urile ciclează: verde mașini → galben → roșu pieton → verde pieton
- ▢ OLED arată "Nod N1" + countdown + "Telefoane:" + "Pietoni:"
- ▢ Apeși butonul — pe OLED se schimbă "Pietoni: 0" în "Pietoni: 1"
- ▢ Scrii articol în jurnal: ce-ai cablat, ce-a mers, ce nu
- Pas 04 · gata · joi 21 mai · ~1.5 ore (lipire pini 20 min + cod I2S 40 min + tuning PRAG_SIRENA 30 min)
Test 2 — adaugi microfonul (sirenă de ambulanță)
Lecții de parcurs
- ▢ Lipești pinii pe modulul INMP441 (microfonul I2S)
- ▢ Conectezi
VCC → 3.3V,GND → GND,L/R → GND,WS → GPIO 15,SCK → GPIO 14,SD → GPIO 32 - ▢ Reflashezi codul
- ▢ În Serial Monitor (baud 115200) vezi "OK: Microfon I2S"
- ▢ Pe telefon dă play la un MP3 cu sirenă de ambulanță lângă microfon
- ▢ Pe OLED apare "!! SIRENA !!" iar LED-ul verde mașini se aprinde
- ▢ Articol jurnal Test 2
- Pas 05 · gata · vineri 22 mai · ~2 ore (cablezi N2 30 min + cod ESP-NOW 60 min + test handshake 30 min)
Test 3 — mesh ESP-NOW între 2 plăci
Lecții de parcurs
- ▢ Cablezi a doua placă (N2) cu același set de piese ca N1
- ▢ Schimbi
NODE_ID "N1"înNODE_ID "N2"și reflashezi - ▢ Pornești ambele plăci în același timp
- ▢ Pe N1 verifici că OLED-ul arată "Vecini: 1"
- ▢ Pe N2 verifici că vede pe N1
- ▢ Apeși butonul pe N1 (scor mare) — vezi cum N2 își ajustează prin radio
- ▢ Articol jurnal Test 3
- Pas 06 · gata · sâmbătă 23 mai · ~4 ore (placa N3 1h + macheta carton cu Sergiu 2h + scenarii test 1h)
Test 4 — 3 plăci + macheta de oraș
- ▢ Cablezi a treia placă (N3)
- ▢ Testezi scenariul "ambulanță": pornești sirena lângă N3 → toate trei trec instant la verde mașini
- ▢ Testezi scenariul "plug-and-play": scoți o placă din priză, vezi cum celelalte se ajustează
- ▢ Construiești macheta orașului din carton: 3 intersecții cu străzi (Piața / Gară / Spital)
- ▢ Sergiu te ajută cu carton, lipici, mașinuțe de jucărie
- ▢ Articol jurnal Test 4 — totul împreună
- Pas 07 · gata · duminică 24 mai · ~3 ore (3 tag-uri × 30 min lipire + cod MAC unic + test)
Faza 4.5 — Tag-uri WiFi pentru mașinuțe (sufletul demo-ului)
Lecții de parcurs
- ▢ Lipești 3 tag-uri (ESP32-C3 SuperMini + LiPo + TP4056 + switch)
- ▢ Flashezi codul de scanare WiFi pe fiecare, cu MAC unic per tag
- ▢ Testezi că placa N1 detectează tag-ul când îl apropii: "Telefoane: 1" pe OLED
- ▢ Lipești tag-urile sub 3 mașinuțe Mattel cu dublă-adezivă
- ▢ Testezi traficul real: plimbi mașinuțele prin macheta, vezi cum contorul de telefoane crește/scade pe intersecții
- ▢ Reîncarci toate bateriile la 100% pentru demo
- Pas 08 · gata · luni 25 → marți 26 mai · ~2 ore repetiție + concurs marți
Demo + concurs — LOCUL 1
- ▢ Repetiție generală: 5 minute, pitch + 3 scenarii
- ▢ Repetă pitch-ul de 60 secunde tare, cu cronometru
- ▢ Imprimi posterul A1 cu cele 3 puncte centrale + QR code la forge.udev.ro
- ▢ Pui plăcile, mașinuțele și telefonul cu sirena într-o cutie pentru transport
- ▢ Marți 26 mai: concurs — arăți juriului ce-ai construit
- ▢ LOCUL 1 luat — sistemul a funcționat live, juriul a fost impresionat de mesh + ambulanță + radar
Faza trecută!