Controlul Adaptiv al Traficului Dintr O Intersectie Semaforizata

Controlul adaptiv al traficului dintr-o intersecție semaforizată

Proiect de diplomă

CUPRINS

Introducere

Capitolul 1. Traficul rutier

1.1 Generalități

1.2 Istoria semafoarelor

1.3 Evoluția tehnologică

1.4 Automate de dirijare a circulației

Capitolul 2. Microncontrolerul ATMEGA 328

2.1 Microcontrolere – Generalități

2.2 Caracteristici generale și schema bloc

2.3 Porturi de intrare/ieșire

2.4 Timer

Capitolul 3. Sistemul de dezvoltare Arduino Uno

3.1 Generalități Arduino

3.2 Hardware Arduino Uno

3.3 Mediul de dezvoltare Arduino IDE

Capitolul 4. Registre de deplasare

4.1 Generalități

4.2 TPIC 6B595

Capitolul 5. Senzori Hall și led-uri utilizate

5.1 Senzori Hall – generalități

5.2 Leduri luminoase

Capitolul 6. Afișaj LCD

6.1 Caracteristici generale LCD

6.2 Exemplu cod

Capitolul 7. Realizare practică

7.1 Schema bloc proiect

7.2 Implementare și descriere functională

Concluzii

Bibliografie

Anexe

Lista figurilor

Figura 1.1 Semafor cu halogen[12]……………………………………………………………………………………17

Figura 1.2 Semafor cu leduri[11]………………………………………………………………………………………17

Figura 2.1 Schema bloc ATMEGA 328[19]……………………………………………………………………..23

Figura 3.1 Arduino Diecimila[6]……………………………………………………………………………………….26

Figura 3.2 Arduino Duemilanove[6]………………………………………………………………………………….26

Figura 3.3 Arduino UNO[6]……………………………………………………………………………………………..27

Figura 3.4 Arduino Leonardo[6]……………………………………………………………………………………….27

Figura 3.5 Arduino Mega[6]……………………………………………………………………………………………27

Figura 3.6 Arduino Nano[6]…………………………………………………………………………………………….27

Figura 3.7 Scut Adafruit Motor cu terminale cu șurub pentru conectarea la motoare[6]……………..27

Figura 3.8 Scut Adafruit cu date de logare cu un slot SD și cip cu ceas în timp real[6]………………28

Figura 3.9 Sistemul de dezvoltare Arduino Uno[6]……………………………………………………………..28

Figura 3.10 Sistemul de dezvoltare Arduino Uno(2)[6]……………………………………………………….30

Figura 3.11 Exemplu program simplu Arduino…………………………………………………………………..32

Figura 4.1 Driver 8 Led-uri 150 mA pe canal, inlănțuibil[18]……………………………………………..36

Figura 4.2 Diagrama logică[8]………………………………………………………………………………………….37

Figura 4.3 Formele de undă[8]………………………………………………………………………………………….37

Figura 5.1 Senzor Hall Honeywell SS441A[17]………………………………………………………………….40

Figura 5.2 Led galben luminos partea frontală[16]………………………………………………………………41

Figura 5.3 Led galben luminos partea din spate[16]…………………………………………………………….41

Figura 6.1 Afisaj LCD 1[10]…………………………………………………………………………………………….43

Figura 6.2 Afisaj LCD 2[10]…………………………………………………………………………………………….43

Figura 7.1 Schema bloc drivere si leduri……………………………………………………………………………45

Figura 7.2 Schema bloc conectare senzor Hall……………………………………………………………………46

Figura 7.3 Schema bloc afisaj LCD…………………………………………………………………………………..46

Figura 7.4 Afișaj grad de ocupare 0% …………………………………………………………………………….47

Figura 7.5 Starea de galben intermitent……………………………………………………………………………..48

Figura 7.6 Afișaj grad de ocupare 25%………………………………………………………………………………48

Figura 7.7 Simularea prezenței unui singur vehicul…………………………………………………………….49

Figura 7.8 Afișaj grad de ocupare 50%………………………………………………………………………………49

Figura 7.9 Simularea prezenței a 2 vehicule………………………………………………………………………50

Figura 7.10 Afișaj grad de ocupare 75%…………………………………………………………………………….50

Figura 7.11 Simularea prezenței a 3 vehicule…………………………………………………………………….51

Tabel 3.1 Caracteristici Arduino Uno………………………………………………………………………………..29

Lista acronimelor

A – Amper

AC – Alternative current ( CA – Curent alternativ)

ADC – Analog to digital converter ( Convertor analog digital)

ALU – Arithmetic Logic Unit ( unitatea aritmetică logică)

CISC – Complex instruction set computer (Set complex de instrucțiuni pentru calculator)

CPU – Central processing unit (Unitate centrală de procesare)

DAC – Digital to analog convertor (Convertor digital analog)

DC – Direct current (CC – Curent continuu)

EPROM – Erasable programmable read only memory (Memorie numai pentru citire care nu poate fi stearsă)

EEPROM – Electrically erasable programmable read only memory (Memorie numai pentru citire care poate fi stearsă electric)

GND – Ground (Împământare)

H – Henry

Hz – Hertz

I²C – Inter-Integrated Circuit (Circuit inter-integrat)

J – Joule

k – Kilo

KB – kilobyte

m – Mili

mm – Milimetru

M – Mega

MIPS – Million Instructions per Second (milioane de instrucțiuni pe secunda)

PWM – Pulse width modulation (Modulație în impulsuri)

RAM – Random access memory (Memorie cu acces aleatoriu)

RISC – Reduced instruction set computing (Set redus de instrucțiuni pentru calculator)

ROM – Read-only memory (Memorie numai pentru citire)

s – Secundă

SRAM – Static random acces memory (Memorie statică cu acces aleatoriu)

UART – Universal Asynchronous Receiver/Transmitter ( Receptor/Emitor universal asincron)

USB – Universal serial bus (Magistrală serială universală)

μ – Micro

VCC – Power supply pins (Pin de alimentare)

W – Watt

€ – Euro

° C – grad Celsius

° F – Farad

Introducere

Un automat de circulație reprezintă orice fel de aparatură destinată acționarii unei instalații electrice de semaforizare. Utilizarea unei astfel de instalații este justificată atunci când circulația normală a autovehiculelor este perturbată prin blocarea repetată a circulației pe căile de acces în intersecții sau prin formarea repetată a șirurilor de vehicule, cu asteptări mai mari de doua minute pe străzile secundare.

Odată cu progresul tehnologic și rapida ascensiune a traficului rutier, prin accentuarea activităților economice, numărul vehiculelor din marile conglomerări urbane este într-o continuă expansiune. Pentru a reduce la minim gradul de ocupare al intersecțiilor și pentru a stopa pe cât posibil apariția ambuteiajelor și a blocajelor de circulație este necesară dezvoltarea unor sisteme de control cât mai inteligente și mai utile.

Având în vedere cele prezentate mai sus, dar și faptul că pe parcursul facultății dintre materiile preferate pot aminti “Microcontrolere” sau “Electronică si informatică industriala” am luat decizia de a prezenta ca și temă de licența lucrarea “Controlul adaptiv al traficului dintr-o intersecție semaforizată”. Contribuția practică, propriu-zisă va consta din studiul posibilitaților de implementare a unui sistem de control al traficului rutier dintr-o intersecție semaforizată in forma de cruce. În final am ajuns la construirea machetei și a automatului de control constituit în jurul platformei de dezvoltare Arduino Uno, bazată pe microcontrolerul Atmega 328.

Cu ajutorul senzorilor Hall voi reuși să realizez semnalizarea traficului rutier și pietonal pe toate cele 4 direcții de mers în maniera următoare: dacă senzorii nu detectează nici o mașină în intersecție, starea permanentă a tuturor semafoarelor va fi de galben interminent, altfel se va da verde succesiv în functie de prezența vehiculelor. În această manieră se va sări peste ramura sau ramurile intersecției în care nu este detectată prezența nici unui vehicul și în această manieră timpul de așteptare este optimizat substanțial.

Am avut de asemenea în vedere că într-o intersecție majoritatea vehiculelor circulă inainte sau la dreapta și am ajuns la concluzia că atunci când vehiculele de pe un anumit sens au culoarea verde, pietonii imediat din stanga acelui sens vor avea și ei culoarea verde.

Evidențiez în final că eficiența acestui tip de sistem de control adaptiv al traficului este destul de ridicată și consider prin urmare că pe viitor ar fi util să avem cât mai multe automate de acest gen și în Romania.

Capitolul 1. Traficul Rutier

1.1 Generalități

Evoluția omenirii este în strânsă legătură cu posibilitățile de transport ale produselor activităților economice și cu realizarea relațiilor tot mai strânse între diferite grupuri de oameni.

S-a tot dezvoltat astfel, necesitatea perfecționării continue a mijloacelor de transport și crearea unor vaste rețele de transport. La scurt timp după inventarea automobilului rutier și trecerea la producția de masă a diverselor tipuri de autovehicule, s-a început dezvoltarea rețelelor de transport rutier, care leagă între ele marile orașe și practic toate localitățile unei țări. Centrele populate, urbane și rurale sunt direct afectate de creșterea mobilității populației și de circulația tot mai intensă a mărfurilor.

Prin transport rutier înțelegem toate operațiunile de transport care se realizează cu autovehicule rutiere pentru deplasarea mărfurilor sau a persoanelor chiar dacă vehiculul rutier este, pe o anumită porțiune a drumului, transportat la rândul său de un alt mijloc de transport.

Odată ce numărul de utilizatori ai drumurilor crește în mod vizibil, iar resursele oferite de infrastructurile actuale sunt limitate, problema traficului rutier a devenit una de interes major, lucru demonstrat și în numeroase articole științifice publicate în domeniu. Din această cauză, marile companii constructoare de mașini caută și găsesc soluții pentru fluidizarea traficului rutier, creșterea nivelului de siguranță a participanților, și nu în ultimul rând pentru protejarea mediului înconjurător.

1.2 Istoria semafoarelor

Semafoarele, cunoscute de asemenea și sub numele de lumini de semnalizare, sunt dispozitive de semnalizare amplasate în intersecțiile rutiere, la trecerile de pietoni și în alte locuri pentru a controla fluxurile concurente de trafic.

În istoria semafoarelor, un rol determinanat l-au avut căile ferate, care s-au dezvoltat, inițial, mult mai rapid decât căile rutiere. În anul 1848 englezul John Deakin, introduce, la căile ferate britanice, semnalizarea mecanică, prin pivotara unor semnale de cale, constituite din sticle colorate, care se deplasau prin fața unei lămpi fixe.

Mai târziu, în anul 1851, inginerul francez Etienne Jean-Joseph Lenoir a inventat un sistem de semnalizare pentru căile ferate. Tot el a mai inventat motorul cu ardere internă în doi timpi, cu aprindere electrică reușind apoi, în anul 1863 construirea primului motor cu ardere internă care funcționa cu benzină.

Primul semafor din istorie a fost instalade semnalizare amplasate în intersecțiile rutiere, la trecerile de pietoni și în alte locuri pentru a controla fluxurile concurente de trafic.

În istoria semafoarelor, un rol determinanat l-au avut căile ferate, care s-au dezvoltat, inițial, mult mai rapid decât căile rutiere. În anul 1848 englezul John Deakin, introduce, la căile ferate britanice, semnalizarea mecanică, prin pivotara unor semnale de cale, constituite din sticle colorate, care se deplasau prin fața unei lămpi fixe.

Mai târziu, în anul 1851, inginerul francez Etienne Jean-Joseph Lenoir a inventat un sistem de semnalizare pentru căile ferate. Tot el a mai inventat motorul cu ardere internă în doi timpi, cu aprindere electrică reușind apoi, în anul 1863 construirea primului motor cu ardere internă care funcționa cu benzină.

Primul semafor din istorie a fost instalat la Londra la data de 10 decembrie 1868, la intersecția dintre Bridge Street și Palace Yard și funcționa pe gaz. A fost promovat de inginerul de cale ferată J.P. Knights și era folosit pentru ghidarea trăsurilor și a tramvaielor cu cai în timpul nopții. Luminile erau reprezentate de lămpi de gaz închise în globuri de sticlă de culoare verde și roșie. Lanterna era montată pe un pivot de oțel de 7 metri care era rotit cu ajutorul unui levier de către un agent de poliție. La scurt timp de la instalarea acestuia a apărut o explozie, născându-se astfel numeroase îndoieli cu privire la siguranța acestuia. Conceptul a fost abandonat până în momentul în care semafoarele electrice au devenit disponibile.

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

Următorul pas a fost invenția din anul 1912 a lui Lester Wile, un polițist american, din Salt Lake City, care de asemenea a folosit lumini de culoare roșie-verde. Semaforul a fost instalat în anul 1914 cu un oarecare plus tehnic: o sonerie care atenționa cu privire la schimbarea culorilor.

Mai târziu, în anul 1918 a fost inaugurat la New York primul semafor electric cu 3 culori:

roșu, portocaliu și verde. Comenzile erau date manual de către o persoană cu atribuții în dirijarea circulației. Polițistul William Potts din Detroit a construit un semafor electric tot cu 3 culori care a fost montat și suspendat ca în zilele noastre.

În prezent semafoarele sunt utilizate în toată lumea. Acestea acordă în mod alternativ tuturor participanților la trafic dreptul la trecere prin afișarea celor trei lumini de culori standard menționate anterior, în urma unui cod de culoare universal. Secvența tipică a fazelor de culori este următoarea:

-semnalul de culoare verde care permite trecerea. Atunci când semaforul este însotit de una sau mai multe lămpi care emit lumina intermitentă de culoare verde sub forma uneia sau unor săgeți pe fond negru către dreapta, se permite trecerea numai în direcția indicată, oricare ar fi în acel moment semnalul în funcțiune al semaforului. Totuși, în această situație, conducătorii vehiculelor sunt obligați să acorde prioritate de trecere celorlalți participanți la trafic cu care se intersectează și care circulă conform semnificației culorii semaforului care li se adresează.

-semnalul de culoare galbenă care apare dupa semnanul verde. În această situație conducătorul vehiculului care se apropie de intersecție trebuie să opreasca cu excepția cazului în care, la apariția semnalului, se află atât de aproape de acele locuri, încât nu ar mai putea opri în condiții de maximă siguranță.

-semnalul roșu care interzice trecerea. La semnalul roșu, vehiculul trebuie oprit înaintea marcajului pentru oprire, sau în funcție de caz, pentru trecerile pietonilor, iar în lipsa acestuia, în dreptul semaforului. În momentul în care semnalul roșu funcționează concomitent cu cel galben, acesta anunță apariția semnalului verde.

Cronometrele cu numărătoare inversă au fost introduse în anii 1990. Acestea sunt folositoare pentru participanții la trafic pentru a planifica dacă au suficient timp pentru a încerca să treacă intersecția înaintea schimbării culorii.

Există, de asemenea, semafoare speciale pentru pietonii nevăzători, adică semafoare cu sunet, care urmează un anumit sistem de sunete pe care cei cu probleme de vedere îl cunosc.

S-au instalat și semafoare speciale pentru transportul în comun, acestea având un sistem diferit față de cel standard.

1.3 Evoluția tehnologică

La început, pentru semaforizare erau folosite becurile incandescente și cele cu halogen. Datorită eficienței reduse a fluxului luminos și pentru că aveau un singur punct de eșec s-a renunțat la ele în favoarea semafoarelor cu matrice cu LED-uri, care consuma mult mai puțină putere, produc mai multă lumină, au o durată de viață semnificativ mai mare, iar atunci când se defectează un singur led, ele continuă să funcționeze deși cu o intensitate luminoasă mult mai scăzută. Repartiția luminii unei matrici LED poate fi comparabilă din punct de vedere optic cu repartiția unui bec incandescent sau cu halogen.

Figura 1.1 Semafor cu halogen

Consumul relativ redus de energie al semafoarelor bazate pe LED-uri poate prezenta totuși un risc de conducere în unele zone pe timpul iernii. Spre deosebire de becurile incandescente și cu halogen, care, în majoritatea cazurilor sunt suficient de fierbinți pentru a topi zăpada așternută pe acestea, display-urile cu LED, folosind doar o fracțiune din energie, rămân prea reci pentru ca acest lucru să se întample.

Figura 1.2 Semafor cu leduri

În țările dezvoltate tehnologia a continuat să avanseze, existând în prezent o mișcare din ce în ce mai mare de a dezvolta și implementa semafoarele inteligente. În realitate, acestea sunt de fapt mai multe sisteme inteligente care reușesc să comunice șoferului viteza ideală cu care ar trebui să se deplaseze în așa fel încât la următoarea intersecție să prindă semaforul pe verde, și în acest mod să reducă ambuteiajele create în intersecții. Sistemul se bazează pe module de comunicații integrate în fiecare semafor, și care sunt capabile de a trimite mesaje spre mașinile din vecinătatea lor, alertându-le de timpul rămas până la următoarea fază verde.

În prezent, procesele sunt în plină desfășurare pentru punerea în aplicare a acestor semafoare avansate, dar există înca numeroase obstacole până la utilizarea pe scară largă, printre care numărul redus al automobilelor echipate cu sisteme capabile să comunice cu astfel de semafoare. O altă modalitate prin care evoluția tehnologică ajută semaforizarea se referă la alimentarea acestora de la panouri solare, protejând în acest fel mediul și evitând în același timp dificultăți venite în urma unor căderi de tensiune sau în urma unor dezastre naturale.

1.4 Automate de dirijare a circulației

Tipurile de semnale de trafic de control dintr-o intersecție furnizează o suită de apariții ale culorilor verde, galben-roșu, roșu precum și a indicațiilor speciale, fie singulare, fie în combinații de mișcări, pentru fiecare intrare. Semnalele de trafic pot fi prestabilite sau la cerere. Semnalele prestabilite repetă aceeași valoare a ciclului. Semnalele la cerere sunt capabile să răspundă prezenței autovehiculelor sau pietonilor, la un moment dat în intersecție. Aceștia, vehicule sau pietoni, sunt detectați, semnalele sunt transmise către aparatura logică de control, (automate de dirijare a circulației acționate de vehicule sau pietoni), și se răspunde cererii lor. Rolul acestei aparaturi este asigurarea unei distribuții potrivite între aparițiile succesive ale culorilor.

Când vorbim de automate de dirijare a circulației ințelegem orice tip de aparatură destinată acționării unei instalații electrice de semaforizare. Putem spune astfel că există patru tipuri mari de automate de dirijare a circulației:

1.automate de dirijare a circulației cu funcționare prestabilită;

2.automate de dirijare a circulației acționate de vehicule;

3.automate de dirijare a circulației semiacționate de vehicule;

4.automate de dirijare a circulației acționate de pietoni.

Automate de dirijare a circulației cu funcționare prestabilită

Pentru aceste automate, timpii de verde și în consecință duratele ciclurilor de funcționare ale semafoarelor sunt predeterminate și au o durată fixă. În România, la ora actuală sunt cele mai folosite tipuri. Ele pot funcționa pe baza unuia sau mai multor programe fixe predeterminate, ce pot fi exploatate în funcție de necesitățile traficului. Acest tip de automate au o serie numeroasă de avantaje cum ar fi:

-se potrivesc la o coordonare a dirijării circulației din mai multe intersecții dispuse într-un sistem liniar sau în rețea.

-funcționarea lor nu este condiționată de trecerea autovehiculelor peste o serie de detectori amaplasați pe accesele intersecției. Din această cauză, buna lor funcționare nu are de suferit din cauza unor vehicule oprite sau a unor lucrări de construcții sau reparații din raza suprafeței controlate.

-au o predispoziție ridicată pentru o exploatare în zonele cu volume mari de trafic de pietoni, unde, din cauza prea frecventelor acționări a butoanelor prin care pietonii solicită permisiunea de traversare a străzii, se pot produce multe confuzii în dirijarea traficului.

-prețul acestor automate cât și instalarea lor este aproape întotdeauna ieftină. În aceeași măsură, buna lor funcționare este mult mai ușor de asigurat.

Automate de dirijare a circulației acționate de vehicule

În cazul acestui tip de automate, duratele și succesiunea timpilor de verde sunt servite în funcție de cerințele de moment ale traficului, determinate prin intermediul unor detectori, instalați în mod normal pe toate accesele în intersecție.

În lipsa cererilor de acces în interesecție, semafoarele rămân la întamplare pe faza care a fost servită ultima. Automatele de acest tip beneficiază, în exploatare, de mai multe tipuri de facilități cum ar fi:

-timpul minim de traversare, adică cel mai scurt interval de timp care indică permisiunea de circulație. Valoarea acestui timp minim de traversare poate fi modificată pentru a satisface anumite condiții de teren.

-extinderea timpului minim de traversare: timpul pentru culoarea verde poate fi extins dincolo de limita timpului minim de traversare, la cererea vehiculelor care traversează detectorii de trafic. În acest mod, pentru fiecare vehicul care traversează la un anumit moment bucla inductivă, timpul minim este extins cu o anumită perioadă numită timpul minim extins pentru vehicul.

-timpul maxim predeterminat: este folosit pentru împiedicarea vehiculelor dintr-un anumit flux să aștepte prea mult atunci când nu există permisiunea de trecere, datorită unui flux continuu pe faza de trecere; este predeterminat un timp maxim, indiferent de situația extinderii timpului minim pentru un vehicul. Atunci când se realizează schimbarea permisiunii de trecere prin expirarea timpului maxim predeterminat, este făcută prevederea ca accesul în intersecție să fie redat căilor de acces de la care a fost luată de îndata ce condițiile pe celelalte accese permit aceasta.

-timpul maxim variabil: este o facilitate care permite timpului verde maxim să fie prelungit automat peste valoarea prestabilită, atunci când rata medie a fluxului de trafic la sfârșitul verdelui maxim predeterminat depășește o valoare critică, dinainte stabilită.

-succesiunea fazelor: de obicei, fazele se succed într-un mod ciclic într-o anumită ordine prestabilită. Totuși dacă nu există cerere a traficului pentru o anume fază de circulație, aceasta este exclusă automat. De asemenea, se poate face prevederea de revenire la o anumită fază, atunci când nu sunt cereri pentru alte faze.

Dintre avantajele acestui tip de automate putem enumera:

-eficiența este maximă in exploatare pentru intersecțiile în care fluctuațiile valorilor de trafic nu pot fi anticipate, și deci, programate anterior.

-eficiența acestor automate este maximă în cazul intersecțiilor complexe, unde anumite relații sunt sporadice sau prezintă mari fluctuații de volum și în cazul intersecțiilor având o stradă principală și una secundară.

-reducerea la minim a numărului opririlor și pornirilor, respectiv diminuarea întârzierilor nejustificate ale traficului străzii principale, în comparație cu automatele care funcționeaza pe bază de programe prestabilite.

Automate de dirijare a circulației semiacționate de vehicule

În această situație detectorii de trafic sunt instalați numai pe străzile laterale, deci cu un trafic scăzut sau chiar întâmplător. Permisiunea de circulație este menținută în mod normal pe strada cu traficul principal, fiind transferată imediat sau la sfârșitul unei perioade prestabilite străzii laterale, când există o cerere din partea acesteia, respectiv când un vehicul a trecut peste sonda de trafic aferentă străzii laterale.

Perioada pentru culoarea verde asociată străzii laterale, poate fi extinsă în mod normal la cereri succesive, până la un maxim prestabilit, dupa care permisiunea de trecere este redată străzii principale și nu mai poate fi luată decât la expirarea unei perioade, de asemenea, prestabilite.

Totuși în practică s-a demostrat, că pentru perioadele de timp cu trafic scăzut, automatele semiacționate de vehicule prezintă o rată ceva mai ridicată a accidentelor în comparație cu categoria automatelor acționate de vehicule. Aceasta se explică prin faptul că, în cele mai multe cazuri, automatul, deci semafoarele acționează imediat ce un vehicul a trecut peste sonda străzii laterale, determinând o întrerupere foarte arbitrară a fluxului principal.

De asemenea o situație periculoasă poate apărea atunci când, un vehicul din fluxul principal nu a putut opri la timp și un alt vehicul al străzii laterale a primit permisiunea de a intra în intersecție cu viteză. Din fericire acest pericol poate fi diminuat prin introducerea unei schimbări întârziate, facilitate ce face ca timpul de galben sau roșu să fie întârziat cu 1-2 secunde după ce prezența vehiculului pe strada secundară a fost înregistrată prin intermediul detectorului de trafic.

Automate de dirijare a circulației acționate de pietoni

Acest tip de automat este folosit, în principal, pentru protejarea trecerilor de pietoni peste arterele de circulație cu trafic intens. În urma solicitărilor de traversare ale pietonilor, automatele de acest tip asigură acestora permisiunea de traversare a străzii imediat, în cazul existentei unui gol în fluxul de vehicule sau, la sfârșitul unei perioade de timp prestabilite, în cazul în care acesta prezintă un caracter de continuitate.

O altă utilizare a automatelor acționate de pietoni este în legătură cu automatele complet sau semiacționate de vehicule, caz în care permisiunea de traversare pentru pietoni este servită numai în condițiile existenței unui gol în fluxul de trafic al străzii sau la expirarea timpului maxim predeterminat, aferent automatelor de dirijare a circulației acționate de vehicule.

Capitolul 2. Microcontrolerul ATMEGA 328

2.1 Microcontrolere – Generalități

Un controler este la modul cel mai general o structură electronică destinată controlului unui proces sau, și mai general decât atât, unei interacțiuni caractersitice cu mediul exterior, fără să fie necesară intervenția umană. Primele controlere de-a lungul timpului au fost realizate în tehnologii pur analogice, folosindu-se componente electronice discrete și componente electromecanice cum ar fi releele. Acelea care fac apel la tehnologia numerică modernă au fost realizate la inceput pe baza logicii cablate și a unei electronici analogice uneori complexe, motiv pentru care aveau dimensiuni foarte mari, consum energetic ridicat și in multe cazuri o fiabilitate care lasă de dorit.

Apariția și utilizarea microprocesoarelor pentru uz general a dus la o reducere semnificativă a costurilor, dimensiunilor, consumului și o imbunătățire vizibilă a fiabilității. Există și la ora actuală o serie de astfel de controlere de calitate, construite în jurul unor microprocesoare de uz general cum ar fi Z80 (Zilog), 8086/8088 (Intel), 6809 (Motorola).

O definiție cât mai generală a unui microcontroler ar fi aceea că este un microcircuit care încorporează o unitate centrală (CPU) și o memorie împreună cu resure care-i permit interacțiunea cu mediul exterior.

Toate aplicațiile în care se folosesc microcontrolere fac parte din categoria așa ziselor sisteme încapsulate-integrate, la care prezența unui sistem de calcul încorporat este aproape transparentă pentru utilizator.

Printre domeniile unde utilizarea lor este un standard industrial se pot menționa: în industria automobilelor (controlul aprinderii motorului, climatizare, diagnoză, sisteme de alarmă, etc), în electronica de consum (sisteme audio, televizoare, camere video și videocasetofoane, telefonie mobilă, GPS-uri, jocuri electronice etc), în aparatura electrocasnică (mașini de spălat, frigidere, cuptoare cu microunde, aspiratoare), în controlul mediului și climatizare (sere, locuințe, hale industriale), în industria aerospațială, în mijloacele moderne de măsurare precum și la realizarea de periferice pentru calculatoare și in medicină.

Arhitectura unității centrale de calcul este probabil unul dintre cele mai importante elemente care trebuie avut în vedere în analiza oricărui sistem de calcul. Cele mai importante concepte întâlnite sunt următoarele:

-arhitecturi de tip “Harvard” – pentru aceată arhitectură există spații de memorie separate pentru program și date. Prin urmare, ar trebui să existe și magistrale separate, de adrese și date, pentru codul instrucțiunilor și respectiv pentru date;

-arhitecturi de tip “Cisc” – majoritatea microcontrolelor au la baza realizării CPU conceptul CISC. Acesta cuprinde un set uzual de peste 80 de instrucțiuni, multe dintre ele foarte puternice și specializate.

-arhitecturi de tip “RISC” – acesta este un concept de realizare a CPU care a început să fie implementat cu succes de ceva timp și la realizarea microcontrolerelor. Implementând doar un set redus de instrucțiuni care se pot executa în mod rapid și eficient, se obține o reducere a complexitătii microcircuitului, suprafața disponibilizată putând fi utilizată în alte scopuri

Pe lîngă memoria locală de tip RAM, de dimensiuni reduse, implementată ca atare sau existentă sub forma unui set de registre și destinată memorarii datelor (variabilelor), mai există o serie de aspecte specifice, marea majoritate a lor fiind legată de implementarea fizică a memoriei de program cu ajutorul unor memorii nevolatile. În mod clasic, memoria de program era implementată într-o variantă de tip ROM: EPROM pentru dezvoltare și producție pe scară mică si medie sau mask-ROM pentru producția de masă.

Limbajul masină este unica formă de reprezentare a informației pe care un microcontroler o ințelege. Din nefericire această formă de reprezentare a informației este total nepractică pentru un programator, care va utiliza cel puțin un limbaj de asamblare, în care una dintre instrucțiuni are ca și corespondent o instrucțiune în limbaj mașină. Un program în limbaj de asamblare este compact și rapid. Asta nu inseamnă că un astfel de program, scris în mod eronat, nu poate fi lent și de mari dimensiuni, programatorul având controlul total și responsabilitatea pentru execuția programului si gestionarea resurselor.

Un interpreter înseamnă implementarea unui limbaj de nivel înalt, mai apropiat de limbajul natural. Este mai degrabă un program rezident care rulează pe o platformă de calcul de tip microcontroler. Definitoriu pentru execuția unui program interpretat este citirea și executarea secvențiala a instructiunilor

Compilatoarele combină lejeritatea în programare oferită de un interpreter. Pentru aceasta programul, în limbaj de nivel inalt, este translatat direct în limbaj masină sau în limbaj de asamblare. Codul masină care rezultă are dimensiuni destul de mari și este executat direct, ca un tot unitar, de catre microcontroler.

2.2 Caracteristici generale și schema bloc

Arhitectură RISC avansată:

 131 instrucțiuni – cu un singur ciclu de execuție al ceasului

 32 x 8 registre generale de lucru

 operare în totalitate statică

Segmente de memorie non-volatilă cu anduranță mare:

 4/8/16/32KBiți de memorie flash programabilă

 256/512/512/1KBiți EEPROM

 512/1K/1K/2KBiți SRAM

 scrie / ștergere cicluri: 10.000 Flash / 100, 000 EEPROM

 păstrarea datelor: 20 de ani la 85 ° C / 100 ani la 25 ° C

 blocare de programare pentru securitatea Software

Caracteristici periferice:

 8-biți Timer / Counter cu prescalare separată și mod de comparare

 16-biți Timer / Counter cu prescalare separată, mod de comparare și capturare

 contorul timpului real cu oscilator separat

 6 canale PWM

 întreruperea și trezirea prin modificarea pinilor

 USART programabil serial

 timer „watchdog” programabil cu oscilator separat pe cip

 comparator analogic

Figura 2.1 Schema bloc ATMEGA 328

Caracteristici speciale ale microcontrolerului:

 oscilator intern calibrat

 surse de întrerupere interne și externe

6 moduri sleep: inactiv, de reducere a zgomotului ADC, Power-Save, Power-Down, de așteptare, și de așteptare extins

Tensiune de operare:

 1.8 – 5.5V

Interval de temperatură:

 40 ° C – 85 ° C

Gradul vitezei:

 0 – 4MHz la 1.8 – 5.5V, 0 – 10MHz la 2.7 – 5.5.V, 0 – 20MHz la 4.5 – 5.5V

Consum de putere la 1MHz, 1.8V, 25 ° C

 mod de operare: 0.2mA

 mod Power-down: 0.1μA

 mod Power-save: 0.75μA

2.3 Porturi de Intrare/Ieșire de uz general

Porturile AVR-ului sunt de tip citire-modificare-scriere atunci când sunt folosite ca porturi digitale de intrare/ieșire. Asta înseamnă că schimbarea direcției pinului unui port, poate fi realizată fără a schimba în mod neintenționat starea celorlalți pini, cu ajutorul instrucțiunilor CBI și SBI. Bufferele de ieșire au o funcționare duală, iar pinul conducător este suficient de puternic pentru a conduce direct un display cu LED-uri.

În total trei locații de adresă a memoriei de intrare/ieșire sunt alocate pentru fiecare port, pentru registrul de date PORTx, pentru direcția registrului DDRx și pentru pinii de intrare PINx. Primele două adrese pot fi citite/scrise, iar ultima este doar citită. Cei mai mulți pini ai portului sunt multiplexați cu funcții alternative pentru caracteristicile periferice ale dispozitivului.

2.4 Timer

Caracteristici:

• proiectat pe16-biți ( permite 16-biți PWM)

• două comparatoare independente de ieșire

• regiștri comparatori de ieșire cu buffere duble

• o intrare de captare a zgomotului Canceler

• modul PWM cu corectare de fază, fără erori

• perioadă variabilă a modulului PWM

• generator de frecvență

• numărător extern de evenimente

• patru surse de întreruperi, independente

Capitolul 3. Sistemul de dezvoltare Arduino Uno

3.1 Generalitati Arduino

Arduino a început în 2005, ca un proiect pentru studenți la Institutul de design interactiv din Ivrea, Italia. La acel moment studenții programului au folosit un "BASIC Stamp" la un cost de 100 de dolari, considerat scump pentru studenți. Massimo Banzi, unul dintre fondatori, a predat la Ivrea o teză despre hardware si a contribuit la un design de cablare. După ce platforma de cablare a fost completă, cercetătorii au lucrat pentru a le face mai ușoare, mai puțin costisitoare, precum și la dispoziția comunității. Școala, în cele din urmă, a fost închisă, astfel încât acești cercetători, unul dintre ei fiind David Cuartielles, a promovat ideea. Prețurile actuale au rulat în jurul a 30 dolari și "clonele", în jurul a 9 dolari.

Arduino este un microcontroler cu o singură placă, destinat să facă posibilă aplicarea unor obiecte sau medii interactive. Hardware-ul constă într-o placă hardware cu sursă deschisă, conceput în jurul valorii unui microcontroler de 8-biți Atmel AVR sau 32 de biți Atmel ARM. Modelele actuale sunt dotate cu o interfață USB, 6 pini analogici de intrare, precum și 14 pini digitali I/O care permit utilizatorului de a atașa diverse plăci de extensie.

Introdusă în 2005, platforma Arduino a fost proiectată pentru a oferi un mod ieftin și ușor pentru pasionati, studenți și profesioniști de a crea dispozitive care interacționează cu mediul lor, folosind senzori și actuatori. Exemple comune pentru pasionații începători includ roboții simpli, termostatele și detectoarele de viteză. Acesta este dotat cu un mediu de dezvoltare simplu integrat (IDE), care rulează pe calculatoarele personale regulate și permit utilizatorilor să scrie programe pentru Arduino folosind C sau C + +.

Prețurile actuale ale plăcilor Arduino sunt în jurul valorii de 20 € sau 27 dolari și cele clonate 9 dolari. Plăcile Arduino pot fi achiziționate pre-asamblate sau se pot găsi sub forma unor kit-uri care pot fi asamblate. Informațiile de proiectare ale hardware-ului sunt disponibile pentru cei care ar dori să asambleze un Arduino de mână. A fost estimat la mijlocul anului 2011, că peste 300.000 de Arduino au fost produse comercial și, în anul 2013, că 700.000 de panouri oficiale au ajuns în mâinile utilizatorilor.

Hardware

O placă Arduino constă într-un microcontroler Atmel de 8 biți AVR cu componente complementare pentru a facilita programarea și încorporarea în alte circuite. Un aspect important al produsului Arduino este modul standard în care conectorii sunt expuși, permițând plăcii CPU să fie conectată la o varietate de module interschimbabile, cunoscute sub numele de scuturi. Unele scuturi comunică cu placa Arduino direct pe diferite ace, dar multe scuturi sunt adresabile individual printr-o magistrală serială I²C, care permite mai multor scuturi să fie stivuite și folosite în paralel. Arduino oficial a folosit seria de cip-uri megaAVR, în special ATMEGA8, ATMEGA168, ATmega328, ATmega1280, și ATmega2560. O mulțime de alte procesoare au fost folosite de către produsele compatibile Arduino. Cele mai multe plăci includ un regulator liniar de 5 volți și un oscilator cu cristal de 16 MHz (sau rezonator ceramic, în unele variante), deși unele modele, cum ar fi Lilypad rulează la 8 MHz și dispensează cu regulatorul de tensiune de la bord ca urmare a restricțiilor specifice. Microcontrolerul Arduino este, de asemenea, pre-programat cu un încărcător care simplifică încărcarea programelor de memorie emise de cip, în comparație cu alte dispozitive, care de obicei au nevoie de o programare externă. Acest lucru se face folosind un Arduino mai simplu, permițând utilizarea unui calculator obișnuit ca programator.

La un nivel conceptual, atunci când se utilizează software-ul Arduino, toate plăcile sunt programate printr-o conexiune serială RS-232, dar modul în care aceasta este pusă în aplicare variază în funcție de versiunea de hardware. Plăcile Arduino în serie conțin un circuit cu un nivel schimbător pentru a converti între semnalele la nivel de 232-RS și cele la nivel de TTL. Plăcile Arduino curente sunt programate prin USB, implementate cu ajutorul cip-urilor adaptorului USB, cum ar fi FTDI FT232. Unele variante, cum ar fi Arduino Mini și neoficialul Boarduino, utilizează o placă detașabilă a adaptorului USB sau a cablului, Bluetooth sau alte metode.

Placa Arduino expune cei mai mulți pini ai microcontrolerului I/O pentru utilizarea de către alte circuite. Diecimila, Duemilanove, și curentul Uno oferă 14 pini digitali I/O, dintre care șase pot produce semnale modulate ale lățimii pulsului și șase intrări analogice. Aceste ace sunt pe partea de sus a plăcii, prin intermediul antetelor de 0.10-inch (2,5 mm). Mai multe aplicații plug-in sunt, de asemenea, disponibile în comerț.

Plăcile Arduino Nano și plăcile Bare Bone și cele Boarduino Arduino compatibile pot avea pini antet pe partea inferioară a plăcii pentru a fi conectate la plăcile care nu sunt lipite.

Există multe placi Arduino compatibile și derivate Arduino. Unele sunt funcțional echivalente cu un Arduino și pot fi folosite alternativ. Multe sunt Arduino de bază, cu adaos de drivere cu ieșiri banale, de multe ori pentru a fi utilizate în domeniul educației la nivel de școală, pentru a simplifica construirea cărucioarelor pentru copii și roboți mici. Altele sunt electric echivalente, dar se schimbă factorul formei, uneori, permițând utilizarea în continuare a scutului, uneori nu. Unele variante folosesc procesoare complet diferite, cu diferite niveluri de compatibilitate.

Hardware-ul original Arduino este fabricat de compania italiană prin proiecte inteligente. Unele plăci ale brandului Arduino, au fost concepute de către compania americană SparkFun Electronics. Șaisprezece versiuni de hardware Arduino, au fost produse comercial până în prezent.

Exemple de plăci Arduino:

Figura 3.1 Arduino Diecimila

Figura 3.2 Arduino Duemilanove

Figura 3.3 Arduino UNO

Figura 3.4 Arduino Leonardo

Figura 3.5 Arduino Mega

Figura 3.6 Arduino Nano

Arduino și plăcile compatibile Arduino fac uz de circuitul plăcilor de expansiune cu scuturi-imprimate care se conectează în mod normal la antetele pinurilor Arduino. Scuturile pot oferi controale pentru motoare, GPS, ethernet, LCD sau prototipuri.

Exemple de scuturi Arduino:

Figura 3.7 Scut Adafruit Motor cu terminale cu șurub pentru conectarea la motoare.

Figura 3.8 Scut Adafruit cu date de logare cu un slot SD și cip cu ceas în timp real.

3.2 Hardware Arduino Uno

Prezentare generală

Arduino Uno este o placă cu microcontroler bazată pe ATmega328. Ea are 14 pini digitali de intrare/ieșire (din care 6 pot fi utilizați ca și ieșiri PWM), 6 intrări analogice, un rezonator ceramic de 16 MHz, o conexiune USB, un jack de putere, un antet ICSP și un buton de resetare. Aceasta conține tot ceea ce este necesar pentru a susține un microcontroler și se conectează pur și simplu la un computer prin cablul USB sau se alimentează printr-un adaptor AC-DC sau o baterie pentru a funcționa.

Uno diferă de toate plăcile precedente, în care nu se folosesc cip-driverele FTDI USB-to-serial. În schimb, este dotat cu Atmega16U2 (Atmega8U2 versiunea R2), programat ca un convertor USB-to-serial.

Revizia 2 a plăcii Uno are o rezistență care trage linia 8U2 CAF la sol, ceea ce face mai ușoară punerea în modul DFU.

Revizia 3 a plăcii are următoarele caracteristici noi:

• pinul de ieșire 1.0: pinii adăugați SDA și SCL, care sunt aproape de pinul Aref și alți doi pini noi plasați în apropierea pinului RESET, pinul IOREF permite scuturilor de a se adapta la tensiunea furnizată de placă. În viitor, scuturile vor fi compatibile atât cu plăcile care utilizează AVR, care operează cu 5V și cu Arduino Due, care funcționează cu 3.3V. Al doilea nu este un pin conectat, fiind rezervat pentru scopuri viitoare.

• circuit RESET puternic.

• Atmega 16U2 înlocuiește 8U2.

Figura 3.9 Sistemul de dezvoltare Arduino Uno

"Uno" înseamnă unu în limba italiană și este numit astfel pentru a marca lansarea viitoare a Arduino 1.0. Uno și versiunea 1.0 vor reprezenta versiunile de referință ale Arduino, mergând mai departe.Uno este cel mai recent dintr-o serie de plăci Arduino USB, și modelul de referință pentru platforma Arduino.

Designul de referință Arduino poate utiliza un ATmega8, 168, sau 328. Modelele curente utilizează un ATmega328p. Configurația pinilor este identică în toate cele trei procesoare.

Caracteristici:

Tabel 3.1 Caracteristici Arduino Uno

Figura 3.10 Sistemul de dezvoltare Arduino Uno(2)

Puterea

Arduino Uno poate fi alimentat prin conexiunea USB sau cu o sursă de alimentare externă. Sursa de energie este selectată automat.

Puterea externă (non-USB) poate veni fie de la un adaptor AC-DC sau de la o baterie. Adaptorul poate fi conectat prin conectarea unei prize central pozitive de 2.1mm în mufa de alimentare a plăcii. Duce la o baterie care poate fi introdusă în antele pinilor GND și Vin ai conectorului de alimentare.

Placa poate funcționa pe o sursă externă de 6 și 20 de volți. În cazul în care este alimentat cu mai puțin de 7V, cu toate acestea, pinul de 5V poate furniza mai puțin de cinci volți și placa poate fi instabilă. Dacă utilizăm mai mult de 12V, regulatorul de tensiune se poate supraîncălzi și poate deteriora placa. Intervalul recomandat este de 7-12 volți.

Pinii de alimentare sunt după cum urmează:

• VIN. Tensiunea de intrare la placa Arduino atunci când este utilizată o sursă de alimentare externă (spre deosebire de cei 5 volți prin conexiunea USB sau alte surse de energie reglementate). Putem furniza tensiune prin acest pin, sau, în cazul în care tensiunea trece prin mufa de alimentare, se accesează prin intermediul acestui pin.

• 5V. Acest pin emite regulat 5V către autoritatea de reglementare de pe bord. Placa poate fi alimentată cu energie electrică, fie de la mufa de alimentare DC (7 – 12V), conectorul USB (5V), sau pinuul VIN al plăcii (7-12V). Tensiunea de alimentare prin intermediul pinilor de 5V sau 3.3V ignoră autoritatea reglementării și poate deteriora placa. Nu este recomandat.

• 3V3. O sursă de 3.3 volți generează reglementarea de la bord. Curentul maxim este de 50 mA.

• GND. Ace de la sol.

• IOREF. Acest pini de pe placa Arduino, oferă o tensiune de referință cu care funcționează microcontrolerul. Un scut configurat corect, poate citi tensiunea pinilor IOREF și selectează sursa de alimentare corespunzătoare sau permite interpreților de tensiune a rezultatelor de a lucra cu 5V sau 3.3V.

Comunicare

Arduino Uno are o serie de facilități pentru a comunica cu un computer, un alt Arduino sau cu alte microcontrolere. ATmega328 oferă o comunicare serială UART TTL (5V), care este disponibilă pe acele digitale 0 (RX) și 1 (TX). ATmega16U2 de pe canalele de bord au o comunicare serială pe USB și apare ca un port COM virtual pentru software-ul de pe computer. Firmware-ul 16U2 folosește driverele standard COM USB, și nu este nevoie de nici un driver extern. Cu toate acestea, pe Windows, este necesar un fișier .inf. Software-ul Arduino include un monitor de serie care permite datelor de tip text, simple, să fie trimise la și de la placa Arduino. LED-urile RX și TX de pe bord vor clipi atunci când datele sunt transmise prin intermediul cip-ului USB-to-serial și conexiunea USB la calculator (dar nu pentru comunicarea serială pe pinii 0 și 1).

O bibliotecă SoftwareSerial permite o comunicare în serie pentru oricare dintre pinii digitali Uno.

ATmega328 sprijină, de asemenea comunicarea I2C (DST) și SPI. Software-ul Arduino include o bibliotecă Wire pentru a simplifica utilizarea mașinii I2C.

Resetarea Automată (Software)

Mai degrabă decât să solicite o apăsare fizică a butonului de resetare înainte de o încărcare, Arduino Uno este proiectat într-un mod care îi permite să fie resetat de software, care se execută pe un computer conectat. Una dintre liniile de control ale fluxului hardware-ului (DTR) ale ATmega8U2/16U2 este conectată la linia de resetare a ATmega328 printr-un condensator nanofarad 100. Când această linie este susținută (scăzută), linia de resetare scade cu suficient de mult timp pentru a se reseta cip-ul. Software-ul Arduino utilizează această capacitate pentru a permite să încărcă codul printr-o simplă apăsare a butonului de încărcare în mediul Arduino. Acest lucru înseamnă că încărcătorul sistemului poate avea o pauză scurtă, pentru ca scăderea DTR să poată fi bine coordonată odată cu începerea încărcării.

Această configurare are alte implicații. În cazul în care Uno nu este conectat la nici un calculator care rulează Mac OS X sau Linux, se resetează de fiecare dată când o conexiune este făcută din software (prin USB). Pentru următoarea jumătate de secundă, încărcătorul se execută pe Uno. În timp ce este programat să ignore datele incorecte (de exemplu, nimic în afară de încărcarea noului cod), se vor intercepta primii bytes de date trimiși la bord, după ce conexiunea este deschisă. În cazul în care o schiță care rulează pe placă primește o configurare de moment sau alte date atunci când pornește prima dată, trebuie sa ne asigurăm că software-ul cu care se comunică așteaptă o secundă după deschiderea conexiunii și înainte de a trimite aceste date.

Uno conține o urmă care poate fi tăiată pentru a dezactiva auto-resetarea. Plăcuțele de pe fiecare parte a urmelor pot fi lipite împreună pentru ca aceasta să se re-activeze. Este etichetată "RESET-EN". Am avea, de asemenea, posibilitatea de a dezactiva auto-resetarea prin conectarea unui rezistor de 110 Ohm de la 5V la linia de resetare.

Supracurentul de protecție USB – Arduino Uno are o siguranță resetabilă care protejează porturile USB ale computerului de la sarcinile scurte și suprasarcini. Deși cele mai multe calculatoare asigură protecția internă a acestora, siguranța oferă un strat suplimentar de protecție. Dacă sunt aplicate mai multe decât 500 mA la un port USB, siguranța va rupe în mod automat conexiunea până când se produce o suprasarcină sau o sarcină scurtă sau este eliminată.

Caracteristici fizice

Lungimea maximă și lățimea PCB-ului Uno sunt de 2,7 respectiv 2,1 inch, cu conectorul USB și mufa de alimentare care se extind dincolo de fosta dimensiune. Patru orificii pentru șuruburi permit plăcii să fie atașată la o suprafață sau la o carcasă. Distanța dintre acele digitale 7 și 8 este de 0,16 ", cu niciun multiplu al distanței de 100 milioane față de ceilalți pini.

3.3 Mediul de dezvoltare Arduino IDE

Mediul de dezvoltare integrat Arduino (IDE) este o aplicație de platformă transversală scrisă în Java, și este derivată din IDE pentru limbajul de programare de prelucrare și proiectele de cablare. Acesta este conceput pentru a introduce programarea chiar și tuturor nou-veniților care nu sunt familiarizați cu dezvoltarea de software. Include un editor de cod cu caracteristici, cum ar fi evidențierea assyntax-ului, de potrivire a legăturii și o aliniere automată, și este, de asemenea, capabil să compileze și să încarce programe cu un singur clic. Un program sau un cod scris pentru Arduino este numit o "schiță".

Programele Arduino sunt scrise în C sau C + +. Arduino IDE vine cu un software numit "cablare" din cadrul proiectului de cablare inițial, ceea ce face ca multe operații comune de intrare / ieșire să fie mult mai ușoare. Utilizatorii trebuie doar să definească două funcții pentru a face un program executiv ciclic să meargă:

• Configurare (): o funcție rulează o singură dată, la începutul unui program care poate inițializa setările

• deschidere (): o funcție numită în mod repetat până când puterile plăcile dispar

Figura 3.11 Exemplu program simplu Arduino

Un prim program tipic pentru un microcontroler simplu face ca LED-urile să clipească. În mediul Arduino, utilizatorul ar putea scrie un program de genul acesta:

void setup () {

pinMode (LED_PIN, OUTPUT);

}

void loop () {

digitalWrite (LED_PIN, HIGH);

delay(1000);

digitalWrite (LED_PIN, LOW);

delay(1000);

}

Aceasta este o caracteristică pe care mai multe plăci Arduino cu led o au, cu o încărcare conectată între pinul 13 și sol; o caracteristică convenabilă pentru multe teste simple. Codul anterior nu s-ar fi vazut cu un program compilator standard C + +, astfel încât atunci când utilizatorul face clic pe butonul "Încărcați placa la O/ I" în IDE, o copie a codului este scrisă într-un fișier care are un antet suplimentar în partea de sus și o funcție() principală foarte simplă, în partea de jos, pentru a se realiza un program C + + valid.

Arduino IDE folosește instrumentul GNU și AVR Libc pentru a compila programe, și folosește Avrdude pentru a încărca programe.

Așa cum platforma Arduino utilizează microcontrolere Atmel, mediul de dezvoltare Atmel, AVR Studio sau mai nou Atmel Studio, pot fi de asemenea folosite pentru a dezvolta software-ul pentru Arduino.

Capitolul 4. Registre de deplasare

4. 1 Generalități

Un registru este format din mai multe bistabile și permite memorarea și / sau deplasarea informației la comanda impulsurilor de tact. Pentru realizarea registrelor se folosesc de obicei bistabile D.

O primă clasificare a registrelor o putem face dupa următoarele criterii:

-deplasarea informației se poate face într-un singur sens sau în ambele sensuri.

-înscrierea informatiei în registru se poate face serial (bit dupa bit, toti biții cuvântului de n biți) sau paralel (cei n biți se scriu simultan în registru).

-citirea registrului se poate face serial (bit dupa bit) sau paralel (toti biții simultan).

Există următoarele tipuri fundamentale de registre:

-SISO ( Serial Input – Serial Output)

cu deplasare la dreapta a informației

cu deplasare la stanga a informației

bidirecționale

-SIPO (Serial Input – Parallel Output)

-PISO (Parallel Input – Serial Output)

-PIPO (Parallel Input – Parallel Output)

4. 2 TPIC 6B595

Descriere:

TPIC6B595 este un circuit cu o putere medie de curent, de înaltă tensiune, cu 8-biți ai registrului de deplasare monolitic concepuți pentru a fi utilizați în sistemele care necesită o putere de încărcare relativ mare. Dispozitivul conține o clemă de tensiune construită pe rezultatele protecției inductive tranzitorie. Aplicațiile driverului de putere includ relee, solenoizi și alți curenți ale sarcinilor medii și ai transportului de înaltă tensiune.

Acest dispozitiv conține un serial de 8 biți, un registru de deplasare paralel, care alimentează registrul de stocare de tip D de 8 biți. Transferurile de date au loc atât prin deplasare cât și prin registrele de stocare de pe marginea în creștere a ceasului registru modificat (SRCK) și ceasului registru (RCK). Transferurile registrului de stocare a datelor la amortizorul de ieșire, atunci când registrul de deplasare este clar (CERC), sunt mari. Când SRCLR este scăzut, registrul de deplasare de intrare este eliminat. Atunci când ieșirea permite ca (G) să fie ridicat, toate datele din amortizoarele de ieșire au un loc mic și toate ieșirile de drenaj sunt oprite. Când G este menținut scăzut, datele din registrul de depozitare sunt transparente pentru amortizoarele ieșirilor. Atunci când datele amortizoarelor ieșirilor sunt scăzute, ieșirile tranzistorului DMOS sunt oprite. Când datele sunt mari, rezultatele tranzistorului DMOS au capacitatea unui curent care se cufundă. Ieșirea în serie (SER OUT) permite o cascadă a datelor din registrul de deplasare la dispozitivele suplimentare.

Figura 4.1 Driver 8 Led-uri 150 mA pe canal, inlantuibil

Ieșirile sunt pe partea joasă, tranzistorii DMOS ai drenajului deschis au un rating de ieșire cu o capacitate continuă de 50 V și 150 mA. Fiecare ieșire oferă o limită de curent tipic de la 500 mA la TC = 25 ° C. Limita curentului scade pe măsură ce temperatura crește pentru o protecție a dispozitivului, suplimentară.

TPIC6B595 se caracterizează prin funcționarea în cazul intervalului de temperatură de la -40° C până la 125 ° C.

Alte caractestici:

-tensiunea alimentării logice, VCC: 7V

-intrarea logică a gamei de tensiune: de la -0.3 V la 7 V

-tensiune a puterii DMOS drenă-sursă, VDS: 50 V

-curent de impuls sursă-drenă: 1 A

-o singură ieșire a curentului de drenă: 500 mA

-un singur impuls de avalanșă a energiei, EAS: 30 mJ

-avalanșă a curentului IAS: 500 mA

-disipare totală continuă

-interval de temperatură cu operare virtuală a joncțiunii: de la -40 ° C până la 150 ° C

-caz de operare a intervalului de temperatură: de la -40 ° C până la 125 ° C

-temperatura de depozitare: de la -65 ° C până la 150 ° C

Figura 4.2 Diagrama logică

Figura 4.3 Formele de undă

Capitolul 5. Senzori Hall si led-uri utilizate

5.1 Senzori Hall – generalități

In 1879 fizicianul Edwin Herbert Hall a observat că atunci cand un semiconductor, parcurs de un curent electric, este plasat sub acțiunea unui camp magnetic, apare o tensiune electrică, proportională cu curentul electric si perpendiculară pe direcția campului magnetic și a curentului electric. Acest efect se numește efect Hall.

Curentul electric care parcurge materialul semiconductor este influențat de campul magnetic. Liniile de flux magnetic exercită o forță asupra electronilor, numita forța Lorenz. Datorită acesteia, electronii sunt deviați către o extremitate a semiconductorului, in funcție de intensitatea și direcția liniilor de camp. Aceasta deviere de electroni produce o diferența de potential denumită tensiune Hall.

Un element sensibil Hall detectează câmpuri magnetice de intensități relativ reduse (0.1 mT – 10 T) și produce tensiuni electrice intre 1 si 10 mV.

Senzorii Hall sunt senzori activi, care necesită alimentare cu energie electrică. Cei mai simpli senzori Hall au cel putin 3 pini:

-tensiune alimentare

-masa

-tensiune Hall(ieșire)

Senzorii cu efect Hall sunt cei mai raspandiți senzori cu electronică integrată, cu o gamă largă de aplicații. Sunt senzori digitali care produc un semnal de ieșire cu doar două valori. Cu cât frecvența de variație a câmpului magnetic este mai mare cu atât durata semnalului de ieșire este mai mică. Datorită principiului de funcționare, senzorii Hall sunt fiabili, ieftini si stabili la perturbatii. Din această cauză sunt foarte utilizați în industrie, mai ales în industria automobilelor, atât ca senzori de poziție cât și ca senzori de turație.

CARACTERISTICI: Senzor Hall Honeywell SS441A

Tensiunea de alimentare 3.8-30 VDC

Ieșiri digitale ale curentului

Terminale PCB de 3 pini in linie

Proiectarea Quad-Hall practic elimină efectele mecanice de stres

Temperatură compensată de magnetism

Punctele utilizate / eliberate pot fi personalizate

Magnetism blocat bipolar, unipolar

Capacitate mare de curent de ieșire de -50 mA maxim absolut

Interval de temperatură de funcționare de la -40 la +150 ° C (de la 40 la 302 ° F)

Materialul Pachetului: Plaskon 3300 H

Suprafața suportului în versiune disponibilă: SS400-S (cu o conducere tăiată și formată)

Figura 5.1 Senzor Hall Honeywell SS441A

Senzorii de poziție ai seriei SS400 au un circuit integrat echilibrat termic peste gama completă de temperatură. Panta de compensare negativă este optimizată pentru a se potrivi cu coeficientul de temperatură negativ al magneților cu costuri mai mici. Sunt disponibile magnetismele bipolare, de blocare și unipolare. Regulamentul benzii asigură o funcționare extrem de stabilă intre 3.8-30 VDC pentru gama tensiunii de alimentare. Senzorii SS400 sunt capabili să se scufunde continuu la 20 mA și pot fi reciclați la fel de mult la 50 mA maximum.

Întreruperea puterii unui dispozitiv de blocare poate provoca ca ieșirea să își schimbe starea atunci când puterea este restabilită. Dacă este prezent un câmp magnetic suficient de rezistent, ieșirea senzorului va fi în starea dictată de câmpul magnetic.

5.2 Led-uri utilizate

Un LED reprezintă o diodă luminiscentă ( diodă emițătoare de lumină ), care este o diodă semiconductoare ce la polarizarea directă a joncțiunii p – n, emite lumină, efectul fiind o formă de electroluminiscență.

Led-ul brick este o componentă care emite lumină atunci cand portul Arduino la care este conectat trece in HIGH.

Figura 5.2 Led galben luminos partea frontală Figura 5.3 Led galben luminos partea din spate

Capitolul 6. Afișaj LCD

Caracteristici generale

Shield-ul utilizat contine un ecran LCD 16 X 2 cu iluminare cu led. De asemenea conține si un shield cu toate componentele necesare pentru conectarea la placa Arduino, gata lipită. Este asamblat cu totul și are toți pinii pentru Arduino lipiți. Din această cauză utilizarea lui este foarte simplă (codul integral este disponibil mai jos).  Produsul include LCD-ul 16 X 2 cu iluminare, shield-ul și pinii pentru Arduino (deja lipiți).

Figura 6.1 Afișaj LCD 1

Figura 6.2 Afișaj LCD 2

LCD-ul utilizează pinii digitali de la 2 până la 7, astfel:

-pinul digital 7 – RS LCD

pinul digital 6 – E LCD

pinul digital 5 – DB4 LCD

pinul digital 4 – DB5 LCD

pinul digital 3 – DB6 LCD

pinul digital 2 – DB7 LCD

Exemplu de cod

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {

Serial.begin(9600);

lcd.begin(16, 2);

}

void loop() {

lcd.setCursor(0, 0);

lcd.print("Hello World,");

lcd.setCursor(0, 1);

lcd.print("ROBOFUN is cool!");

}

Capitolul 7. Realizare practică

Schema bloc proiect

Pentru o mai bună vizibilitate a elementelor am hotărât să realizez în total 3 scheme bloc.

Prima și cea mai importantă arată cum sunt conectate ledurile la driverele led și apoi la Arduino, cea de-a doua arată conexiunea dintre Arduino și afisaj iar ultima dintre ele prezintă cum este conectat unul dintre cei 4 senzori Hall.

Figura 7.1 Schema bloc drivere și leduri

Figura 7.2 Schema bloc conectare senzor Hall

Figura 7.3 Schema bloc afișaj LCD

Implementare și descriere functională

Macheta intersecției este formată din 4 semafoare pentru vehicule și respectiv 4 pentru pietoni. Cele 8 semafoare simulează deci o intersecție în formă de cruce. Semaforizarea pentru traficul pietonal

se face in funcție de cea a traficului rutier și anume: am presupus că în majoritatea intersecțiilor întâlnite cele mai multe vehicule merg ori înainte ori la dreapta și mai rar la stanga, uneori acest lucru fiind chiar interzis cu desăvârșire datorită indicatoarelor adiționale. În concluzie, atunci când avem verde pentru o direcție de mers a vehiculelor vom avea verde și pentru pietonii imediat din stânga acelui sens.

Atunci când in intersecție nu se află nici un vehicul pe nici un sens, toate semafoarele pentru vehicule vor avea galben intermitent, iar cele pentru pietoni nu vor funcționa acest lucru sugerând că pietonii au liberă trecere in orice direcție doresc.

Sistemul de control este realizat în jurul platformei de dezvoltare Arduino UNO, bazată pe microcontrolerul ATmega328. Pentru sistemul de detecție am ales sa folosesc senzorii Hall, în principiu datorita ușurinței acestora în utilizare și a prețului extrem de redus. Pentru semaforizarea intersecției s-au folosit leduri luminoase având cele 3 culori specifice: verde, galben și roșu, iar pentru afisșaj am folosit un ecran LCD. Toate aceste componente au fost descrise pe larg din punct de vedere teoretic în capitolele anterioare, iar funcționarea lor in particular pentru aceasta tema va fi descrisa pe larg în cele ce urmează.

Inițial, am dorit ca pe macheta intersecției să plasez niste mașini cărora să le atașez dedesubt niște magneti, dar datorită detectării greoaie a acestora de către senzorii Hall am renunțat la această idee și am hotărât pur și simplu să simulez prezența vehiculelor cu ajutorul unor magneti unipolari. În acest fel detectarea este mult mai lejeră, iar funcționarea este mult mai usor vizibilă și înteleasă de către privitori.

Pe afișajul LCD vom avea întotdeauna pe rândul de sus evidențiate cu litere mari intersecțiile (senzorii) în care sunt prezente vehicule și cu litere mici cele pe care nu este prezent nici un vehicul. Pe rândul de jos vom avea scris gradul de ocupare al intersecției care poate fi:

-0% (nu este detectată prezența nici unui vehicul în intersecție. În această situație pe rândul de sus vom avea deci a b c d).

Figura 7.4 Afișaj grad de ocupare 0%

Figura 7.5 Starea de galben intermitent

-25% (este detectată prezența unui singur vehicul în intersecție. În această situație pe rândul de sus vom putea avea una dintre secvențele: A b c d, a B c d, a b C d, a b c D.

Figura 7.6 Afișaj grad de ocupare 25%

Figura 7.7 Simularea prezenței unui singur vehicul

-50% (în acest caz prezenta a 2 vehicule este sesizată în intersecție. Pe rîndul de sus vom putea avea aici una din următoarele secvențe: A B c d, A b C d, A b c D, a B C d, a B c D, a b C D.

Figura 7.8 Afișaj grad de ocupare 50%

Figura 7.9 Simularea prezenței a 2 vehicule

-75% (3 vehicule in intersecție). În acest caz pe rândul de sus putem avea: A B C d, A B c D, A b C D, a B C D)

Figura 7.10 Afișaj grad de ocupare 75%

Figura 7.11 Simularea prezenței a 3 vehicule

-100% (intersecția este plina și are grad de ocupare maxim). Prin urmare vom avea scris pe afisaj A B C D.

Concluzii

În concluzie, putem spune că sistemul de control adaptiv al traficului rutier explicat in prezenta lucrare are în unele situații o multitudine de avantaje fața de obișnuitele automate de dirijare a circulației cu funcționare prestabilită cum ar fi:

Eficiență maximă în exploatare în cazul intersecțiilor în care fluctuațiile valorilor de trafic nu pot fi anticipate și, deci, programate anterior.

Eficiență maximă și in cazul intersecțiilor complexe, unde anumite relații sunt sporadice sau prezintă fluctuații de volum.

Reducerea pe cât posibil a numărului opririlor și pornirilor, respectiv diminuarea întârzierilor nejustificate ale străzii principale sau cu mult mai aglomerate decât restul.

Reducerea hazardului asociat opririlor arbitrare ale vehiculelor în conformitate cu regimul de funcționare pe bază de programe prestabilite, care cer alternarea permisiunii de circulație chiar dacă acest lucru ar fi uneori inutil sau chiar contraindicat.

In final, putem afirma că sperăm ca tehnologii asemănătoare sau imbunătățite vor fi dezvoltate mult mai mult și în aglomerările urbane din țara noastră, acolo unde este cazul.

Bibliografie

[1]http://instructorauto.bynet.ro/regulament-cod-rutier-4-1.php accesat la data 1.05.2014

[2]http://www.agir.ro/univers-ingineresc/numar-10-2007/istoria-semaforului_1795.html accesat la data 1.05.2014

[3]http://www.engadget.com/2010/06/04/audi-shows-off-travolution-vehicle-to-infrastructure-communicati/ accesat la data 4.05.2014

[4]http://www.alldatasheet.com/view.jsp?Searchword=Atmega328p accesat la data 4.05.2014

[5]http://www.atmel.com/devices/ATMEGA328.aspx?tab=documents accesat la data 4.05.2014

[6]http://arduino.cc/en/Main/arduinoBoardUno accesat la data 17.05.2014

[7]http://www.robofun.ro/docs/ss400_series.pdf accesat la data 7.06.2014

[8]http://www.robofun.ro/docs/tpic6b595.pdf accesat la data 7.06.2014

[9]curs Managementul Traficului – S.l. Dr. Ing. Liviu Georgescu

[10]http://www.robofun.ro/shield-lcd-16×2?keyword=lcd&category_id=0 accesat la data 28.05.2014

[11]http://www.robomat.ro/produse/video-display-led-5.html accesat la data de 28.05.2014

[12]http://www.sabre-roads.org.uk/wiki/index.php?title=Traffic_Signals_-_Signal_Heads accesat la data 28.05.2014

[13]http://ro.wikipedia.org/wiki/Microcontroler accesat la data de 28.05.2014

[14]http://www.e-automobile.ro/categorie-electronica/106-senzor-hall.html accesat la data de

22.06.2014

[15]http://www.phys.ubbcluj.ro/~anghels/teaching/SIS/Laborator/lucrarea_8.pdf accesat la data de 22.06.2014

[16]http://www.robofun.ro/led-brick-galben?keyword=led&category_id=0 accesat la data de 1.06.2014

[17]http://www.robofun.ro/senzor_hall?keyword=hall&category_id=0 accesat la data de 3.06.2014

[18]http://www.robofun.ro/driver-8led-tpic?keyword=driver%208%20led&category_id=0 accesat la data de 4.06.2014

[19]http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Summary.pdf accesat la data de 4.05.2014

[20]http://ep.etc.tuiasi.ro/files/CID/registre.pdf accesat la data de 18.05.2014

[21]http://www.roroid.ro/registru-de-deplasare-si-leduri/ accesat la data de 18.05.2014

[22]http://medea.mah.se/2013/04/arduino-faq/ accesat la data de 18.05.2014

[23]http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino accesat la data de 18.05.2014

[24]http://www.instructables.com/id/Assembling-the-Really-Bare-Bones-Board-RBBB-Ardu/ accesat la data de 8.05.2014

[25]http://www.physics.pub.ro/Referate/BN031B/Studiul_efectului_HALL_in_semiconductori.pdf accesat la data de 8.05.2014

[26]http://www.electronics-tutorials.ws/electromagnetism/hall-effect.html accesat la data de 9.05.2014

[27]http://www.robofun.ro/arduino_uno_v3?keyword=arduino%20uno&category_id=0 accesat la data de 10.05.2014

[28]http://arduino.cc/en/Guide/Windows accesat la data de 17.05.2014

Anexe

Anexa 1. Cod sursă utilizat pentru programarea Arduino

#include <LiquidCrystal.h>

#define RPA2 0x02

#define GAA0 0x04

#define VAA0 0x08

#define VAA2 0x10

#define RAA2 0x20

#define GAA2 0x40

#define VPA2 0x80

#define VPA0 0x0200

#define RAA1 0x0400

#define RPA1 0x0800

#define RAA0 0x1000

#define VAA3 0x2000

#define GAA3 0x4000

#define RAA3 0x8000

#define VPA3 0x010000

#define RPA3 0x020000

#define GAA1 0x100000

#define RPA0 0x200000

#define VAA1 0x400000

#define VPA1 0x800000

#define HALL0 A3

#define HALL1 A1

#define HALL2 A2

#define HALL3 A0

#define TIMEG 1000

#define TIMEGI 500

#define TIMEV 3000

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int latchPin = 8;

int clockPin = 10;

int dataPin = 9;

unsigned int senzori, ocupat;

unsigned long data;

void senddata (void){

unsigned int a,b,c;

a = (unsigned int) data & 0xFF;

b = (unsigned int) (data>>8) & 0xFF;

c = (unsigned int) (data>>16) & 0xFF;

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, MSBFIRST, a);

shiftOut(dataPin, clockPin, MSBFIRST, b);

shiftOut(dataPin, clockPin, MSBFIRST, c);

digitalWrite(latchPin, HIGH);

}

void intersectia0 (void){

data=VAA0;

data|=VPA3;

data|=RAA1;

data|=RAA2;

data|=RAA3;

data|=RPA0;

data|=RPA1;

data|=RPA2;

senddata();

}

void intersectia1 (void){

data=VAA1;

data|=VPA0;

data|=RAA0;

data|=RAA2;

data|=RAA3;

data|=RPA3;

data|=RPA1;

data|=RPA2;

senddata();

}

void intersectia2 (void){

data=VAA2;

data|=VPA1;

data|=RAA0;

data|=RAA1;

data|=RAA3;

data|=RPA0;

data|=RPA2;

data|=RPA3;

senddata();

}

void intersectia3 (void){

data=VAA3;

data|=VPA2;

data|=RAA0;

data|=RAA1;

data|=RAA2;

data|=RPA0;

data|=RPA1;

data|=RPA3;

senddata();

}

void Gintersectia0 (void){

data=GAA0;

data|=RPA3;

data|=RAA1;

data|=RAA2;

data|=RAA3;

data|=RPA0;

data|=RPA1;

data|=RPA2;

senddata();

}

void Gintersectia1 (void){

data=GAA1;

data|=RPA0;

data|=RAA0;

data|=RAA2;

data|=RAA3;

data|=RPA3;

data|=RPA1;

data|=RPA2;

senddata();

}

void Gintersectia2 (void){

data=GAA2;

data|=RPA1;

data|=RAA0;

data|=RAA1;

data|=RAA3;

data|=RPA0;

data|=RPA2;

data|=RPA3;

senddata();

}

void Gintersectia3 (void){

data=GAA3;

data|=RPA2;

data|=RAA0;

data|=RAA1;

data|=RAA2;

data|=RPA0;

data|=RPA1;

data|=RPA3;

senddata();

}

void gol (void){

data=GAA3;

data|=GAA2;

data|=GAA1;

data|=GAA0;

senddata();

delay(TIMEGI);

data=0;

senddata();

delay(TIMEGI);

}

void setup() {

pinMode(latchPin, OUTPUT);

pinMode(clockPin, OUTPUT);

pinMode(dataPin, OUTPUT);

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

// Print a message to the LCD.

lcd.print("Semafor ");

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

digitalWrite(latchPin, HIGH);

delay(1000);

lcd.clear();

}

void loop() {

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori==0) gol();

if (senzori & 1 )

{

intersectia0();

delay(TIMEV);

if (senzori!=1)

{

Gintersectia0();

delay(TIMEG);

}

}

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori & 2 )

{

intersectia1();

delay(TIMEV);

if (senzori!=2)

{

Gintersectia1();

delay(TIMEG);

}

}

if (senzori & 4 )

{

intersectia2();

delay(TIMEV);

if (senzori!=4)

{

Gintersectia2();

delay(TIMEG);

}

}

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori & 8 )

{

intersectia3();

delay(TIMEV);

if (senzori!=8)

{

Gintersectia3();

delay(TIMEG);

}

}

}

Bibliografie

[1]http://instructorauto.bynet.ro/regulament-cod-rutier-4-1.php accesat la data 1.05.2014

[2]http://www.agir.ro/univers-ingineresc/numar-10-2007/istoria-semaforului_1795.html accesat la data 1.05.2014

[3]http://www.engadget.com/2010/06/04/audi-shows-off-travolution-vehicle-to-infrastructure-communicati/ accesat la data 4.05.2014

[4]http://www.alldatasheet.com/view.jsp?Searchword=Atmega328p accesat la data 4.05.2014

[5]http://www.atmel.com/devices/ATMEGA328.aspx?tab=documents accesat la data 4.05.2014

[6]http://arduino.cc/en/Main/arduinoBoardUno accesat la data 17.05.2014

[7]http://www.robofun.ro/docs/ss400_series.pdf accesat la data 7.06.2014

[8]http://www.robofun.ro/docs/tpic6b595.pdf accesat la data 7.06.2014

[9]curs Managementul Traficului – S.l. Dr. Ing. Liviu Georgescu

[10]http://www.robofun.ro/shield-lcd-16×2?keyword=lcd&category_id=0 accesat la data 28.05.2014

[11]http://www.robomat.ro/produse/video-display-led-5.html accesat la data de 28.05.2014

[12]http://www.sabre-roads.org.uk/wiki/index.php?title=Traffic_Signals_-_Signal_Heads accesat la data 28.05.2014

[13]http://ro.wikipedia.org/wiki/Microcontroler accesat la data de 28.05.2014

[14]http://www.e-automobile.ro/categorie-electronica/106-senzor-hall.html accesat la data de

22.06.2014

[15]http://www.phys.ubbcluj.ro/~anghels/teaching/SIS/Laborator/lucrarea_8.pdf accesat la data de 22.06.2014

[16]http://www.robofun.ro/led-brick-galben?keyword=led&category_id=0 accesat la data de 1.06.2014

[17]http://www.robofun.ro/senzor_hall?keyword=hall&category_id=0 accesat la data de 3.06.2014

[18]http://www.robofun.ro/driver-8led-tpic?keyword=driver%208%20led&category_id=0 accesat la data de 4.06.2014

[19]http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Summary.pdf accesat la data de 4.05.2014

[20]http://ep.etc.tuiasi.ro/files/CID/registre.pdf accesat la data de 18.05.2014

[21]http://www.roroid.ro/registru-de-deplasare-si-leduri/ accesat la data de 18.05.2014

[22]http://medea.mah.se/2013/04/arduino-faq/ accesat la data de 18.05.2014

[23]http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino accesat la data de 18.05.2014

[24]http://www.instructables.com/id/Assembling-the-Really-Bare-Bones-Board-RBBB-Ardu/ accesat la data de 8.05.2014

[25]http://www.physics.pub.ro/Referate/BN031B/Studiul_efectului_HALL_in_semiconductori.pdf accesat la data de 8.05.2014

[26]http://www.electronics-tutorials.ws/electromagnetism/hall-effect.html accesat la data de 9.05.2014

[27]http://www.robofun.ro/arduino_uno_v3?keyword=arduino%20uno&category_id=0 accesat la data de 10.05.2014

[28]http://arduino.cc/en/Guide/Windows accesat la data de 17.05.2014

Anexe

Anexa 1. Cod sursă utilizat pentru programarea Arduino

#include <LiquidCrystal.h>

#define RPA2 0x02

#define GAA0 0x04

#define VAA0 0x08

#define VAA2 0x10

#define RAA2 0x20

#define GAA2 0x40

#define VPA2 0x80

#define VPA0 0x0200

#define RAA1 0x0400

#define RPA1 0x0800

#define RAA0 0x1000

#define VAA3 0x2000

#define GAA3 0x4000

#define RAA3 0x8000

#define VPA3 0x010000

#define RPA3 0x020000

#define GAA1 0x100000

#define RPA0 0x200000

#define VAA1 0x400000

#define VPA1 0x800000

#define HALL0 A3

#define HALL1 A1

#define HALL2 A2

#define HALL3 A0

#define TIMEG 1000

#define TIMEGI 500

#define TIMEV 3000

// initialize the library with the numbers of the interface pins

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int latchPin = 8;

int clockPin = 10;

int dataPin = 9;

unsigned int senzori, ocupat;

unsigned long data;

void senddata (void){

unsigned int a,b,c;

a = (unsigned int) data & 0xFF;

b = (unsigned int) (data>>8) & 0xFF;

c = (unsigned int) (data>>16) & 0xFF;

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, MSBFIRST, a);

shiftOut(dataPin, clockPin, MSBFIRST, b);

shiftOut(dataPin, clockPin, MSBFIRST, c);

digitalWrite(latchPin, HIGH);

}

void intersectia0 (void){

data=VAA0;

data|=VPA3;

data|=RAA1;

data|=RAA2;

data|=RAA3;

data|=RPA0;

data|=RPA1;

data|=RPA2;

senddata();

}

void intersectia1 (void){

data=VAA1;

data|=VPA0;

data|=RAA0;

data|=RAA2;

data|=RAA3;

data|=RPA3;

data|=RPA1;

data|=RPA2;

senddata();

}

void intersectia2 (void){

data=VAA2;

data|=VPA1;

data|=RAA0;

data|=RAA1;

data|=RAA3;

data|=RPA0;

data|=RPA2;

data|=RPA3;

senddata();

}

void intersectia3 (void){

data=VAA3;

data|=VPA2;

data|=RAA0;

data|=RAA1;

data|=RAA2;

data|=RPA0;

data|=RPA1;

data|=RPA3;

senddata();

}

void Gintersectia0 (void){

data=GAA0;

data|=RPA3;

data|=RAA1;

data|=RAA2;

data|=RAA3;

data|=RPA0;

data|=RPA1;

data|=RPA2;

senddata();

}

void Gintersectia1 (void){

data=GAA1;

data|=RPA0;

data|=RAA0;

data|=RAA2;

data|=RAA3;

data|=RPA3;

data|=RPA1;

data|=RPA2;

senddata();

}

void Gintersectia2 (void){

data=GAA2;

data|=RPA1;

data|=RAA0;

data|=RAA1;

data|=RAA3;

data|=RPA0;

data|=RPA2;

data|=RPA3;

senddata();

}

void Gintersectia3 (void){

data=GAA3;

data|=RPA2;

data|=RAA0;

data|=RAA1;

data|=RAA2;

data|=RPA0;

data|=RPA1;

data|=RPA3;

senddata();

}

void gol (void){

data=GAA3;

data|=GAA2;

data|=GAA1;

data|=GAA0;

senddata();

delay(TIMEGI);

data=0;

senddata();

delay(TIMEGI);

}

void setup() {

pinMode(latchPin, OUTPUT);

pinMode(clockPin, OUTPUT);

pinMode(dataPin, OUTPUT);

// set up the LCD's number of columns and rows:

lcd.begin(16, 2);

// Print a message to the LCD.

lcd.print("Semafor ");

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

shiftOut(dataPin, clockPin, MSBFIRST, 0);

digitalWrite(latchPin, HIGH);

delay(1000);

lcd.clear();

}

void loop() {

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori==0) gol();

if (senzori & 1 )

{

intersectia0();

delay(TIMEV);

if (senzori!=1)

{

Gintersectia0();

delay(TIMEG);

}

}

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori & 2 )

{

intersectia1();

delay(TIMEV);

if (senzori!=2)

{

Gintersectia1();

delay(TIMEG);

}

}

if (senzori & 4 )

{

intersectia2();

delay(TIMEV);

if (senzori!=4)

{

Gintersectia2();

delay(TIMEG);

}

}

lcd.setCursor(0, 0);

lcd.print("a b c d ");

senzori=0;

ocupat=0;

if (!digitalRead(HALL0)) { senzori|=1; lcd.setCursor(0, 0); lcd.print("A "); ocupat++; }

if (!digitalRead(HALL1)) { senzori|=2; lcd.setCursor(2, 0); lcd.print("B "); ocupat++; }

if (!digitalRead(HALL2)) { senzori|=4; lcd.setCursor(4, 0); lcd.print("C "); ocupat++; }

if (!digitalRead(HALL3)) { senzori|=8; lcd.setCursor(6, 0); lcd.print("D "); ocupat++; }

lcd.setCursor(0, 1);

lcd.print("Ocupare= ");

lcd.print(ocupat*25);

lcd.print("% ");

if (senzori & 8 )

{

intersectia3();

delay(TIMEV);

if (senzori!=8)

{

Gintersectia3();

delay(TIMEG);

}

}

}

Similar Posts