Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:ajipa:andrei.badescu1512 [2025/05/24 21:54]
andrei.badescu1512
pm:prj2025:ajipa:andrei.badescu1512 [2025/05/25 03:16] (current)
andrei.badescu1512
Line 4: Line 4:
 Proiectul prezinta un model pentru o intersectie in T, semaforizata,​ controlata printr-un senzor de distanta si butoane. Intersectia este formata dintr-un bulevard des circulat, o trecere de pietoni si o strada secundara cu sens unic; soferii care trebuie sa vireze la stanga ca sa intre pe strada secundara trebuie sa astepte ca semaforul pentru directia inainte sa devina rosu. Proiectul prezinta un model pentru o intersectie in T, semaforizata,​ controlata printr-un senzor de distanta si butoane. Intersectia este formata dintr-un bulevard des circulat, o trecere de pietoni si o strada secundara cu sens unic; soferii care trebuie sa vireze la stanga ca sa intre pe strada secundara trebuie sa astepte ca semaforul pentru directia inainte sa devina rosu.
  
-Pentru a regula aceste intervale, semafoarele pentru directia inainte sunt initial verzi, iar daca un senzor de distanta detecteaza masini care vor sa vireze stanga sau un buton este apasat de catre un pieton, dupa un timp de asteptare semafoarele se vor schimba, permitand celor care asteapta sa treaca. Dupa un timp suficient de lung, sistemul se va intoarce in starea initiala, unde va ramane fortat pentru o perioada de timp pentru a preveni blocarea permanenta a semaforului inainte.+Pentru a regula aceste intervale, semafoarele pentru directia inainte sunt initial verzi, iar daca un senzor de distanta detecteaza masini care vor sa vireze stanga sau un buton este apasat de catre un pieton, dupa un timp de asteptare semafoarele se vor schimba, permitand celor care asteapta sa treaca. Dupa un timp suficient de lung, sistemul se va intoarce in starea initiala.
  
 Scopul acestui sistem este acela de a regla timpul alocat traversarii intersectiei de catre pietoni si timpul alocat masinilor care circula inainte/la stanga. Ideea de la care am pornit este urmatoarea: daca pietonii si masinile care vireaza la stanga apar mult mai rar decat masinile care merg drept inainte, atunci ar fi util un sistem inteligent care sa gestioneze cand sa permita pietonilor (si masinilor care vireaza la stanga) sa treaca. Scopul acestui sistem este acela de a regla timpul alocat traversarii intersectiei de catre pietoni si timpul alocat masinilor care circula inainte/la stanga. Ideea de la care am pornit este urmatoarea: daca pietonii si masinile care vireaza la stanga apar mult mai rar decat masinile care merg drept inainte, atunci ar fi util un sistem inteligent care sa gestioneze cand sa permita pietonilor (si masinilor care vireaza la stanga) sa treaca.
Line 14: Line 14:
 {{ :​pm:​prj2025:​ajipa:​schema_semafoare.jpg?​nolink |}} {{ :​pm:​prj2025:​ajipa:​schema_semafoare.jpg?​nolink |}}
  
-Sistemul trece in mod circular prin mai multe stari care controleaza traficul intersectiei. La inceput, semafoarele pentru stanga si pietoni sunt rosii, iar semafoarele inainte sunt verzi. In momentul in care un pieton apasa pe un buton, ​se porneste un timer pentru pietoni. In momentul in care o masina care asteapta ca sa vireze la stanga este detectata de senzorul de distanta, se porneste un timer pentru masini. Atunci cand oricare dintre timere ​ajunge la 0, semaforul inainte va trece printr-o stare intermediara (culoarea galbena), apoi va deveni rosu. Dupa un delay de siguranta, semafoarele pentru pietoni si stanga vor deveni verzi.+Sistemul trece in mod circular prin mai multe stari care controleaza traficul intersectiei. La inceput, semafoarele pentru stanga si pietoni sunt rosii, iar semafoarele inainte sunt verzi. In momentul in care un pieton apasa pe un buton, ​dar si in momentul in care o masina care asteapta ca sa vireze la stanga este detectata de senzorul de distanta, se porneste un timer. Atunci cand timerul ​ajunge la 0, semaforul inainte va trece printr-o stare intermediara (culoarea galbena), apoi va deveni rosu. Dupa un delay de siguranta, semafoarele pentru pietoni si stanga vor deveni verzi.
  
 Cand semafoarele pentru pietoni si stanga devin verzi, microprocesorul intra intr-o stare in care ignora butoanele si senzorul si porneste un timer de astepare. Cand timerul de asteptare ajunge la 0, semafoarele trec printr-o stare intermediara (pentru pietoni: clipeste rosu, pentru masini: culoarea galbena), apoi devin din nou rosii. Dupa un delay de siguranta, semafoarele pentru inainte devin verzi, iar microprocesorul incepe din nou sa astepte semnale de la senzor si butoane. Cand semafoarele pentru pietoni si stanga devin verzi, microprocesorul intra intr-o stare in care ignora butoanele si senzorul si porneste un timer de astepare. Cand timerul de asteptare ajunge la 0, semafoarele trec printr-o stare intermediara (pentru pietoni: clipeste rosu, pentru masini: culoarea galbena), apoi devin din nou rosii. Dupa un delay de siguranta, semafoarele pentru inainte devin verzi, iar microprocesorul incepe din nou sa astepte semnale de la senzor si butoane.
Line 41: Line 41:
  
   * **Arduino Uno R3:** Controller ATMega328P, responsabil cu primirea datelor de la senzor si de aprinderea/​stingerea LED-urilor.   * **Arduino Uno R3:** Controller ATMega328P, responsabil cu primirea datelor de la senzor si de aprinderea/​stingerea LED-urilor.
-  * **Senzor Infrarosu KY-032:** (GND-GND, VCC-5V, OUT-D3) Senzor cu infrarosu pentru detectarea obstacolelor,​ folosit pentru a detecta prezenta unei masini la semafor (distanta reglabila prin intermediul rezistorilor sai variabili; pinul ENABLE nu a fost conectat deoarece sistemul nu dezactiveaza senzorul.+  * **Senzor Infrarosu KY-032:** (GND-GND, VCC-5V, OUT-D3) Senzor cu infrarosu pentru detectarea obstacolelor,​ folosit pentru a detecta prezenta unei masini la semafor (distanta reglabila prin intermediul rezistorilor sai variabili; pinul ENABLE nu a fost conectat deoarece sistemul nu dezactiveaza senzorul. Apeleaza o functie de intrerupere atunci cand este inregistrata o valoare LOW.
   * **LED-uri colorate:** (pinii D5-10, D12-D13) Becuri LED care reprezinta luminile unor semafoare.   * **LED-uri colorate:** (pinii D5-10, D12-D13) Becuri LED care reprezinta luminile unor semafoare.
-  * **Buton:** (pin D2, 5V, GND) Buton pentru pietoni.+  * **Buton:** (pin D2, 5V, GND) Buton pentru pietoni. Apeleaza o functie de intrerupere atunci cand este inregistrat un prag descrescator.
  
 ==== Functionare KY-032 ==== ==== Functionare KY-032 ====
Line 106: Line 106:
  
       break;       break;
-  ​...+      ​...
   }   }
 } }
Line 112: Line 112:
  
 Secventa de cod din cadrul functiei ISR. La fiecare intrerupere cauzata de Timer1, se trece in starea urmatoare si se reseteaza timer-ul. Pentru a controla timpul dintre schimbarile de culori, OCR1A primeste noi valori (precalculate,​ constante). Secventa de cod din cadrul functiei ISR. La fiecare intrerupere cauzata de Timer1, se trece in starea urmatoare si se reseteaza timer-ul. Pentru a controla timpul dintre schimbarile de culori, OCR1A primeste noi valori (precalculate,​ constante).
 +
 +==== Algoritmi si structuri utilizate ====
 +
 +Proiectul foloseste modelul automatelor cu stari si imparte instructiunile in doua categorii: instructiuni de tranzitie intre stari si instructiuni de output pe baza starilor. Prima categorie este compusa din functiile de intreruperi ISR() si inputInterrupt(),​ care gestioneaza tranzitiile intre  starile sistemului pe baza timer-ului intern sau prin folosirea butonului/​senzorului. A doua categorie este reprezentata de functia loop() care gestioneaza pinii de output si, in consecinta, semafoarele. Variabila runningState face legatura dintre aceste functii, asigurand aprinderea si stingerea corecta a becurilor LED.
 +
 +==== Calibrari ====
 +
 +  * Pentru a regla distanta maxima a senzorului, am ajustat unul dintre rezistorii reglabili, astfel incat senzorul sa ignore soseaua, dar sa inregistreze masina care asteapta la semafor.
 +  * Software: am calculat pragurile pentru timer pe baza intervalelor de timp folosite (0.5, 1, 2, 4 secunde) si am salvat valorile ca numere constante.
 +
 +==== Optimizari ====
 +
 +  * Functia de intrerupere apelata de buton si de senzor foloseste un guarding clause pentru a preveni apelarea sa cand sistemul se afla in alta stare decat cea initiala. Acest lucru asigura pastrarea ordinii starilor si prezervarea timer-ului original atunci cand si butonul, si senzorul sunt folosite.
 +  * In loc ca fiecare stare sa aiba operatiile sale in bucla loop(), functionalitatile au fost generalizate si redistribuite intre stari.
 +  * Prin folosirea de intreruperi,​ bucla principala ramane foarte usoara din punct de vedere al instructiunilor,​ intrucat tot ce se intampla aici este trimiterea de curent pe pinii asociati LED-urilor.
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +Sistemul inregistreaza atat apasarile de buton, cat si obstacolele din fata senzorului, permitand atat pietonilor, cat si masinilor care vireaza la stanga sa treaca sau sa traverseze. Timpul alocat trecerii pietonilor si a masinilor este reglabil, astfel ca sistemul poate fi usor extins la o scara mai mare.
-Care au fost rezultatele obţinute în urma realizării proiectului vostru. +
-</​note>​+
  
 ===== Concluzii ===== ===== Concluzii =====
  
-===== Download =====+<​html>​ 
 +<iframe width="​800"​ height="​450"​ 
 +        src="​https://​www.youtube.com//​embed/​iSC8W02mU-g"​ 
 +        frameborder="​0"​ 
 +        allow="​autoplay;​ encrypted-media"​ 
 +        allowfullscreen>​ 
 +</​iframe>​ 
 +</​html>​
  
-<note warning> 
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). 
  
-Fişierele se încarcă ​pe wiki folosind facilitatea **Add Images or other files**Namespace-ul în care se încarcă ​fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). **Exemplu:​** Dumitru Alin331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**. +Acest design este o evolutie a sistemului ​pe baza de buton pentru pietoni deoarece permite masinilor sa vireze la stanga si in absenta unor trecatoriEl poate fi extins si dezvoltat pentru implementari in viata de zi cu zipentru a reduce stresul si frustrarea din anumite intersectii.
-</​note>​+
  
 +Proiectul m-a ajutat sa inteleg mai bine functionarea microprocesoarelor,​ interactiunea dintre acestea si circuitele simple, dar si nivelul de planificare necesar pentru a realiza un astfel de sistem.
 +
 +===== Download =====
 +
 +{{:​pm:​prj2025:​ajipa:​badescuandreicristian.rar|}}
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +==== Bibliografie - GitHub ==== 
-Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse ​Software** şi **Resurse Hardware**+ 
-</note>+[[https://​github.com/​Erixxl/​PM-Arduino-Intersection]] 
 + 
 +==== Resurse ​==== 
 + 
 +[[https://​roboticsbackend.com/​arduino-push-button-tutorial/​]] 
 + 
 +[[https://​www.instructables.com/​Arduino-Timer-Interrupts/​]] 
 + 
 +[[https://​arduinomodules.info/​ky-032-infrared-obstacle-avoidance-sensor-module/​]] 
 + 
 +[[https://​docs.arduino.cc/​language-reference/​en/​functions/​external-interrupts/​attachInterrupt/​]] 
 + 
 +[[https://​docs.arduino.cc/​resources/​datasheets/​A000066-datasheet.pdf]] 
 + 
 +[[http://​irsensor.wizecode.com/​]] 
 + 
  
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
  
pm/prj2025/ajipa/andrei.badescu1512.1748112888.txt.gz · Last modified: 2025/05/24 21:54 by andrei.badescu1512
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0