DOMENIUL : INGINERIE ELECTRONICĂ, TELECOMUNICAȚII ȘI TEHNOLOGII INFORMAȚIONALE PROGRAMUL DE STUDIU: TEHNOLOGII AUDIO -VIDEO ȘI TELECOMUNICAȚII FORMA… [610124]
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
DOMENIUL : INGINERIE ELECTRONICĂ, TELECOMUNICAȚII
ȘI TEHNOLOGII INFORMAȚIONALE
PROGRAMUL DE STUDIU: TEHNOLOGII AUDIO -VIDEO ȘI TELECOMUNICAȚII
FORMA DE ÎNVĂȚĂMÂNT: ZI
Disertație
COORDONATOR ȘTIINȚIFIC
Ș.L.DR.ING. IOAN GAVRILUȚ
ABSOLVENT: [anonimizat]
2020
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
DOMENIUL : INGINERIE ELECTRONICĂ, TELECOMUNICAȚII
ȘI TEHNOLOGII INFORMAȚIONALE
PROGRAMUL DE STUDIU: TEHNOLOGII AUDIO -VIDEO ȘI TELECOMUNICAȚII
FORMA DE ÎNVĂȚĂMÂNT: ZI
REALIZAREA Ș I TESTAREA UNUI
ROBOT MOBIL AUTONOM
COORDONATOR ȘTIINȚIFIC
Ș.L.DR.ING. IOAN GAVRILUȚ
ABSOLVENT: [anonimizat]
2020
Cuprins
Introducere………………………………………………………………………………… ……..1
Capitolul 1. Prezentare Arduino…………………………………………………………. …………2
1.1. Istoric………………………… ………………………………………… .……… .……2
1.2. Avantajele Arduino……. ………….. …………………………………………………… …………. ……..3
1.3. Detalii tehnice ale kit -ului Arduino Mega……………….. …………… ….……… .……4
Capitolul 2. Mediul de programare Arduino…………………..…………………… .…… ..…7
2.1. Aspecte generale………………………….. ……………………………… ..…..……. 7
2.2. Programul de evitare al obstacolelor cu ajutorul unui senzor ultrasonic….. ..….…..12
Capitolul 3. Module auxiliare ………………………………………………………… ….……16
3.1. Sistemul senzorial………………………………………………………… ……..…..16
3.2. Modulul d river pentru motoare …..……………………………………… …….…….21
3.3. Motoarele de curent continuu ………………………………………… …..……… …30
3.4. Modulul Bluetooth…………………………………………………… ………………34
Capitolul 4. Descrierea programului ș i realizarea vehiculului …………… ……… …………….. …..39
4.1. Aspecte tehnice ale vehiculului……………………………………… …..……… …..39
4.2. Conexiunile circuitului…………….………… ………………. ……… ………………… .41
4.3. Algoritmul de evitare a l obstacolelor ……………………………… ……………….. 44
Concluzii……………………………………………………………………………… ………… .50
Anexa 1 …………………………………………………………………………… ……………..51
Anexa 2 ……………………………………………………………………………… …………..55
Bibliografie ..……………………………………………………………… ….………………… 61
1
Introducere
Prezenta lucrare își propune să realizeze un vehicul electronic autonom capabil să se
orienteze și să evite obstacole. În scopul realizării acestui concept s -a utilizat ca structură primară
o placă de dezvoltare Arduino, propice pentru a implementa un software adecvat, care pe baza
semnalelor de la sistemul senzorial al vehiculului să comande deplasarea acestuia pe o traiectorie
fără coliziuni . Vehiculul creat trebuie să aibă capacitatea de a evita majoritatea obstacolelor
întâlnite și să execute comenzile implementate prin intermediul software -ului pentru a ajunge într-
o poziție favorabilă care îi permite continuarea deplasări i.
Din punct de vedere al structurii, lucrarea de față cuprinde patru capitole, fiecare cu
subcapitolele aferente.
În primul capitol se prezintă tehnologia Arduino și avantajele pe care le oferă, atât mediul
de programare cât și partea hardware. Se detaliază aspectele tehnice ale kit -ului Arduino Mega
2560 folosit în realizarea vehiculu lui.
În capitolul doi se detaliază mediul de programare Arduino împreună cu funcțiile sale
predefinite și speciale, meniul și instrumentele de care dispune . De asemenea , se prezintă
principiul de măsurare distanțe i cu ajutorul senzori lor ultrasonici.
Capitolul trei este dedicat modulelor auxiliare ce compun ansamblul electronic. Se prezintă
sistemul senzorial cu senzorii ultrasonici HC -SR04, driver -ul pentru controlul motoarelor cu
integratul L298N, cele două motoare de curent continuu de 4,5V fiecare și modulul Bluetooth HC-
05, împreună cu aplicația Bluetooth Electronics , utilizată ca interfață de control a vehiculului pe
un sistem de operare Android .
În capitolul patru se prezintă detaliile tehnice ale vehiculu lui utilizat precum și schema de
conexiu ni a circuitului , modul in care au fost asamblate si interconectate diferitele componente și
module. De asemenea, se detaliază programul de evitare al obstacolelor.
2
Capitolul 1
Prezentare Arduino
1.1. Istoric
Arduino este o placă de dezvoltare electronică ce oferă hardware și software ușor de utilizat
și specializat, prin intermediul cărora se pot realiza sisteme electronice programabile. În 2005,
bazându -se pe activitatea lui Hernando Barragán (creatorul Wiring), Massimo Banzi și David
Cuartie lles au creat Arduino, un dispozitiv programabil ușor de utilizat pentru proiecte de design
interactiv, la Design Institute Ivrea din Ivrea, Italia. David Mellis a dezvoltat software -ul Arduino,
bazat pe Wiring. Proiectului i s-au al ăturat Gianluca Martino și Tom Igoe, cei cinci fiind cunoscuți
drept fondatorii originali ai Arduino. Ei doreau un dispozitiv simplu, ușor de conectat la diverse
lucruri (precum relee, motoare și senzori) și ușor de programa t. Aceștia au ales familia de
dispozitive AVR cu microc ontroler pe 8 biți (MCU sau µC) de la Atmel și au conceput o placă de
circuit independent cu conexiuni ușor de utilizat, au scris firmware -ul de încărcare pentru
microcontroler și l-au ambalat într -un mediu de dezvoltare integrat (IDE) care folosea programe
numite „schițe”. Această companie oferă pe piață mai multe kit -uri programabile cu microcontroler
și interfețe de comunicație de intrare și ieșire prin intermediul cărora se pot achiziționa și transmite
date și semnale pentru comanda și/sau monitorizarea unor circuite electronice exterioare kit -ului
respectiv.
Placa Arduino utilizează microcontrolerul Atmel pe 8 biți sau pe 32 de biți și în funcție de
performanțele pe ca re le oferă placa are încorporate diferite facilități hardware ce diferă în funcție
de memoria internă, numărul de interfațări cu exteriorul și alte caracteristici. Placa dispune de un
port de comunicație USB prin intermediul căruia, cu ajutorul unui PC, s e încarcă pe placă
programul ce va fi lansat în execuție de către microcontroler. Din punct de vedere al suportului
on-line, pe site -ul producătorului se află toate facilitățile necesare pentru construirea unui circuit
3
utilizând placa Arduino, inclusiv sof tware -ul în care se va scrie codul ce va fi executat de
microcontrolerul de pe placă .
1.2. Avantajele Arduino
Arduino oferă câteva facilități ce permit realizarea unor circuite electronice programabile
într-un mod simplu și ușor , la prețuri accesibile. Cel mai mare avantaj al Arduino este structura
gata de utilizare, deoarece Arduino vine într -o formă completă de pachet care include stabilizatorul
de 5V, un oscilator, un micro -controler, interfața de comunicare serială, LED și fir e pentru
conexiuni. Software -ul Arduino rulează pe sistemele de operare Windows, Linux și Macintosh,
prin aceasta punând la dispoziție un mediu de programare ușor de utilizat și accesibil. La dispoziț ia
celor care sunt la început în acest domeniul sunt pus e tutoriale cu exemple sugestive și practice iar
din punct de vedere al interacțiunii cu clientul , site-ul oficial al produsului explică fiecare funcție
a plăcii în parte și facilitează crearea unei comunități pentru utilizatori în care aceștia își pot
dezvolta și perfecționa cunoștințele.
Prin intermediul interfețelor disponibile, placa Arduino, poate fi inclusă foarte ușor în
circuit, iar încărcarea programului se realizează foarte simplu prin portul USB al PC -ului, nefiind
necesare alte protocoale. Mai exact, avem opțiunea de încărcare a programului cu portul aferent
selectat în meniul mediului de programare.
Arduino oferă un mediu de programare de tip open -source utilizatorul având posibilitatea
de a realiza modificări în codul programului, ceea ce îns eamnă că programatori i mai avansați o
pot extinde prin biblioteca C ++.
4
1.3. Detalii tehnice ale kit -ului Arduino Mega2560
Pentru prezenta lucrare se utilizează placa Arduino Mega cu microcontrolerul ATmega
2560, care dispune de 54 de pini digitali I/O din care 14 pini (de la 0 la 13) pot fi folosiți ca ieșiri
PWM (cu o rezoluție de 8 biți), 16 pini analogici de intrare (cu rezoluția de 10 biți), un oscilator
de 16 MHz, un port USB, 4 pini UART (Universal Asynchronous Receiver/Tran smitter),
conexiune ICSP (In Circuit Serial Programming), etc. Alimentarea plăcii se poate face în mai
multe moduri: prin intermediul portului de alimentare Jack, prin intermediul portului USB, sau
prin conectorul de tip Jumper disponibil pe placă. Placa poate func ționa la o alimentare externă de
la 7V până la 20 de volți. Dacă este alimentată cu mai puțin de 7V placa poate deveni instabilă.
Dacă se utilizează mai mult de 12V, stabilizatorul de tensiune se poate supraîncălzi și se poate
deteriora placa. Pinii de ali mentare sunt următorii:
VIN. Tensiunea de alimentare a plăcii atunci când se utilizează o sursă de alimentare
externă ( în loc de 5 volți de la conexiunea USB sau altă sursă de alimentare
reglementată).
5V. Acest pin dă o tensiune de 5V de la stabilizatoru l de pe placă. Placa poate fi
alimentată fie de la mufa de curent continuu (7 – 12V), conector USB (5V), fie pinul
VIN al plăcii (7 -12V). Alimentarea prin pinii 5V sau 3,3 V nu este recomandată
deoarece ocolește stabilizatorul și poate deteriora placa
3V3. O alimentare de 3,3 volți generată de stabilizatorul de pe placă. C urentul
maxim luat este de 50 mA.
IOREF. Acest pin de pe placă f urnizează tensiunea de referință cu care funcționează
microcontrolerul.
De asemenea, placa dispune de o memorie flash 256 K B, 8 KB de memorie Static RAM și
4 KB de memorie EEPROM. Cele mai importante caracteristici ale plăcii Arduino Mega 2560 sun t
prezentate în tabelul următor:
5
Microcontroler ATmega2560
Tensiune de operare 5V
Tensiune de alimentare (recomandată) 7÷12V
Tensiune de alimentare (minimă/maximă) 6÷20V
Intrări/Ieșiri digitale 54
Intrări analogice 16
Curent maxim pe I/O digitală 40 mA
Curent maxim pe pinul de 3.3V 50 mA
Memorie flash 256 KB
Static RAM 8 KB
EEPROM 4 KB
Frecvență oscilator 16 MHz
Tabel 1.3.1. – Caracteristici ale plăcii Arduino Mega2560
Cele 54 de intrări/ieșiri digitale funcționează la tensiunea nominală de 5V cu un curent
maxim de 40 mA; există și pini cu funcții speciale pentru transmiterea și recepția datelor seriale.
Fiecare dintr e cei 54 de pini digitali de pe Mega pot fi folosiți ca intrare sau ieșire, folosind funcțiile
pinMode (), digitalWrite () și digitalRead (). Placa poate să comunice cu un calculator, o altă placă
Arduino sau cu un microcontroler extern și poate comunica p rin interfețele I2C sau interfața serială
sincronă SPI (Serial Peripheral Interface Bus). Dintre pinii digitali, pinii 0(RX) și 1(TX) pot fi
utilizați și pentru comunicația serială cu nivele logice de tensiune TTL. Comunicația poate fi
realizată cu un calc ulator sau alte dispozitive care suportă acest protocol de comunicație serială
cunoscută sub numele de UART sau USART (Universal Synchronous/Asynchronous
Receiver/Transmitter).
Placa dispune de pini ce pot fi configur ați pentru cereri exterioare de întreruperi prin
intermediul funcției attachInterrupt() , însă nu toți pinii digitali pot fi setați pentru ace astă
funcție , doar pinii 2,3,18,19,20 și 21. Intrarea AREF poate fi folosită ca referință de tensiune
pentru intrările analogice; pentru activa rea acestuia se utilizează funcția analogReference() .
6
Fig. 1.3.1. – Placa Arduino Mega [1]
Fig. 1.3.2. – Placa Arduino Mega 2560 REV3 [2]
7
Capitolul 2
Mediul de programare Arduino
2.1. Aspecte generale
După cum s -a menționat în capitolele anterioare, Arduino oferă software gratuit pentru
programarea microcontrolerelor de pe plăcile Arduino iar codul în care se programează este foarte
similar cu codul în care este scris orice alt limbaj de programare . Aceasta implică faptul că toate
conceptele de bază rămân la fel și este pur și simplu o problemă de a învăța un nou dial ect; în cazul
Arduino, limbajul bazându -se pe C / C ++ .
Fig. 2.1.1 – Interfața de programare Arduino (IDE) [3]
8
IDE permite scrierea unui program, un set de instrucțiuni pas cu pas care se încarcă apoi în
Arduino. Arduino include multe funcț ii de bază încorporate, cum ar fi funcțiile pentru citire și scrierea
pe pini de intrare și ieșire, digitale și analogice, funcții de întrerupere, funcții matematice și funcții de
comunicare în serie. Funcțiile Arduino sunt a un mod convenabil de a scrie c od, cum ar fi cele pentru
driverele de dispozitiv.
La accesarea programului se va deschide fereastra cu cele două funcții predefinite void
setup() și void loop() ca în figura de mai jos:
Fig. 2.1.2 Funcții prestabilite [4]
În funcția void setup() sunt setate porturile de comunicație ale microcontrolerului și
conține instrucțiuni care sunt executate o singură dată, la punerea în funcțiune a
microcontrolerului. De asemenea, se pot seta anumiți parametri în afara funcțiilor, aceștia fiin d
recunoscuți global. Funcția void loop() este executată în continuu de către microcontroler din
momentu l în care este pus în funcțiune, citind input și generând output, aici fiind locul unde se
realizează mare parte din program.
Înainte de a fi încărcat pe microcontroler prin intermediul portului USB programul scris
poate fi verificat dacă conține erori de sintaxă sau erori metodologice. Înainte de încărcarea
programului trebuie setat portul de comunicație și tipul microcontrolerului pe care îl conț ine pl aca
Arduino. Această acțiu ne se realizează din meniul Tools, se selectează Board, unde este
disponibilă o listă cu kit -urile Ardu ino după cum rezultă din figura următoare:
9
Fig. 2.1.3 – Selectarea plăcii Arduino [5]
Tot din meniul Tools se selectează portul USB pentru comunicația dintre PC și placa
Arduino. La conectarea plă cii prin portul USB în lista din meniu apare automat și portul aferent
plăcii respective.
Fig. 2.1.3 – Selectarea p ortului [6]
După selectarea microcontrolerului și a portului aferent plăcii conectate prin USB
programul realizat poate fi încărcat pe microcontrolerul de pe placă. D acă kit-ul beneficiază de o
alimentare separată, poate să execute programul in dependent. P rin includerea în program a unor
10
instrucțiuni p entru opțiunea Serial Monitor există și posibilitatea de a vizualiza pe ecranul
calculatorului operațiile executate . De exemplu, dacă se dorește afișarea pe ecran a unui mesaj se
utilizează instrucțiunea Serial. print (”mesaj”) ; pentru a realiza comunicația serială cu calculatorul
programul trebuie să includă instrucțiunea Serial. begin () în funcția void setup() .
Arduino dispune de exemple sugestive cu aplicații care pot fi modificate de către utilizator
după cerințele aplicației ce se dorește a fi realizată. Pentru a vizualiza aceste exemple se selectează
din meniul File -> Example, fiind disponibile atât exemple simple cât și exemple care apelează
librării pentru execuția programului .
Fig. 2.1.4 – Meniul cu exemple [7]
11
Arduino oferă posibilitatea descărcării mai multor exemple de pe site care pot fi incluse în
program; aceste exemple aduc completări la cele anterioare și sunt disponibile gratuit.
Fig. 2.1.5 – Cod pentru aplicația încorporată Blink [8]
Codul de mai sus este un cod exemplu oferit de Arduino pentru programul Blink. Marea
majoritate a modelelor de plăci Arduino au un led încorporat ce poate fi controlat. La Arduino
Mega, pinul corespunzător pentru led este pin ul digital 13 însă, indife rent de modelul de pl acă,
LED_BUILTIN este setat pentru pinul corect. Programul aprinde led -ul pentru o secundă și îl
oprește pentru o secundă în mod repetat.
12
2.2. Programul de evitare al obstacolelor cu ajutorul unui senzor
ultrasonic
În continuare se vor prezenta principalele elemente de programare care sunt utilizate pentru
crearea programului de măsurare a distanței și evitare a obstacolelor. Într -o primă etapă se declară
variabilele care vor fi utilizat e în program . Acestea sunt recunoscute global în cadrul prog ramului
și se declară în afara oricărei funcții. În funcția void setup() sunt introduse instrucțiunile care
stabilesc condițiile inițiale pentru program. În aplicația de față, în funcția void setup() sunt
declarate porturile de ieșire ale plăcii Arduino a ferente comenzilor pentru driverul L298.
Funcția void loop() cuprinde liniile de cod aferente calculului distanței pentru cei doi
senzori și cele pentru comanda deplasării vehiculului. Se pot implementa trei posibile cazuri de
deplasare: comanda pentru deplasarea înainte, pentru deplasarea la dreapta și pentru deplasarea la
stânga. Cele trei cazuri sunt verificate în funcția if, iar rezultatul este concretizat prin variabila ok.
Comenzile pentru unul din cele trei cazuri se selectează prin intermediul funcției switch(ok) .
Sintaxa pentru această funcție este următoarea:
switch(ok)
{ case 0: { //pentru deplasarea înainte }
case 1: { //pentru deplasarea la dreapta}
case 2: {//pentru deplasarea la stânga }
}
Senzorii ultrasonici sunt utilizați pentru a măsura o distanță până la un obiect. În aplicația
de față se folosește un senzor HC-SR04 . Detaliile tehnice și modul în care se determină distanța
pe baza unor semnale pe care acest senzor le utilizează vor fi prezentate î n Capitolul 3 . În
continuare se va prezenta software -ul cu ajutorul căruia microcontrolerul disponibil pe placa
Arduino determină distanța până la un obiect/obstacol, distanță care poate fi exprimată într -o
13
unitate de măsură convenabilă pentru aplicația pentru care a fost creat. Pentru a realiza aplicația
de măsurare a distanței sunt necesare: o placă Arduino de orice tip, un senzor ultrasonic HC -SR04,
o sursă de tensiune continuă de 5V și cabluri pentru conexiuni.
Fig. 2.2.1 – Realizarea c onexiunilor circuitului de
măsurare a distanței [9], [10]
În figura de mai sus este prezentată schema cu conexiunile pentru realizarea aplicației de
determinare a distanței. După cum se poate observa din schemă, se conectează borna pozitivă a
sursei de te nsiune la pinul Vin de pe placa Arduino, respectiv la VCC, la conectorul senzorului,
iar cea negativă la GND atât pentru Arduino cât și pentru senzor. Bornele Trig și Echo ale
senzorului se conectează la câte un pin digital al plăcii Arduino acestea fiind reținute pentru a fi
declarate în program ca ieșire, respectiv intrare. În schemă pinul Trig este conectat la pinul digital
D3 iar pinul Echo la pinul digital D2.
După realizarea cablajului, următoarea etapă o constituie programarea plăcii Arduino.
Primul pas după deschiderea programului este declararea pinilor digitali Trig și Echo, și a
variabilei durata înainte de funcția void setup() astfel:
14
const int trigPin = 3;
const int echoPin = 2;
long durata;
În funcția void setup() va fi introdusă instrucțiunea pentru citirea măsurătorii în program
prin intermediul portului serial, instrucțiunea fiind Serial. begin (9600 ). În funcția void loop() vor
fi introduse instrucțiunile aferente calculului distanței, instrucțiunile fiind următoarele:
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Prima instrucțiune din secvența de cod de mai sus setează ieșirea plăcii Arduino
corespunzătoare pinului Trig ca fiind de tip OUTPUT (Trig este semnalul de declanșare a
senzorului ultrasonic, acesta fiind trimis de la placa Arduino la senzor), iar urmă toarea instrucțiune
setează această ieșire pe nive l logic Low, cu rolul de a realiza o inițializare a ieșirii către senzor.
Prin intermediul instrucțiunii delayMicroseconds(2) se va realiz a o întârziere de 2 milisecunde,
apoi următoarea instrucțiune pune ieșirea pe nivel logic High, acest semnal având rolul de a pune
senzorul pe modul de operare. După încă o întârziere de 10 milisecunde, ieșirea trig este pusă din
nou pe nivel logic Low. În urma acestui impuls de Trig , senzorul declanșează un semnal ultrasonic
de 40 KHz, în urma căruia primește un ecou la un anumit interval de timp în funcție de distanța
până la un obstacol. În momentul în care senzorul ultrasonic primește acest ecou, ieșirea Echo a
senzo rului este pusă pe nivel logic High. Pentru ca placa Arduino să recepționeze acest impuls,
este necesară setarea pinului aferent ca intrare prin intermediul instrucțiunii: pinMode(echoPin,
INPUT) .
Parametrului durata , declarat la începutul programului , i se atribuie o valoare ce
corespunde intervalului de timp dintre momentul în care s -a declanșat impulsul Trig și momentul
15
în care a fost recepționat impulsul Echo , acest interval fiind aproximat cu dublul distanței de la
senzor la obstacol. Instrucțiune a prin care se realizează atribuirea este următoarea:
durata = pulseIn(echoPin, HIGH);
În continuare se de termină distanț a propriu -zisă până la obstacol, pentru acest exemplu
exprimându -se distanța în centimetri. Dacă se consideră că sunetul parcurge o distanță de 1 cm în
29 de microsecunde în aer, luându -se în considerare și faptul că distanța parcursă de semnalul
ultrasonic parcurge o distanță dublă, rezultă relația de calcul a distanței în centimetri :
cm=durata / 29 / 2;
Pentru afișarea distanței prin intermediul aplicației Serial Monitor disponibilă în program
se va introduce instrucțiunea Serial.print(cm) urmată de Serial.print(”cm”) . A doua instrucțiune
are ca scop introduce rea textul ui ”cm” după afișarea distanței. În funcție de modul în care a cest
parametru este manipulat, poate fi folosit pentru controlul unor algoritmi de detecție a obstacolelor
sau a lipsei acestora.
După rularea programului și deschiderea casetei Serial Monitor , pe acesta se va afișa
distanț a determinată prin intermediul senzorului și a algoritmului. Fereastra în care se afișează
distanța măsurată se deschide încontinuu, oferind practic utilizatorului feed -back în timp real.
Fig. 2.2.2 – Fereastra de monitorizare a distanței măsurate
16
Capitolul 3
Module auxiliare
3.1. Sistemul senzorial
Atunci când se urmărește crearea unui robot autonom, unul dintre cele mai importante
aspecte este detectarea și evitarea obstacolelor. Adesea, o țintă se poate deplasa într -un scenariu în
care există un obiect între țintă și robot. Sistemul senzorial al unui sistem electronic autonom
constituie un element important pentru funcționarea acestuia, deoarece senzorii aduc informații
din mediul exterior. Pe baza acestor informații , care sunt ulterior procesate sistemul poate executa
anumite operații. Gradul de eficacitate al execuției acestor operații este depend ent de
performanțele pe care le oferă sistemul senzorial, de algoritmul implementat pentru prelucrarea
informației senzoriale și de componentele hardware disponibile.
Procesul poate fi tradus ca și conver sia, prin intermediul senzorului, a unei mărimi fiz ice
neelectrice într-o mărime fizică electrică ce este pusă la dis poziția sistemului de procesare. E xistă
senzori pentru o gamă largă de parametri fizici ce se dorește a fi monitorizați cum ar fi: lumină,
umiditate, m asă, distanță, temperatură, etc. În fig ura următoare se poate observa schema de
principiu a unui sistem electronic autonom care preia informațiile senzoriale din mediul exterior,
realizând funcția unui sistem de achiziții de date și care, pe baza acestor informații, realizează
operații corespun zătoare .
Fig. 3.1.1 – Transmiterea informației senzoriale în sistemele
electronice
Un senzor trebuie să poată detecta obiect ele, pentru a permite robotului să răspundă și să
se miște în consecință. În mod ideal, senzorul trebuie să fie mic, low cost și ușor de fabricat și
17
trebuie să fie utilizabil la scară largă. Un senzor disponibil imediat, care se potrivește tuturor
acestor cer ințe este senzorul ultrasonic și este cel care se folosește și în această aplicație.
Senzorul ultrasonic folosește principiul sonar pentru a determina distanța față de un obiect,
similar cu procesul de la lilieci și delfini. Senzorul este un echipament de măsurare a distanței fără
contact care utilizează o variabilă de sincronizare t, care reprezintă intervalul de timp între
momentul declanșării semnalului ultrasonic și momentul în care senzorul receptează ecoul; practic
acest interval se poate aproxima cu intervalul de timp dintre momentul în care senzorul primește
semnalul de declanșare (Trig) și momentul în care se declanșează semnalul Echo . Distanța L până
la obiect p oate fi calculată cu relația 3.1.1 :
𝐿=vt cosθ
2 (3.1.1)
În această ecuație v reprezintă viteza sunetului prin aer (aprox. 340 m/s), iar 𝜃 este ung hiul
de reflexie. Dacă transmițătorul și receptorul sunt relativ apropiate unul de celălalt, atunci cos 𝜃 ≈
1. Principiul de funcționare al senzorului este următorul : pinul Trig al senzorului primește un
impuls cu o durată de cel puțin 10 𝜇s acesta determinând senzorul să emită un tren de impulsuri
ultrasonice cu frecvența de 40 KHz și detecte ază ecoul semnalului transmis de un obiect aflat în
aria de detecție.
Fig. 3.1.2 – Principiul de funcționare a senzorului ultrasonic [11]
18
De exemplu, dacă un obiectul se află la 10 cm distanță de senzor, iar viteza sunetului este
de 340 m/s sau 0,034 cm/ 𝜇S unda de sunet va trebui să călătorească aproximativ 294 𝜇s. Dar ceea
ce se va obține de la pinul Echo va fi dublul acestui număr, deoa rece unda sonoră trebuie să
călătorească înainte și să ricoșeze înapoi. Așadar, pentru a obține distanța în cm, trebuie să
înmulțim valoarea timpului de călătorie primit de la pinu l Echo cu 0,034 și să o împărțim cu 2.
Acest exemplu este ilustrat în figura de mai jos:
Fig. 3.1.3 – Exemplu de calcul al distanței la senzorul ultrasonic [12]
În figura de mai sunt prezentate formel e de undă ale semnalelor prin intermediul cărora se
realizează măsurarea distanței . Se observă trenul de impulsuri ultrasonice cu frecvența de 40 KHz
generat și detectarea ecoul semnalului transmis de un obiect tot sub formă de tren de impulsuri :
19
Fig. 3 .1.4 – Formele de undă ale senzorului ultrasonic [13]
Diagrama formelor de undă ale semnalelor cu diferențele de fază corespunzătoare se
regăsește mai jos:
Fig. 3.1.5 – Formele de undă cu diferența de fază [14]
În lucrarea de față sunt utilizați senzori ultrasonici HC -SR04 care pot interfața cu placa
Arduino prin intermediul porturilor digitale. Acești senzori trimit semnale corespunzătoare către
placa Arduino care prin algoritmul implementat măsoară cu o precizi e suficient de ridicată distanța
până la obstacolele pe care aceștia le detectează . Motoarele vehiculului vor fi comandate
corespunzător pentru modificarea traiectoriei pe baza acestor măsurători . Mai jos se prezintă
principalele caracteristici ale acestui senzor precum și dimensiunile sale.
20
Tensiune de alimentare 5V
Curent 15 mA
Distanța la care măsoară 2 cm -400 cm
Rezoluție 0.3 cm
Unghiul de măsurare 30 grade
Frecvența ultrasonică 40 KHz
Tabel 3.1.1 – Parametri senzorului HC -SR04
Senzorii HC-SR04 dispun de 4 pini fiecare: VCC, Trig, Echo și GND. Pinul VCC se
conectează la o sursă de tensiune de 5V, GND la un ground comun cu placa Arduino, iar bornele
Trig și Echo ale senzorului se conectează la câte un pin digital al plăcii Arduino.
Fig. 3.1.6 – Aspectul fizic al senzorului HC -SR04 [15]
21
3.2. Modulul driver pentru motoare
Motoarele cu curent continuu sunt folosite frecvent într-o varietate de aplicații cum ar fi
ventilatoare, pompe, aparate, automatizări și drivere automotive. Motivele pentru popularitatea lor
crescută sunt caracteristici mai bune la raportul viteză față de cuplu, eficiență ridicată, durată de
viață lungă și funcționare fără zgomot. Pe lângă aceste avantaje, raportul cuplului livrat la
dimensiunea motorului est e mai mare, ceea ce îl face util în aplicații în care spațiul și greutatea
sunt factori critici. Acest caracteristici le transformă în opțiuni atractive pentru designeri din
domeniul roboticii. Un motor cu curent continuu poate funcționa furnizând o difere nță de tensiune
între bornele sale. Cu toate acestea, trebuie depășite anumite provocări pentru a le conduce eficient.
Cele mai importante obiective sunt direcția și viteza variabilă.
Pentru comanda motoarelor electrice (de curent continuu sau alternativ) există circuite și
chiar software specializat care satisfac nevoile cerute în utilizarea acestora. Pentru comanda
direcției motorului de curent continuu cea mai simplă modalitate de comandă o reprezintă puntea
H care permite comanda motorului în ambele sen suri prin intermediul a patru întrerupătoare astfel:
două întrerupătoare sunt conectate la sursa de tensiune iar celelalte două la masă permițând trecerea
curentului dinspre sursă spre masă. Dacă se dorește controlarea vitezei prin intermediul
comutatoarel or, ace stea se pot comanda PWM (Pulse Width Modulation) , aceasta fiind principala
modalitate de comandă a motoarelor electrice deoarece semnalul PWM este ușor de prelucrat de
către circuitele electronice digitale.
După cum se poate vedea în figura următoar e, o punte H utilizează patru tranzistoare
conectate într -un asemenea mod încât diagrama schematică apare ca un „H”. Tranzistoarele sunt
dispozitive electronice care pot fi comandate de un microcontroler în mod direct sau prin
intermediul unor interfațări cu circuitul de putere acolo unde este cazul.
22
Fig. 3.2.1 – Puntea H. Direcția de rotație a motorului [16]
Modul de operare de bază al unei punți H este destul de simplu: dacă Q1 și Q3 sunt
deschise , borna stâng ă al motorului este conectat ă la sursa de alimentare, în timp ce borna dreaptă
este conectat ă la masă . Curentul începe să c ircule prin motor și alimentează motorul în (să zicem)
direcția înainte și arborele motorului începe să se învârtă. Dacă Q4 și Q2 sunt deschise , se întâmplă
întâmplă procesul invers , motorul se alimentează în sens invers, iar arborele va începe să se învârtă
înapoi.
Într-o construcție tip punte, nu trebuie să fie niciodată deschise Q1 și Q2 (sau Q3 și Q4) în
același timp. Dacă se face acest lucru, se crează o cale de rezistență foarte scăzută între alimentare
și GND, ceea ce va genera un scurtcircuit al sursei de alimentare . Această condiție este numit
„shoot -through” și este un mod aproape garantat de a distruge rapid p untea și alte elemente din
circuit.
În anumite cazuri, în special pentru motoarele mici, nu este necesară construirea unui întreg
circuit de punte H de la zero. De fapt, utilizare a unui integrat poate limita considerabil cantitatea
de probleme cu privire la tensiunile de compensare în cazul în c are există un motor cu tensiune de
23
alimentare diferită față de tensiunea logică. Există mai multe integrate IC capabile, cum ar fi
L293D, L298N, TA7257P, SN754410 etc., care sunt ieftine și ușor de integrat într -un circuit.
Driver -ul pentru motoare este un modul electronic utilizat pentru comanda corespunzătoare
a două motoare de curent continuu, iar pentru lucrarea de față, pe modulul electronic , se folosește
integratul L298N realizat în tehnologia TTL (Transistor – Transistor Logic) . Acesta permite
modif icarea pentru fiecare motor a sensului și vitezei de rotație, comanda acestuia realizându -se
prin intermediul a șase intrări: EnA, EnB, IN1, IN2, IN3, IN4, a căror funcționalitate va fi descrisă
ulterior.
Fig. 3.2.2 – Modulul driver pentru comanda
Motoarelor [17]
Modulul electronic, prezentat in figura de mai sus, este echipat cu indicatori LED, diode
de protecție (pe care integratul L298N nu le are încorporate) și un regulator de tensiune liniar de
5V, model 78M05, de la STMicroelectronics. Poate f i activat sau dezactivat printr -un jumper.
Când acest jumper este în poziție, regulatorul de 5V este activat, furnizând alimentarea logică
(Vss) de la sursa de alimentare a motorului (Vs). În acest caz, terminalul de intrare 5V acționează
ca un pin de ieși re și furnizează 5V 0,5A , putând fi utilizat pentru a alimenta Arduino sau alte
circuite care necesită alimentare cu 5V. Când jumperul este scos, stabilizatorul de 5V se
dezactivează și trebuie alimentați separat 5V prin terminalul de intrare de 5V . Atunci când
24
tensiunea de alimentare a motoarelor este >7V, nu este nevoie să alimentăm separat partea de
logică. Schema completă a modului electronic se regăsește în figura de mai jos:
Fig. 3.2.3 – Schema completă a modulului electronic [18]
Câteva caract eristici tehnice ale modulului sunt : tensiune motoare: 5V – 35V; tensiune
circuite logice: 5V; curent motoare: 2A (MAX); curent circuitele logice : 36mA; frecvență maximă
PWM : 40kHz. Dimensiuni le sale sunt : 43 x 4 3 x 27 mm și cu toate că este destul de robust ,
beneficiază de un radiator suficient de mare ce disipă o cantitate mare de căldură .
25
Fig. 3.2. 4 – Modulul driver – componente importante [19]
În tabelul de mai jos prezentați câțiva parametri de funcționare ai integratului L298N:
Simbol Parametru Valoare Unitate de măsură
Vs Alimentare 50 V
Vss Nivel logic de tensiune 7 V
Vi, Ven Tensiune de intrare, tensiune de activare între -0.3 și
7 V
Io Curentul maxim de ieșire nonrepetitiv(t=100 us)
repetitiv(80% on -20% off; Ton=10ms)
operare în curent continuu 3 2.5
2 A A
A
Vsens Tensiunea de comandă a sensului de rotație între -1 și
2.3 V
Ptot Puterea totală disipată(T=75 grade C) 25 W
Top Temperatura de operare a joncțiunii între -25 și
130 grade C
Tabel 3.2.1 – Parametrii de catalog ai integratului L298
Integratul L2 98 dispune de câte două ieșiri (OUT1 și OUT2, respectiv OUT3 și O UT4)
pentru fiecare dintre cele două motoare comandate, prin intermediul cărora se poate schimba
26
sensul de rotație în funcție de nivelele logice de intrare In1 și In2, respectiv In3 și In4. Pe lângă
acestea, i ntegratul dispune și de două intrări de validare prin care cele două motoare pot fi oprite
indiferent de valorile logice ale intrărilor de comandă a sensului. Comanda acestor intrări poate fi
făcută PWM pentru a varia viteza de rotație a motoarelor . Prin urmare, tensiunea la b ornele fiecărui
motor va varia între nivelul minim și nivelul maxim, în f uncție de factorul de umplere a semnalului
PWM . Pentru fiecare motor există două intrări comandate (In1 și In2, respectiv In3 și In4) cu
nivele logice TT L care se transpun la ieșiril e OUT1 și OUT2, respectiv OUT3 și O UT4 cu nivele
de tensiune care comandă sensul de rotație a motoarelor sau starea de repaus a acestora.
În următoarea schemă se prezintă circuitul interior al integratului ce conține 8 porți logice
de tip ȘI cu două in trări realizate în tehnologia TTL și 8 tranzistoare NPN de putere medie prin
care se vor debita curenții pentru cele două motoare conectate la bornele exterioare.
Fig. 3.2. 5 – Schema electronică de principiu a integratului
L298 [20]
Cele două motoa re sunt comandate în același mod, schema fiind simetrică, prin urmare se
va prezenta principiul de funcționare pentru comanda unui singur motor la ieșirile OUT1 și O UT2.
Cele 4 tranzistoare NPN aferente ieșirilor OUT1 și O UT2 sunt dispuse câte două în serie (emitorul
27
primului tranzistor la colectorul următorului tranzistor), iar cele două grupări serie sunt dispuse în
paralel, fiecare parte având rolul de a comanda una din cele două ieșiri. Sursa de tensiune nominală
a motorului este conectată la bornele grup ării paralel iar cele două ieșiri sunt conectate fiecare între
emitorul și colectorul grupării serie. Baza fiecărui tranzistor NPN este conectată la ieșirea uneia
din cele 4 porți logice. Pe baza schemei putem observa că fiecare intrare comandă câte două p orți
logice . Aceasta comandă porțile aferente grupării serie de tranzistoare, poarta inferioară având
intrarea negată . Prin urmare ieșirile celor două porți de pe aceeași parte nu pot avea același nivel
logic simultan, deci tranzistoarele serie nu pot fi î n stare de conducție sau blocare simultan,
evitându -se situațiile în care s -ar realiza un scurtcircuit al alimentării spre masă sau deconectarea
unei borne a motorului de un potențial electric care ar face borna respectivă flotantă. Cealaltă
intrare a fiec ărei porți ȘI din cele 4 este semnalul de validare dat de intrarea EnA.
În funcție de nivele logice de intrare , poarta logică ȘI va comuta între stările High și Low
după logica booleană implementată pentru funcția ȘI prezentată în figura de mai jos.
Fig. 3.2.6 – Poarta logică ȘI cu tabelul stărilor
Se observă că ieșirea porții va în starea High doar atu nci când ambele intrări sunt în starea
High, în rest ieșirea va fi în starea Low. Rezultă că indiferent de starea logică a intrărilor In1 și
In2, dac ă intrarea de validare EnA este pe nivel Low, ieșirile celor 4 porți logice vor fi pe nivel
Low, iar tranzistoarele sunt blocate datorită polarizației inverse din bază. În acest caz ieșiril e OUT1
și OUT2 sunt flotante determinând starea de repaus a motorul ui. Această corelație dintre starea
intrărilor și starea motorului se poate observa în figura de mai jos:
28
Fig. 3.2.7 – Acționarea motoarelor [21]
Viteza unui motor cu curent continuu poate fi controlată pri n variația tensiunii de intrare,
intrarea de validare având doar rolul de a conecta sau deconecta motorul de la sursa de tensiune .
O tehnică obișnuită pentru a face acest lucru este utilizarea PWM (Pulse Width Modulation) . PWM
este o tehnică în care valoarea medie a tensiunii de intrare este ajustată prin trimiterea unei serii de
impulsuri ON -OFF. Tensiunea medie este proporțională cu lățimea impulsurilor cunoscute sub
denumirea de ciclu de funcționare ( Duty Cycle ). Cu cât ciclul de funcționare este mai mare, cu
atât este mai mare tensiunea medie apli cată motorului continuu , rezultând o viteză mare și cu cât
ciclul de funcționare este mai mic, cu atât este mai mică tensiunea medie aplicată mo torului
continuu, rezultând o viteză mai mică . Acest lucru se poate observa in figura de mai jos:
Fig. 3.2.8 – Corelația între factorul de umplere a semnalului PWM
și viteza de rotație a motorului [22]
29
În figura următoare se poate observa amplasamentul driverului pentru motoare pe
platforma superioară a vehicului autonom.
Fig. 3.2.9 – Amplasamentul modulului în cadrul vehiculului
30
3.3. Motoarele de curent continuu
Motorul de curent continuu este o mașină electrică care funcționează prin intermediul
fenomenului de inducție electromagnetică și este alimentat de la o sursă de curent continuu . Din
punct de vedere constructiv aceasta este format dintr -o parte fixă (stator), o parte mobilă (rotor) și
colector. Statorul este cuprins în carcasa motorului, în interiorul acestuia fiind așezat rotoru l iar
colectorul este situat la un capăt al axului rotorului, rotorul și colectorul rotindu -se în același timp.
Fig. 3.3.1. – Motorul electric de curent continuu [23]
Ca și principiu de funcționare, curentul care parcurge bobina de excitație creează un câmp
magnetic a cărei inducție are o distribuție sinusoidală de -a lungul circumferinței rotorului. Datorită
mișcării de rotație a rotorului, bobina acestuia intersectează liniile câmpului magnetic de excitație,
în el inducându -se o tensiune sinusoidală di rect proporțională cu numărul de spire al bobinei,
lungimea bobinei, viteza tangențială a conductorului în câmp magnetic și inducția în bornele
31
plasate sugestiv de latura bobinei. Turația motorului este proporțională cu tensiunea aplicată
înfășurării rotor ice și invers proporțională cu câmpul magnetic de excitație .
După cum s -a menționat și în capitolele anterioare, sensul de rotație al motorului se poate
modifica dacă se inversează bornele sursei de tensiune de la periile colectoare. Dacă se modifică
vitez a de rotație a motorului, metoda cea mai simplă și utilizată este aceea de a modifica valoarea
tensiunii de la borne. Între viteza de rotație a motorului și valoarea tensiunii de la borne există o
relație de proporționalitate ce depinde de un factor scala r constant specific motorului. În ultimul
timp au apărut circuite specializate p entru modificarea vitezei, sensului de rotație și altor parametri
a motorului, care interfațează sursa de alimentare cu bornele de alimentare ale motorului , având și
intrări de comandă care se transpun în ieșiri de comandă pentru controlul motorului. Așa cum s -a
menționat anterior, comanda motoarelor se poate realiza prin PWM (Pulse Width Modulation) ,
astfel existând o variație a tensiunii la bornele motorului datorată impulsuri lor PWM.
Vehiculul ales pentru acest proiect dispune de două motoare de curent continuu angrenat
37B280 de 4.5 V fiecare.
Fig. 3.3. 2. – Motorul electric de curent continuu angrenat 4.5V 37B280 [24]
Un motor cu angrenaje este o combinație integrală a unui motor și a cutiei de viteze.
Adăugarea unui reductor la un motor reduce viteza, dar crește cuplul. Cei mai importanți parametri
în ceea ce privește motoarele cu angrenaje sunt viteza (rpm), cuplul și randamentul. Deși
beneficiază de o tensiune nominală de doar 4.5 V, motorul este realizat cu magneți permanenți și
32
generează o viteză de 102 rpm. Motorul prezintă angrenaje pentru scalarea vitezei, obținându -se
astfel o viteză mai mică decât cea nominală , pe axul exterior, care are un diametru de 6mm și o
lungime de 10 mm. Cutia de viteze metalică cu angrenajele rotunde din oțel se poate observa în
figura următoare:
Fig. 3.3.3. – Angrenaj cutie de viteze motor DC [25]
Aceste motoare de curent continuu angrenate prezinte numeroase avantaje precum o
multitudine de serii si modele, ușor de modificat, axul poate fi centrat și descentrat , emisie fonică
redusă, durată de viață mare, costuri reduse și folosite la scară largă î n domenii precum robotică și
automatizare, securitate (încuietori electrice), automatizări sanitare (dispersor de săpun, de hârtie),
aparatură casnică (aparat de cafea, râșniță), etc.
Din punct de vedere al dimensiunilor motorului, diametrul maxim , de 37 mm, este al cutiei
de vite ze. Pe capătul cu axul exterior se află 6 găuri M3 pentru fixare , iar in celălalt capăt bornele
motorului ce vor fi conectate la blocurile terminale OUT cu șuruburi ale modului electronic cu
integratul L298N după cum se poa te vedea mai jos:
33
Fig. 3.3. 4. – Conectare motoare la modulul electronic [26]
Modulul are două blocuri terminale cu șuruburi pentru motoarele A și B, și un alt bloc de
șuruburi pentru pinul de masă, VCC pentru motor și un pin de 5V care poate fi de intra re, fie de
ieșire. Se observă regulator ul de tensiune de 5V, despre care s -a discutata anterior, care este activat
sau dezactivat folosind un jumper.
Fig. 3.3.5 . – Amplasamentul motoarelor în cadrul vehiculului [27]
34
3.4. Modulul Bluetooth
Bluetooth este un standard tehnologic wireless utilizat pentru schimbul de date între
dispozitivele fixe și mobile pe distanțe scurte, utilizând unde radio UHF cu lungime de undă scurtă
în benzile radio industriale, științifice și medicale, de la 2.402 GHz la 2.480 GHz și pentru crearea
rețelelor de zonă personală (PAN – Personal Area Network) . Această tehnologie a fost concepută
inițial ca o alternativă wireless la cablurile de date RS -232.
Modulele Bluetooth facilitează comunicarea wireless între două microcontrole re cum ar fi
două plăci Arduino sau între două microcontrolere și orice dispozitiv cu funcția Bluetooth cum ar
fi un telefon sau un laptop. În aplicația de față se utilizează un modul Bluetooth HC-05 pentru a
facilita comunicarea dintre placa Arduino Mega 2560 instalată pe vehiculul autonom și un telefon
cu sistem de operare Android. Acest sistem de operare dispune deja de o multitudine de aplicații
care facilitează procesul. Modulul se poate observa în figura de mai jos:
Fig. 3.4.1. – Modulul Bluetooth HC-05 [28]
35
Modulul comunică prin intermediul interfeței USART la o rată de baud de 9600bps , prin
urmare este ușor de interfațat cu orice microcontroler care acceptă USART. De asemenea, se pot
configura valorile implicite ale modulului folo sind modul de c omandă. Așadar, acest modul
wireless este capabil de a transfera date de pe computer sau telef onul mobil la microcontroler și
invers . HC-05 are două moduri de operare, unul este modul Date în care poate trimite și primi date
de la alte dispozitive Bluetoot h, iar celălalt este modul de comandă AT unde setările implicite ale
dispozitivului pot fi modificate. Dispozitivul poate fi acționat în oricare din aceste două moduri
folosind pinul Enable/Key.
Din punct de vedere al construcției hardware , modului Bluetooth are dimensiuni relativ
mici, de 27 x 12.7 mm. Câteva caracteristici tehnice: tensiune de alimentare: 3.6 – 6V; curent
consumat: maxim 30mA; pinii de I/O sunt compatibili pentru 3.3V; comunică pe interfață serială
UART; baud rate cuprins între: 96 00 – 460800 bps; distanță de transmisie până la 10m; putere de
transmisie: +4dBm; senzitivitate recepție: -80dBm; folosește protocolul IEEE 802.15.1
standardizat; poate fi opera atât ca Master cât și Slave.
Fig. 3.4.2 . – Schema tehnică modulul Bluetooth HC-05 alimentat la 3.3V [29]
În figura de mai sus se pot observa toți pinii modului Bluetooth , într -o schemă de
alimentare la o sursă de 3.3V. Este foarte ușor de asociat modulul HC -05 cu microcontrolere,
deoarece funcționează folosind Serial Port Protocol (SPP). Pentru a-l configura cu Arduino se
încarcă pe microcontroler programul atașat , iar din serial monitor de la Arduino se setează "Both
36
NL & CR". Programul folosește biblioteca SoftwareSerial.h pentru a crea un canal de comunicație
bazat pe protocolul UART prin intermediul a doi pini digitali (pot fi folosiți oricare pini digitali).
Modulul se alimentează cu tensiuni cuprinse între 3.6V și 6 V. Pentru a intra în modul de comandă
AT al modulului, după alimentare, se apasă butonul prezent pe modu l, led-ul începe să clipească
cu o viteza de 0.2 impulsuri pe secundă, și modulul HC-05 întră în modul At cu baud rate automat
de 9600bps . Dacă nu se apasă butonul după alimentare, acesta intră în modul Data.
Fig. 3.4.3. – Conectarea modulului HC -05 la Arduino Mega 2560 [30]
Comunicarea cu modulul se poate face prin intermediul Serial Monitor . În schema de mai
sus se poate observa că, pentru a nu arde modulul Bluetooth , circuitul dintre Arduino TX (Transmit
Pin, care are ieșire 5V) și modulul Bluetooth RX (Receive Pin, care acceptă doar 3,3 V) trebuie
conectat printr -un divizor de tensiune. Pe de altă parte, firul dintre pinul modulului Bluetooth și
pinul Arduino RX poate fi conectată direct, deoarece semnalul 3.3V de la modulul Bluetooth este
suficient pentru a fi acceptat ca și high logic la placa Arduino.
Ca și interfață grafică între placa Arduino și un telefon cu sistem de operare Android, se
folosește o aplicație compatibilă cu modulul Bluetooth HC-05, și anume aplicația Bluetooth
Electronics de la KeuwlSoft. Aceasta se instalează pe telefonul mobil. Meniul aplicației arată în
felul următor:
37
Fig. 3.4. 4. – Conectarea la modulul Bluetooth
Fig. 3.4. 5. – Selecția proiectului
După cum se poate observa în figurile de mai sus, după deschiderea ap licației conectarea
la modulul B luetooth se face prin Discover – Pair – Connect – Done. Pentru aceasta, modulul HC –
05 de pe placa Arduino trebuie să fie alimentat. Ap licația vine la pachet cu o librărie formată din
11 exemple Bluetooth , având un total de 20 de cadrane ce pot fi modificate pentru diverse proiecte.
Pentru deschidere se selectează proiectul dorit ș i se apasă Run. Este compatibilă și cu RaspberyPi
sau orice alt microcontroler ce este echipat cu un modul Bluetooth corespunzător.
38
Fig. 3.4. 6. – Configurarea proiectului
Aplicația dispune de o selecție largă de comenzi disponibile, inclusiv butoane,
întrerupătoar e, lumini, indicatoare, terminale, accelerometre și grafice. Acestea se trag și se așază
pe grila panoului. Proprietățile lor se pot edita în meniul din dreapta jos. O acționare a unui buton
trimite un caracter către modulul Bluetooth , iar programul Arduin o îl va analiza si va executa
comanda afer entă: pentru ‘S’ – stop, ‘F’ – forward, ‘B’ – back, ‘L’ – left și ‘R’ – right.
Din punct de vedere al programului, declararea variabilelor și comenzile de deplasare sunt
identice cu ale programului de detectare și evitare al obstacolelor cu ajutorul senzorilor ultrasonici
din capitolul următor și va fi detaliat acolo. Singura diferență este includerea unui buzzer care la
fiecare comandă va transmite un semnal de 600 Hz pentru o durată de 200 de milisecunde.
tone(buz zer, 600);
delay(200);
noTone(buzzer);
39
Capitolul 4
Realizarea vehiculului autonom și descrierea programului
4.1. Aspecte tehnice ale vehiculului
Pentru această aplicație se utilizează un vehicul cu două roți acționate fiecare de câte un
motor de curent continuu de 4.5V și câte o rotiță de plastic în partea frontală și cea din spate, pentru
echilibru. Roțile principale sunt din cauciuc și au un diametru de 65 de mm și o lățime de 26 mm,
în timp ce roțile secundare sunt din plastic electroplavat. Faptul că robotul se deplasează cu doar
două motoare ușurează foarte mult partea de algoritmi de programare și control . Ele sunt
alimentate de doi acumulatori de cate 5V puși în paralel, așa că alime ntează împreună vehiculul
cu 5 V. Motoarele sunt poziționate în parte a interioară a robotului , făcând legătura cu roțile prin
axul exterior, iar acumulatorii sunt poziționați între cele două motoare.
Vehiculul beneficiază de un design pe două nivele, având astfel capacitatea de a avea mai
multe module poziționate pe el. Materialul constructiv al vehiculului este acrilul, făcând foarte
ușoară instalarea echipamentelor cu unelte de foraj. Acesta are o ga rdă la sol de 1cm, lucru care îi
oferă stabilitate mărit ă. Lungimea de 200mm este dată de diametru, vehiculul având forma unui
cilindru . Înălțimea este 49 de mm iar greutatea acestuia este de 615 grame fără componentele
adăugate ulterior. Aspectul fizic se poate observa în figura următoare:
Fig. 4.1.1. – Aspectul fizic al vehiculu lui [31]
40
Pe platforma superioară a vehicul ului sunt montate : placa Arduino, modulul driver L298N,
modulul Bluetooth , și un cablaj de test preformat din textolit , o placă cu conectori ce servește
pentru conectarea senzorilor și a plăcii Arduino la sursa de tensiune de 5V și pe care se află și un
întrerupător. Pe cea de a doua platformă, între motoare, se află cei doi acumulatori de 5V, iar în
partea frontală sunt ce i trei senzori ultrasonici , fiecare fiind lipit între două plăci de textolit cu
conectori, ușor de demontat de pe cadrul vehiculului în caz că acest lucru este necesar. Dispunerea
senzorilor în cadrul v ehiculului se poate observa în figura următoare:
Fig. 4.1.2 . – Poziționarea senzorilor ultrasonici
41
4.2. Realizarea conexiunilor circuitului
Circuit ul electronic al vehiculului este compus din următoarele module și componente: kit –
ul Arduino Mega 2560, driver -ul pentru motoare L298 , cei trei senz ori ultrasonici HC -SR04 și
cele două motoare de curent continuu de 5V , modulul de comunicare Bluetooth HC -05, un buzzer
și un întrerupător care controlează alimentarea de la cei doi acumulatori de 5V. Componentele sunt
interconectate cu fire p entru care s -au ales culori sugestive și rezervate pentru modulul respectiv
sau pentru funcția îndeplinită . Pentru senzorii ultrasonici se utilizează culoarea verde pentru
semnalul Trig și galben pentru Echo. Pentru alimentare la borna pozitivă se utilizea ză fire roșii iar
pentru masă fire negre, la fel ca și î n cazul motoarelor , al buzzer -ului și al modului Bluetooth.
Pentru pinii Rx și Tx ai modului HC -05 se utilizează fire de culoare verde și galben. Pentru intrările
de comandă ale plăcii Arduino către d river sunt utilizate culorile gri pentru EnA și EnB, violet
pentru IN1 și IN4, galben pentru IN2 și alb pentru IN3.
Întrerupătorul asigură conectarea și deconectarea alimentării componentelor și modulelor
de la doi acumulatori de 5V montați în paralel , existând opțiunea ca ansamblul să fie alimentat de
la un singur acumulator . Întrerupătorul are patru conexiuni, dintre care una nu este utilizată. Prima
se folosește pentru a conecta cei doi acumulatori în paralel, pentru un curent mai mare, a doua se
folosește pentru modulul driver L298N, iar a treia pentru alimentarea plăcii Arduino, a senzorilor
ultrasonici și a modulului Bluetooth .
Buzzer -ul este folosit pentru a transmite un semnal de 600 Hz la una dintre comenzile
FORWARD, STOP sau BACK din aplic ația Bluetooth Electronics instalată pe telefonul mobil cu
sistem de operare Android. Timpul în care se transmite semnalul este de 200 milisecunde.
În următoarele tabele sunt precizate conexiunile dintre placa Arduino și driver, respectiv
dintre placa Ar duino și senzorii ultras onici. S -a optat pentru legarea firelor de același tip în ordine,
pe aceeași parte a conectorului de pe placa Arduino pentru o identificare mai ușoară a acestora .
42
Tabel 4.2.1 – Semnale driver
Semnal Trig Ieșire Digitală Arduino
Senzor 1 22
Senzor 2 24
Senzor 3 26
Tabel 4.2.2 – Semnale Trig
Semnal Echo Intrare Digitală
Arduino
Senzor 1 23
Senzor 2 25
Senzor 3 27
Tabel 4.2.3 – Semnale Echo
.
În următoarea figură sunt reprezentate conexiunile circuitului cu culorile corespunzătoare
descrise anterior . Pentru a evidenția în mod practic conexiunile circuitului schema este realizată
într-un mod simplist , prin reprezentarea fizică a modulelor electronice și al firelor colorate ale
circuitului. Pentru conexiunile dintre placa Arduino și senzorii ultrasonici s -au făcut notații cu
scopul de a nu se încărca schema electrică. Prin urmare traseul T1 conectat la pinul digital I/O
numărul 22 de pe Arduino este conectat la ieșirea Trig de la senzorul ultrasonic 1. Traseul E1
conectat la pinul digital I/O numă rul 23 este conectat la intrarea Echo de la senzorul ultrasonic 1 . Intrare Digitală
Driver Ieșire Digitală
Arduino
EnA 2
IN1 3
IN2 4
IN3 5
IN4 6
EnB 7
43
Același principiu se aplică și pentru celelalte conexiuni de acest tip, și anume: T2, T3, respectiv
E2, E3 aferente senzorilor 2 și 3 .
Fig. 4.2.1. – Schema electrică cu conexiunile circuitului
44
4.3. Algoritmul de evitare a l obstacolelor
Un vehicul autonom trebuie să îndeplinească câteva criterii de bază pentru a putea face față
mediului înco njurător la un nivel acceptabil. A cesta trebuie să recepționeze și să proceseze
inform ații senzoriale cât mai precis posibil, să comande, pe baza info rmațiilor senzoriale, în mod
corespunzător sistemul de locomoție și să evite situațiile hazardante pentru acesta în mediul în care
se deplasează.
Sistemul senzorial al unui vehicul autonom este orientat spre măsurarea distanțelor,
recunoașterea obstacolelor și traseului ce urmează a fi parcurs și are rolul de a pune la dispoziția
unității de control informații despre mediul fizic în care acesta operează. Prin urmare este esențial
ca informațiile oferite să fie cât mai exacte și să poată fi colect ate într -un timp cât mai scurt.
Procesul practic de colectare a informațiilor poate fi tradus astfel: sistemul senzorial transfo rmă o
mărime fizică neelectrică într-o mărime electrică care este ulterior prelucrată de unitatea de
procesare și autocontrol a vehiculului.
Sistemul senzorial nu se limitează doar la măsurarea distanței, având aplicabilitate și asupra
mai multor parametri fizici cum ar fi: temperatură, umiditate, radiații, etc. Informațiile colectate
prin senzori ajung la unitatea de comandă și autocontrol, sunt utilizate în cadrul unor algoritmi de
determinare a traiectoriei cu o structură logică și în urma execuției instrucțiunilor algoritmului,
prin intermediul sistemului de acționare, vehiculul este comandat. Acest ansamblu poate fi
transpus sub formă de blocuri funcționale după cum se poate observa în figura de mai jos:
45
Fig. 4.3 .1 – Diagrama blocurilor funcționale
În diagrama de mai sus, f iecare bloc funcțional este reprezentat de un modul electronic,
acesta fiind conectat la restul circuitului prin cablurile aferente. Se observă că între Placa Arduino
și senzori există legături bidirecționale, acestea concretizând u-se prin Trig (semnal de ieșire pentru
placa Arduino și de intrare pentru senzor) și Echo (semnal de intrare pentru placa Arduino și de
ieșire pentru senzor). Restul conexiunilor sunt unidirecționale : semnale le de ieșire de la placa
Ardiuno la Driver -ul pentru motoare și de la driver la cele două motoare de curent continuu.
În continuare se pr ezintă software -ul implementat pe placa Arduino cu care se realizează
evitarea obstacolelor . Pentru început se definesc pinii senzorilor ultrasonici și pinii pentru viteză
și direcție. Pentru motorul stânga s -au ales pinii digitali 3 și 4, iar pentru motor ul dreapta pinii
digitali 5 și 6. De asemenea se declară variabilele k și a[4], pentru parcurgerea senzorilor în
programul principal, ca și integer , iar variabilele durata și distanta1 , pentru calculul distanței, ca
și float.
În funcția void setup() se set ează pinii digitali ca și Output/Input după cum urmează:
pinMode(22, OUTPUT);
pinMode(23, INPUT);
pinMode(24, OUTPUT);
46
pinMode(25, INPUT);
pinMode(26, OUTPUT);
pinMode(27, INPUT);
pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT); pinMode(speedPinB, OUTPUT);
pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT);
Pinii pentru semnalul Trig se setează toți ca și OUTPUT iar pinii pentru semnalul Echo toți
ca și INPUT, în timp ce pinii pentru direcție și viteză sunt OUTPUT. În continuare de definește
funcția pentru măsurarea distanței int masoara_distanta(int sensor_nr) , care primește ca și
parametru numărul senzorului. Se realizează o structură de funcții if, în funcție de numărul
senzorului ce va fi parcurs într -un for în programul principal, și se calculează distanța pentru
fiecare senzor. Senzorul primește de la Arduino un impuls Trig și trimite înapoi microcontrolerului
un impuls numit Echo, intervalul dintre aceste două impulsuri fiind folosit pentru calcularea
distanței, după cum s -a prezentat și în capitolul 2.2 și după cum se poate observa mai jos:
if(sensor_nr==22)
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(5);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
durata = pulseIn(echoPin1, HIGH);
distanta1 = (durata*.0343)/2;
}
Același calcul se real izează și pentru ceilalți doi senzori ultrasonici, funcția executând un
singur if la apelarea ei. La sfârsitul iterației se face conversia din float în int cu ajutorul variabilei
distanta . Pentru ca detecția să fie posibilă este necesar ca obstacolul să ai bă o grosime suficient
de mare astfel încât energia ecoului de la obstacol să aibă o valoare suficient de ridicată. De
asemenea, un factor important în realiz area detecției este limitarea constructivă a unghiului de
47
acțiune a senzorului la 30 de grade, cee a ce îi afectează și performanțele. Din acest considerent, s –
a optat pentru realizarea unui ansamblu de trei senzori care se pot poziționa la un unghi față de axa
mijlocie a vehiculului pentru a realiza, teoretic, o acoperire de 90 de grade.
În continuare se definesc funcțiile pentru mersul înainte, mersul înapoi, oprire, deplasare
stânga și deplasare dreapta cu ajutorul pinilor de direcție și pinilor de viteză. Valoarea pe care pinii
de viteză o pot lua este cuprinsă în intervalul 0 – 255, deplasarea in f ață, spate și oprirea fiind
controlate prin modificarea acestor parametri. Pentru deplasarea stânga sau dreapta, funcția arată
în felul următor:
void deplasare_dreapta()
{
analogWrite(speedPinA,0); //seteaza viteza la 0
analogWrite(speedPinB,0);
delay(100);
//comanda motor stanga in fata
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
//comanda motor dreapta in spate
digitalWrite(dir 1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
//seteaza viteza ambelor motoare la 255
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(200);
//seteaza viteza ambel or motoare la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
}
Pentru deplasarea la dreapta, viteza motoarelor se setează la zero cu un timp de așteptare
de 100 de milisecunde, după care motorul stânga primeș te comanda de a merge în față, iar motorul
48
dreapta de a merge în spate, acest lucru realizându -se la viteza maximă și cu un timp de rotire de
200 de milisecunde, prin instrucțiunea delay(200) . Acest program de modificare al direcției de
deplasare este identic cu cel fol osit pentru aplicația de control remote cu ajutorul modului
Bluetooth HC -05 și al aplicației pe sistem de operare Android.
În funcția predefinită void loop() se regăsește programul principal care apelează toate
funcțiile definite anterior. Cu ajutorul variabilelor a și k definite la începutul programului și al unei
funcții for cu pasul 2 ce parcurge cei trei senzori prin pinii aferenți semnalului Trig se calcul ează
distanța pentru fiecare senzor apelând funcția masoara_distanta() . Distanța luată în considera re
pentru modificarea traiectoriei este de 15 cm. Decizia direcției deplasării se ia într -un sistem de
funcții if ce compară cele trei distanțe măsurate de s enzorii ultrasonici și calculate anterior cu
referința de 15 cm pentru a apela una dintre funcțiile de deplasare după cum se vede mai jos:
if(a[1]>15 && a[2]>15 && a[3]>15)
deplasare_inainte();
if(a[1]>15 && a[2]>15 && a[3]<=15)
deplasare_stanga();
if(a[1]>15 && a[2]<=15 && a[3]>15)
deplasare_stanga();
if(a[1]>15 && a[2]<=15 && a[3]<=15)
deplasare_stanga();
if(a[1]< =15 && a[2]>15 && a[3]>15)
deplasare_dreapta();
if(a[1]<=15 && a[2]>15 && a[3]<=15)
deplasare_stanga();
if(a[1]<=15 && a[2]<=15 && a[3]>15)
deplasare_dreapta();
if(a[1]<=1 5 && a[2]<=15 && a[3]<=15)
49
deplasare_dreapta();
În figura următoare se prezintă aspectul fizic al robotului cu toate componentele din
ansamblul electronic într -o vedere de sus pentru a se evidenția dispunerea plăcii Arduino, a
modulului driver L298N, al modulului Bluetooth, al comutatorului, precum si poziționarea celor
trei senzori.
Fig. 4.3.2 – Vehiculul autonom: vedere de sus
50
Concluzii
În cadrul acestei lucrări s -a elaborat un vehicul autonom capabil să detecteze singur
obstacole le și să le evite cu ajutorul unor senzori ultrasonici . Proiectul a necesitat căutarea
aparaturii și conectarea acesteia pentru a realiza un ansamblu electronic capabil să realizeze
funcțiile dorite. Pentru aceasta s -au utilizat echipamente hardware performante cu scopul
continuității și dezvoltării ulterioare a proiectului. Ca și îmbunătăți ri posibile se pot monta senzori
ultrasonici și în partea posterioară a v ehiculu lui pentru a îmbunătăți nivelul de date colectate de
vehicul și a ridica complexitatea nivelului decizional în vederea orientării.
Modulul Bluetooth HC -05 este o alternativă la programul autonom de orientare și
presupune o interacțiune mai mare a programatorului prin controlul remote. Tehnologia actuală
facilitează acest control la distanțe relativ scurte , iar sistemul de operare Androi d dispune de o
multi tudine de aplicații pregătite de a fi asociate unui modul Bluetooth pentru trimiterea de
comenzi unui microcontroler cum este Arduino. În acest aspect, proiectul se poate continua prin
dezvoltarea unei aplicații proprii Bluetooth pentru asocierea cu modulul.
În cadrul ansamblului electronic se pot integra și alte tipuri de module și senzori pentru a
mări complexitatea sistemului și a crea un vehicul cât mai autonom care se poate orienta prin
diferite mărimi fizice neelectrice colectate din mediu înconjurător pe care să le transforme în
mărimi electrice și apoi în semnale pentru echipamentele de acțion are care pot fi motoare electrice
sau instalații hidraulice, pneumatice, etc. Acestea pot avea aplicabilitate în măsurarea vitezei,
urmărirea unei linii, determinarea înclinației față de axa orizontală, indicarea nivelului bateriei.
Vehiculele autonom e au încă un grad de autonomie limitat ceea ce înseamnă că sunt
controlate și din exterior de către un factor uman, însă acestea încep să se dezvolte și să devină tot
mai complexe, ajungând în final să înlăture necesitatea intervenției omului
51
Anexă 1
Programul implemetat în mediul de programare Arduino pentru controlul vehiculului prin
intermediul modului Bluetooth HC -05:
int speedPinA = 2;
int speedPinB = 7;
int dir1PinA = 3; //MOTOR STANGA
int dir2PinA = 4;
int dir1PinB = 5; //MOTOR DREAPTA
int dir2PinB = 6;
int buzzer=8;
char incoming_val;
void setup()
{
pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT); pinMode(speedPinB, OUTPUT);
pinMode(dir1PinB, OUTPUT) ; pinMode(dir2PinB , OUTPUT);
Serial.begin(9600);
}
// se definesc functiile pentru d eplasarea si oprirea robotului:
void deplasare_inainte()
{
//comanda motoarele pt deplasarea in fata
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2P inA, LOW);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
analogWrite(speedPinA,250); // seteaza viteza ambelor motoare la 250
analogWrite(speedPinB,250);
delay(500); // timp de asteptare de 500 mils
52
}
void deplasare_inapoi()
{
//seteaza viteza motoarelor la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
delay(500); // timp de asteptare de 500 mils
//comanda motoar ele in spate
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
analogWrite(speedPinA,200); //seteaz a viteza ambelor motoare la 200
analogWrite(speedPinB,200);
delay(500);
}
void oprire()
{
analogWrite(speedPinA,0); //seteaza viteza la 0
analogWrite(speedPinB,0); //seteaza viteza la 0
}
void deplasare_stanga()
{
//seteaza viteza la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
delay(100); //timp de asteptare de 100 milis
//comanda motor stanga in spate
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
//comanda motor dreapta in fata
53
digitalWrite(dir1PinB, HIGH);
digitalWrite(d ir2PinB, LOW);
//seteaza viteza ambelor motoare la 255
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(200); //tim p de ro tire de 200 mil is
//seteaza viteza ambelor motoare la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
}
void deplasare_dreapta()
{
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
delay(100);
//comanda motor stanga in fata
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
//comanda motor dreapta in spate
digitalWrite(dir1PinB, LOW);
digitalWrite(dir 2PinB, HIGH)
//seteaza viteza ambelor motoare la 255
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(200) ; // timp de rotire de 200 mils
analogWrite(speedPinA,0); //setea za viteza ambelor motoare la 0
analogWrite(speedPinB,0);
}
void loop()
{
if(Serial.available()>0)
54
{
incoming_val=Serial.read();
if(incoming_val=='S') //STOP
{
oprire(); //se apeleaza functia de oprire
tone(buzzer, 600); // Transmite un semnal de 600 Hz
delay(200);
noTone(buzzer); // Opreste buzzer -ul
}
else if(incoming_val=='F')
{
deplasare_inainte(); //se apeleaza functia de depl asare inainte
tone(buzzer, 600); // Transmite un semnal de 600 Hz
delay(200);
noTone(buzzer); // Opreste buzzer -ul
}
else if(incoming_val=='B')
{
deplasare_inapoi();
tone(buzzer, 600); // Transmite un semnal de 600 Hz
delay(200);
noTone(buzzer); // Opreste buzzer -ul
}
else if(incoming_val=='L')
deplasare_stanga();
else if(incoming_val=='R')
deplasare_dreapta();
}
}
55
Anexă 2
Programul implementat în mediul de programare Arduino pentru detectarea obstacolelor și
modificarea traiectoriei cu ajutorul senzorilor ultrasonici:
//definire pini senzori ultrasonici:
const int trigPin1 = 22;
const int echoPin1 = 23;
const int trigPin2 = 24;
const int echoPin2 = 25;
const int trigPin3 = 26;
const int echoPin3 = 27;
int speedPinA = 2;
int speedPinB = 7;
int dir1PinA = 3;
int dir2PinA = 4;
//MOTOR DREA PTA
int dir1PinB = 5;
int dir2PinB = 6;
int k=0;
int a[4];
float distanta1;
float durata;
void setup()
{
pinMode(22, OUTPUT);
56
pinMode(23, INPUT);
pinMode(24, OUTPUT);
pinMode(25, INPUT);
pinMode(26, OUTPUT);
pinMode(27, INPUT);
pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT); pinMode(speedPinB, OUTPUT);
pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT);
}
int masoara_distanta(int sensor_nr) //functia primeste ca par ametru, nr senzor
{
if(sensor_nr==22)
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(5);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(tri gPin1, LOW);
durata = pulseIn(echoPin1, HIGH);
distanta1 = (durata*.0343)/2;
}
else if(sensor_nr==24)
{
digitalWrite(trigPin2, LOW);
delayMicroseconds(5);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digital Write(trigPin2, LOW);
durata = pulseIn(echoPin2, HIGH);
distanta1 = (durata*.0343)/2;
57
}
else if(sensor_nr==26)
{
digitalWrite(trigPin3, LOW);
delayMicroseconds(5);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
durata = pulseIn(echoPin3, HIGH);
distanta1 = (durata*.0343)/2;
}
int distanta=distanta1; //conversie float in int
return distanta; //functia returneaza parametrul distanta
}
void deplasare_inainte()
{
//comanda motoarele pt deplasarea in fata
digitalWrite(dir1PinA, HIGH);
digital Write(dir2PinA, LOW);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
// setea za viteza ambelor motoare la 255
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(500);
}
void deplasare_inapoi()
{
//seteaza viteza motoarelor la 0
analogWrite(speedPinA,0);
58
analogWrite(speedPinB,0);
delay(500); // timp de asteptare de 500 mils
//comanda motoarele in spate
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
//seteaza viteza ambelor motoare la 200
analogWrite(speedPinA,200 );
analogWrite(speedPinB,200 );
delay(500);
}
void oprire()
{
analogWrite(speedPinA,0); //seteaza viteza la 0
analogWrite(speedPinB,0); //seteaza viteza la 0
}
void deplasare_stanga()
{
//seteaza viteza la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
delay(100); //timp de asteptare de 100 mils
//comanda motor stanga in spate
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
//comand a motor dreapta in fata
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
//seteaza viteza ambelor motoare la 255
59
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(20 0); //tim de rotire de 200 mils
//seteaza viteza ambelor motoare la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
}
void deplasare_dreapta()
{
//seteaza viteza la 0
analogWrite(speedPinA,0);
analogWrite( speedPinB,0);
delay(100);
//comanda motor stanga in fata
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
//comanda motor dreapta in spate
digitalWrite(dir1PinB, LOW);
digitalWrite(di r2PinB, HIGH);
//seteaza viteza ambelor motoare la 255
analogWrite(speedPinA,255);
analogWrite(speedPinB,255);
delay(200); // timp de rotire de 200 mils
//seteaza viteza ambelor motoare la 0
analogWrite(speedPinA,0);
analogWrite(speedPinB,0);
}
void loop()
{
k=0;
60
for(int i=22; i<=26; i=i+2)
{
k++;
a[k]=masoara_distanta(i);
}
if(a[1]>15 && a[2]>15 && a[3]>15)
deplasare_inainte();
if(a[1]>15 && a[2]>15 && a[3]<=15)
deplasare_stanga();
if(a[1]>15 && a[2]<=15 && a[3]>15)
deplasare_stanga( );
if(a[1]>15 && a[2]<=15 && a[3]<=15)
deplasare_stanga();
if(a[1]<=15 && a[2]>15 && a[3]>15)
deplasare_dreapta();
if(a[1]<=15 && a[2]>15 && a[3]<=15)
deplasare_stanga();
if(a[1]<=15 && a[2]<=15 && a[3]>15)
deplasare_dreapta();
if(a[1]<=15 && a[2]<=15 && a[3]<=15)
deplasare_dreapta();
}
61
Bibliografie
1. Tianhong Pan, Yi Zhu, Designing Embedded Systems with Arduino, A Fundamental
Technology for Makers , Editura Springer Nature, Zhenjiang, 2018
2. Agus Kurniawan, Arduino Programming with .NET and Sketch , Editura Apress, Depok,
2017
3. [11], [14], [16], [21], Massimo Banzi, Getting started with Arduino , Editura O ’Reilly
Media, 2011
4. Marius Silaghi, Electrotehnică industrială , Editura Universității din Oradea, Oradea, 2010
5. [1], [2], [3], [4], [5], [6], [7], [8], ***, Arduino Mega, https://store.arduino.cc/arduino –
mega -2560 -rev3
6. [10], [12], ***, Senzorul ultrasonic HC -SR04,
https://howtomechatronics.com/tutorials/arduino/ultrasonic -sensor -hc-sr04/
7. [13], ***, Senzorul ultrasonic HC -SR04, https://trion projects.org/ultrasonic -sensor -hc-
sr04-with-pic-microcontroller/
8. [15], ***, Senzorul ultrasonic HC -SR04, http://web.eece.maine.edu/~zhu/book/lab/HC –
SR04%20User%20Manual.pdf
9. [22], [26], ***, Driver pentru comanda motoarelor,
https://lastminuteengineers.com/l298n -dc-stepper -driver -arduino -tutorial/
10. [20], ***, Driver pentru comanda motoarelor, https://roboromania.ro/datasheet/Motor –
Driver -L298N -roboromania.pdf
11. [17], [18], [19] , ***, Driver pentru comanda motoarelor,
https://components101.com/sites/default/files/component_datasheet/L298N -Motor –
Driver -Datasheet.pdf
12. [9], *** Editor schema electrică senzor HC -05,
https://easyeda.com/editor#id=36653a04db1e46af9ddd4f30423597fb
13. ***, Motor de curent continuu, https://cleste.ro/atelier/motor -de-curent -continuu -8-8-kg-
250-rpm-cu-o-punte -h-si-modul -de-reglare -a-turatiei/
14. [23], ***, Motor de curent continuu,
https://math.wikia.org/ro/wiki/Motor_de_curent_continuu
62
15. [27], [31] ***, Vehicul si motoare, https://www.newegg.com/p/1SW -0021 -005A 6
16. [25], ***, Motor de curent continuu,
http://www.etonm.com/product_series.html?gclid=EAIaIQobChMI_rPKzIv46QIVCouy
Ch0KvAU1EAAYASAAEgJzwvD _BwE
17. [24], ***, Motor de curent continuu, https://www.sinoning.com/product/37b280 -dc-gear-
motor -37mm -metal -gear-box-long-axis/
18. [30], ***, Modul Bluetooth HC -05,
https://howtomechatronics.com/tutorials/arduino/ar duino -and-hc-05-bluetooth -module –
tutorial/?fbclid=IwAR2OGxAFXZQ -ZFd4hKPGwo5sUEoeGX_k6O –
SrV3kfNrt_oW7SZ3NqMhNpH4
19. [28], ***, Modul Bluetooth HC -05,
https://components101.com/wireless/hc -05-bluetooth –
module?fbclid=IwAR3exRCNlWFArKASUeo0vpvUe3HCUTIf1G_QHzM8RSQII4yF gz
mtOdZRWlo
20. ***, Modul Bluetooth HC -05,
https://components101.com/sites/default/files/component_datasheet/HC –
05%20Datasheet.pdf
21. ***, Modul Bluetooth HC -05, https://www.optimusdigital.ro/ro/wireless -bluetooth/153 –
modul -bluetooth -master -slave -hc-05-cu-adaptor.html
22. [29], ***, Modul Bluet ooth HC -05, https://roboromania.ro/datasheet/Bluetooth -HC-
roboromania.pdf
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: DOMENIUL : INGINERIE ELECTRONICĂ, TELECOMUNICAȚII ȘI TEHNOLOGII INFORMAȚIONALE PROGRAMUL DE STUDIU: TEHNOLOGII AUDIO -VIDEO ȘI TELECOMUNICAȚII FORMA… [610124] (ID: 610124)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
