This shows you the differences between two versions of the page.
|
pm:prj2025:ajipa:mihai_cosmin.nour [2025/05/03 17:46] mihai_cosmin.nour [Introducere] |
pm:prj2025:ajipa:mihai_cosmin.nour [2025/05/29 20:49] (current) mihai_cosmin.nour |
||
|---|---|---|---|
| Line 11: | Line 11: | ||
| Schema bloc: | Schema bloc: | ||
| - | {{pm:prj2025:ajipa:mihai_cosmin.nour:blockdiagram.png?600|Schema bloc}} | + | {{pm:prj2025:ajipa:mihai_cosmin.nour:blockdiagram.png?500|Schema bloc}} |
| + | Sistemul de control si monitorizare ale traficului are la baza o placuta de **Arduino UNO R3 (ATmega328p + ATmega16u2)** si consta intr-un ansamblu care contine: | ||
| + | * **3 LED-uri** (rosu, verde, galben): reprezinta culorile semaforului pentru masini, ciclul de funtionare se actulizeaza pe baza informatiilor primite de la senzor | ||
| + | * **Senzor HC-SR04** (cu ultrasunete): detecteaza trecerea masinilor prin emiterea si receptionarea de unde, folosite pentru determinarea distantei dintre senzor si obiect | ||
| + | * **Buton**: la apasare, duce la schimbarea mai rapida a culorii semaforului in rosu, favorizand trecerea pietonilor | ||
| + | * **Buzzer pasiv**: cand este semaforul pentru masini pe culoarea rosie va scoate un sunet semnalizand faptul ca pietonii pot sa treaca | ||
| + | * **Device** (pc/laptop): trimite cerere catre sistem si primeste date de trafic. | ||
| ===== Hardware Design ===== | ===== Hardware Design ===== | ||
| Line 20: | Line 26: | ||
| * 3x LEDs (1x rosu, 1x verde, 1x galben) | * 3x LEDs (1x rosu, 1x verde, 1x galben) | ||
| * Buton | * Buton | ||
| + | * Buzzer pasiv | ||
| + | * 3x Rezistente de 220Ω, 1x Rezistenta de 10kΩ | ||
| * Cablu USB Am la Bm | * Cablu USB Am la Bm | ||
| + | |||
| + | Schema electrica: | ||
| + | |||
| + | {{pm:prj2025:ajipa:mihai_cosmin.nour:schemaelectrica.png?500|Schema electrica}} | ||
| + | |||
| + | {{pm:prj2025:ajipa:mihai_cosmin.nour:diagramalegaturi.png?500|Diagrama legaturi}} | ||
| + | |||
| + | BOM: | ||
| + | ^ Componenta ^ Cantitate ^ Loc achizitionare ^ Datasheet ^ | ||
| + | | Arduino UNO R3 + Cablu USB Am la Bm | 1 | [[https://www.optimusdigital.ro/ro/placi-avr/4561-placa-de-dezvoltare-compatibila-cu-arduino-uno-r3-atmega328p-atmega16u2-cablu-50-cm.html|Site]] | [[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf|Datasheet]] | | ||
| + | | Senzor cu ultrasunete HC-SR04 | 1 | [[https://www.optimusdigital.ro/ro/senzori-senzori-ultrasonici/9-senzor-ultrasonic-hc-sr04-.html|Site]] | [[https://www.handsontec.com/dataspecs/HC-SR04-Ultrasonic.pdf|Datasheet]] | | ||
| + | | LED | 3 | [[https://www.emag.ro/set-componente-electronice-breadboard-830-puncte-led-uri-compatibil-arduino-si-raspberry-pi-zz00044/pd/DRXG4XYBM/|Site]] | | | ||
| + | | Buton | 1 | [[https://www.emag.ro/set-componente-electronice-breadboard-830-puncte-led-uri-compatibil-arduino-si-raspberry-pi-zz00044/pd/DRXG4XYBM/|Site]] | | | ||
| + | | Buzzer pasiv | 1 | [[https://www.emag.ro/set-componente-electronice-breadboard-830-puncte-led-uri-compatibil-arduino-si-raspberry-pi-zz00044/pd/DRXG4XYBM/|Site]] | | | ||
| + | | Rezistenta 220Ω | 3 | [[https://www.emag.ro/set-componente-electronice-breadboard-830-puncte-led-uri-compatibil-arduino-si-raspberry-pi-zz00044/pd/DRXG4XYBM/|Site]] | | | ||
| + | | Rezistenta 10kΩ | 1 | [[https://www.emag.ro/set-componente-electronice-breadboard-830-puncte-led-uri-compatibil-arduino-si-raspberry-pi-zz00044/pd/DRXG4XYBM/|Site]] | | | ||
| + | |||
| + | Descriere componente (conectare componenta-placuta): | ||
| + | * **Senzor cu ultrasunete HC-SR04**: GND-GND, Vcc-5V, Trig-D8 (output), Echo-D7 (input) (pe pinul Trig se trimite impuls => senzorul emite semnal ultrasonic => unda se intoarce si pinul Echo sta pe HIGH cat timp a durat) | ||
| + | * **LED-uri**: Rosu(+)-D13 (output), Galben(+)-D12 (output), Verde(+)-D11 (output) (pin pe HIGH => se aprinde LED); (-)-R(220Ω)-GND (se pune rezistenta intre masa si catod pentru ca led-urile functioneaza cu 2-3V) | ||
| + | * **Buton**: Buton(1)-D2 (input) (pin pe HIGH => buton apasat); Buton(3)-R(10kΩ)-GND (rezistenta de pull-down) | ||
| + | * **Buzzer pasiv**: Buzzer(+)-D3 (pin analogic pentru folosirea PWM pentru generare sunet); Buzzer(-)-GND | ||
| + | |||
| + | {{pm:prj2025:ajipa:mihai_cosmin.nour:hardwareleds.jpg?500|Hardware}} | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| + | Mediu de dezvoltare: Visual Studio Code cu PlatformIO | ||
| - | <note tip> | + | Biblioteci: Arduino.h - contine functionalitatile de baza pentru lucrul cu platforma Arduino |
| - | Descrierea codului aplicaţiei (firmware): | + | |
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
| - | * (etapa 3) surse şi funcţii implementate | + | |
| - | </note> | + | |
| + | Element de noutate: integrare senzor de distanta in semafor si ajustarea dinamica a timpului in care semaforul sta verde pentru masini in functie de trafic | ||
| + | |||
| + | Functionalitati utilizate: GPIO, USART, intreruperi, timere, PWM | ||
| + | |||
| + | Algoritm: | ||
| + | * cu ajutorul timer-elor se masoara numarul de secunde ce au trecut de la pornirea sistemului | ||
| + | * la setup se initializeaza componentele si USART | ||
| + | * la fiecare iteratie: | ||
| + | * se verifica daca s-a primit un caracter pe interfata seriala (este citit) si se executa comanda daca este cazul | ||
| + | * se verifica daca a trecut timpul pentru starea curenta a semaforului (daca da, se trece la urmatoare) | ||
| + | * se verifica daca se apasa butonul si se grabeste trecerea pe rosu a semaforului | ||
| + | * se determina distanta perceputa de senzor si, daca este sub un anumit prag, se considera masina detectata | ||
| + | * starile semaforului: | ||
| + | * lumina verde - se aprinde led-ul verde si se opreste buzzer-ul (se calculeaza noul timp in care semaforul va sta pe verde daca a trecut timpul alocat intervalului) | ||
| + | * lumina intermitenta verde - palpaie led-ul verde | ||
| + | * lumina galbena - se aprinde led-ul galben | ||
| + | * lumina rosie - se aprinde led-ul rosu si se porneste buzzer-ul | ||
| + | * comenzi posibile: | ||
| + | * download: afiseaza date de trafic, ce includ: numarul de masini ce au trecut de la ultima descarcare, scor pentru volumul de trafic, scor pentru trend-ul traficului si scor total pentru trafic | ||
| + | * debug: afiseaza in plus si numarul de masini din intervalul curent, cel din intervalul trecut si timpul curent in care semaforul sta pe verde | ||
| + | * showcase: alege un numar aleator pentru numarul de masini ce au trecut in intervalul curent, se afiseaza noile date si se reseteaza semaforul | ||
| + | |||
| + | Ajustarea dinamica a semaforului pe baza traficului: | ||
| + | |||
| + | O data la 10 min, in momentul in care semaforul trece pe verde, timpul in care isi va pastra aceasta culoare pentru intervalul curent se calculeaza folosindu-se o formula ce cuantifica starea traficului in scoruri, folosite apoi pentru actualizarea timpului si descarcarea lor. | ||
| + | |||
| + | Valori utilizate: | ||
| + | <code> | ||
| + | #define STANDARD_GREEN_TIME 30 | ||
| + | #define MAX_GREEN_TIME 60 | ||
| + | #define INTERVAL_TIME 600 | ||
| + | |||
| + | #define TRAFFIC_WEIGHT 0.7 | ||
| + | #define TREND_WEIGHT 0.3 | ||
| + | #define MAX_CARS_PER_INTERVAL 300 | ||
| + | </code> | ||
| + | |||
| + | Scor pentru volumul de trafic: | ||
| + | <code> | ||
| + | traffic_vol = min(1.0, (float)interval_car_count / MAX_CARS_PER_INTERVAL); | ||
| + | </code> | ||
| + | Se determina o valoare intre 0 si 1 care sa reflecte cantitatea de trafic raportata la un numar maxim de masini asteptat pe interval. | ||
| + | |||
| + | Scor pentru trend-ul traficului: | ||
| + | <code> | ||
| + | traffic_trend = (float)(interval_car_count - last_interval_car_count) / MAX_CARS_PER_INTERVAL; | ||
| + | </code> | ||
| + | Se determina o valoare intre -1 si 1 care sa reflecte tendinta traficului de a-si schimba intensitatea (o valoare negativa arata o diminuare, in timp ce o valoare pozitiva arata crestere). | ||
| + | |||
| + | Scor total pentru trafic: | ||
| + | <code> | ||
| + | float tmp_traffic_score = traffic_vol * TRAFFIC_WEIGHT + traffic_trend * TREND_WEIGHT; | ||
| + | traffic_score = (float)1 / (1 + exp(-6 * (tmp_traffic_score - 0.5))); | ||
| + | </code> | ||
| + | Se determina un scor initial ca o combinatie liniara intre scorurile anterioare, aplicandu-se apoi o sigmoida care sa aduca rezultatul intre 0 si 1 si in acelasi timp sa reflecte mai bine starea traficului si schimbarea ce trebuie realizata. | ||
| + | |||
| + | Noul timp pentru culoarea verde: | ||
| + | <code> | ||
| + | green_light_time = STANDARD_GREEN_TIME + traffic_score * (MAX_GREEN_TIME - STANDARD_GREEN_TIME); | ||
| + | </code> | ||
| + | Se ajusteaza timpul pentru culoarea verde, apropiindu-se mai mult de timpul de baza sau de timpul maxim acceptat in functie de scorul de trafic determinat anterior. | ||
| + | |||
| + | Sigmoida folosita: | ||
| + | \( \sigma(x) = \frac{1}{1 + e^{k * (x - x0)}} \) | ||
| + | , unde x0 este centrul functiei (am ales x0 = 0.5 pentru a fi fix la mijlocul intervalului [0, 1]) si k descrie cat de abrupt este graficul functiei sau cat de sensibila este la modificarea intrarii (dupa mai multe incercari, am considerat k = -6 o valoare buna pentru determinarea scorului) | ||
| + | |||
| + | Calibrari: | ||
| + | * buton - debouncer | ||
| + | * senzor - adaugarea unui delay si a unor praguri de distanta pentru inregistrarea corecta a numarului de masini ce trec | ||
| + | |||
| + | <html> | ||
| + | <iframe width="800" height="450" | ||
| + | src="https://www.youtube.com//embed/AU7itOYVmPw" | ||
| + | frameborder="0" | ||
| + | allow="autoplay; encrypted-media" | ||
| + | allowfullscreen> | ||
| + | </iframe> | ||
| + | </html> | ||
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| - | <note tip> | + | {{pm:prj2025:ajipa:mihai_cosmin.nour:test1.png?200|Test 1}} |
| - | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{pm:prj2025:ajipa:mihai_cosmin.nour:test2.png?200|Test 2}} |
| - | </note> | + | |
| - | ===== Concluzii ===== | + | Din cele doua rulari consecutive ale comenzii de showcase se pot remarca datele de trafic si timpul de verde ajustat pentru valori aleatorii ale numarului de masini ce au trecut in intervalul curent, astfel realizandu-se o simulare a functionarii normale. |
| - | ===== Download ===== | + | Al doilea test foloseste un numar mai mic de masini ceea ce duce la scoruri mai mici de trafic si mai apoi la un timp pentru verde mai mic decat in cazul primului test. |
| - | <note warning> | + | ===== Concluzii ===== |
| - | 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 Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | Consider ca proiectul arata posibilitatea utilizarii unei placute Arduino UNO pentru aducerea unei imbunatatiri asupra gestionarii traficului pentru un semafor obisnuit, punand in evidenta si notiunile invatate si aplicate la laborator. |
| - | </note> | + | |
| - | ===== Jurnal ===== | + | Proiectul presupune, in acest moment, doar un prototip ce demonstreaza o modalitate de control si gestionare a traficului mai eficienta, existand posibilitatea de continuare a ideii cu carcasa si componente hardware rezistente la statul in mediul exterior, cu mai multi senzori sau de precizie mai buna. |
| - | <note tip> | + | ===== Cod sursa si resurse ===== |
| - | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
| - | </note> | + | GitHub: https://github.com/Mihai-Cosmin15/Traffic-Control-and-Monitoring-System |
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | Resurse hardware: |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
| - | </note> | + | [[https://docs.arduino.cc/resources/datasheets/A000066-datasheet.pdf|Datasheet Arduino UNO]] |
| + | |||
| + | [[https://www.handsontec.com/dataspecs/HC-SR04-Ultrasonic.pdf|Datasheet Senzor HC-SR04]] | ||
| + | |||
| + | Resurse software: | ||
| + | |||
| + | [[https://ocw.cs.pub.ro/courses/pm | Cursuri si laboratoare]] | ||
| + | |||
| + | [[https://en.wikipedia.org/wiki/Sigmoid_function | Sigmoid function]] | ||
| + | |||
| + | Extragere pdf: | ||
| <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> | ||