Traffic control and monitoring system

Introducere

Sistemul de control si monitorizare ale traficului este alcatuit dintr-un semafor cu buton si un senzor care detecteaza trecerea masinilor. Sistemul isi actualizeaza ciclul de functionare pe baza datelor de trafic pe care le inregistreaza si apoi trimite la un device extern (pc/laptop).

Scopul acestui sistem este de a ajuta la fluidizarea traficului pe soselele principale in zonele cu treceri de pietoni semaforizate unde variaza semnificativ fluxul masinilor in diverse intervale de timp. De asemenea, permite obtinerea de informatii relevante cu privire la trafic pentru institutiile de interes (care le pot folosi, de exemplu, pentru statistici sau determinarea zonelor cu poluare ridicata).

Ideea mi-a venit observand problema din Bucuresti referitoare la intarzierile din trafic. M-am gandit sa aduc o imbunatatire prin scurtarea timpilor de asteptare la semafor in momentele de trafic intens.

Descriere generală

Schema bloc:

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

Componente utilizate:

  • Arduino UNO (ATmega328P)
  • Senzor cu ultrasunete HC-SR04
  • 3x LEDs (1x rosu, 1x verde, 1x galben)
  • Buton
  • Buzzer pasiv
  • 3x Rezistente de 220Ω, 1x Rezistenta de 10kΩ
  • Cablu USB Am la Bm

Schema electrica:

Schema electrica

Diagrama legaturi

BOM:

Componenta Cantitate Loc achizitionare Datasheet
Arduino UNO R3 + Cablu USB Am la Bm 1 Site Datasheet
Senzor cu ultrasunete HC-SR04 1 Site Datasheet
LED 3 Site
Buton 1 Site
Buzzer pasiv 1 Site
Rezistenta 220Ω 3 Site
Rezistenta 10kΩ 1 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

Hardware

Software Design

Mediu de dezvoltare: Visual Studio Code cu PlatformIO

Biblioteci: Arduino.h - contine functionalitatile de baza pentru lucrul cu platforma Arduino

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:

#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

Scor pentru volumul de trafic:

traffic_vol = min(1.0, (float)interval_car_count / MAX_CARS_PER_INTERVAL);

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:

traffic_trend = (float)(interval_car_count - last_interval_car_count) / MAX_CARS_PER_INTERVAL;

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:

float tmp_traffic_score = traffic_vol * TRAFFIC_WEIGHT + traffic_trend * TREND_WEIGHT;
traffic_score = (float)1 / (1 + exp(-6 * (tmp_traffic_score - 0.5)));

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:

green_light_time = STANDARD_GREEN_TIME + traffic_score * (MAX_GREEN_TIME - STANDARD_GREEN_TIME);

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

Rezultate Obţinute

Test 1 Test 2

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.

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.

Concluzii

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.

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.

Cod sursa si resurse

Bibliografie/Resurse

pm/prj2025/ajipa/mihai_cosmin.nour.txt · Last modified: 2025/05/29 20:49 by mihai_cosmin.nour
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