2017UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI FACULTATEA TRANSPORTURI Departamentul Telecomenzi și Electronică în Transporturi SISTEME MODERNE DE… [305254]

UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI

FACULTATEA TRANSPORTURI

Departamentul Telecomenzi și Electronică în Transporturi

PROIECT DE DIPLOMĂ

București

2017UNIVERSITATEA „POLITEHNICA” DIN BUCUREȘTI

FACULTATEA TRANSPORTURI

Departamentul Telecomenzi și Electronică în Transporturi

SISTEME MODERNE DE DIRIJARE ȘI MONITORIZARE A INTERSECȚIILOR RUTIERE

București

2017

Cuprins

Capitolul 1. Introducere 1

1.1 Descrierea temei de proiect 1

1.2 Istoric 1

1.3 Evoluție 4

Capitolul 2. Stadiu tehnologic actual 8

2.1 Generalități 8

2.2 A.T.C. 10

2.3 Senzori vehicule 13

2.4 Determinarea vitezei 17

2.5 Semafoare 19

2.6 Comunicație 25

2.7 Soluții moderne de integrare la o soluție centralizată 26

Capitolul 3. Realizarea practică 29

3.1 Proiectare hardware 29

3.1.1 Generalități 29

3.1.2 Schema bloc 33

3.1.3 Schema electronică 34

3.1.4 Alegerea și descrierea componentelor 35

 Microcontroler 35

 Componente discrete 40

3.2 Comunicație 41

3.3 Proiectare tehnologică 44

3.3.1 Generalități 44

3.3.2 Diagrama logică 47

3.3.3 Prezentarea programului software 54

Capitolul 4. Fiabilitate 59

4.1 Generalități 59

4.2 Calcul de fiabilitate 61

Capitolul 5. Concluzii 66

Dicționar explicativ de termeni și abrevieri 67

Bibliografie 68

Anexa 1 – [anonimizat]25CM-3MM 69

Anexa 2 – Pagină de catalog sursă alimentare T9060DV 70

Anexa 3 – Modificări aduse sistemului de operare 71

Anexa 4 – Cod sursă program python 72

Anexa 5 – Cod sursă pagini web 82

Introducere

Descrierea temei de proiect

În acest proiect se urmărește realizarea unui post local de comandă dintr-o intersecție și de asemenea generarea și stocarea a diverselor statistici bazate pe datele citite de doi senzori plasați înainte de semafor la un metru unul față de altul pe sensul de intrare în intersecție de pe fiecare stradă în parte. [anonimizat] S.B.C. cu microcontroler încorporat care să ofere posibilitatea de a urmări în timp real starea intersecției și a vedea statisticile atât local cât și de la distanță manual sau automat de către un post central de control și dirijare.

Istoric

Factorul circulație a [anonimizat], [anonimizat]-a găsit posibilitatea de desfășurare și valorificare.

Evoluția în timp a sistemelor de transport s-a realizat ca răspuns la cerințele societății. [anonimizat]-[anonimizat], logistic cât și infrastructural. Sistemele de dirijare a traficului au evoluat astfel pe parcursul a peste un secol.

Dacă în urmă cu mai bine de 100 [anonimizat], motoare din cele mai variate asigură deplasarea cu viteze mari a unei game tot mai largi și mai variate de vehicule.

[anonimizat] ”circulație” s-a [anonimizat]-a inclus, cât și prin natura și caracteristicile mijloacelor cu care aceste deplasări se rezolvă.

Astfel, [anonimizat], [anonimizat], introducerea unor reguli de circulație foarte complexe și foarte severe și totodată echiparea tehnică corespunzătoare, la intersecții mai ales, toate acestea au devenit cerințe noi la începutul secolului trecut.

În 1908 se stabilesc, în cadrul unei conferințe internaționale, primele reguli mondiale pentru semnalizarea pe drumuri.

Primul semafor electric, inventat de James Hodge, a fost instalat la data de 5 august 1914 in Cleveland, Ohio. Acesta era prevăzut și cu o sonerie electrică ce se declanșa la schimbarea culorii. Sistemul era compus din patru perechi de lămpi montate la colțurile străzilor, ca și în prezent pentru o intersecție simplă în cruce. În fiecare colț era montată câte o lampă pentru STOP și o lampă pentru LIBER. Lămpile erau împerecheate două câte două astfel încât să nu existe situații conflictuale la circulația pe direcțiile ortogonale, perpendiculare intre ele. Comanda se dădea manual dintr-un post amplasat într-unul din colțuri.

Semaforul automat, așa cum este cunoscut astăzi, a fost introdus în 1926. Evoluția acestuia este remarcabilă, ajungându-se astăzi la semafoare inteligente. De fapt, acestea primesc informații de la camere video și senzori de prezență încastrați în carosabil, respectiv de la senzori de gaze poluante și, pe baza unui program, dirijează traficul auto în mod automat.

Semaforizarea intersecțiilor cu trafic numeros a devenit o necesitate pentru a se asigura fluidizarea traficului și pentru a se evita blocajele din trafic și alte evenimente rutiere neprevăzute.

Multe orașe s-au dezvoltat și au crescut în dimensiuni într-o perioadă foarte scurtă, lipsindu-le însă infrastructura de drumuri necesară unui trafic modern, precum și fondurile necesare implementării acesteia. Acest fapt conduce la folosirea ineficientă a rețelei de drumuri, de multe ori sub forma unor drumuri întinse, cu multe semafoare, adesea foarte apropiate intre ele. Efectul opririi vehiculelor într-o intersecție semnalizată este formarea unei cozi în spatele liniei de oprire. Când aceasta coadă este eliberată de culoarea verde a semaforului, ea se va descărca la capacitatea maxima (fluxul de saturație) și va înainta sub forma unui pluton. Dacă atunci când plutonul se apropie de o alta intersecție semaforizată, timpul de sosire coincide cu începutul timpului de verde, vehiculele nu au nici o întârziere la trecerea prin intersecție. Dacă plutonul trebuie să oprească, coada de așteptare se mărește și poate depăși capacitatea drumului crescând până provoacă blocaj și în intersecția anterioară.[1]

Teoriile fluxului de trafic încearcă să descrie într-un mod precis, matematic, interacțiunile dintre mijloacele de transport și operatorii acestora (componentele mobile) pe de o parte și infrastructură pe de altă parte (componenta fixă). Această din urmă componentă constă din sistemul de străzi și toate elementele operaționale ale acestora: dispozitive de control, semnalizare, marcaje etc. Totodată aceste teorii constituie restricții indispensabile pentru toate modelele și instrumentele utilizate în proiectarea și funcționarea străzilor și autostrăzilor. Studiul științific al fluxului de trafic a debutat în anii 1930 cu aplicarea teoriei probabilității pentru descrierea traficului rutier (Adams, 1936) și studiile de pionierat conduse de Bruce D. Greenshields la Yale Bureau of Highway Traffic; studiul modelelor referitoare la viteză și volum (Greenshields, 1935) și cercetarea performanțelor traficului în intersecții (Greenshields, 1947). Odată cu creșterea uriașă a utilizării automobilelor și expansiunea sistemului de autostrăzi, s-a înregistrat o creștere a preocupărilor pentru studierea caracteristicilor traficului și dezvoltarea teoriilor fluxului de trafic. Anii '50 au înregistrat progrese în plan teoretic bazate pe o varietate de abordări, cum ar fi "vehicul cu vehicul" (car-following), teoria undei de trafic (analogică cu hidrodinamica) și teoria așteptării. În această perioadă relevante sunt lucrările semnate de Reuschel (1950), Wardrop (1952), Pipes (1953), Lighthill și Whitham (1955), Newell (1955), Webster (1957), Edie și Foote (1958) și alte lucrări, mai recente, ale lui Herman (1992).

După 1959, teoria fluxului de trafic a început să fie prezentată la diferite simpozioane internaționale de profil. Primul dintre acestea a fost susținut de Laboratoarele de Cercetare ale General Motors în Warren, Michigan în decembrie 1959. Acesta a fost primul pas care a deschis seria simpozioanelor trienale asupra teoriei fluxului de trafic și a transporturilor, în general. Al 12-lea simpozion a avut loc în Berkeley, California în 1993. Materialele dezbaterilor din cadrul acestei manifestări reprezintă mărturii valoroase referitoare la creșterea spectaculoasă în înțelegerea și tratarea proceselor fluxului de trafic în ultimii 40 de ani. De la această dată numeroase alte simpozioane și conferințe de specialitate au început să se desfășoare regulat și cu o mare varietate de teme referitoare la trafic. Domeniul teoriei fluxului de trafic și transportului a devenit prea cuprinzător astfel încât să poată fi acoperit de un singur tip de manifestare științifică.

Fundamentele teoriei fluxului de trafic, după ce au fost foarte bine înțelese și facil analizate cu ajutorul tehnologiei computerizate, au devenit mai importante decât oricând. Acestea formează fundamentul tuturor teoriilor, tehnicilor și procedurilor care au început să fie aplicate în proiectarea, funcționarea și dezvoltarea sistemelor avansate de transport. În acest context, se poate spune că punctele de interes în teoria traficului sunt următoarele:

intensitatea fluxului (vehicule pe unitatea de timp);

viteza (distanța pe unitatea de timp);

timpul de transport pe o lungime de drum cunoscută (sau uneori inversul vitezei, “încetineala”);

gradul de ocupare (ponderea timpului în care un punct al drumului este ocupat de vehicule);

densitatea (nr. de vehicule pe unitatea de distanță);

timpul de înaintare între vehicule (timp pe vehicul);

distanțarea sau spațiul de înaintare între vehicule (distanța pe vehicul);

concentrarea (măsurată prin densitate sau gradul de ocupare).

Tehnologiile de măsurare pentru obținerea datelor de trafic au schimbat, pe parcursul ultimilor 60 de ani, interesul asupra fluxului de trafic, cu precădere în ultimii 40 de ani, când s-a construit un număr mare de drumuri. Aceste tehnologii sunt, și la această oră, în schimbare și completare.

Situația actuală a modelelor matematice referitoare la relația viteză-flux-concentrație este în continuă evoluție. Modelele care au dominat analizele din transporturi în ultimii 30 de ani sunt incompatibile cu datele actuale ce pot fi obținute și cu descrierile acceptate în prezent ale curbelor viteză-flux, dar aceste modele nu au fost, încă, total înlocuite. Unul din motive este acela că mulți teoreticieni continuă să lucreze cu termenul de densitate, pe când datele empirice sunt în termeni de "ocupare”. Relația între aceste două măsuri ale concentrației este suficient de firavă încât eforturile de a le transforma din una în alta au ca rezultat mai degrabă o imagine neclară. Altă problemă a fost notată de Duncan (1976, 1979): transformarea variabilelor, corespondența ecuațiilor și transformarea ecuațiilor înapoi la variabilele originale poate duce la rezultate părtinitoare, și este foarte sensibilă la cele mai mici schimbări în forma inițială a curbei.

Recunoașterea relației tridimensionale este, deasemenea, importantă pentru îmbunătățirea înțelegerii comportamentului fluxului de trafic. Este, deci, important să se facă din ce în ce mai mult uz de aceste seturi de date, în care toate cele trei variabile au fost măsurate și, în acest caz, estimarea nu va mai fi necesară, și concomitent, apelarea la practicieni (pentru a fi siguri că există suficiente seturi de date pentru care cele trei variabile au fost măsurate).

Modelele de la mijlocul anilor 60 (și mai înainte) nu au realizat măsurarea datelor disponibile; nu este clar dacă noile modele cum ar fi teoria catastrofelor vor avea în ultimă instanță mai mult succes.

În ciuda acestor precauții, este foarte important să notăm că s-au făcut progrese semnificative în înțelegerea comportamentului fluxului de trafic începând cu publicarea în 1975 a ultimului Raport Specal TRB asupra Teoriei Fluxului de Trafic (Gerlough și Huber). De exemplu, relația viteză-flux este semnificativ diferită de cea publicată în 1965 în Highway Capacity Manual care a fost acceptată încă din 1975. Recunoașterea faptului că există trei tipuri distincte de operații va afecta analizele viitoare ale comportamentului fluxului de trafic.

Odată cu apariția a Highway Capacity Manual în 1985 a crescut interesul cercetării modelelor fluxului de trafic, care au generat diferite moduri de înțelegere a desfășurării traficului, în special pe autostrăzi.

Evoluție

Sistemul inteligent de transport poate fi definit drept o colecție integrată de componente concepute și realizate prin utilizarea de tehnologii avansate din domeniul electronicii, comunicațiilor și informației care sprijină managementul proceselor de transport și au ca țintă creșterea eficienței și siguranței transporturilor.

Strategia și politica SUA:

Departamentul de Transport al SUA definește ITS ca fiind următorul pas în evoluția întregului sistem de transport atât la nivel național, cât și zonal și internațional. Pe măsură ce tehnologiile informației și comunicațiilor și dezvoltările din domeniul electronicii continuă să revoluționeze toate aspectele de zi cu zi ale vieții moderne a omenirii, de la activitatea de birou la cea de educație, tot așa ele sunt aplicate în rețeaua de transport.

Se definește, pentru viitor, de către US Department of Transport și organizația ”ITS America”, conceptul de arhitectură care este un cadru de lucru, un mod de ghidare asupra lumii transporturilor și gestiunii informațiilor și este structurată pe trei niveluri: transport, comunicații, instituțional.

Nivelul transport include infrastructura fizică de transport, agenții economici implicați direct sau indirect în transport, glosarul terminologic asociat, vehiculele, conținutul transporturilor și centrele de gestiune a informației.

Nivelul comunicații include infrastructura de comunicații care conectează elementele nivelului transport, tipurile de informații și comunicații necesare, modul de partajare și de utilizare a datelor de către entitățile fizice și tipurile de date necesare pentru a facilita partajarea  datelor.

Tipurile de sisteme de comunicare promovate sunt: comunicarea datelor prin linie telefonică, fax, modem, video, transmisia prin radio pe arie largă, transmisia fără fir în două direcții pe arie largă, comunicarea dedicată de arie redusă și comunicarea între vehicule.

Nivelul instituțional include infrastructura socioeconomică a organizațiilor implicate, direct sau indirect în activitatea de transport, rolurile și responsabilitățile organizațiilor.

În definirea arhitecturii sunt considerate următoarele obiective majore:

informarea, în timp real realizată prin colectarea, stocarea, prelucrarea, partajarea, distribuirea informațiilor referitoare la transportul persoanelor, mărfurilor, deciziile privind călătoria și siguranța transportului și eficiența infrastructurii de transport;

oferirea de informații în timp real și de informații statistice pentru cunoașterea modului cum lucrează căile de transport;

crearea cadrului general de lucru pentru toate procesele de management a informației.

Programul de definire a arhitecturii face referire la cerințele utilizatorilor, scopurile urmărite, servicii pentru utilizator, arhitectura sistemului, informațiile cerute, componentele fizice care implementează funcțiile și care realizează schimbul informațiilor, aspectele practice, restricțiile, analizele de cost, dezvoltările (planul de acțiune, recomandările, standardele suport), precum și educarea și instruirea utilizatorilor și a personalului care asigură funcționarea sistemelor de transport.

Strategia și politica Uniunii Europene

Direcțiile de acțiune la nivel european referitoare la sistemele inteligente de transport se cristalizează în cadrul Comisiei Europene în Direcția Tehnologiei pentru Societatea Informațională – Sisteme și servicii pentru transport, prin proiecte europene de cercetare-dezvoltare în cadrul organizațiilor naționale ITS din fiecare țară și în cadrul organizației ERTICO. Aceasta consideră că sistemele inteligente de transport sunt un ”mariaj” între tehnologiile informației și comunicațiilor cu vehiculele și rețelele de transport, care fac să se miște, într-un mod ”inteligent” persoanele și mărfurile, deoarece ele furnizează cunoștințe suplimentare călătorilor și operatorilor, evitând astfel blocările de trafic și coliziunile.

Direcțiile în care se va acționa la nivel european referitor la sistemele inteligente de transport sunt definirea clară a responsabilităților administrative, liberalizarea pieței de trasport, standardizarea arhitecturii sistemelor inteligente de transport, analiza aspectelor legate de proprietatea informațiilor și de schimbul de informații între furnizorii de informații și convergența celor trei tehnologii-cheie și anume prelucrarea computerizată universală, comunicarea universală și interfețele inteligente prietenoase cu utilizatorul.

Prin realizarea de sisteme inteligente de transport mai rapide și mai eficiente se dorește ca țările din Europa să facă față provocării aduse de creșterea traficului interregional dar și național și urban, în marile orașe.[3]

Studii de caz

În cele ce urmează se vor prezenta principalele sisteme experimentate în lume în cazul transportului urban.

Orașul Chicago dispune de un sistem al firmei Motorola extensibil până la 3300 de autobuze și care, pentru localizarea lor este alcătuit din:

balize active, așezate pe traseu aflate la distanța de 1,6-2,4 km unele de altele, constituite din mici emițătoare (bătaia maximă 100 km) care emit continuu un cod de identificare a punctului din traseu;

pe vehicul o instalație activă care memorează adresa ultimei balize prin dreptul căreia a trecut, precum și timpul scurs și care poate transmite prin radio datele înmagazinate la comanda de integrare a postului central.

Centralizarea informației se face de către postul central prin interogarea ciclică a fiecărui autobuz (330 autobuze în 2 min) utilizându-se benzile 453, 225-458, 575 MHz, cu modulație în frecvență. Două canale duplex (4 frecvențe) sunt utilizate pentru transmisia de date și 6 canale pentru radiotelefonie cu apel selectiv. Prelucrarea și afișarea informației se face de către un calculator central, care compară tot timpul poziția reală a autobuzului cu cea programată.

La Londra sunt în experimentare două sisteme: sistemul BESI și sistemul Marconi.

Sistemul BESI cuprinde dispozitive active fixe de sesizare a trecerii vehiculului și funcționează pe baza principiului optic. Centralizarea informației se face prin cabluri telefonice, fiecare post fix fiind ciclic interogat de către dispozitivul central. Postul central afișează poziția vehiculului între două sesizoare pe un panou matrice luminos. reglarea circulației urmează să se facă prin capetele de linie. La postul central, informația poate fi prelucrată de un minicalculator, urmând să se dea dispecerului elemente suplimentare pentru luarea deciziei.

Sistemul Marconi, extensibil pentru 1500 de autobuze, este caracterizat de faptul că poziția vehiculului în traseu se face în mod continuu, pe baza înregistrării numărului de kilometri rulați de la capătul liniei, deci exclusiv pe baza unei instalații active aflate pe autobuz, dotată cu un emițător radio care lucrează pe 107 MHz. Postul central interoghează ciclic pe frecvența de 140 MHz fiecare autobuz. Pentru 1500 de autobuze ciclul de interogare este de 150 s ( la fiecare 550 m). Reglarea circulației pe baza analizei informației primite se face prin transmiterea de ordine la capetele de linie sau conducătorilor de vehicule prin radiofonie, prin același canal ca și cel pentru transmiterea de date.

La Paris, sistemul experimental SECAMA, extensibil până la 200 de vehicule, prezintă unele particularități față de sistemele descrise anterior și anume:

poziția vehiculelor este determinată prin rulajul efectuat de la cap, corectat însă în stații prin comanda deschiderii ușilor (dublat de un test de verosimilitate);

centralizarea se face prin canale radio, prin interogare ciclică la 90 s (cca 500 m).

La Zurich s-a experimentat pe 500 de vehicule sistemul Hani-Prolectron ( extensibil până la 1200 de vehicule). Caracteristic pentru acest sistem este transmiterea bilaterală în cod între dispecer și conducător de vehicul a unor informații și dispoziții, ceea ce reduce traficul pe canalele de transmisie.

Stadiu tehnologic actual

Generalități

Creșterea accentuată a traficului urban din ultimii ani  a determinat necesitatea reorganizării și monitorizării intersecțiilor ceea ce presupune investiții în infrastructură și găsirea unor soluții inteligente pentru fluidizarea traficului în funcție de intervalele orare și numărul de autovehicule.

Creșterea continuă a parcului de autovehicule, a celor care tranzitează Municipiul București și a indicelui de mobilitate a parcului existent au determinat modificări majore în desfășurarea traficului rutier în sensul creșterii timpului de așteptare în intersecții, scăderea fluxului de autovehicule și chiar apariția ambuteiajelor.

S-a considerat necesar să se realizeze acest proiect pentru a îmbunătăți condițiile de trafic în intersecțiile aglomerate. Aceste aglomerări pun în evidență faptul că se tinde spre atingerea limitei de capacitate a rețelei influențând negativ și calitatea infrastructurii și calitatea deplasării participanților la trafic.

Se impune, pe lângă proiectarea și realizarea de elemente noi de infrastructură, transformarea vechiului sistem al rețelei de circulație într-un nou sistem eficient corespunzător orașelor aflate în plină dezvoltare economică, unde activitatea administrativă, politico-socială, culturală și turistică sunt în continuă expansiune.

Sistemele actuale de control și reglare a circulației în intersecții sunt elemente indisponibile unei bune gestionări a traficului în aglomerări urbane. Asflel a apărut conceptul de sistem de transport inteligent (ITS) care utilizează informația, comunicațiile și tehnologiile de control pentru a îmbunătăți operarea rețelelor de transport.

ITS reprezintă o gamă largă și diversă de tehnologii care, aplicată sistemelor actuale de transport, poate ajuta la creșterea siguranței, reducerea congestiilor de trafic, creșterea mobilității, minimizarea impactului de mediu, reducerea consumului de energie și creșterea productivității economice.

Tehnologiile ITS sunt variate și includ:

prelucrarea informațiilor;

comunicații;

control și electronică.

ITS reprezintă rezultatul aplicării tehnologiilor avansate la sisteme și metode de transport pentru eficientizarea, creșterea confortului și siguranței transportului pe căile rutiere, feroviare, navigabile interioare, aeroporturi, porturi și legăturilor dintre aceste tipuri de transport diferite.

Avantajele sistemului “Intelligent Transport System”:

fluidizarea traficului printr-o îmbunătățire a condițiilor de trafic cu aproximativ 15%;

îmbunătățirea serviciilor RATB prin respectarea unei programări a sosirii în și plecării vehiculelor din stații;

semnalizarea instantanee a echipamentelor defecte din intersecții și posibilitatea intervenției operative pentru remedierea defectelor;

îmbunătățirea serviciilor vehiculelor de intervenție – Poliție, Ambulanță, Pompieri.

Toate aceste facilități se traduc printr-un confort sporit pentru cetățean, fie el pieton sau conducător auto.

La nivel tehnologic, principalul avantaj oferit de noul sistem de management al traficului îl constituie modul de funcționare adaptiv al componentelor de semaforizare, așa-numitul regim de funcționare inteligent.

Modul de funcționare adaptiv constă în ajustarea timpilor de semaforizare din intersecții la valorile de trafic din fiecare moment. La nivelul fiecărei intersecții sunt instalați detectori de trafic care furnizează informațiile necesare sistemului.

Un sistem de reglementare a traficului pentru o intersecție conține următoarele elemente:

Echipamente de achiziție a datelor privitoare la trafic. În această categorie intră senzorii de tip bandă inductivă având diferite forme și dimensiuni și care se amplasează sub calea de acces în intersecție. În cazuri mai speciale, se utilizează detectoare radar sau cu raze infraroșii care prezintă dezavantajul că pot fi perturbate în cazul precipitațiilor abundente. Toate aceste sisteme dispun și de un detector la care se cuplează senzorul și care emite semnalul necesar către tabloul de comandă.

Echipamente de semnalizare luminoasă care sunt montate sub formă de baterii luminoase colorate ce se adresează diferitelor categorii de participanți la traficul rutier. Pe lângă bateriile principale mai există baterii repetitoare de semnal pentru repetarea în profunzime a semnalizării pentru a fi perceput de întregul grup de participanți în trafic.

Tabloul de comandă sau controllerul de trafic, care este amplasat în proximitatea intersecțiilor și care recepționează semnalele de la detectoarele de trafic, aplică planul de semnalizare și comandă bateriile de semnalizare potrivit programelor implementate. Planul de semnalizare este un ansamblu de programe care asigură elaborarea soluțiilor pentru comanda optimă a semafoarelor, în raport cu fluctuațiile de trafic.

În cazul unei intersecții independente, se pot aplica programe de reglare la intervale fixe (sistemele ce se bazează pe o automatizare clasică), sau programe de reglare adaptivă care țin seama de fluctuațiile momentane ale traficului rezultate din măsurători. Reglarea adaptivă aplică algoritmi de programare aciclică sau ciclică, testați și verificați ca având rezultate optime pentru anumiți parametri de trafic orar sau zilnic.

Intersecțiile unui tronson rutier, care funcționează în regim coordonat, beneficiază de un nivel de microreglare care ține seama de parametrii de programare ai tronsonului rutier, iar, în cazul unei rețele, coordonarea în ansamblu a traficului este încredințată unui nivel de macroreglare.

Sistemele moderne adaptive includ echipamente de calcul capabile să susțină sistemele de programare prezentate, sisteme care sunt rezultatul unor importante etape pregătitoare de simulare și testare, aplicate fiecărei intersecții sau fiecărui sistem de trafic rutier având în vedere parametrii specifici ai acestora.

A.T.C.

Un microcontroler este un sistem autonom cu periferice, memorie și un procesor care poate fi folosit ca sistem încorporat. Cele mai multe microcontrolere programabile care sunt utilizate astăzi sunt încorporate în alte produse de consum sau mașini, inclusiv telefoane, periferice, automobile și aparate de uz casnic pentru sisteme informatice. Din acest motiv, un alt nume pentru un microcontroler este "controler încorporat". Unele sisteme încorporate sunt mai sofisticate, în timp ce altele au cerințe minime pentru memorie și lungimea programării și o complexitate scăzută a software-ului. Dispozitivele de intrare și ieșire includ solenoizi, afișaje LCD, relee, comutatoare și senzori pentru date cum ar fi umiditatea, temperatura sau nivelul luminii, printre altele.

Există mai multe tipuri de microcontrolere programabile clasificate în funcție de câțiva parametri, inclusiv Bits, dimensiunea Flash, dimensiunea RAM, numărul de linii de intrare/ ieșire, tipul de ambalaj, tensiunea de alimentare și viteza de lucru.

Microcontrolerele programabile conțin pini de intrare/ieșire cu destinație generală. Numărul acestor pini variază în funcție de microcontroler. Ele pot fi configurate la o intrare sau o stare de ieșire prin software. Când sunt configurate într-o stare de intrare, acești pini pot fi utilizați pentru citirea semnalelor externe sau a senzorilor. Când sunt configurate în starea de ieșire, pot conduce dispozitive externe precum afișajele LED și motoarele.

Microcontrolerele programabile sunt concepute pentru a fi utilizate pentru aplicații încorporate, spre deosebire de microprocesoarele care pot fi găsite în PC-uri. Microcontrolerele sunt utilizate în dispozitive controlate automat, inclusiv scule electrice, jucării, dispozitive medicale implantabile, aparatură de birou, sisteme de control al motoarelor, aparate, telecomenzi și alte tipuri de sisteme încorporate.

În Statele Unite, comitetul Institutului de Inginerie a Transporturilor compus din membri din sectorul industrial, Administrația Federală a Autostrăzilor și NEMA au dezvoltat conceptul de controler avansat în transporturi ATC, Dezvoltarea unui standard funcțional a fost ulterior atribuită unui comitet format din Asociația Funcționarilor de Stat din Transportul pe Autostrăzi (AASHTO), ITE și NEMA. Acest grup a fost însărcinat cu finalizarea unui standard bazat pe consens.

Controlerul avansat în transporturi este conceput pentru a controla sau procesa date de la unul sau mai multe dispozitive din trafic. Acesta funcționează ca un calculator de uz general cu un sistem de operare în timp real. Una sau mai multe aplicații sunt stocate într-o unitate FLASH. Software-ul aplicației este încărcat și lansat de pe unitatea FLASH în memorie dinamică de acces aleatoriu (DRAM). Arhitectura deschisă din ATC permite ca modulele hardware și software-ul să fie achiziționate de la o varietate de furnizori. O opțiune viitoare a unității centrale de procesor (CPU) va suporta un CPU de tip daughter-board care încorporează o interfață de programare a aplicațiilor (API), permițând utilizarea diferitelor microprocesoare și a sistemelor de operare în timp real.[5]

Modelul ATC 2070 controler conține 8 tipuri de module după cum urmează:

Unitate centrală de procesare(CPU);

Modulul de intrare/ieșire;

Ansamblul panoului frontal (FPA);

Alimentare electrică;

Șasiu;

Modem;

Interfață NEMA;

Panoul din spate.

Controler ATC Model 2070[5]

Opțiunile de module pentru modelul ATC 2070[5]

Senzori vehicule

Detecția vehiculelor și tehnologiile de supraveghere sunt parte integrată a ITS deoarece ele adună și transmit datele folosite de ITS.

Vechile tehnologii sunt îmbunătățite pentru a asigura monitorizarea vitezei, numărarea vehiculelor, detectarea prezenței și clasificarea vehiculelor iar noi tehnologii de detecție și de supraveghere a vehiculelor se dezvoltă mereu.

Tehnologiile de detecție, în general, sunt compuse din trei elemente: traductorul, un dispozitiv de procesare a semnalului și un dispozitiv de procesare a datelor. Traductorul detectează trecerea sau prezența unui vehicul sau a osiilor. Dispozitivul de procesare a semnalului convertește mărimea de ieșire de la traductor într-un semnal electric. Dispozitivul de procesare a datelor de obicei este format din parți hardware și firmware care convertesc semnalul electric în parametrii de trafic. Parametrii tipici de trafic includ prezența vehiculelor, numărarea, viteza, clasa, greutatea, gradul de ocupare a traficului. Dispozitivul de procesare a datelor poate fi o parte din senzor, ca în cazul dispozitivelor care produc semnale de ieșire seriale sau poate fi un controler extern.

Senzorii montați în pavaj:

Senzorii montați în pavaj includ buclele inductive, magnetometrele, cabluri piezoelectrice, sondele magnetice tuburi pneumatice și altele. Aceste dispozitive sunt instalate pe suprafața drumului, îngropate sub pavaj sau ancorate direct pe suprafața pavajului ca în cazul tuburilor pneumatice. Dezavantajul folosirii lor reprezintă faptul că pentru punerea lor în funcțiune și pentru lucrările de întreținere este necesară întreruperea traficului ca și pentru repararea defecțiunilor apărute în urma instalării în suprafețe proaste de drum sau în condiții care nu respectă standardele procedurii de instalare. Deteriorarea suprafeței de drum poate necesita de asemenea reinstalarea acestor tipuri de senzori.

Senzorii montați deasupra nivelului drumului:

Realizarea unui sistem alternativ sigur și eficient de detecție și supraveghere a traficului care să poată fi instalat și întreținut în condiții de siguranță, fără întreruperea traficului și care să poată asigura furnizarea datelor din trafic cel puțin la fel de exact ca și detectorii cu buclă inductivă a fost o provocare mult timp.

Evaluările recente au arătat că senzorii moderni montați deasupra suprafeței drumului furnizează date care sunt în concordanță cu cerințele multor aplicații. Acești senzori pot fi montați pe marginea drumului sau deasupra benzilor al căror trafic îl monitorizează, de unde pot supraveghea mai multe benzi de trafic dintr-un unghi perpendicular pe direcția fluxului, sau dintr-un unghi ascuțit.

Tehnologiile folosite în prezent pentru senzorii care nu sunt montați în pavaj sunt: procesarea imaginilor video, radare cu microunde, radare cu infraroșu pasive, radare laser, ultrasonice, acustice pasive sau combinații de tehnologii cum ar fi infraroșu pasiv cu microunde sau infraroșu pasiv cu ultrasonic. Ca și senzorii încastrați, acești senzori măsoară numărul de vehicule, prezența și mișcarea. În plus, asigură și măsurarea vitezei, clasificarea vehiculelor și acoperirea mai multor benzi și zone de detecție.

Unii senzori montați deasupra nivelului drumului încorporează mai mult de o tehnologie. În figura 2 sunt prezentați senzori care combină detecția prezenței vehiculelor cu infraroșu pasiv și radarul cu ultrasunete sau Doppler. Combinația infraroșu pasiv – ultrasonic asigură o acuratețe ridicată în detecția prezenței autovehiculelor, a cozilor, numărarea vehiculelor, depășirea înălțimii sau a distanțelor prevăzute. Senzorul infraroșu pasiv – radar Doppler este conceput pentru detecția prezenței sau a cozilor, numărarea vehiculelor măsurarea vitezei și clasificarea lungimilor.

Combinații cu senzori cu infraroșu (ASIM Technologies, Uznach, Elveția)

Senzorul dual infraroșu – radar Doppler se bazează pe radar pentru a măsura vitezele de la cele ridicate la cele medii și pe infraroșu pentru a număra vehiculele și a detecta prezența. La viteze medii infraroșul pasiv calibrează automat măsurătorile lui de viteze la cele ale radarului. Această calibrare permite infraroșului să măsoare vitezele reduse și să detecteze vehiculele oprite.

Costurile relative ale senzorilor:

O comparație satisfăcătoare între diverse tehnologii de senzori poate fi făcută doar atunci când aplicația respectivă este cunoscută. De exemplu, un senzor relativ ieftin ultrasonic, cu microunde sau infraroșu poate părea la prima vedere ca fiind soluția mai puțin costisitoare pentru o intersecție, dacă nu sunt dorite buclele inductive. Dar atunci când este luat în considerație numărul de senzori necesari pentru măsurarea directă a datelor (de exemplu, viteza nu poate fi măsurată direct cu un senzor infraroșu pentru o singură zonă), este posibil ca un senzor mai scump, cum ar fi un procesor de imagini video (VIP), să fie o alegere mai potrivită. Astfel, daca sunt necesari doisprezece sau șaisprezece detectori convenționali precum buclele inductive (sau ultrasonici, cu microunde, infraroșu, etc.) pentru a putea monitoriza în întregime o intersecție, costul devine comparabil cu cel al unui sistem de procesare a imaginilor video. Mai mult, datele adiționale din trafic și  informațiile vizuale furnizate de sistemul VIP pot sa acopere cu mult diferențele de preț. În exemplul de față, sistemul VIP asigură și alte cerințe ale aplicației, cum ar fi detecția 100% a vehiculelor din intersecție. Argumente similare pot fi aduse și pentru aplicațiile de pe autostrăzi care folosesc mai multe tipuri de senzori și necesită informații pe care nu întotdeauna senzorii mai puțin costisitori le pot oferi.

Radarele de prezență cu microunde montate pe marginea drumului pot realiza și alte funcții, cum ar fi simpla monitorizare a fluxului de trafic pe mai multe benzi, sau măsoară prezența și viteza vehiculelor pe stradă. În acest caz, senzorii cu microunde înlocuiesc un număr mare de bucle care altfel ar fi trebuit să fie instalate în benzile de trafic. Mai mult, senzorul cu microunde asigură măsurarea directă a vitezei cu o acuratețe mai mare decât buclele.

Alți factori care determină costul și alegerea senzorilor sunt dezvoltarea procesului de fabricație și a proiectului pentru senzorii folosiți în noile tehnologii, reducerea prețului pentru anumite cantități la cumpărare și disponibilitatea locațiilor de montare și a legăturilor de comunicație pe situl aplicației. În anumite zone urbane costul săpării șanțurilor în pavaj și de conectare cu cabluri la un controler este foarte ridicat (de exemplu 50$ la 0.3m). Astfel, senzorii aflați deasupra nivelului drumului care utilizează microunde sau cu legătură radio pot fi alternativele ieftine pentru adunarea și transmiterea datelor de la senzor la controler.

Tabelul nr. 1 compară avantajele și dezavantajele diferitelor tehnologii de senzori, în ceea ce privește instalarea, parametrii măsurați, performanțele în condiții meteo nefavorabile și în condiții variabile de luminozitate.

Comparație între tehnologiile senzorilor

Determinarea vitezei

Metodele de estimare a vitezelor de deplasare recomandate de literatura de specialitate sunt:

se măsoară viteza autovehiculelor din fluxul de trafic rutier cu ajutorul unui radar;

se măsoară timpul necesar autovehiculelor pentru a parcurge o porțiune de drum de lungime aleasă, iar apoi se calculează viteza medie a fluxului de trafic;

se determină viteza medie a fluxului de trafic, conducând un vehicul martor care participă la trafic;

se utilizează viteza limită legală;

se face o apreciere a vitezei medii a fluxului de trafic rutier pe baza unor experiențe acumulate la alte drumuri de același tip.

În funcție de metoda aleasă se va realiza o acuratețe mai mare sau mai mică a calculului. Metodele sunt enumerate mai sus în ordinea descrescătoare a acurateței asigurate. Metodele care asigură o acuratețe mai bună implică și costuri mai mari.

Cinemometrele sunt mijloace de măsurare care măsoară de la distanță și afișează viteza de deplasare a autovehiculelor aflate în mișcare în traficul rutier, independent de caracteristicile acestora.

Metode de măsurare:

Cinemometru radar – cinemometru al cărui principiu de funcționare se bazează pe efectul Doppler;

Cinemometru distanță-timp – cinemometru al cărui principiu de funcționare se bazează pe măsurarea timpului în care autovehiculul parcurge distanța dintre senzori;

cinemometru laser (LADAR, LIDAR) – cinemometru al cărui principiu de funcționare se bazează pe utilizarea undelor laser;

simulare în condiții de laborator – simulare a măsurării vitezei de către cinemometru, prin aplicarea unor semnale electrice cu frecvența corespunzătoare frecvenței Doppler (în cazul cinemometrelor radar), sau prin simularea de orice natură a deplasării autovehiculului.

Radar (radio detection and ranging, adică detectarea prin radio și determinarea distanței) reprezintă o instalație de radiolocație care radiază microunde electromagnetice și folosește reflexia acestora pe diferite obiecte pentru a determina existența și distanța lor față de antenă.

Principiul de bază al radarului este reprezentat de reflexia microundelor pe suprafețe solide. Receptorul, analizând diferența de timp dintre emisia și recepția undei reflectate de către un corp detectat, poate aprecia distanța r a acestuia față de sursa microundelor. Antena de microunde este reciprocă, putând atât emite cât și recepționa undele electromagnetice. Cele două stări ale antenei funcționează secvențial (pe rând).

Dispozitivele care au la bază un alt fenomen fizic, diferit de cel radar: efectul Doppler, sunt folosite și de către organele de ordine în monitorizarea circulației auto.   Antena emite, la intervale fixe τ, pachete de microunde cu frecvența fe. Între intervalele de emisie, ea recepționează frecvența undei reflectate fr. Viteza de mișcare a corpului este calculată automat după formula:

În formulă, c reprezintă viteza de propagare a undei emise, iar θ este unghiul dintre direcția de emisie a antenei și orizontală. Deoarece în calculul final se face aproximația cosθ ≈ 1, înseamnă că acest unghi trebuie să fie mai mic de 10°. În practică, „radarul” auto este orientat de-a lungul drumului și frecvența emisă de acesta are valori de la 3 GHz în sus. La 3 GHz, dispozitivul poate detecta viteze între 36 și 144 km/h.[7]

Determinarea vitezei medii a fluxului de trafic rutier:

Mișcarea aleatoare a unui autovehicul poate fi descrisă cel mai bine statistic. În acest scop trebuie realizate măsurători care să permită obținerea curbelor de variație în funcție de timp a mărimilor cinematice și în special a vitezei. Pentru determinarea vitezelor reale de deplasare într-un număr mare de locații s-a constatat că metoda optimă este parcurgerea traseelor cu vehicul martor.

Dacă se măsoară viteza în m intervale de spațiu și se trasează diagrama corespunzătoare, într-un sistem de coordonate, se obține frecvența absolută de repartiție a vitezei autovehiculului cercetat pe durata T sau distanța X.

Pentru descrierea distribuțiilor valorilor empirice ale frecvențelor vitezei se utilizează metode statistice. În general, este suficient dacă se calculează media aritmetică și dispersia, respectiv abaterea pătratică medie (abaterea standard).[8]

Semafoare

Semaforizarea intersecțiilor cu trafic numeros a devenit o necesitate pentru a se asigura fluidizarea traficului și pentru a se evita blocajele din trafic și alte evenimente rutiere neprevăzute.

Obiectivele coordonării semafoarelor sunt:

prevenirea extinderii cozii de vehicule dintr-o intersecție și interferarea acesteia cu alte intersecții;

creșterea capacității drumului;

sporirea confortului șoferului prin reducerea numărului de opriri și fluidizarea traficului;

oferirea unor întârzieri totale minime pentru utilizatorii drumurilor, micșorând timpul de călătorie;

reducerea consumului de combustibil – deci reducerea poluării in zonă;

impunerea unei conduite de siguranța șoferilor, deoarece ei merg grupați cu viteza stabilită pentru unda verde; se reduce astfel probabilitatea depășirii vitezei maxime legale și implicit a numărului de accidente ca și gravitatea acestora.

Semafoarele de trafic exista de ceva vreme, însă structura lor a rămas relativ constantă de-a lungul timpului – partea de semnalizare consta dintr-o lampă cu incandescență, înconjurată de un reflector și prevăzută cu lentile de sticla colorată. Odată cu dezvoltarea led-urilor în anii ’90 însă, producătorii de semne rutiere au abordat aceasta nouă tehnologie de iluminare. Semaforul de trafic este o aplicație ideală a led-urilor, întrucât, printre altele, acestea produc în mod direct lumina colorata, nefiind necesară filtrarea, ca în cazul surselor cu incandescență, eliminându-se astfel componente inutile și reducând costurile.

Semafoare cu LED-uri

Pentru a fi vizibil la lumina solara intensa, semaforul de trafic necesită o luminozitate mare. LED-urile sunt surse punctuale foarte intense care, dacă sunt integrate într-un spațiu mic (cum este un semnalizator de trafic), creează o sursa intensa. Acest fapt face ca LED-urile sa fie sursa ideala pentru semafoarele de trafic, din punct de vedere al intensității luminoase. De asemenea, LED-ul are caracteristici suplimentare care îl fac ideal pentru utilizarea sa în semafoarele de trafic. Durata de viață mare (100.000 ore sau mai mult) reduce costurile de întreținere.

Aceasta dezvoltare tehnologică, costurile mai scăzute pe care le angrenează LED-urile, dar și volumul de fabricare sporit au coborât prețul semafoarelor de trafic cu LED-uri cu peste 30%. La începutul anilor 2000, conversia semafoarelor convenționale de trafic către semafoarele cu LED-uri a devenit viabilă din punct de vedere economic.

Elementele timpului de semaforizare

Principiile semnalizării in intersecții:

Semnalizarea în intersecții este unul dintre mijloacele folosite pentru siguranța rutiera și fluidizarea traficului de autovehicule.

Diferiți autori au analizat principiile după care semnalizarea în intersecții funcționează, astfel încât au fost determinate ca și concepte mai multe tipuri de semnalizare în intersecții, rata de ocupare a intersecției, punctul critic la care intersecția este complet ocupată, momentele de timp în care lumina verde a semaforului nu este eficientă etc.

Principii de studiu și noțiuni:

Cercetarea mișcării critice în intersecții se desfășoară după principiul fundamental potrivit căruia ,,cantitatea de timp dintr-o ora fiind definită în mod precis, aceasta pentru că două autovehicule(sau un vehicul si un pieton) nu pot ocupa același spațiu în același timp”.

Analiza mișcării critice identifică setul de mișcări care nu se pot suprapune în timp și necesită cel mai mult timp pentru a fi executate.

Timpul util efectiv pentru rularea autoturismelor în intersecție se poate calcula după următoarea formulă:

Unde v este timpul verde efectiv, V timpul culorii verzi inițiale, G timpul culorii galbene inițiale, R timpul culorii roșii inițiale, tP fiind timpul pierdut la plecarea de pe loc, tO fiind timpul de oprire(apariția culorii galbene).

Capacitatea intersecției

La intersecțiile semaforizate, capacitatea intersecției este definită de două elemente:

Numărul maxim de autovehicule care pot trece printr-un punct dat într-o ora în anumite condiții(știind rata de saturație) și

Durata de timp în care autovehiculele pot intra în intersecție.

Ecuația este următoarea:

unde C este capacitatea, s este saturația pe ora, v este culoarea verde efectivă în secunde iar dC este durata ciclului.

Graficul următor este interpretat astfel:

Cu aria hașurată este volumul intersecției iar cu aria nehașurată este capacitatea.

Rata de saturare a intersecției pe durata timpului de verde[9]

Noțiunea de verde minim

Verde minim reprezintă intervalul minim reprezentat de indicația semnalului verde. Intervalul de verde minim este utilizat de către șoferi sa reacționeze la startul intervalului verde și de asemenea aceasta noțiune întâlnește pe aceea a așteptărilor șoferilor.

Noțiunea de așteptările șoferilor (dorințele șoferilor) definește așteptările conducătorilor auto vizavi de rularea autovehiculelor în intersecții, în sensul parcurgerii intersecției în timpul culorii verde, care firește trebuie să dureze cât mai mult și evitarea blocării în intersecție de o culoare verde care durează prea puțin.

Durata minimului verde poate de asemenea să se bazeze pe lungimea în timp a semnalului verde sau pe timpul pietonilor în absența butoanelor/comenzilor pietonale pentru trecerea de pietoni(zebra). Un semnal de minimum verde prea lung poate să ducă la prea mult timp irosit în intersecții, iar un semnal prea scurt poate să conducă la încălcarea dorinței șoferilor(driver expectation) sau încălcarea siguranței pietonilor.

Maximum verde

Maximum verde reprezintă durata maximă de timp a semnalului culorii verzi a semaforului, atunci când exista necesitatea autovehiculelor de a trece și de asemenea aceea a pietonilor. Maximum verde este utilizat pentru a limita întârzierea oricărei alte mișcări în intersecție și pentru a menține durata ciclului la un interval maxim. De asemenea maximum verde previne un semnal de verde prea lung datorat necesității(cererii) continue de verde sau a detectoarelor defecte. Dacă semnalul verde este prea lung, va rezulta pierderea de timp in intersecție, iar dacă maximum verde este prea scurt, va rezulta un număr de autovehicule care nu vor putea profita de culoarea verde pentru a rula (faza inadecvata cererii în trafic).

Culoarea galbenă și roșie a semaforului

Durata intervalului pentru culoarea galbenă este bazata pe timpul de percepție-reacție a conducătorului auto, plus distanța necesară pentru a opri în siguranța autovehiculul într-o intersecție.

De asemenea, acesta durata poate sa difere de la o țara la alta în funcție de factorul galben permisiv sau galben restrictiv.

Factorul galben permisiv se refera la o legislație rutieră care permite rularea autovehiculelor la fel ca și în timpul afișării culorii verzi a semaforului.

Factorul galben restrictiv se referă la o legislație rutieră care interzice rularea autovehiculelor în timpul afișării de către semafor a culorii galbene, existând aceeași interdicție ca și pentru culoarea roșie a semaforului.

Culoarea roșie a semaforului este culoarea interdicție rulării autovehiculului, și corespunde de cele mai multe ori cu verdele pietonal sau culoarea verde-galbenă pentru alte direcții de deplasare. Culoarea roșie prohibitivă în privința rulării autovehiculului împiedică intersectarea direcțiilor de deplasare a autovehiculelor.

Calculul de semaforizare – diagrame de timp

Cea mai utilizată metodă de interconectare a semafoarelor folosește un timp de ciclu (serie completa de etape în care toate manevrele de trafic sunt servite pe rând. Timpul de ciclu este suma timpilor tuturor etapelor) comun pentru toate intersecțiile și semafoarele sunt sincronizate astfel încât perioadele de plecare de la semafoare să fie în legătură unele cu altele în concordanță cu viteza pe drumul respectiv pentru a rezulta o 'progresie' de perioade de verde de-a lungul drumului, în ambele direcții. Viteza de deplasare trebuie considerată rezonabilă de către șoferi. Dar dacă depășirea vitezei era un lucru des întâlnit înainte de coordonare, atunci viteza măsurată va fi prea mare pentru o deplasare sigură. În acest caz trebuie folosită o viteza moderată pentru a asigura deplasarea plutonului conform limitei legale.

Timpii semafoarelor într-un sistem progresiv simplu poate fi stabilit cu ajutorul diagramelor prezentate în figurile următoare:

Coordonarea semnalelor pentru o stradă cu sens unic[9]

Coordonarea semnalelor pentru o stradă cu dublu sens[9]

Pe aceste diagrame, distanțele între intersecții de-a lungul drumului sunt reprezentate pe abscisă (axa Y), iar timpii de călătorie sunt reprezentați pe ordonată (axa X). Liniile înclinate reprezinta vitezele alese pentru progresie și stadiile de verde in intersecții succesive. În mod normal, problema este de determinare, prin încercări și erori, a vitezei oprime pentru un timp de ciclu fixat.

Pentru drumul cu sens unic, benzile verzi urmează una alteia, în secvență.

Șoferul, trecând printr-o intersecție, va avea culoarea verde când va ajunge în fiecare intersecție

Atunci când strada este cu sens dublu și intersecțiile nu sunt la distante egale, apare o situație mai complexă și poate fi necesar să se ajungă la un compromis pentru progresiile celor două direcții. Poate fi de asemenea necesar sa se tina cont și de alte condiții, cum ar fi fluxurile de vehicule de pe străzile laterale.

Metoda diagramei timp-distanță poate fi folosita pentru a favoriza o anumită direcție, de exemplu favorizarea vârfului de trafic de dimineața pe o direcție cu costul creșterii întârzierii a câtorva vehicule călătorind pe direcția opusă. Situația poate fi inversată pentru vârful de trafic de seară. Timpul de ciclu pentru un sistem de semnalizare coordonată este în mod normal stabilit de semnalizarea unei intersecții principale (de exemplu intersecția cu fluxul de trafic cel mai mare). Timpul de verde care este în plus, ar trebui alocat pentru a elibera traficul care intra pe strada principală de pe drumurile secundare, pentru a nu întârzia plutonul ce traversează intersecția.

Interconectarea între semafoare

Interconectarea prin cablu

Controlerele locale de semnalizare ce lucrează în intersecții, pot fi legate prin cablu de un controler principal. Acesta asigura sincronizarea controlerelor locale, prin trimiterea unor semnale de control sau a unor instrucțiuni.

Interconectarea fără cablu

Legătura între semafoare se poate realiza, de asemenea, prin alte tipuri de legături, ce nu necesită cablu, cum ar fi radio etc. Concepute inițial pentru a oferi avantajul unei coordonări pe arie largă, evitând în același timp costul mare al cablurilor subterane, aceste sisteme sunt acum mai puțin competitive decât sistemele CTZ, deoarece nu permit supervizarea rețelei și detectarea defectelor sau folosirea unor sisteme dependente de trafic, cum ar fi controlul cozilor de la semafor.

Semnale coordonate cu timp prestabilit

Aceste sisteme se bazează pe presupunerea ca valorile fluxurilor de trafic se repeta săptămânal si setările de semnalizare pot fi pregătite pentru a face fata unor fluxuri previzibile. Timpii de semnalizare pot fi stabiliți pentru o zi din săptămâna sau pentru o oră din zi. Aceste sisteme au nevoie de controlere cu ceasuri interne sincronizate și, tipic, un minim de 6 planuri de semnalizare din care să aleagă.

De obicei, acestea includ planuri pentru:

vârfurile de dimineața;

vârfurile de după-amiaza;

vârfurile de seară:

sâmbete, duminici și sărbători;

lumini galbene intermitente pentru noapte.

Comunicație

Comunicațiile de date sunt necesare pentru colectarea datelor și distribuirea informațiilor. În ceea ce privește infrastructura, sunt utilizate comunicații staționare. Datele obținute de la sursele fixe, cum sunt detectorii în buclă și televiziunile cu circuit închis, pot fi transmise la centrele de management și apoi distribuite de acestea prin intermediul comunicațiilor staționare sau mobile. datele obținute de la sursele mobile, precum patrulele de elicopter și ieșirile din procesoarele amplasate în vehicul, precum coordonatele GPS, trebuie să fie transmise la centrul de management prin intermediul comunicațiilor fără fir sau mobile.

Toată infrastructura de telecomunicații existentă și viitoare, staționară sau mobilă poate și trebuie să fie utilizată pentru funcțiile ITS în scopul de a minimiza costurile și de a valorifica continuu progresul tehnologic din industria telecomunicațiilor. Rețeaua digitală de servicii integrate(ISDN) este o infrastructură de telecomunicații obișnuită pentru integrarea tuturor formelor de semnale – voce, imagine, video și date – toate în format digital în concordanță cu un standard internațional. O posibilă aplicație ISDN pentru managementul traficului este transmiterea de semnale digitale prin intermediul camerei video.

Fibre optice

Fibrele optice reprezintă un mediu pentru undele luminoase purtătoare de semnal sau pulsațiile care transmit informații de la un punct la altul prin intermediul unor fibre optice foarte subțiri. Caracteristicile lor atractive se referă la absența interferențelor, atenuare relativ scăzută și lățime de bandă extrem de mare sau debit mare de biți, astfel încât poate fi transmisă simultan o cantitate foarte mare de informații. costul fibrelor optice este atât de scăzut încât costul cel mai mare se referă la instalarea lor mai degrabă decât la materiale. Unele autorități  de trafic au considerat că este mai bine să partajeze dreptul de concesiune a drumului cu industria tele comunicațiilor și să instaleze fibre optice de-a lungul autostrăzilor în timpul construirii acestora decât să efectueze ulterior instalarea acestora.

Comunicații fără fir

În ceea ce privește vehiculul, comunicațiile fără fir sunt din ce în ce mai utilizate în ITS. În multe țări, conducătorii vehiculelor raportează din ce în ce mai des incidentele de trafic de pe autostrăzi prin intermediul telefoanelor mobile. Noile sisteme de comunicații personale sunt digitale. Comunicațiile de date prin intermediul sistemelor digitale celulare au devenit realizabile datorită pachetelor de date digitale celulare și a unor tehnici particulare de comunicații de date fără fir cu comutare de pachete. Serviciile de telefonie digitală celulară bazate pe standarde TDMA, CDMA precum și pe standardul european GSM sunt deja pe piață de ceva timp.

Comunicațiile mobile prezentate anterior sunt destinate comunicațiilor pe zone întinse, în care transmițătorul și receptorul se află la distanțe foarte mari unul de celălalt. De obicei, în comunicațiile pe zone întinse, datele sau informațiile ITS sunt grupate împreună cu alte mesaje, în general, cu comunicații administrate de operatorii din industria telecomunicațiilor.

În opoziție cu acestea sunt comunicațiile dedicate cu rază scurtă ( DSCR – Dedicated Short Range Communications) pentru ITS, în care raza de acoperire este atât de scurtă încât comunicațiile sunt utile doar pentru anumite cazuri dedicate. În general, cei care investesc în infrastructura transmițătoarelor (balizelor) DSCR nu fac parte din industria telecomunicațiilor ci din organizații publice sau private interesate de anumite sisteme de tip ITS care utilizează comunicații dedicate cu rază scurtă.

Serviciile ITS bazate pe comunicații cu rază scurtă sunt următoarele:

colectarea electronică a taxelor (ETC);

operarea vehiculelor comerciale (CVO);

managementul intersecțiilor;

programarea semnalelor;

semnalizarea în vehicul;

informarea călătorilor în vehicul;

ghidarea rutei bazate pe balize.

Deoarece balizele pentru colectarea electronică a taxelor (ETC) pot fi instalate de-a lungul infrastructurii drumului, precum și la locul de colectare a taxelor, poate fi obținut și timpul de călătorie al unui vehicul, în scopul managementului traficului.

Parametrii de trafic obținuți de la senzorii de trafic sunt transmiși prin intermediul comunicațiilor prin fir , de lățime de bandă relativ mică ( de ex. linie telefonică) sau prin comunicații fără fir, de lățime de bandă mică ( de ex. pachet radio) deoarece parametrii de trafic conțin relativ puțini biți pe unitatea de timp. Imaginile video în mișcare care includ mulți biți de informație pe unitatea de timp necesită, pentru transmisie, medii de comunicare pentru bandă largă (de ex. cabluri coaxiale și fibră optică). Prelucrarea datelor distribuite se execută de obicei local, pentru transformarea imaginilor provenite din camerele video în parametri de trafic înainte ca informația să fie transmisă la centrul de management al traficului. În mod alternativ, parametrii de trafic obținuți local pot fi utilizați direct pentru controlul local.[10]

Soluții moderne de integrare la o soluție centralizată

Se propune a fi realizat un sistem centralizat de management al traficului care să conțină elemente de monitorizare și transmitere a informației care înseamnă un sistem avansat, inteligent de dirijare a circulației.

Primele sisteme centralizate de suprareglare și control al traficului au apărut în SUA în anii 60, folosind tehnica de calcul care era disponibilă în acea perioadă.

Avantajele ce decurg din controlul eficient al traficului sunt:

fluiditatea traficului;

economii de energie prin reducerea consumului de combustibil al vehiculelor prin scurtarea timpului de parcurgere a sectoarelor de drum supravegheat;

protecția mediului prin reducerea emisiilor motoarelor;

reducerea costurilor sociale generale ale traficului.

În principal un astfel de sistem se compune din următoarele module:

un post central de control și dirijare;

rețeaua de transmitere a comenzilor către sistemul local de semnalizare;

rețeaua de transmitere a datelor primare privind traficul, date culese de senzorii plasați pe arterele de circulație;

modulul de comandă local a unei intersecții;

centre intermediare de control și comandă pentru cazuri în care suprafața și complexitatea rețelei rutiere o cere.

Schema de principiu pentru integrarea la o soluție centralizată

Postul central de control și dirijare (PC) trebuie plasat într-un spațiu adecvat ca suprafață și dotări, cât mai aproape de centrul geometric al zonei pe care o deservește. Dotările minime trebuie să conțină un computer central cât mai evoluat și mai multe terminale de la care se face controlul și dirijarea efectivă a circulației.

Tot aici se plasează și modulul de proiectare-optimizare care are rolul de a aduna datele statistice furnizate de UCC și de a elabora strategiile pentru dezvoltarea rețelei din zonă și propune soluții de optimizare a traficului prin modificarea programelor ce comandă intersecțiile.

Rețeaua de transmitere a comenzilor sau modulul de legătură poate fi realizată printr-o rețea de cabluri care să lege PC cu posturile de comandă PLC. Legătura poate fi realizată și printr-o rețea de radio relee care să facă posibilă transmiterea comenzilor fară distorsiuni datorate intervențiilor.

Un alt modul de transmitere la distanță a datelor trebuie proiectat pentru colectarea datelor de trafic din fiecare intersecție în parte și transmiterea lor la PC. Dacă este posibil, modulele de legătură pot face parte dintr-o singură rețea de transmitere a datelor simultan în cele două direcții spre și dinspre postul central. Sistemul de comandă propriu-zis în componența căruia intră microprocesoare și unități de memorie care să facă posibilă funcționarea acestor module, trebuie să funcționeze fără intervenția unității centrale în perioadele de trafic normal sau în cazul unor accidente tehnice care interpun coordonarea postului central.

Realizarea practică

Proiectare hardware

Generalități

Macheta prezentă în fig.7, este compusă din 8 senzori optici model HD-DS25CM-3MM, câte doi pe fiecare stradă și câte trei leduri de culoare roșie, galbenă și verde pentru fiecare stradă în parte reprezentând semafoarele, senzorii și ledurile sunt comandate de microcontrolerul integrat în calculatorul de tip S.B.C. Raspberry Pi Zero W.

Așezare componente machetă

Calculatoarele de tip S.B.C. reprezintă un calculator construit pe o singură placă ce conține unul sau mai multe microprocesoare, memorie, circuite de intrare / ieșire și alte componente necesare pentru a alcătui un calculator funcțional. Calculatoarele S.B.C. au fost construite cu scop demonstrativ, de dezvoltare sau educațional. Spre deosebire de calculatoarele de tip computer personal desktop, calculatoarele pe o singură placă nu depind de sloturi de expansiune pentru a adăuga componente periferice. Conceptul de calculator S.B.C. nu este unul nou, primul astfel de calculator fiind produs în 1976 de către Radio-Electronics avea numele dyna-micro și era bazat pe procesorul intel C8080A și folosea de asemenea primul EPROM de intel, C1702A. Creșterea în popularitate a acestui tip de calculator a fost posibilă datorită miniaturizării circuitelor integrate. Un astfel de calculator reduce costul sistemului per ansamblu datorită reducerii numărului de plăci necesare și prin eliminarea conectorilor necesari interconectării acestor plăci. Urmând acest exemplu se obține un sistem mai mic și ca dimensiuni cum ar fi spre exemplu o mare parte din calculatoarele laptop de tip netbook unde producătorii pentru a obține un produs cât mai subțire integrează pe placa de bază memoria RAM, hard disk-ul SSD și procesorul, de asemenea prin eleimiarea conectorilor crește fiabilitatea produsului deoarece sonectorii sunt de obicei principala sursă a problemelor.

Raspberry Pi este o serie de calculatoare de tip S.B.C. dezvoltate în Marea Britanie și au fost promovate pentru a ajuta la predarea informaticii în țările în dezvoltare unde majoritatea școlilor și copiilor nu își pot permite un calculator. Modelul original a fost mult mai popular decât s-a anticipat de către producător, numărul unităților vândute depășind 5 milioane până în februarie 2015 și depășind 11 milioane în noiembrie 2016 conform datelor producătorului. Conceptele incipiente pentru Raspberry Pi se bazau pe microcontrolerul Atmel ATmega644. Prima generație de Raspberry Pi (Raspberry Pi 1 Model B) a fost lansat în Februarie 2012 și a fost urmat de un model mai simplu și mai ieftin (Modelul B). În 2014 Fundația Raspberry Pi a lansat o placă cu o construcție îmbunătățită (Modelul B+). Aceste modele sunt aproxumativ de dimensiunea unui card bancar și reprezintă dinemsiunea standard a modelelor lor principale. După un an au fost lansate modele îmbunătățite ale modelelor A+ și B+. Un modul de calcul a fost lansat în aprilie 2014 pentru aplicații încorporate. Raspberry Pi zero având dimensiuni mai reduse și mai puțin I/O dar cu setul complet de pini GPIO a fost lansat în noiembrie 2015 la prețul de 5 USD. Raspberry Pi 2 care avea ma mult RAM decât modelele precedente a fost lansat în februarie 2015. Raspberry Pi 3 model B a fost lansat în februarie 2016 și a adus noi funcționalități gamei cum ar fi bootare direct de pe USB și un integrat wireless și bluetooth. În ianuarie 2017 a fost lansată cea mai nouă variantă a lui Raspberry Pi model B și este în momentul de față cel mai performant produs al lor.

Toate modelele vin echipate cu un integrat de la Broadcom de tip SoC care are integrat un CPU de arhitectura ARM, un GPU și RAM, datorită integrării acestor componente are denumirea de sistem pe cip. Frecvența procesorului variază între 700 și 1200 Mhz pentru Pi 3 și memoria RAM variază între 256 MB și 1 GB. Carduri de tip MicoSDHC sau SDHC sunt folosite pentru stocarea sistemului de operare și a diverselor programe. Majoritatea plăcilor au unul sau mai multe porturi USB, un port HDMI, ieșire video analogică și un jack de 3.5mm pentru audio.

Hardware-ul Raspberry Pi-ului a evoluat de-a lungul versiunilor care au avut variații ale capacității memoriei, a procesoarelor și a dispozitivelor periferice suportate.

.

Schema bloc avansată a raspberry pi 3[13]

Diagrama bloc din fig.8 este valabilă pentru Pi3 dar se aplică și la modelele A, B, A+ și B+ cu excepția integratului BCM43438 și cu modele diferite ale procesorului și ale memoriei. Excepție face modelul Pi Zero căruia îi lipsesc blocurile de hub USB, adaptorul de ethernet și cele 4 porturi USB acesta având doar un singur port USB, portul de display TFT și integratul BCM43438 este prezent doar la varianta pi zero W. La modelele ce includ adaptor ethernet, acesta este conectat intern pe placă prin intermediul unui port suplimentar. Portul USB este conectat direct în procesor la modelul A și A+, la modelele B+ și peste.

Integratul SoC Broadcom BCM2835 a fost folosit în prima generație de Raspberry Pi-uri și este aproximativ echivalentul integratelor folosite în prima generație a telefoanelor de tip smartphone, arhitectura sa fiind o variantă mai veche ARMv6 ce conține un procesor de 700 MHz, un procesor grafic VideoCore IV și memorie RAM. Raspberry Pi 2 folosește un integrat SoC BCM2836 tot de la Broadcom care are integrat un procesor quad-core cu o frecvență de 900 MHz cu arhitectură pe 32 de biți ARM Cortex-A7 și cu L2 cache de 256 KB. Raspberry Pi 3 folosește un integrat Broadcom BCM2837 cu un procesor quad-core integrat având o frecvență de 1.2 GHz și o arhitectură pe 64 de biți ARM Cortex-A53 cu 512 KB cache L2.

Pe plăcile mai vechi, 128 MB din memoria RAM erau alocați procesorului grafic, lăsând sistemului doar 128 MB. Pe primul model cu 256 MB comuni erau posibile trei moduri de a aloca memorie și anume: implicit erau alocați 192 MB sistemului ceea ce era suficient pentru a decoda imagine video 1080p sau pentru aplicații 3D simple dar nu pentru amândouă simultan, 224 MB alocați doar pentru sistemul de operare, caz în care orice aplicație 3D sau decodare a imaginii 1080p nu ar fi fost posibilă și 128 MB alocați sistemului și 128 MB alocați plăcii video caz în care se putea face decodare 1080p împreună cu aplicații 3D. La modelul B cu 512 MB de memorie se puteau aloca în fișierul de configurare între 16 și 256 MB de memorie în pași de 8 MB procesorului grafic. La modelele mai noi memoria se alocă dinamic.

Procesorul grafic este capabil să emită o gamă largă de rezoluții cum ar fi cele HD, Full HD sau mai jos pentru monitoare CRT mai vechi. Din fabrică fără modificări personalizate de overclock poate să emită următoarele rezoluții: 640×350 EGA, 640×480 VGA, 800×600 SVGA, 1024×768 XGA, 1080×720 720p HDTV, 1280×768 WXGA, 1280×800 WXGA, 1280×1024 SXGA, 1366×768 WXGA, 1400×1050 SXGA+, 1600×1200 UXGA, 1680×1050 WXGA+, 1920×1080 1080p HDTV, 1920×1200 WUXGA. Rezoluții mai mari cum ar fi 2048×1152 sau 3840×2160 la 15Hz pot funcționa dar acest lucru nu înseamnă că procesorul grafic va fi capabil să decodeze imaginea video la acele rezoluții deoarece Raspberry Pi-ul nu are capacitatea de a de a decoda cu precizie codecul H.265 care este foarte folosit pentru imaginile video de rezoluții mai mari de 1080p. Raspberry Pi-ul poate de asemenea să genereze imagine la rezoluții de 576i și 480i pe ieșirea analogică de tip RCA.

În afară de folosirea în sistemul educațional pentru care există numeroase proiecte de integrare, Raspberry Pi-ul a început să fie folosit în automatizări pentru case inteligente de către diverși dezvoltatori care îl promovează ca o soluție ieftină și eficientă pentru monitorizarea și controlul diverselor aplicații economisind astfel consumul de energie electrică, este de asemenea folosit în produse comerciale un exemplu este o cameră digitală denumită OTTO creată de Next Thing Co. dar din iunie 2014 Techbase, un producător polonez de echipamente pentru automatizări a conceput și produs primul calculator industrial bazat pe modulul de calcul Raspberry Pi denumit ModBerry, dispozitivul are multe interfețe de conectare unele din cele mai folosite fiind comunicația pe porturi seriale folosind standardele RS-485/232, intrări/ieșiri digitale și analogice toate foarte răspândite în industria automatizărilor, ModBerry a fost proiectat pentru a fi folosit în medii industriale dure, acest produs dovedind că folosirea Raspberry Pi-ul nu este limitată doar pentru proiecte educaționale, științifice și de tip casnic, poate fi folosit și în medii industriale.[12]

Schema bloc

Schema bloc

Schema electronică

Pinul numărul 1 se află în partea dreaptă a plăcii cum este poziționată în fig.10, tabelul 3 conține numerotarea, denumirea și scopul pinilor pentru acest mod de funcționare:

Denumirea și scopul pinilor GPIO

Alegerea și descrierea componentelor

Microcontroler

Modelul de Raspberry Pi folosit pentru acest proiect este Raspberry Pi zero W. Alegerea acestui model a fost bazată pe faptul că este identic cu modelul Raspberry Pi zero cu excepția unui integrat ce adaugă următoarele funcții: posibilitatea de conectare la rețele fără fir folosind  standardul 802.11 b/g/n și Bluetooth 4.1 BLE (Bluetooth Low Energy) funcții ce sunt folosite pentru prezentarea proiectului dar nu sunt necesare pentru funcționarea sistemului, modalități suplimentare de conectare a calculatorului, dacă se dorește acest lucru, fiind descrise în capitolul 3.2. S-a preferat folosirea calculatorului Raspberry Pi model Zero datorită costului redus al acestuia, prețul de doar 5 USD este de asemenea și unul din principalele puncte forte ale campaniei de lansare al acestuia.

Raspberry pi zero[12]

Modelul folosit (fig.11) a fost lansat în februarie 2017 și este compatibil cu toate versiunile anterioare ce au soclul de 40 de pini GPIO și cel mai probabil și cu versiunile viitoare deoarece Fundația Raspberry Pi a fost foarte atentă ca modelele să fie compatibile între ele, ca dovadă că orice aplicație dezvoltată pe primul model apărut este compatibilă cu toate modelele apărute ulterior, chiar dacă acel model avea doar 26 de pini, așezarea acestora a rămas identică cu așezarea primilor 26 de pini din cei 40 de pini de pe modelele ce se află la momentul realizării acestui proiect în producție dar deoarece proiectul actual folosește 10 din cei 14 pini ce au fost adăugați modelelor actuale.

Pentru a menține costurile scăzute, nici unul din modelele actuale de Raspberry Pi nu au o modalitate de a ține minte ceasul când dispozitivul numai are curent, pentru a ține ceasul actualizat, o cale de a ocoli lipsa unui integrat RTC și a menține consistența datei pentru sistemul de fișiere Pi-ul salvează data și timpul în memoria nevolatilă la închiderea sistemului și o restabilește la următoarea pornire, raspberry pi-ul a fost conceput pentru a-și actualiza ceasul și data din rețea de la un server NTP dar pentru acest lucru trebuie să fie conectat prin intermediul protocolului TCP/IP la o rețea care să îi ofere acces la un astfel de server, dacă se dorește ca sistemul să fie izolat sau dacă se dorește ca ceasul și data să fie corecte tot timpul, se poate adăuga prin intermediul celei de-a doua magistrală I2C un modul RTC prin intermediul unui integrat cum ar fi: PFC8523 care este varianta cea mai ieftină dar și cel mai puțin precis, DS1307 este cel mai comun întâlnit și cel mai popular iar unul dintre cele mai precise integrate RTC este DS3231. În cazul în care se dorește folosirea modului RTC doar ca metodă de precauție pentru cazul în care la pornirea dispozitilului după o avarie de curent nu va fi valabilă conexiunea la rețeaua ce îi oferă acces la serverul NTP, se poate folosi integratul PCF8523 deoarece în timpul funcționării normale serviciul care actualizează ceasul face acest lucrul variabil între 64 și 1024 de secunde, valori care pot fi schimbate dacă se dorește acest lucru. De asemenea dacă se dorește ca ceasul să fie sincronizat pe mai multe dispozitive izolate se poate folosi un modul GPS conectat pe magistrala a doua I2C și astfel ceasul se va actualiza din informațiile primite de la sateliți.

Dimensiunile Raspberry Pi-ului zero și zero W sunt următoarele:

Dimensiuni Raspberry Pi zero și zero W[14]

Raspberry Pi-ul zero W este la momentul actual cel mai performant model de dimensiunile sale cu doar un slot de card microSD, un port miniHDMI, două porturi micro USB (unul pentru alimentare și unul pentru periferice), 512 MB de memorie și un procesor single-core de 1 GHz.[14]

Componente/integrate/socluri și porturi Raspberry Pi zero W

Cu toate că are foarte multe componente integrate, mai este nevoie de următoarele componente/accesorii/periferice pentru a funcționa:

Fundația Raspberry Pi au o sursă compatibilă cu toate modelele din gama lor de produse, este aceeași folosită și pentru acest proiect și anume T9060DV care este o sursă de 5.1Vcc cu 2.5A. Fundația raspberry pi a eliberat pe site-ul lor valorile de referință din fig.14 a curentului consumat în condițiile în care modelele aveau conectate un monitor prin intermediul conectorului HDMI și o tastatură și un mouse:

Consum în stare inactivă și în sarcină a modelelor compatibile cu proiectul

Trebuie ținut cont la alegerea sursei de alimentare pe lângă curentul din figura de mai sus și de curentul consumat de perifericele conectate fie prin portul USB fie prin intermediul pinilor GPIO. Dacă se dorește alimentarea prin intermediul portului USB dedicat perifericelor sau prin intermediul pinilor de +5V și GND de pe soclul GPIO se poate face acest lucru însă sursa de curent trebuie să fie foarte stabilă deoarece aceste intrări nu au protecție cum are intrarea dedicată de alimentare prin integratul PAM2306 și în cazul căderilor de tensiune se pot corupe informațiile transmise pe bus-ul cardului SD.

Un card MicroSD mai mare sau egal cu 4 GB pe care se poate instala sistemul de operare dorit.

Pentru Raspberry Pi zero și zero W dacă se dorește conectarea acestora la un monitor, trebuie un adaptor miniHDMI-HDMI

Pentru Raspberry Pi zero și zero W un cablu adaptor OTG pentru a conecta periferice cum ar fi mouse, tastatură, plăci de rețea adiționale

Dacă nu se dorește conectarea nici la un monitor prin portul HDMI și nici la o rețea centralizată, se poate conecta printr-un cablu de consolă prin intermediului magistralei UART.

Pentru a menține prețul scăzut, soclul de 40 de pini GPIO este lăsat liber și popularea acestuia este lăsată la alegerea utilizatorului.[16]

Pinii GPIO reprezentați în fig.15 sunt pini universali al căror stare, inclusiv dacă este intrare sau ieșire poate fi controlată de utilizator, ca ieșire pot fi activați sau dezactivați, ca intrare poate fi citită valoarea acestora, de obicei 1 logic sau 0 logic. Aceștia nu au nici un scop predefinit și inițial nu au nici o funcție. În cazul raspberry pi-uliu aceștia pot îndeplini și alte funcții cum ar fi componente ale unor magistrale dar dacă se dorește folosirea acestor magistrale, nu trebuie inițializat ca intrare sau ca ieșire. Aranjamentului pinilor este conceput pentru a fi folosit cu ușurință pentru a conecta diverse periferice și de a include cât mai multă funcționalitate. Pinii ce sunt denumiți BCM reprezintă numărul pinului de pe integratul SoC și sunt denumiți astfel deoarece controlul acestor pini se face în programe prin intermediul acestei numerotații. De obicei acești pini sunt integrați în sisteme care ar putea să mai aibă nevoie de linii de control digitale pe viitor care să poată să efectueze diverse funcții activate prin intermediul unui update.[15]

Pini Raspberry Pi[15]

Componente discrete

Componentele discrete folosite sunt patru grupe a câte trei led-uri transparente de culoare roșie galbenă și verde și ca senzori sunt folosite barierele de infraroșu model HD-DS25CM-3MM care este alcătuit din un led de infraroșu și un circuit receptor de infraroșu de tip normal închis ce se găsește în fig.16, de asemenea datasheet-ul este atașat în anexa 1.

Schemă circuit receptor optic HD-DS25CM-3MM

Comunicație

Raspberry pi-ul suportă o multitudine de protocoale de comunicație, unele dintre cele mai populare fiind reprezentate în fig.17.

Magistrale ce pot fi activate pe soclul de 40 de pini[15]

I2C, raspberry pi-ul conține pe soclul său de 40 de pini două magistrale I2C și anume: I2C0 și I2C1, magistrala I2C0 este folosită și intern de către procesorul grafic pentru a comunica cu dispozitive conectate pe interfața HDMI, deci folosirea acesteia este limitată și din acest motiv pinii acesteia nu pot fi folosiți ca intrare sau ieșire, I2C1 în schimb este liberă și poate fi folosită fără nici o restricție. Acest bus de comunicație este foarte popular și foarte răspândit datorită ușurinței cu care poate fi implementat deoarece are nevoie de doar doi conectori prin intermediul cărora se pot conecta până la 128 de dispozitive dacă se folosesc 7 biți de adresare și dacă se folosesc 10 biți de adresare pot fi conectate până la 1024 de dispozitive. Cei doi conectori prin care se face comunicația au denumirea de SDA (Serial Data) și SCL (Serial Clock). În fig.19 se arată cum se face comunicația pe magistrala I2C, și anume, dispozitivul master trimite o condiție de start reprezentată prin cazul unic în care trecerea din 1 logic în 0 logic pe SDA se întâmplă atât timp cât SCL este 1 logic, apoi se trimit 7 octeți cu adresa dispozitivului cu care se dorește să se comunice și dacă se dorește citirea (1 logic) sau scrierea (0 logic) în ultimul octet din seria de 8, apoi SDA stă în 1 logic și dacă dispozitivul slave își recunoaște adresa și este disponibil trimite 0 logic pe SDA astfel făcându-se confirmarea de primire, după care se transmit 8 octeți reprezentând adresa registrului de memorie al dispozitivului slave în sau din care se vor citi sau scrie informațiile din următoarea secvență, după care urmează încă un octet de confirmare și apoi în funcție de cererea de citire sau de scriere ori trimite masterul 8 octeți de informație ce va fi scrisă în adresa registrului de memorie a dispozitivului slave ori trimite dispozitivul slave 8 octeți de informație din adresa registrului de memorie transmisă în secvența a doua după care urmează un bit de confirmare și condiția de stop care este reprezentată prin aducerea SDA la 1 logic în timp ce SCL este în 1 logic. Fiecare dispozitiv slave are adresele de magistrală și registrele de memorie trecute în paginile de catalog ale dispozitivului și sunt aceleași pentru toate dispozitivele de același tip.[17]

Comunicația pe magistrala I2C

După cum se observă în fig.19 magistrala poate asigura comunicația între cel puțin 2 dispozitive indiferent dacă acestea sunt master sau slave, magistrala trebuie să aibă cel puțin un dispozitiv master pentru că dispozitivele master sunt cele care inițiază conexiunea, identificarea dispozitivelor de pe magistrala se face prin intermediul adresei acestora, astfel se pot prelua informații de la și către un dispozitiv anume folosind această adresă.

Modalitate conectare dispozitive pe magistrala I2C[17]

Echipamentele ce pot fi conectate pe această magistrală cu raspberry pi-ul variază de la module simple cum ar fi module RTC, GPS, Accelerometre, Busole Digitale, Giroscopuri până la microcontrolere cum ar fi ATmega sau Arduino. Magistrala are nevoie de rezistențe pull-up care variază între 1.8 kohm pentru viteze de transfer ridicate de până la 400 kops și 10 kohm pentru viteze mai mici de aproximativ 100 kops, raspberry pi-ul are integrate rezistențe de pull-up de 1.8 kohmi ceea ce înseamnă că acei pini nu pot fi folosiți decât cu circuitul de pull-up ca pin de intrare și ieșire.

UART, raspberry pi-ul conține o magistrală UART pe pinii 14 și 15 ai integratului Broadcom care sunt legați pe pinii 8 și 10 ai soclului de 40 de pini. Această magistrală este folosită cel mai des pe raspberry pi pentru a accesa CLI-ul (command line interface) sistemului de operare prin intermediul pinilor GPIO. Poate fi folosit pentru a comunica cu microcontrolere cum ar fi ATmega, ESP8266, Arduino etc. însă pentru a nu deteriora echipamentele trebuie luate în considerare și adaptate nivelele logice deoarece Arduino spre exemplu emite 1 logic pe 5v și raspberry pi pe 3.3v. Transmisia de date asincronă nu necesită transmiterea frecvenței către receptor, în schimb la inițierea conexiunii se negociază frecvența cu care vor fi trimise informațiile. Cele mai populare și răspândite protocoale folosite pe această magistrală sunt RS-232, RS-422, RS-485.[19]

SPI, raspberry pi-ul are 2 magistrale SPI, care este o legătură de date sincronă care folosește modul full duplex (fiecare dispozitiv are rol de emițător-receptor simultan) și o arhitectură de tip master-slave cu un singur master, dispozitivul master inițiază transferul de informație și generează ceasul și semnalele de control. Această magistrală nu poate fi folosită în configurația actuală decât după relocarea pinilor 23,24 și 26 de pe soclul de 40 de pini. Avantajele folosirii acestei magistrale sunt integritate mai bună a semnalului la viteze mari de transfer, transferul nu este limitat la 8 octeți și poate fi definit, dispozitivele slave nu au nevoie de adrese independente unice. Dezavantajele în schimb sunt nevoia de a folosi mai mulți pini decât I2C spre exemplu chiar și în cazul în care se folosește minimul necesar de 3 fire, funcționează pe distanțe mult mai scurte decât protocoalele RS-232 sau 485, nu suportă adăugarea și deconectarea dinamică a modulelor pe magistrală.[20]

Raspberry pi-ul are în funcție de model unul sau mai multe porturi USB versiunea 2.0(Universal Serial Bus), modelul zero și zero w au un singur port usb sub forma unui conector micro-B iar raspberry pi 2 și 3 au 4 porturi tip A. Magistrala USB reprezintă o interfață serială rapidă bidirecțională inițial creată ca standard industrial. Dintre toate magistralele prezentate, aceasta este cea mai populară și mai flexibilă, oferind viteze de până la 480 Mops și folosind hub-uri pot fi conectate până la 127 de dispozitive simultan. Nu se folosește numele generic de versiune deoarece toate versiunile includ versiunile mai vechi, deci versiunea folosită va fi cea a dispozitivului cu cea mai mică versiune, spre exemplu dacă se conectează un dispozitiv USB 1.1 la portul raspberry pi-ului care este USB 2.0, comunicația se va face prin versiunea 1.1, iar dacă se conectează un dispozitiv USB 3.1 la portul USB 2.0 al raspberry pi-ului, acestea vor comunica folosind versiunea 2.0. Gama de dispozitive ce pot fi conectate prin USB este foarte mare și variază de la periferice cum ar fi tastaturi până la modem-uri 4G.[21]

Cea mai simplă modalitate de a integra mai multe raspberry pi-uri la o soluție centralizată este folosind protocolul TCP/IP, fie folosind dispozitive periferice conectate prin magistralele prezentate mai sus ori alegând modele de raspberry pi ce conțin interfețele dorite integrate. Modelul TCP/IP are patru niveluri: aplicație, transport, rețea (sau internet), acces la rețea.

Încapsularea datelor TCP/IP

Nivelul de aplicație se referă la protocoalele de nivel înalt cum ar fi HTTP, NTP, TELNET, FTP, DNS etc., majoritatea aplicațiilor funcționează de obicei după modelul client-server unde server-ul folosește porturi fixe iar clientul porturi temporare.

Nivelul de transport se ocupă de problemele legate de siguranță, controlul fluxului și corecția de erori. Acest nivel folosește două protocoale capăt-capăt, TCP și UDP, TCP (Transmission Control Protocol) este un protocol sigur cu o corecție bună a erorilor și care ține cont de capacitatea receptorului de a primi pachete, UDP(User Datagram Protocol) este un protocol mai puțin sigur fără corecția erorilor dar care oferă latențe mai bune și este foarte folosit în aplicații de transmisie a imaginilor sau a vocii unde latența este mai importantă decât acuratețea.

Nivelul de rețea asigură rutarea pachetelor de la sursă la destinație folosindu-se și de protocoale cum ar fi ICMP. Ruta între rețeaua sursă și rețeaua destinație se determină la acest nivel.

Nivelul de acces la rețea se ocupă de transmiterea pachetului IP pe o legătură fizică.[22]

Proiectare tehnologică

Generalități

Sistemul de operare folosit este Raspbian Jessie cu Pixel. Raspbian-ul este sistemul de operare suportat oficial și asigurat de către fundația Raspberry Pi, a fost finalizat în iulie 2012 ca proiect independent al lui Mike Thompson și Peter Green, se bazează pe Debian linux și este foarte bine optimizat pentru procesoarele de tip ARM folosite în gama de produse tip Raspberry Pi.[23]

Pixel sau Pi Improved Xwindows Environment Lightweight abreviat, este interfața grafică dezvoltată special pentru raspbian care este compusă din mediul de desktop LXDE modificat și managerul de ferestre Openbox cărora li s-a aplicat o temă nouă.[23]

Python este un limbaj de programare multifuncțional creat de Guido Van Rossum în 1989 și lansat în 1991. Van Rossum a rămas în fruntea comunității de dezvoltatori ce lucrează la îmbunătățirea acestuia și în ziua de astăzi. Python-ul pune accent pe simplitatea și curățenia codului folosind o sintaxă ce permite programatorilor să scrie codul într-o manieră mai clară și mai concisă decât în alte limbaje de programare cum ar fi C++ sau Java. Python folosește un sistem de tipizare dinamic iar administrarea memoriei se face automat prin intermediul unui serviciu denumit “Garbage Collector” ceea ce face ca tipul variabilelor să nu fie fixat la momentul declarării acestora, de fapt spre deosebire de C declarația variabilelor nu este necesară, ci este determinat de un interpretator în funcție de conținutul acestora sau de operațiile efectuate. Pe lângă folosirea tipurilor tradiționale de date, python introduce concepte noi, spre exemplu tablourile nu sunt statice, pot conține orice tipuri de date, chiar și funcții și pot fi modificate fără a declara sau a folosi funcții de manipulare a memoriei. Din punctul de vedere al sintaxei python-ul folosește multe construcții și cuvinte cheie cunoscute oricărui programator, conceptul unic fiind reprezentat de către delimitarea blocurilor de cod prin indentare. În C blocurile sunt delimitate prin intermediul acoladelor dar în Python acest lucru se face prin indentare, programatorii cu experiență vor indenta oricum codul indiferent de limbajul în care este scris deoarece oferă avantajul de a urmări vizual codul în comparație cu a ține minte că au fost deschise un anumit număr de acolade și fiecare cărei bucăți de cod aparține. Un alt avantaj al limbajului este multitudinea de biblioteci și librării.[24]

Apache este cel mai folosit server web din lume, dezvoltarea acestuia a început în 1995 și s-a bazat la început pe server-ul NCSA HTTPd, acesta a jucat un rol important în dezvoltarea internetului, ca urmare în 2009 a devenit primul server web care servea la acea dată mai mult de 100 de milioane de pagini web.[25]

PHP este un limbaj de programare conceput pentru a fi integrat în pagini web, în timpul procesării paginii web spre a fi servită către client, la întâlnirea interpretorului de cod PHP, prin modulul PHP, serverul web interpretează și executa codul, apoi servește clientului rezultatul produs de acest cod. PHP-ul poate fi folosit de asemenea ca limbaj de programare independent. PHP-ul a fost creat de către Rasmus Lerdof în 1994 și inițial era abrevierea cuvintelor Personal Home Page dar acum se referă doar la PHP: Procesor de Hypertext.[26]

MySQL este un sistem de management al bazelor de date. Numele provine din combinarea My care vine de la numele fetei co-fondatorului Michel Widenius și SQL care este abrevierea cuvintelor Structural Query Language. A fost creat inițial de o companie suedeză care se numea MySQL AB și a fost apoi preluată de către Oracle care menține versiunea gratuită dar a și dezvoltat pe lângă aceasta câteva versiuni cu plată care oferă funcționalitate adițională pentru cazuri specifice.[27]

Highcharts JS este un generator de grafice scris în javascript, a fost lansat în 2009 de către o companie norvegiană denumită Highsoft cu intenția de a oferi o modalitate simplă de a adăuga grafice în aplicațiile web. Politica firmei permite folosirea nerestricționată a librăriilor lor în scopuri personale sau didactice, licență fiind necesară doar pentru utilizarea comercială.[28]

Minimal Kiosk Browser sau kweb este un browser minimalist și eficient scris special pentru raspberry pi. Modul chioșc poate fi folosit ca interfață pentru diverse aplicații, cum este și cazul de față unde nu se dorește ca utilizatorul care vizualizează informațiile direct din aparat sa aibă acces la alte pagini web prin tastarea adresei sau la alte funcții ale sistemului de operare.[29]

Diagrama logică

Partea 1 a diagramei logice

Partea a 2-a a diagramei logice

Partea a 3-a a diagramei logice

Partea a 4-a a diagramei logice

Partea a 5-a a diagramei logice

Legendă diagramă logică

Diagrama logică este împărțită în cinci figuri, fiecare reprezentând o bucată diferită a programului:

În figura 21 este reprezentată partea programului care controlează semafoarele, și de asemenea pornirea și sfârșitul programului. După pornire se importă cele patru librării de care este nevoie pentru a rula programul:

Librăria pigpio prin care se accesează serviciul pigpiod prin intermediul căruia se controlează pinii de General Purpouse Input Output sau GPIO.

Librăria time este folosită pentru a iniția prin intermediul funcției sleep o pauză pentru un timp definit la începutul programului pentru ca sistemul de operare să aibă timp să pornească celelalte servicii de care depinde programul.

Librăria datetime conține funcții de extragere a datei și a timpului la microsecundă din ceasul sistemului de operare, de asemenea permite operațiuni cu variabile de tip dată și timp care sunt definite tot de această librărie.

Librăria MySQLdb crează o conexiune cu serverul MySQL care crează o conexiune tip terminal și care prin anumite funcții trimite comenzi terminalului și citește rezultatele afișate de acesta.

Inițializarea și declarația variabilelor constă în definirea pinilor ca intrare sau ieșire și pregătirea variabilelor pentru primul ciclu al programului. După inițializare se intră într-o buclă infinită care funcționează atâta timp cât nu s-a efectuat o comandă de întrerupere a programului cum ar fi CTRL+C în terminalul de unde a fost lansat, durata de timp de la plecarea din condiția ce decide dacă se iese din program până când se ajunge din nou în această condiție reprezintă un ciclu al programului.

Toate instrucțiunile din figura 21 ce se află după condiția ce compară secunda actuală pe care o extrage din ceasul sistemului de operare cu o variabilă ce are rolul de a ține minte valoarea secundei la ultimul rezultat fals al condiției rulează în urma acestei operațiuni doar odată pe secundă la primul ciclu din secunda respectivă. Atât timp cât secunda actuală nu se schimbă decizia va returna adevărat și va trece peste toate instrucțiunile din figura 21, Deoarece un ciclu al programului are o durată de aproximativ 10 milisecunde în afara cazului primului ciclu, programul va rula aceste instrucțiuni aproximativ odată la 99 de cicluri.

La fiecare rezultat fals al condiției de comparație al secundei actuale cu containerul acesteia programul decrementează o variabilă denumită counter stradă asigurând o decrementare pe secundă și în funcție de valoarea acestei variabile și a stării semafoarelor decide dacă aprinde galbenul sau dacă schimbă starea semafoarelor. Variabilele timp normal, timp prioritar, timp neprioritar nu pot fi schimbate în timpul rulării programului, pentru a modifica aceste valori care sunt definite la inițializarea variabilelor trebuie modificate în program și repornit programul. În acest caz valorile de timp normal este de 10 secunde, timp prioritar este 20 de secunde și timp neprioritar este 10 secunde. Acești timpi sunt alocați variabilei counter stradă în funcție de variabila de prioritate pe care o citește din baza de date în figura 25 la sfărșitul primului ciclu al programului și apoi odată pe secundă în același fel cum rulează blocul de comenzi din figura 21. Deoarece rulează odată pe secundă, în interiorul blocului ce controlează semafoarele din figura 21, a fost introdus încă un bloc de cod care verifică dacă variabila mesaj trecere roșu care inițial este 0 este mai mare decât 0, dacă este modifică în baza de date o înregistrare din 0 în 1 iar pagina web afișează mesajul de trecere roșu până când decrementând variabila mesaj trecere roșu la fiecare rulare a instrucțiunilor aceasta devine 0 și în acel caz se modifică înregistrarea din baza de date care anunță pagina web să afișeze mesajul de trecere pe roșu în 0 astfel dezactivând afișarea acestuia.

În figura 22 este blocul de instrucțiuni care numără mașinile intrate în intersecție de pe fiecare stradă în parte, acest lucru îl face mai întâi comparând starea senzorului cel mai apropiat de mijlocul intersecției cu o variabilă ce conține starea aceluiași senzor din ciclul precedent, dacă starea actuală este egală cu starea precedentă se ține într-o variabilă specifică străzii valoarea 0, dacă starea actuală a senzorului este diferită de starea precedentă și senzorul este activ (este o mașină prezentă pe senzor) se ține într-o variabilă specifică străzii valoarea 1, se actualizează variabila ce ține starea senzorului cu starea actuală și dacă variabila din figura 21 care indică starea semaforului de pe strada pe care este senzorul indică faptul că este roșu se atribuie valoarea de durată a afișarii mesajului de trecere pe roșu. Acest lucru se face în figura 22 pentru fiecare stradă în parte și la sfârșitul figurii dacă s-a detectat o mașină pe oricare din senzorii apropiați intersecției se deschide conexiunea cu baza de date și se incrementează valoarea numărului de mașini trecute pe străzi cu valoarea variabilei specifice fiecarei străzi. Variabila stării precedente al senzorilor asigură incrementarea doar în primul ciclu în care se detectează mașina pe senzor, pentru a se incrementa din nou o stradă trebuie ca senzorul să se dezactiveze și apoi să se activeze din nou.

În figurile 23 și 24 se calculează viteza medie pentru cele patru străzi, străzile 1.1 și 1.2 în figura 23 și străzile 2.1 și 2.2 în figura 24. Procedura este aceeași pentru fiecare stradă în parte, și anume: mai întâi se verifică starea senzorului periferic și dacă setarea senzorului este diferită de variabila în care se ține valoarea precedentă a senzorului periferc și valoarea acestuia indică prezența unei mașini, se actualizează valoarea variabilei care ține valoarea secundei precedente cu valoarea secundei actuale, se ține într-o variabilă CEAS_MEDIE ceasul la microsecundă și se ține în o variabilă de evidență că a trecut o mașină pe senzorul periferic. În continuare indiferent de deciziile condițiilor precedente se verifică starea senzorului central și dacă difera de valoarea variabilei ce ține valoarea sa din ciclul precedent, dacă este diferită, se actualizează variabila ce ține valoarea stării precedente a senzorului central, se verifică dacă este mașină prezentă pe senzorul central și dacă variabila de evidență indică faptul că a fost mașină prezentă pe senzorul periferic se calculează viteza medie a mașinii făcând diferența dintre ceasul actual și ceasul din variabila CEAS_MEDIE și se împarte 1 la această diferență, se actualizează variabila de evidență a mașinii trecute pe senzorul periferic cu nici o mașină trecută, se introduce valoarea vitezei medii într-un tablou pe poziția secundei actuale și viteza medie se calculează adunând toate valorile din tabloul în care se țin valorile vitezelor medii și împărțind suma la numărul valorilor din tablou mai mari decât zero, dacă nu se calculează viteza medie a unei mașini timp de o secundă, valoarea poziției din tablou egală cu secunda respectiva va fi zero. Poziția 60 a tabloului este folosită pentru a stoca viteza medie de pe strada curentă. Acest bloc de instrucțiuni se repetă pentru fiecare stradă în parte.

În figura 25 se citesc și scriu datele în și din baza de date, instrucțiunile din figura 25 rulează doar odată pe secundă pentru a reduce deschiderea și închiderea conexiunii cu baza de date astfel reducând durata în medie a unui ciclu. Prima dată se verifică dacă există tabelele și le crează cu valori implicite dacă nu există apoi scrie datele în baza de date și citește variabila de prioritate.

Prezentarea programului software

În figura 26 se arată intercomunicația dintre programele folosite și cum ar funcționa o eventuală legătură la un post central. Această legătură se poate face de la Raspberry Pi către o rețea internă în care să se afle și postul central ori folosind conexiuni securizate prin internet sau conexiuni dedicate cum ar fi dark fiber, sunt prezentate ambele cazuri deoarece în cazul existenței mai multor posturi locale este posibil ca în unele locuri să nu existe soluție tehnică de a aduce o conexiune fizică și în acest caz se poate folosi spre exemplu o soluție GPRS prin care să se facă o conexiune securizată către postul central. Legătura la monitor se face prin portul fizic HDMI dar afișarea interfeței softului se face folosind interfața grafică a sistemului de operare (GUI) și un browser ce rulează în mod chioșc. Nu este obligatoriu ca oricare din programele Apache cu PHP, MySQL sau Python să ruleze pe raspberry pi-ul care are pinii GPIO conectați direct la echipamentele din intersecție, serverul web apache poate fi rulat și extern, pe un alt calculator cu condiția să aibă acces prin intermediul unei rețele la baza de date ce se află pe raspberry pi-ul din intersecție, astfel eliberând din resursele postului local.

Comunicația între programe și interfațarea cu exteriorul

Softul este compus din trei părți:

Programul scris în python citește starea tuturor senzorilor și comandă starea semafoarelor din intersecție, calculează viteza medie din ultimele 60 de secunde a mașinilor care intră în intersecție de pe fiecare stradă în parte, monitorizează dacă a intrat o masină în intersecție atunci când culoarea semaforului de pe strada respectivă era roșie, crește timpul de verde în funcție de parametrii citiți din baza de date și numără câte mașini au intrat în intersecție în funcție de dată, oră și stradă, toate aceste informații le scrie și citește din și în baza de date prin intermediul librăriei MySQLdb.

Baza de date MySQL este folosită pentru a stoca informațiile despre mașinile intrate în intersecție dar de asemenea asigură o legătură între interfața grafică (pagina web) și programul python care citește starea senzorilor și comandă semafoarele. Aceasta rulează pe portul implicit 3306 poate fi accesată pe acest port local sau de la distanță. Prin intermediul bazei de date se transmite din python starea intersecției paginii web și se transmite programului python din pagina web de statistici starea priorității de verde pe stradă. Structura bazei de date este formată din următoarele tabele:

Tabelul _live are un singur rând și următoarele capete de coloană:

Id care reprezintă indexul rândului, se crează și incrementează automat

verde_str1 are ca valoare 0 ceea ce înseamnă că este roșu sau 1 ceea ce înseamnă că este verde pe strada 1

verde_str2 are ca valoare 0 ceea ce înseamnă că este roșu sau 1 ceea ce înseamnă că este verde pe strada 2

prioritate este singura valoare pe care o citește programul python, dacă este 0 atunci timpii de verde al ambelor străzi vor fi egali și vor avea valoarea declarată la începutul programului pentru acest caz, dacă este 1 atunci timpul de verde pentru strada 1 va avea valoarea timpului prioritar și strada 2 va avea valoarea timpului neprioritar, ambii timpi fiid declarați la începutul programului python, dacă este 2 timpul de verde pentru strada 1 este timpul neprioritar și timpul pentru strada 2 este timpul prioritar. Ca măsură de precauție fiind singura valoare transmisă către programul python dacă intervine o eroare neprevăzută și această variabilă are orice altă valoare în afară de 0, 1, 2, inclusiv alt tip de variabilă spre exemplu de tip string, programul va funcționa pe cazul de prioritate 0.

timp_verde reprezintă timpul cât va mai fi verde pe oricare dintre străzi

r11 poate avea valoarea 1 sau 0 dacă este 1 pagina web afișează mesajul că s-a trecut pe roșu pe strada 1.1

r12 poate avea valoarea 1 sau 0 dacă este 1 pagina web afișează mesajul că s-a trecut pe roșu pe strada 1.2

r21 poate avea valoarea 1 sau 0 dacă este 1 pagina web afișează mesajul că s-a trecut pe roșu pe strada 2.1

r22 poate avea valoarea 1 sau 0 dacă este 1 pagina web afișează mesajul că s-a trecut pe roșu pe strada 2.2

Tabelul _senzori are un singur rând și următoarele capete de coloană:

Id care reprezintă indexul rândului, se crează și incrementează automat

senzor11 poate avea valoarile 0, 1, 2, 3, în cazul în care este 0 pagina web interpretează că pe strada 1.1 nu este prezentă nici o mașină, dacă este 1 înseamnă că este o mașină pe senzorul central al străzii 1.1, dacă este 2 înseamnă că este o mașină pe senzorul periferic al străzii 1.1, dacă este 3 înseamnă că este mașină prezentă pe ambii senzori de pe strada 1.1.

senzor12 poate avea valoarile 0, 1, 2, 3, în cazul în care este 0 pagina web interpretează că pe strada 1.2 nu este prezentă nici o mașină, dacă este 1 înseamnă că este o mașină pe senzorul central al străzii 1.2, dacă este 2 înseamnă că este o mașină pe senzorul periferic al străzii 1.2, dacă este 3 înseamnă că este mașină prezentă pe ambii senzori de pe strada 1.2.

senzor21 poate avea valoarile 0, 1, 2, 3, în cazul în care este 0 pagina web interpretează că pe strada 2.1 nu este prezentă nici o mașină, dacă este 1 înseamnă că este o mașină pe senzorul central al străzii 2.1, dacă este 2 înseamnă că este o mașină pe senzorul periferic al străzii 2.1, dacă este 3 înseamnă că este mașină prezentă pe ambii senzori de pe strada 2.1.

senzor22 poate avea valorile 0, 1, 2, 3, în cazul în care este 0 pagina web interpretează că pe strada 2.2 nu este prezentă nici o mașină, dacă este 1 înseamnă că este o mașină pe senzorul central al străzii 2.2, dacă este 2 înseamnă că este o mașină pe senzorul periferic al străzii 2.2, dacă este 3 înseamnă că este mașină prezentă pe ambii senzori de pe strada 2.2.

Tabela _viteza are un singur rând și următoarele capete de coloană:

Id care reprezintă indexul rândului, se crează și incrementează automat

medie_str11 conține valoarea vitezei medii de pe strada 1.1

medie_str12 conține valoarea vitezei medii de pe strada 1.2

medie_str21 conține valoarea vitezei medii de pe strada 2.1

medie_str22 conține valoarea vitezei medii de pe strada 2.2

Tabelele în care se țin valorile numărului de mașini intrate în intersecție sunt de forma [AN]_[LUNĂ]_[ZI] valori pe care le extrage programul python din ceasul sistemului de operare, deci pentru fiecare zi în care a trecut cel puțin o mașină pe oricare din străzi va exista un tabel cu această denumire, având minim 1 și maxim 24 de rânduri, cu următoarele capetele de coloană:

Id care reprezintă indexul rândului, se crează și incrementează automat

ora reprezintă ora la care s-au înregistrat numărul de mașini de pe rândul respectiv, programul creează un rând nou numai dacă a trecut cel puțin o mașină pe oricare din străzi la acea oră

masini11 reprezintă numărul de mașini trecute în ora respectivă pe strada 1.1

masini12 reprezintă numărul de mașini trecute în ora respectivă pe strada 1.2

masini21 reprezintă numărul de mașini trecute în ora respectivă pe strada 2.1

masini22 reprezintă numărul de mașini trecute în ora respectivă pe strada 2.2

Interfața cu utilizatorul este o pagină web pusă la dispoziție prin intermediul server-ului web apache, acesta rulează pe portul 80 care este portul implicit pentru comunicații HTTP, pagina comunică cu baza de date prin intermediul codului PHP. Aceasta este împărțită în două părți prin intermediul tag-ului de frameset:

Partea de vizualizare în timp real a stării senzorilor, semafoarelor, a vitezei medii din ultimul minut pe fiecare stradă în parte, a priorității la verde, timpul cat va mai fi verde pe semafoarele care sunt pe culoarea verde și de asemenea afișează un avertisment de pericol un timp prestabilit dacă s-a trecut pe roșu. Aceasta pagina se reîmprospătează automat la 1 secundă pentru a actualiza datele citite din baza de date.

Partea de statistici unde prin intermediul a 3 butoane oferă utilizatorului posibilitatea de a modifica prioritatea pe o anumită strada sau să dea timp egal de verde tuturor străzilor, tot pe pagina de statistici sunt 3 câmpuri, câte unul pentru zi, lună, an unde utilizatorul poate introduce intervalul pentru care dorește să vizualizeze câte mașini au trecut prin intersecție, de pe ce stradă și un total al acestora, raportul poate fi vizualizat sub forma unui tabel sau sub forma unui grafic generat folosind librăria highcharts prin intermediul unui buton de trecere de la tabel la grafic. Informațiile pot fi generate astfel:

pe 24 de ore, în acest caz se introduc ziua, luna și anul

pe zile din lună, în acest caz câmpul de zi trebuie completat cu 0

pe luni dintr-un an, în acest caz câmpul de zi și câmpul de lună trebuie completate cu 0

Interfața web

Fiabilitate

Generalități

Din punct de vedere calitativ, fiabilitatea unui produs reprezintă capacitatea acestuia de a-și îndeplini sarcinile specificate într-un interval de timp prestabilit și în condiții specificate. Fiabilitatea este o caracteristică a unui produs în sensul că poate fi prevăzută în faza de proiectare, controlată în faza de fabricație, măsurată pe durata testării și menținută pe durata funcționării. Defectarea sau deteriorarea este proprietatea unui echipament de a-și modifica permanent caracteristicile în sensul de a nu își mai îndeplini funcțiile. Fiabilitatea sistemelor informatice depinde de fiabilitatea componentelor electrice ale fiecăruia.

Realizarea performanței produsului în timp cere o abordare care constă în anumite moduri de lucru, acestea au impact asupra fiabilității sistemelor electronice prin: selecția materialelor, compoziția structurală, toleranțele de proiectare, procesele și toleranțele de fabricație, tehnicile de asamblare, modurile de transport și mânuire, precum și normele de mentenanță și mentenabilitate.

După modul de manifestare, efectele și durata defecțiunilor se pot împărți în următoarele categorii și subcategorii:

După durată:

temporare – defecțiuni care apar o singură dată și dispar fără intervenție

intermediare – defecțiuni care apar aleatoriu și dispar după un interval de timp fără intervenție

permanente – defecțiuni care odată apărute nu dispar până la remedierea acestora

După legătura între defecțiuni:

În cazul apariției mai multor defecțiuni acestea se consideră întotdeauna succesive chiar dacă în mod eronat poate părea că defecțiunile se întâmplă simultan datorită duratei scurte de timp dintre două sau mai multe defecțiuni succesive:

independente – reprezintă mai multe defecțiuni care nu au legătura între ele

dependente – sunt generate de un stimul extern și apoi sunt produse în cascadă

În multe cazuri este dificil de identificat dacă defecțiunile sunt dependente sau independente. Ca măsură de siguranță se analizează fiecare defect independent și se caută ordinea logică de dependență.

după evidența observări defectării:

defecte evidente – sunt acele defecte care se constată imediat

defecte ascunse – sunt defecte greu identificabile și care necesită de multe ori aparatură și cunoștințe speciale

după modul de manifestare:

defecte cu apariție bruscă – sunt defecte cu manifestare instantanee și care sunt de obicei evidente

defecte cu manifestare lentă – sunt defecte ascunse

după aria de întindere:

parțiale – care produc limitări în funcționarea echipamentelor

totale – care produc întreruperi definitive și totale ale funcționării

Etapele de identificare a defectelor :

Anunțarea constatării defectării

Înregistrarea – orice defect se înregistrează conform procedurilor de autorităților de înregistrare

Devierea sau întreruperea – reprezintă întreruperea totală sau parțială în vederea constatării daunelor

Identificarea la nivel tehnic

Repararea sau înlocuirea

Probe funcționale

Punerea în funcțiune

Pentru o performanță ridicată a fiabilității sistemului este recomandabil ca dispozitivele electrice să fie folosite în șpații climatizate pentru a reduce variațiile de temperatură și umiditate ce pot afecta buna funcționare a echipamentelor.

Fiabilitatea echipamentelor de calcul este îmbunătățită prin utilizarea redundanței și prin controlul calității componentelor astfel:

dublarea sursei de alimentare – se pot utiliza UPS-uri pentru protecția tuturor echipamentelor dintr-un eventual rack sau cabinet dar raspberry pi-ul având un consum atât de mic poate avea separat un acumulator de 5V care să aibă o autonomie mult mai mare decât a unui UPS, reducând astfel uzura acestuia care este mai mare la oprire și la pornire decât în cazul unei funcționări continue

echiparea raspberry pi-ului cu carduri SD de calitate superioară și cu perioadă de garanție cât mai mari(exemplu SanDisk Extreme cu 30 de ani garanție)

verificarea periodică a componentelor echipamentului

Fiabilitatea raspberry pi-ului este foarte bună, Fundația raportând întoarcerea la garanție a doar 1% din toate raspberry pi-urile făcute vreodată, acest procent include modele care nu au funcționat în condiții ideale și pe cele defecte din cauza erorii umane.

Astfel se vor prevede în montaj filtre și protecții la tensiune.

O altă problemă este alegerea cablurilor și mufelor de interconectare în funcție de semnalele transmise în vederea asigurării unei fiabilități cât mai mari.

Componentele din structura echipamentelor sunt supuse unui ansamblu de solicitări în condiții reale de utilizare. Principalele tipuri de solicitări pentru componentele electrice și electronice sunt: electrice, termice și mecanice (șocuri și vibrații). De aceea se recomandă adăugarea unui radiator pe procesor pentru disiparea căldurii și montarea acestuia pe un suport ce are să fie echipat cu materiale care să absoarbă șocurile și vibrațiile.

În consecință solicitarea reală este complexă și constă în aplicarea unor energii, dintre care cel puțin una este utilă în regimul de funcționare al echipamentului.

Însă în afară de energie componentele sunt supuse și unor influențe ale materialului care există în mediul ambiant : aer, vapori de sare, substanțe corozive.

În momentul pătrunderii acestora în masa componentelor se produc modificări ale unor proprietăți fizice utile; ca și în cazul energiei aceste solicitării se manifestă prin procesul de uzură.

În condiții reale componentele echipamentelor sunt expuse unui regim de uzură atât din partea sarcinii utile cât și din partea ambianței. Componentele exercită o influență asupra mediului ambiant prin degajări de energie și de material (căldură, vibrații, gaze).

Cu alte cuvinte, în condiții reale, componentele echipamentelor sunt expuse unui regim de uzură atât din partea sarcinii utile cât și din partea ambianței. Totodată și componentele exercită o inf1uență asupra mediului ambiant, prin degajări de energie și de material (căldură, vibrații, gaze etc.). În figura 28. este ilustrat modul de interacțiune dintre componentă, sarcină (utilă) și mediul ambiant (definit ca ansamblu de energii și materiale).

interacțiunea dintre componentă, sarcină și mediu

Calcul de fiabilitate

Din cele expuse rezultă următoarele concluzii:

defectarea unei componente coincide cu momentul în care aceasta urmează o lege complet nouă de comportare (din punct de vedere funcțional);

defectarea este o consecință a faptului că energia înmagazinată (în componentă) depășește o anumită valoare critică;

punctul la nivelul căruia se manifestă defectul poate fi apreciat ca fiind rezistența componentei; această rezistență trebuie înteleasă în sensul unei proprietăți de a se opune defectării.

Uneori, în sistemele tehnice, defectarea unei componente antrenează și defectarea altora; în acest caz se produce o defectare în avalanșă, cauza fiind noua repartizare de energie care se face după o defectare.

În cazul general, pentru o componentă oarecare se demonstrează și se verifică experimental următoarea relație, numită ecuația fundamentală de deteriorare:

unde:

r – reprezintă rezistența instantanee

r0 – rezistența inițială

km – constantă data de concentrația materialelor în mediu și de natura lor

t – parametru timp;

– baza logaritmilor naturali

f(w) – o funcție ce depinde de energiile ce intră în procesul de reacție dintre

substanțele componente și ale ambianței.

Dacă factorii din mediul ambiant nu variază (ambianță constantă),

ecuația anterioară se poate pune sub forma:

De unde rezultă:

Deci, în conditii de ambianță constantă, rezistența descrește exponențial în timp. Dacă, în aceleași conditii, solicitarea aplicată (s) este egală cu rezistența componentei, are loc defectarea. Prin urmare, dacă r = s, atunci t = Td și relația de mai sus se poate scrie:

Se observă că pentru s = r0 rezultă Td = 0. Altfel spus, dacă unui element i se aplică o solicitare egală (sau mai mare) față de rezistența sa initială, defectarea se produce în momentul inițial; durata de viată în acest caz este nulă. În sfârșit, deoarece k > 0 (chiar și în condiții de depozitare), rezultă Td <; pot fi realizate, dacă este necesar, componente cu durată de viață foarte mare, dar nu infinită.

Prin reprezentarea grafică a ecuației de durată a vieții, se poate analiza procesul de defectare pentru diferite modele de variație a rezistenței sau solicitării. Astfel, în figura 29. b. este prezentat modul în care se obține valoarea duratei de viată atunci când se cunoaște variația în timp a rezistenței obiectului, iar solicitarea este constantă (de factorul constant 1/k se ține seamă prin scara din ordonată).

Dacă deteriorarea este independentă de gradul de solicitare, variația duratei de viață are loc conform modelului din figura 29 a. În sfârșit, pentru situația în care procesul de deteriorare depinde de solicitarea aplicată, duratele de viață se determină ca în figura 29 c.

Rezultă că, în general, durata de viață a unei componente nu este o proprietate strictă a sa; ea trebuie definită pentru ansamblul componentă – ambianță – sarcină utilă (fig. 28). Pentru creșterea duratei de viață, există prin urmare trei posibilități: mărirea rezistenței inițiale (r0), reducerea solicitării aplicate (s) și reducerea vitezei de deteriorare.

Durata de viață a echipamentelor

Un criteriu calitativ al fiabilității este restabilirea (reparabilitatea), definită ca proprietatea acestuia de a-și recăpăta în întregime capacitatea de funcționare după efectuarea reparațiilor.

După faza în care se determină, fiabilitatea poate fi:

precalculată (în faza de concepere, proiectare)

nominală (elaborare, fabricare, montare)

de întreținere tehnică (exploatare sau servire).

Prin natura lor, elementele (componentele) și sistemele reparabile sunt caracterizate prin capacitatea de restabilire: posibilitatea acestora de a-și restabili proprietățile ca urmare a operației de reparare.

Unele dintre acestea, la care restabilirea se poate face într-un timp relativ scurt, practic nu sunt scoase din funcțiune pe timpul reparațiilor altele, dimpotrivă, necesită scoaterea din funcțiune, pe un timp mai mult sau mai puțin îndelungat :

Restabilirea echipamentelor fără a fi scoase din funcțiune

Restabilirea echipamentelor cu scoaterea din funcțiune

Pentru aprecierea eficienței tehnice a elementelor și sistemelor, se utilizează noțiunea de disponibilitate: capacitatea unui dispozitiv de a fi în stare de funcționare la un moment dat. Evaluarea acestei capacități se face cu ajutorul coeficientului de disponibilitate:

în a cărui expresie s-au utilizat notațiile:

T – intervalul de timp considerat

T1 – durata reparației de rang I

timpul total (cumulat) al reparațiilor efectuate în intervalul de timp T.

Pe timpul scoaterii din funcțiune (deconectare funcțională) pentru reparație se pot preciza, în general, următoarele faze de restabilire:

apariția defectării;

constatarea ieșirii din funcțiune de către personalul de serviciu;

chemarea personalului de intervenție;

diagnoză tehnică (stabilirea cauzei);

demontare;

transport în laborator;

repararea propriu-zisă;

montare;

verificări finale, eventual simulări funcționale;

conectare (redare în funcțiune).

Dintr-un studiu statistic, efectuat asupra defectării aparaturii radioelectronice, a rezultat repartizarea din tabelul 6. privind cauzele și proveniențele defectărilor. Concluzia ce se poate trage, dacă se analizează și aceste date, este fermă: o bună fiabilitate nu se poate obține decât printr-o tratare corectă a problemelor tehnice în toate fazele de activitate, de la concepere până la utilizare.

cauzele și proveniențele defectărilor

Fiabilitatea este o problemă fundamentală a tehnicii actuale; ea reprezintă parametrul principal al calității, permițând aprecierea cantitativă a comportării în timp a elementelor și sistemelor, în conditiile de influență pe care o exercită factorii interni și externi. Prin aceasta, mai este definită ca reprezentând dinamica în timp a calității.

Determinarea timpului de bună funcționare.

Concluzii

Principalele concluzii referitoare la sistemele distribuite de management și monitorizare a intersecțiilor și care pot fi formulate ca urmare a studiului realizat în prezenta lucrare, sunt:

Monitorizarea automată a intersecțiilor crește nivelul de siguranță a participanților la trafic, datorită semnalizării automate a accidentelor și a incidentelor generate de încălcări ale legii în trafic (pătrundere în intersecție pe culoarea roșie a semaforului sau depășirea vitezei de circulație la intrarea în intersecție);

Contorizarea vehiculelor la nivelul fiecărui braț al unei intersecții poate asigura atât optimizarea fazelor de semaforizare, cât și analiza comportamentului intersecției dar și a fluxurilor majore de trafic în diferite intervale orare;

În cazul interconectării mai multor intersecții, interfața sub formă de pagină web oferă acces rapid și facil la toate informațiile de pe oricare din dispozitive în timp real, chiar și pe teren de pe orice dispozitiv ce are un browser web rudimentar. Pentru cazul în care se dorește ca raspberry pi-ul să fie izolat există de asemenea modalități de a vedea local datele.

În secundar, având în vedere experiența acumulata în materie de micro-calculatoare de proces, referitor la platformele tip raspberry se pot enunța următoarele:

În cazul interconectării mai multor dispozitive de acest tip se poate realiza foarte ușor un sistem centralizat care să aibă acces la bazele de date de pe toate dispozitivele conectate și în funcție de statisticile stocate de acestea se pot trimite de un sistem central automatizat comenzi de modificare a priorității pentru fluidizarea traficului către fiecare intersecție în parte.

Datorită multitudinii de protocoale și magistrale suportate de raspberry pi se pot adăuga o multitudine de periferice, module sau chiar alte microcontrolere care să fie comandate de acesta.

Fundația Raspberry pi oferă un modul de calcul ce conține toate facilitățile celui mai performant model într-un format compact, dedicat aplicațiilor industriale în care se dorește producția plăcilor de comandă și carcaselor acestora.

Pot fi conectați orice fel de senzori care pot da semnal normal închis sau normal deschis, senzorii de pe machetă emit un semnal normal închis, programul putând fi adaptat la tipul de ieșire a senzorului.

Dicționar explicativ de termeni și abrevieri

ITS – Intelligent Transport Systems

ERTICO – The European public-private partnership organisation for ITS

BESI – Bus Electronic Scanning Indicator

NEMA – National Electrical Manufacturers Association – Asociația Națională a Producătorilor din Domeniul Electric

ATC – Advanced Transportation Controller

VIP – video image processor – procesor de imagini video

ISDN – Integrated Services Digital Network

TDMA – Time Division Multiple Access – Acces multiplu prin divizarea timpului

CDMA – Code Division Multiple Access – Acces multiplu prin divizarea codului

GSM – Global System for Mobile Commnunications – Sisteme globale pentru comunicații multiple

SBC – Abreviat “Single Board Computer” înseamnă un calculator cu toate componentele necesare rulării pe o singură placă

EPROM – Abreviat “Eraseble Preogramable Read Only Memory” Memorie nevolatilă ce poate fi ștearsă

Bootare – inițializarea unui sistem computerizat

SoC – System on a Chip – integrat ce conține Procesor, RAM, placă video și alte componente

GPIO – General Purpose Input Output – intrare/ieșire cu scop multiplu programabil

RTC – Real Time Clock – Modul de menținere a orei și a datei

NTP – Network Time Protocol – protocol tip client-server prin intermediul căruia se actualizează ora și data

I2C – Inter-Integrated Circuit – magistrală de date

UART – Universal Asynchronous Receiver/Transmitter – magistrală de date

CLI – Command Line Interface – interfață pentru utilizator bazată pe text

SPI – Serial Peripheral Interface- interfață serială sincronă

Dark Fiber – Conexiune cap-cap pe fibră optică fără echipamente active intermediare

GUI – Graphical User Interface – Interfață grafică

Bibliografie

Malcoci, I., Popa, D., Otimizarea trasportului urban, Editura Tehnică, București, 1978.

http://www.referatele.com/fizica/IMPORTANTA-SEMAFORIZARII-IN-CE248.php

Banciu, Doina, ș. a., Inteligența în transporturi, Editura Capital, București, 2005.

http://www.torotech.ro/?page_id=12

https://www.fhwa.dot.gov/publications/research/operations/its/06108/02a.cfm

https://ops.fhwa.dot.gov/freewaymgmt/publications/frwy_mgmt_handbook/chapter15_01.htm

https://ro.wikipedia.org/wiki/RADAR

http://aspeckt.unitbv.ro/jspui/bitstream/123456789/171/1/COVACIU_Dinu-Analiza_vitezei.pdf

http://www.referatele.com/fizica/NOTIUNI-DE-TEORIE-A-SEMAFORIZA615.php

Banciu, Doina, ș. a., Sisteme inteligente de transport, Editura Tehnică, București, 2003.

Sachelarie, A., Golgoțiu, E., Trafic și securitate rutieră, Casa de Editură Venus, Iași, 2002.

https://en.wikipedia.org/wiki/Raspberry_Pi

https://www.element14.com/community/community/raspberry-pi/blog/2017/01/16/raspberry-pi-3-block-diagram

https://www.raspberrypi.org/documentation/hardware/raspberrypi/mechanical/Raspberry-Pi-Zero-V1.2-Mechanical.pdf

https://pinout.xyz/

https://www.adafruit.com/product/3400

How I2C Communication Works? Arduino and I2C Tutorial

https://en.wikipedia.org/wiki/I%C2%B2C

https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter

https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus

https://en.wikipedia.org/wiki/USB

https://en.wikipedia.org/wiki/Transmission_Control_Protocol

https://en.wikipedia.org/wiki/Raspbian

https://en.wikipedia.org/wiki/Python_(programming_language)

https://en.wikipedia.org/wiki/Apache_HTTP_Server

https://en.wikipedia.org/wiki/PHP

https://en.wikipedia.org/wiki/MySQL

https://www.highcharts.com/about

http://steinerdatenbank.de/software/kweb_manual.pdf

Anexa 1 – Pagină de catalog senzor infraroșu HD-DS25CM-3MM

Model: HD-DS25CM-3MM

Parametrii tehnici:

1. Distanța de inducție: 25cm

2. Modul de inducție: tipul de emisie (fără transparență) pe bază

3. Tensiune de operare: DC 3.0 VDC – 5.5VDC

4. Curent de operare: 10mA

5. Ieșire: 0V sau 5V NPN / PNP normal deschis (în mod normal închis la comanda)

6. Curent de ieșire: 100mA (releu de antrenare directă)

7. Unghiul emisie: liniar (infraroșu)

8. Unghiul de recepție: <10 grade

9. Timp de răspuns: 2ms

10. Temperatura de lucru 10.: -25 la 60 grade

11. Mediu de lucru: interior (nu este rezistent la apă)

12. Dimensiuni: lungime lățime înălțime 1cm 2cm 0.9cm

13. Lungime cablu: 15cm

14. Emisie: roșu = 5Vcc / linie neagră = GND

15. Recepție = 5Vcc / linie neagră = GND / linie alb roșu = OUT (NPN)

Anexa 2 – Pagină de catalog sursă alimentare T9060DV

Anexa 3 – Modificări aduse sistemului de operare

Overclock magistrală card SD (opțional):

sudo bash -c 'printf "dtparam=sd_overclock=100\nforce_turbo=1\ncore_freq=500\n" >> /boot/config.txt' ## Pt card 95MB/s citire 90MB/s scriere

sudo bash -c 'printf "dtparam=sd_overclock=80\nforce_turbo=1\ncore_freq=400\n" >> /boot/config.txt' ## Pt card 45MB/s citire 30MB/s scriere

Activare SSH:

sudo raspi-config

Actualizare Repository

sudo apt-get update

Actualizare NTP la 1 ora

sudo crontab –e

1 * * * * /etc/init.d/ntp restart

Instalare Server http, php5, MySQL, modul Mysql pentru python si php.

sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server php5-mysql python-mysqldb -y

sudo service apache2 restart

Dezactivare Screensaver in CLI (optional):

sudo bash -c 'printf "# turn off console blanking\nsetterm -blank 0\n" >> /etc/rc.local'

Dezactivare Screensaver in GUI (optional):

sudo apt-get install xscreensaver -y

Start->Preferences->Screensaver->Disable Screen Saver

Restart (opțional):

sudo reboot

Instalare browser și setare ca autostart in mod chiosc

wget http://steinerdatenbank.de/software/kweb-1.7.9.tar.gz

tar -xzf kweb-1.7.9.tar.gz

cd kweb-1.7.9

./debinstall

mkdir ~/.config/autostart

touch nano ~/.config/autostart/kweb.desktop

bash -c 'printf "[Desktop Entry]\nEncoding=UTF-8\nName=Connect\nComment=Checks internet connectivity\nExec=/usr/bin/kweb -JOK http://127.0.0.1" >> ~/.config/autostart/kweb.desktop'

Cron restart kweb la 8 ore pentru evitarea umplerii RAM-ului:

crontab -e

0 0 * * * pkill kweb && sleep 5 && export DISPLAY=:0.0 && /usr/bin/kweb -KOJ http://localhost &

0 8 * * * pkill kweb && sleep 5 && export DISPLAY=:0.0 && /usr/bin/kweb -KOJ http://localhost &

0 16 * * * pkill kweb && sleep 5 && export DISPLAY=:0.0 && /usr/bin/kweb -KOJ http://localhost &

Setare pornire serviciu GPIO și program python la startup

sudo bash -c 'printf "pigpiod\npython /home/pi/intersectie_v6.py &\n" >> /etc/rc.local'

Anexa 4 – Cod sursă program python

# Import librarii:

import pigpio

import time

import datetime

import MySQLdb

# Date conexiune mysql:

mysql = {

'user': 'root',

'passwd': 'jabnuryar',

'host': '127.0.0.1',

'db': 'licenta',

}

# Declaratie variabile:

str1 = 1 # stare strada 1

str2 = 0 # stare strada 2

offset = 0 # Variabila secunda actuala pt rulare odata /sec

offset2 = 0 # Variabila secunda actuala pt rulare odata /sec

counter_str = 10 # variabila pt incrementare

prioritate = 0 # prioritatea strazilor

pas = 0.01 # Pauza dintre cicluri

timp_semafor_normal = 10 # 10s

timp_semafor_prioritate = 20 # 20s

timp_semafor_fara_prioritate = 10 # 10s

senzor11 = 0 # Stare senzori strada 11

senzor12 = 0 # Stare senzori strada 12

senzor21 = 0 # Stare senzori strada 21

senzor22 = 0 # Stare senzori strada 22

senzor11e = 0 # Evidenta stare precedenta senzor 1 strada 11

senzor12e = 0 # Evidenta stare precedenta senzor 1 strada 12

senzor21e = 0 # Evidenta stare precedenta senzor 1 strada 21

senzor22e = 0 # Evidenta stare precedenta senzor 1 strada 22

senzor1ev = [1,1,1,1] # Evidenta pt medie viteza stare precedenta senzor 1 strada 11,12,21,22

senzor2ev = [1,1,1,1] # Evidenta pt medie viteza stare precedenta senzor 2 strada 11,12,21,22

masina_de_masurat_viteza = [0] * 30 # Lista evidenta masini intre senzori

r11 = 0 # Evidenta trecere pe rosu strada 11

r12 = 0 # Evidenta trecere pe rosu strada 12

r21 = 0 # Evidenta trecere pe rosu strada 21

r22 = 0 # Evidenta trecere pe rosu strada 22

vector_viteza11 = [0] * 61 # Lista viteza masini / secunda str 11

vector_viteza12 = [0] * 61 # Lista viteza masini / secunda str 12

vector_viteza21 = [0] * 61 # Lista viteza masini / secunda str 21

vector_viteza22 = [0] * 61 # Lista viteza masini / secunda str 22

mesaj_rosu = 10 # Timpul de afisare al mesajului ca s-a trecut pe rosu

temp11s = 61 # Secunda actuala pentru calcul viteza str11

temp12s = 61 # Secunda actuala pentru calcul viteza str12

temp21s = 61 # Secunda actuala pentru calcul viteza str21

temp22s = 61 # Secunda actuala pentru calcul viteza str22

temp11m = 61 # Minut actual pentru calcul viteza str11

temp12m = 61 # Minut actual pentru calcul viteza str12

temp21m = 61 # Minut actual pentru calcul viteza str21

temp22m = 61 # Minut actual pentru calcul viteza str22

ceas_medie11 = datetime.datetime.now() # Variabila tip ceas pentru timp activare senzor 2 str 11

ceas_medie12 = datetime.datetime.now() # Variabila tip ceas pentru timp activare senzor 2 str 12

ceas_medie21 = datetime.datetime.now() # Variabila tip ceas pentru timp activare senzor 2 str 21

ceas_medie22 = datetime.datetime.now() # Variabila tip ceas pentru timp activare senzor 2 str 22

# Declaratie variabile pentru pini:

GPIO21 = 21 # Strada 1 verde

GPIO26 = 26 # Strada 1 rosu

GPIO09 = 9 # Strada 1 galben

GPIO20 = 20 # Strada 2 verde

GPIO19 = 19 # Strada 2 rosu

GPIO25 = 25 # Strada 2 galben

GPIO13 = 13 # Senzor 1 strada 1.1

GPIO16 = 16 # Senzor 2 strada 1.1

GPIO06 = 6 # Senzor 1 strada 1.2

GPIO12 = 12 # Senzor 2 strada 1.2

GPIO05 = 5 # Senzor 1 strada 2.1

GPIO07 = 7 # Senzor 2 strada 2.1

GPIO11 = 11 # Senzor 1 strada 2.2

GPIO08 = 8 # Senzor 2 strada 2.2

# Definire I/O pini:

pi = pigpio.pi('localhost') # Conectare la GPIO-ul local

pi.set_mode( GPIO13, pigpio.INPUT) # Declaratie pin 13 ca input

pi.set_pull_up_down(GPIO13, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 13

pi.set_mode( GPIO16, pigpio.INPUT) # Declaratie pin 16 ca input

pi.set_pull_up_down(GPIO16, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 16

pi.set_mode( GPIO06, pigpio.INPUT) # Declaratie pin 06 ca input

pi.set_pull_up_down(GPIO06, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 06

pi.set_mode( GPIO12, pigpio.INPUT) # Declaratie pin 12 ca input

pi.set_pull_up_down(GPIO12, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 12

pi.set_mode( GPIO05, pigpio.INPUT) # Declaratie pin 05 ca input

pi.set_pull_up_down(GPIO05, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 05

pi.set_mode( GPIO07, pigpio.INPUT) # Declaratie pin 07 ca input

pi.set_pull_up_down(GPIO07, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 07

pi.set_mode( GPIO11, pigpio.INPUT) # Declaratie pin 11 ca input

pi.set_pull_up_down(GPIO11, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 11

pi.set_mode( GPIO08, pigpio.INPUT) # Declaratie pin 08 ca input

pi.set_pull_up_down(GPIO08, pigpio.PUD_UP) # Activeaza circuitul pull-up pe pin 08

pi.set_mode(GPIO21, pigpio.OUTPUT) # Declaratie pin 21 ca output

pi.set_mode(GPIO26, pigpio.OUTPUT) # Declaratie pin 26 ca output

pi.set_mode(GPIO09, pigpio.OUTPUT) # Declaratie pin 09 ca output

pi.set_mode(GPIO20, pigpio.OUTPUT) # Declaratie pin 20 ca output

pi.set_mode(GPIO19, pigpio.OUTPUT) # Declaratie pin 19 ca output

pi.set_mode(GPIO25, pigpio.OUTPUT) # Declaratie pin 25 ca output

pi.set_PWM_frequency(GPIO21,100) # Setare output 21 ca PWM la 100 Hz pt control str1_verde

pi.set_PWM_frequency(GPIO26,100) # Setare output 26 ca PWM la 100 Hz pt control str1_rosu

pi.set_PWM_frequency(GPIO09,100) # Setare output 09 ca PWM la 100 Hz pt control str1_galben

pi.set_PWM_frequency(GPIO20,100) # Setare output 20 ca PWM la 100 Hz pt control str2_verde

pi.set_PWM_frequency(GPIO19,100) # Setare output 19 ca PWM la 100 Hz pt control str2_rosu

pi.set_PWM_frequency(GPIO25,100) # Setare output 25 ca PWM la 100 Hz pt control str2_galben

# Initializare PWM:

pi.set_PWM_dutycycle(GPIO21, 0)

pi.set_PWM_dutycycle(GPIO26, 0)

pi.set_PWM_dutycycle(GPIO09, 192)

pi.set_PWM_dutycycle(GPIO20, 0)

pi.set_PWM_dutycycle(GPIO19, 0)

pi.set_PWM_dutycycle(GPIO25, 192)

time.sleep(25) # Timp asteptare la boot ca serverul MySQL sa porneasca

# Functii:

def semafor(s1,s2,t1):

pi.set_PWM_dutycycle(GPIO21, 192*s1)

pi.set_PWM_dutycycle(GPIO26, 192*s2)

pi.set_PWM_dutycycle(GPIO09, 0)

pi.set_PWM_dutycycle(GPIO20, 192*s2)

pi.set_PWM_dutycycle(GPIO19, 192*s1)

pi.set_PWM_dutycycle(GPIO25, 0)

print("%s : Verde strada %s, Rosu strada %s") % (t1,((s1*1)+(s2*2)),((s1*2)+(s2*1)))

return

def senzori(s1,s2):

if s1 and s2:

s3 = 3

elif s1 == 0 and s2:

s3 = 2

elif s1 and s2 == 0:

s3 = 1

else:

s3 = 0

return s3

def galben(g1,g2):

if g1 == 0:

pi.set_PWM_dutycycle(GPIO20, 0)

pi.set_PWM_dutycycle(GPIO19, 0)

pi.set_PWM_dutycycle(GPIO25, 192)

elif g2 == 0:

pi.set_PWM_dutycycle(GPIO21, 0)

pi.set_PWM_dutycycle(GPIO26, 0)

pi.set_PWM_dutycycle(GPIO09, 192)

return

def live(c1,s1,s2):

if c1==1:

if prioritate == 0:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (timp_semafor_normal,s2,s1))

elif prioritate == 1 and s1 == 0:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (timp_semafor_prioritate,s2,s1))

elif prioritate == 1 and s2 == 0:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (timp_semafor_fara_prioritate,s2,s1))

elif prioritate == 2 and s1 == 0:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (timp_semafor_fara_prioritate,s2,s1))

elif prioritate == 2 and s2 == 0:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (timp_semafor_prioritate,s2,s1))

else:

cur.execute("UPDATE _live SET timp_verde = %d , verde_str1 = %s , verde_str2 = %s" % (c1-1,s1,s2))

return

# Inceput program

print("Scriptul ruleaza, Ctrl+C pentru a iesi")

# Inceput bucla infinita:

try:

while 1:

time.sleep(pas) # Se asteapta timpul definit in variabila pas

ceas = datetime.datetime.now() # Variabila completa data + timp

timp = datetime.time(ceas.hour,ceas.minute,ceas.second) # Ceas tip 02:03:07

# Citire inputuri

str11s1 = pi.read(GPIO13)

str11s2 = pi.read(GPIO16)

str12s1 = pi.read(GPIO06)

str12s2 = pi.read(GPIO12)

str21s1 = pi.read(GPIO05)

str21s2 = pi.read(GPIO07)

str22s1 = pi.read(GPIO11)

str22s2 = pi.read(GPIO08)

senzor11 = senzori(str11s1,str11s2)

senzor12 = senzori(str12s1,str12s2)

senzor21 = senzori(str21s1,str21s2)

senzor22 = senzori(str22s1,str22s2)

# Sfarsit citire inputuri

# Update Stare Semafoare

if ceas.second != offset: # Ce este in acest IF se ruleaza doar odata pe secunda dupa ceas

offset = ceas.second

counter_str = counter_str – 1

if counter_str < 3:

galben(str1,str2)

if counter_str < 1:

if str1 == 0:

str1 = 1

str2 = 0

semafor(1,0,timp)

if prioritate == 1:

counter_str = timp_semafor_prioritate

elif prioritate == 2:

counter_str = timp_semafor_fara_prioritate

else:

counter_str = timp_semafor_normal

else:

str1 = 0

str2 = 1

semafor(0,1,timp)

if prioritate == 1:

counter_str = timp_semafor_fara_prioritate

elif prioritate == 2:

counter_str = timp_semafor_prioritate

else:

counter_str = timp_semafor_normal

# Sfarsit Update Semafoare

# Actualizare timp afisare trecere pe rosu

if r11 > 0:

r11 = r11 – 1

else:

sql_r11 = 0

if r12 > 0:

r12 = r12 – 1

else:

sql_r12 = 0

if r21 > 0:

r21 = r21 – 1

else:

sql_r21 = 0

if r22 > 0:

r22 = r22 – 1

else:

sql_r22 = 0

# Sfarsit actualizare timp afisare trecere pe rosu

# Numarator masini intrate in intersectie

temp = 0

if str11s1 != senzor11e:

senzor11e = str11s1

if str11s1 == 0:

masini11 = 1

print("%s : Masina intrata in intersectie strada 11") % timp

if str1 == 0:

print("%s : S-a trecut pe rosu strada11") % timp

sql_r11 = 1

r11 = mesaj_rosu

else:

masini11 = 0

else:

masini11 = 0

if str12s1 != senzor12e:

senzor12e = str12s1

if str12s1 == 0:

masini12 = 1

print("%s : Masina intrata in intersectie strada 12") % timp

if str1 == 0:

print("%s : S-a trecut pe rosu strada12") % timp

sql_r12 = 1

r12 = mesaj_rosu

else:

masini12 = 0

else:

masini12 = 0

if str21s1 != senzor21e:

senzor21e = str21s1

if str21s1 == 0:

masini21 = 1

print("%s : Masina intrata in intersectie strada 21") % timp

if str2 == 0:

print("%s : S-a trecut pe rosu strada21") % timp

sql_r21 = 1

r21 = mesaj_rosu

else:

masini21 = 0

else:

masini21 = 0

if str22s1 != senzor22e:

senzor22e = str22s1

if str22s1 == 0:

masini22 = 1

print("%s : Masina intrata in intersectie strada 22") % timp

if str2 == 0:

print("%s : S-a trecut pe rosu strada22") % timp

sql_r22 = 1

r22 = mesaj_rosu

else:

masini22 = 0

else:

masini22 = 0

if masini11 or masini12 or masini21 or masini22:

con = MySQLdb.connect(**mysql) # Conectare MySQL

cur = con.cursor() # Cursor parcurgere BD

con_activ = 1

db_name = "%s_%s_%s" % (ceas.year, ceas.month, ceas.day)

cur.execute("CREATE TABLE IF NOT EXISTS %s (Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, ora INT NOT NULL, masini11 INT NOT NULL, masini12 INT NOT NULL, masini21 INT NOT NULL, masini22 INT NOT NULL)" % db_name)

cur.execute("SELECT * FROM %s" % db_name)

for i in range(cur.rowcount):

row = cur.fetchone()

if row[1] == ceas.hour:

temp = 1

masini11 = masini11+row[2]

masini12 = masini12+row[3]

masini21 = masini21+row[4]

masini22 = masini22+row[5]

if temp == 0:

cur.execute("INSERT INTO %s(ora, masini11, masini12, masini21, masini22) VALUES (%s, %s, %s, %s, %s)" % (db_name, ceas.hour, masini11, masini12, masini21, masini22))

else:

cur.execute("UPDATE %s SET masini11 = %s , masini12 = %s , masini21 = %s , masini22 = %s WHERE ora = %s" % (db_name, masini11, masini12, masini21, masini22, ceas.hour))

con.commit() # Aplica modificarile facute in baza de date

con.close() # Inchide conexiunea cu baza de date

con_activ = 0

# Sfarsit numarator masini intrate in intersectie

# Calcul viteza media intrare intersectie:

# Calcul strada 1.1

if str11s2 != senzor2ev[0]:

senzor2ev[0] = str11s2

if str11s2 == 1:

ceas_medie11 = datetime.datetime.now()

masina_de_masurat_viteza[11] = 1

if str11s1 != senzor1ev[0]:

senzor1ev[0] = str11s1

if str11s1 == 1 and masina_de_masurat_viteza[11] == 1:

ceas_delta11 = datetime.datetime.now() – ceas_medie11

viteza_masina11 = (ceas_delta11.seconds * 1000000) + ceas_delta11.microseconds

viteza_masina11 = 1000000 / viteza_masina11

vector_viteza11[ceas.second] = viteza_masina11

masina_de_masurat_viteza[11] = 0

temp11s = ceas.second

temp11m = ceas.minute

print timp, ": Timp pana a ajuns masina pe str11 la al 2-lea senzor:", ceas_delta11.seconds, "sec si", ceas_delta11.microseconds, "microsec"

print timp, ": Viteza masinii pe str11:", viteza_masina11, "m/s ,", (viteza_masina11*3.6), "km/h"

if temp11s != ceas.second or temp11m != ceas.minute:

vector_viteza11[ceas.second] = 0

temp = 0

for i in range(0,60):

if vector_viteza11[i] > 0:

temp = temp + 1

sum = 0

if temp != 0:

for i in range(0,60):

sum = sum + vector_viteza11[i]

if sum != 0:

vector_viteza11[60] = sum / temp

sql_vm11 = vector_viteza11[60]

else:

sql_vm11 = 0

# Sfarsit calcul strada 1.1

# Calcul strada 1.2

if str12s2 != senzor2ev[1]:

senzor2ev[1] = str12s2

if str12s2 == 1:

ceas_medie12 = datetime.datetime.now()

masina_de_masurat_viteza[12] = 1

if str12s1 != senzor1ev[1]:

senzor1ev[1] = str12s1

if str12s1 == 1 and masina_de_masurat_viteza[12] == 1:

ceas_delta12 = datetime.datetime.now() – ceas_medie12

viteza_masina12 = (ceas_delta12.seconds * 1000000) + ceas_delta12.microseconds

viteza_masina12 = 1000000 / viteza_masina12

vector_viteza12[ceas.second] = viteza_masina12

masina_de_masurat_viteza[12] = 0

temp12s = ceas.second

temp12m = ceas.minute

print timp, ": Timp pana a ajuns masina pe str12 la al 2-lea senzor:", ceas_delta12.seconds, "sec si", ceas_delta12.microseconds, "microsec"

print timp, ": Viteza masinii pe str12:", viteza_masina12, "m/s ,", (viteza_masina12*3.6), "km/h"

if temp12s != ceas.second or temp12m != ceas.minute:

vector_viteza12[ceas.second] = 0

temp = 0

for i in range(0,60):

if vector_viteza12[i] > 0:

temp = temp + 1

sum = 0

if temp != 0:

for i in range(0,60):

sum = sum + vector_viteza12[i]

if sum != 0:

vector_viteza12[60] = sum / temp

sql_vm12 = vector_viteza12[60]

else:

sql_vm12 = 0

# Sfarsit calcul strada 1.2

# Calcul strada 2.1

if str21s2 != senzor2ev[2]:

senzor2ev[2] = str21s2

if str21s2 == 1:

ceas_medie21 = datetime.datetime.now()

masina_de_masurat_viteza[21] = 1

if str21s1 != senzor1ev[2]:

senzor1ev[2] = str21s1

if str21s1 == 1 and masina_de_masurat_viteza[21] == 1:

ceas_delta21 = datetime.datetime.now() – ceas_medie21

viteza_masina21 = (ceas_delta21.seconds * 1000000) + ceas_delta21.microseconds

viteza_masina21 = 1000000 / viteza_masina21

vector_viteza21[ceas.second] = viteza_masina21

masina_de_masurat_viteza[21] = 0

temp21s = ceas.second

temp21m = ceas.minute

print timp, ": Timp pana a ajuns masina pe str21 la al 2-lea senzor:", ceas_delta21.seconds, "sec si", ceas_delta21.microseconds, "microsec"

print timp, ": Viteza masinii pe str21:", viteza_masina21, "m/s ,", (viteza_masina21*3.6), "km/h"

if temp21s != ceas.second or temp21m != ceas.minute:

vector_viteza21[ceas.second] = 0

temp = 0

for i in range(0,60):

if vector_viteza21[i] > 0:

temp = temp + 1

sum = 0

if temp != 0:

for i in range(0,60):

sum = sum + vector_viteza21[i]

if sum != 0:

vector_viteza21[60] = sum / temp

sql_vm21 = vector_viteza21[60]

else:

sql_vm21 = 0

# Sfarsit calcul strada 2.1

# Calcul strada 2.2

if str22s2 != senzor2ev[3]:

senzor2ev[3] = str22s2

if str22s2 == 1:

ceas_medie22 = datetime.datetime.now()

masina_de_masurat_viteza[22] = 1

if str22s1 != senzor1ev[3]:

senzor1ev[3] = str22s1

if str22s1 == 1 and masina_de_masurat_viteza[22] == 1:

ceas_delta22 = datetime.datetime.now() – ceas_medie22

viteza_masina22 = (ceas_delta22.seconds * 1000000) + ceas_delta22.microseconds

viteza_masina22 = 1000000 / viteza_masina22

vector_viteza22[ceas.second] = viteza_masina22

masina_de_masurat_viteza[22] = 0

temp22s = ceas.second

temp22m = ceas.minute

print timp, ": Timp pana a ajuns masina pe str22 la al 2-lea senzor:", ceas_delta22.seconds, "sec si", ceas_delta22.microseconds, "microsec"

print timp, ": Viteza masinii pe str22:", viteza_masina22, "m/s ,", (viteza_masina22*3.6), "km/h"

if temp22s != ceas.second or temp22m != ceas.minute:

vector_viteza22[ceas.second] = 0

temp = 0

for i in range(0,60):

if vector_viteza22[i] > 0:

temp = temp + 1

sum = 0

if temp != 0:

for i in range(0,60):

sum = sum + vector_viteza22[i]

if sum != 0:

vector_viteza22[60] = sum / temp

sql_vm22 = vector_viteza22[60]

else:

sql_vm22 = 0

# Sfarsit calcul strada 2.2

# Sfarsit calcul viteza medie intrare intersectie:

# Inceput scriere/citire date MySQL:

if ceas.second != offset2: # Ce este in acest IF se ruleaza doar odata pe secunda pt a nu ocupa mult procesor per ciclu

offset2 = ceas.second

con = MySQLdb.connect(**mysql) # Conectare MySQL

cur = con.cursor() # Cursor parcurgere BD

con_activ = 1

# Creare tabele daca nu exista

cur.execute("CREATE TABLE IF NOT EXISTS _live (Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, verde_str1 INT NOT NULL , verde_str2 INT NOT NULL , prioritate INT NOT NULL , timp_verde INT NOT NULL , r11 INT NOT NULL , r12 INT NOT NULL , r21 INT NOT NULL , r22 INT NOT NULL)")

cur.execute("CREATE TABLE IF NOT EXISTS _senzori (Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, senzor11 INT NOT NULL, senzor12 INT NOT NULL, senzor21 INT NOT NULL, senzor22 INT NOT NULL)")

cur.execute("CREATE TABLE IF NOT EXISTS _viteza (Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, medie_str11 INT NOT NULL, medie_str12 INT NOT NULL, medie_str21 INT NOT NULL, medie_str22 INT NOT NULL)")

# Initializare date live

cur.execute("SELECT * FROM _live")

if cur.rowcount == 0:

cur.execute("INSERT INTO _live(Id, verde_str1, verde_str2, prioritate, timp_verde, r11, r12, r21, r22) VALUES (1,1,0,0,1,0,0,0,0)")

# Actualizare date semafoare

live(counter_str,str1,str2)

# Initializare date viteza

cur.execute("SELECT * FROM _viteza")

if cur.rowcount == 0:

cur.execute("INSERT INTO _viteza(medie_str11,medie_str12,medie_str21,medie_str22) VALUES (0,0,0,0)")

# Citire variabila prioritate

cur.execute("SELECT * FROM _live")

row = cur.fetchone()

prioritate = row[3]

# Update tabel senzori

cur.execute("SELECT * FROM _senzori")

if cur.rowcount == 0:

cur.execute("INSERT INTO _senzori(Id, senzor11, senzor12, senzor21, senzor22) VALUES (1,0,0,0,0)")

cur.execute("UPDATE _senzori SET senzor11 = %s , senzor12 = %s , senzor21 = %s , senzor22 = %s" % (senzor11 , senzor12 , senzor21 , senzor22))

# Update tabel viteza medie:

cur.execute("UPDATE _viteza SET medie_str11 = %s , medie_str12 = %s , medie_str21 = %s , medie_str22 = %s" % (sql_vm11 , sql_vm12 , sql_vm21 , sql_vm22))

# Update tabel live trecere pe rosu

cur.execute("UPDATE _live SET r11 = %s , r12 = %s , r21 = %s , r22 = %s" % (sql_r11 , sql_r12 , sql_r21 , sql_r22))

con.commit() # Aplica modificarile facute in baza de date

con.close() # Inchide conexiunea cu baza de date

con_activ = 0

# Sfarsit scriere/citire date MySQL

# print timp,": Timp ciclu:",(datetime.datetime.now() – ceas)

except KeyboardInterrupt: # Daca se apasa CTRL + C iese din bucla si se face curatenie:

if con_activ == 1:

con.commit() # Aplica modificarile facute in baza de date

con.close() # Inchide conexiunea cu baza de date

galben(1,1)

time.sleep(1)

pi.stop()

Anexa 5 – Cod sursă pagini web

index.html:

<html>

<head>

<title>Licenta</title>

</head>

<frameset cols="50%,50%">

<frame src="live.php">

<frame src="statistici.php">

</frameset>

</html>

live.php:

<html>

<head>

<?php

//conectare mysql:

$servername = "localhost";

$username = "root";

$password = "jabnuryar";

$dbname = "licenta";

$con = mysqli_connect($servername, $username, $password, $dbname);

// Verifica conexiune:

if (!$con) {

die("Eroare MySQL: " . mysqli_connect_error());

}

echo "Conectare cu succes la MySQL <br />";

?>

<script>

setTimeout(function(){

window.location.reload(1);

}, 950);

</script>

</head>

<title>Licenta</title>

<body>

Live:

<br /><br />

<?php // Procesare date SENZORI

$sql = "SELECT * FROM _senzori";

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

while($row = mysqli_fetch_assoc($result)) {

if ($row["senzor11"] == 0) { echo "<br> Nici o masina nu e prezenta pe senzorii de pe strada 11"; }

if ($row["senzor11"] == 1) { echo "<br> Masina prezenta pe senzorul 1 de pe strada 11"; }

if ($row["senzor11"] == 2) { echo "<br> Masina prezenta pe senzorul 2 de pe strada 11"; }

if ($row["senzor11"] == 3) { echo "<br> Masina prezenta pe ambii senzori de pe strada 11"; }

if ($row["senzor12"] == 0) { echo "<br> Nici o masina nu e prezenta pe senzorii de pe strada 12"; }

if ($row["senzor12"] == 1) { echo "<br> Masina prezenta pe senzorul 1 de pe strada 12"; }

if ($row["senzor12"] == 2) { echo "<br> Masina prezenta pe senzorul 2 de pe strada 12"; }

if ($row["senzor12"] == 3) { echo "<br> Masina prezenta pe ambii senzori de pe strada 12"; }

if ($row["senzor21"] == 0) { echo "<br> Nici o masina nu e prezenta pe senzorii de pe strada 21"; }

if ($row["senzor21"] == 1) { echo "<br> Masina prezenta pe senzorul 1 de pe strada 21"; }

if ($row["senzor21"] == 2) { echo "<br> Masina prezenta pe senzorul 2 de pe strada 21"; }

if ($row["senzor21"] == 3) { echo "<br> Masina prezenta pe ambii senzori de pe strada 21"; }

if ($row["senzor22"] == 0) { echo "<br> Nici o masina nu e prezenta pe senzorii de pe strada 22"; }

if ($row["senzor22"] == 1) { echo "<br> Masina prezenta pe senzorul 1 de pe strada 22"; }

if ($row["senzor22"] == 2) { echo "<br> Masina prezenta pe senzorul 2 de pe strada 22"; }

if ($row["senzor22"] == 3) { echo "<br> Masina prezenta pe ambii senzori de pe strada 22"; }

$senzor11 = $row["senzor11"]+1;

$senzor12 = $row["senzor12"]+1;

$senzor21 = $row["senzor21"]+1;

$senzor22 = $row["senzor22"]+1;

}

} else {

echo "<br />0 rezultate din _senzori";

}

?>

<?php // Procesare date VITEZA MEDIE

$sql = "SELECT * FROM _viteza";

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

while($row = mysqli_fetch_assoc($result)) {

echo "<br />Viteza medie din ultimele 60s pe strada 11: " . $row["medie_str11"] . " m/s sau " . ($row["medie_str11"]*3.6) . " km/h";

echo "<br />Viteza medie din ultimele 60s pe strada 12: " . $row["medie_str12"] . " m/s sau " . ($row["medie_str12"]*3.6) . " km/h";

echo "<br />Viteza medie din ultimele 60s pe strada 21: " . $row["medie_str21"] . " m/s sau " . ($row["medie_str21"]*3.6) . " km/h";

echo "<br />Viteza medie din ultimele 60s pe strada 22: " . $row["medie_str22"] . " m/s sau " . ($row["medie_str22"]*3.6) . " km/h";

}

} else {

echo "<br />0 rezultate din _viteza";

}

?>

<br>

<?php //Procesare date LIVE

$sql = "SELECT * FROM _live";

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

while($row = mysqli_fetch_assoc($result)) {

echo "Verde str1 = " . $row["verde_str1"] . "<br>Verde str2 = " . $row["verde_str2"] . "<br>Prioritate=" . $row["prioritate"] . "<br>Timp Verde: " . $row["timp_verde"];

$str1 = ($row["verde_str1"]*2)+1;

$str2 = ($row["verde_str2"]*2)+1;

$rosu = 1;

if ($row["timp_verde"] <= 2){

if ($row["verde_str1"] == 1) {$str1 = 2;}

if ($row["verde_str2"] == 1) {$str2 = 2;}

}

if ($row["r11"] > 0) {

echo "<br />S-a trecut pe rosu din strada 11";

$rosu = 2;

}

if ($row["r12"] > 0) {

echo "<br />S-a trecut pe rosu din strada 12";

$rosu = 2;

}

if ($row["r21"] > 0) {

echo "<br />S-a trecut pe rosu din strada 21";

$rosu = 2;

}

if ($row["r22"] > 0) {

echo "<br />S-a trecut pe rosu din strada 22";

$rosu = 2;

}

}

} else {

echo "<br />0 rezultate din _live";

}

?>

<br>

<center>

<img src="img/sem12-<?php echo $str1;?>.jpg" height="150" width="150">

<img src="img/str12-<?php echo $senzor12?>.jpg" height="150" width="150">

<img src="img/sem21-<?php echo $str2;?>.jpg" height="150" width="150"><br>

<img src="img/str22-<?php echo $senzor22?>.jpg" height="150" width="150">

<img src="img/mij-<?php echo $rosu;?>.jpg" height="150" width="150">

<img src="img/str21-<?php echo $senzor21?>.jpg" height="150" width="150"><br>

<img src="img/sem22-<?php echo $str2;?>.jpg" height="150" width="150">

<img src="img/str11-<?php echo $senzor11?>.jpg" height="150" width="150">

<img src="img/sem11-<?php echo $str1;?>.jpg" height="150" width="150">

</center>

<?php // Inchidere conexiune cu serverul MySQL

mysqli_close($con);

?>

</body>

</html>

statistici.php:

<html>

<head>

<title>statistici</title>

<?php

//conectare mysql:

$servername = "localhost";

$username = "root";

$password = "jabnuryar";

$dbname = "licenta";

$con = mysqli_connect($servername, $username, $password, $dbname);

// Verifica conexiune:

if (!$con) {

die("Eroare MySQL: " . mysqli_connect_error());

}

echo "Conectare cu succes la MySQL <br />";

// Citire comanda butoane prioritate

if ($_GET['prioritate'] == 9) {

$sql="UPDATE _live SET prioritate=0";

mysqli_query($con,$sql);

} elseif ($_GET['prioritate'] == 1) {

$sql="UPDATE _live SET prioritate=1";

mysqli_query($con,$sql);

} elseif ($_GET['prioritate'] == 2) {

$sql="UPDATE _live SET prioritate=2";

mysqli_query($con,$sql);

}

?>

</head>

<body>

Statistici:

<br /><br />

Prioritate:

<table>

<form action="statistici.php" method="get">

<input type="hidden" name="prioritate" value="9">

<input type="submit" value="Fara Prioritate">

</form>

<form action="statistici.php" method="get">

<input type="hidden" name="prioritate" value="1">

<input type="submit" value="Prioritate Strada 1">

</form>

<form action="statistici.php" method="get">

<input type="hidden" name="prioritate" value="2">

<input type="submit" value="Prioritate Strada 2">

</form>

</table>

<br />

Statistici nr. masini intrate in intersectie:

<br />

<form action="statistici.php" method="get">

ZI:

<input type="text" name="zi" size="5" <?php if ($_GET['zi'] > -1) {echo "value=",$_GET['zi'];} else {echo "value=",date("j");} ?>>

LUNA:

<input type="text" name="luna" size="5" <?php if ($_GET['luna'] > -1) {echo "value=",$_GET['luna'];} else {echo "value=",date("n");} ?>>

AN:

<input type="text" name="an" size="5" <?php if ($_GET['an'] > 1) {echo "value=",$_GET['an'];} else {echo "value=",date("o");} ?>>

<input type="submit" value="Citeste Date">

</form>

<form action="statistici_graph.php" method="get">

<input type="hidden" name="zi" size="5" <?php if ($_GET['zi'] > -1) {echo "value=",$_GET['zi'];} else {echo "value=",date("j");} ?>>

<input type="hidden" name="luna" size="5" <?php if ($_GET['luna'] > -1) {echo "value=",$_GET['luna'];} else {echo "value=",date("n");} ?>>

<input type="hidden" name="an" size="5" <?php if ($_GET['an'] > 1) {echo "value=",$_GET['an'];} else {echo "value=",date("o");} ?>>

<input type="submit" value="Vizualizare Grafic">

</form>

<?php

if ($_GET['zi'] > 0) {

$sql = "SELECT * FROM ".$_GET['an']."_".$_GET['luna']."_".$_GET['zi'];

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

echo "<table border=1 valign=center><tr><td>Ora</td><td>Strada1.1</td><td>Strada1.2</td><td>Strada2.1</td><td>Strada2.2</td><td>TOTAL</td></tr>";

while($row = mysqli_fetch_assoc($result)) {

$summasini = ($row['masini11']+$row['masini12']+$row['masini21']+$row['masini22']);

echo "<tr><td>".$row['ora']."-".($row[ora]+1)."</td><td>".$row['masini11']."</td><td>".$row['masini12']."</td><td>".$row['masini21']."</td><td>".$row['masini22']."</td><td>".$summasini."</td></tr>";

}

echo "</table>";

} else {

echo "<br />0 rezultate gasite";

}

} elseif ($_GET['luna'] > 0) { //Genereaza date pe zi din luna

$str11 = array_fill(0,32,0);

$str12 = array_fill(0,32,0);

$str21 = array_fill(0,32,0);

$str22 = array_fill(0,32,0);

$sum = array_fill(0,32,0);

for ($i=1;$i<32;$i++) {

$sql = "SELECT * FROM ".$_GET['an']."_".$_GET['luna']."_".$i;

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

while($row = mysqli_fetch_assoc($result)) {

$str11[$i] = $str11[$i] + $row['masini11'];

$str12[$i] = $str12[$i] + $row['masini12'];

$str21[$i] = $str21[$i] + $row['masini21'];

$str22[$i] = $str22[$i] + $row['masini22'];

$sum[$i] = $sum[$i] + ($row['masini11']+$row['masini12']+$row['masini21']+$row['masini22']);

}

}

}

echo "Valori pe zile din luna: ".$_GET['luna'].".".$_GET['an'].":";

echo "<table border=1 valign=center><tr><td>Zi</td><td>Strada1.1</td><td>Strada1.2</td><td>Strada2.1</td><td>Strada2.2</td><td>TOTAL</td></tr>";

for ($i=1;$i<=cal_days_in_month(CAL_GREGORIAN, $_GET['luna'], $_GET['an']);$i++) {

echo "<tr><td>".$i."</td><td>".$str11[$i]."</td><td>".$str12[$i]."</td><td>".$str21[$i]."</td><td>".$str22[$i]."</td><td>".$sum[$i]."</td></tr>";

}

echo "</table>";

} elseif ($_GET['an'] > 2000) {

$str11_an = array_fill(0,13,0);

$str12_an = array_fill(0,13,0);

$str21_an = array_fill(0,13,0);

$str22_an = array_fill(0,13,0);

$sum_an = array_fill(0,13,0);

for ($j=1;$j<13;$j++) {

$str11 = array_fill(0,32,0);

$str12 = array_fill(0,32,0);

$str21 = array_fill(0,32,0);

$str22 = array_fill(0,32,0);

$sum = array_fill(0,32,0);

for ($i=1;$i<32;$i++) {

$sql = "SELECT * FROM ".$_GET['an']."_".$j."_".$i;

$result = mysqli_query($con, $sql);

if (mysqli_num_rows($result) > 0) {

while($row = mysqli_fetch_assoc($result)) {

$str11[$i] = $str11[$i] + $row['masini11'];

$str12[$i] = $str12[$i] + $row['masini12'];

$str21[$i] = $str21[$i] + $row['masini21'];

$str22[$i] = $str22[$i] + $row['masini22'];

$sum[$i] = $sum[$i] + ($row['masini11']+$row['masini12']+$row['masini21']+$row['masini22']);

}

}

}

for ($i=1;$i<32;$i++) {$str11_an[$j] = $str11_an[$j] + $str11[$i];}

for ($i=1;$i<32;$i++) {$str12_an[$j] = $str12_an[$j] + $str12[$i];}

for ($i=1;$i<32;$i++) {$str21_an[$j] = $str21_an[$j] + $str21[$i];}

for ($i=1;$i<32;$i++) {$str22_an[$j] = $str22_an[$j] + $str22[$i];}

for ($i=1;$i<32;$i++) {$sum_an[$j] = $sum_an[$j] + $sum[$i];}

}

echo "Valori pe luna din anul: ".$_GET['an'].":";

echo "<table border=1 valign=center><tr><td>Luna</td><td>Strada1.1</td><td>Strada1.2</td><td>Strada2.1</td><td>Strada2.2</td><td>TOTAL</td></tr>";

for ($j=1;$j<13;$j++) {

echo "<tr><td>".$j."</td><td>".$str11_an[$j]."</td><td>".$str12_an[$j]."</td><td>".$str21_an[$j]."</td><td>".$str22_an[$j]."</td><td>".$sum_an[$j]."</td></tr>";

}

echo "</table>";

}

?>

<?php // Inchidere conexiune cu serverul MySQL

mysqli_close($con);

?>

</body>

</html>

Similar Posts