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.
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:
Componente utilizate:
Schema electrica:
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):
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:
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:
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.
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.
Resurse hardware:
Resurse software:
Extragere pdf: