Table of Contents

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:

Hardware Design

Componente utilizate:

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):

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:

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:

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

GitHub: https://github.com/Mihai-Cosmin15/Traffic-Control-and-Monitoring-System

Bibliografie/Resurse

Resurse hardware:

Datasheet Arduino UNO

Datasheet Senzor HC-SR04

Resurse software:

Cursuri si laboratoare

Sigmoid function

Extragere pdf:

Export to PDF