Structura Robotului Mobil
CUPRINS
1. Introducere 2
1.1 Scopul lucrării 3
1.2 Roboți mobili autonomi 3
1.3 Structura lucrării 6
2.Structura robotului mobil 7
2.1 Principiul de funcționare 7
2.2 Structura de acționare a sistemului de comandă 8
2.3 Principiul algoritmului utilizat 9
3. Structura hardware 11
3.1 Elemente componente 11
3.2 Motoare de curent continuu 14
3.3 Circuitul integrat folosit pentru comanda motoarelor 19
3.4 Stabilizator de tensiune de 5V 21
3.5 Placa de procesare Arduino Nano 22
3.6 Senzorul de distanță ultrasonic HC-SR04 25
4.Structura software 27
4.1 Noțiuni introductive Arduino 27
4.2 Testare senzori 29
Semnalul PWM
4.3 Algoritmul utilizat 31
4.4 Structura programului 33
5.Concluzii 36
Bibliografie: 36
1.Introducere
1.1.Scopul lucrării
Scopul acestei lucrări este de a realiza un robot mobil autonom capabil să detecteze și să evite obstacole în timpul deplasării sale în anumite spații. Evitarea obstacolelor se va realiza cu ajutorul a trei senzori de distanță ultrasonici Ping care vor transmite datele către Arduino Nano și acesta va lua deciziile corepunzătoare în cazul în care se detectează un obstacol în timpul deplasării sale.
1.2.Roboți mobili autonomi
Generalități
Robotul mobil este un sistem complex care poate efectua diferite activități într-o varietate de situații specifice lumii reale. El este o combinație de dispozitive echipate cu servomotoare și senzori (aflate sub controlul unui sistem ierarhic de calcul) ce operează într-un spațiu real, marcat de o serie de proprietăți fizice (de exemplu gravitația care influențează mișcarea tuturor roboților care funcționează pe pământ) și care trebuie să planifice mișcările astfel încât robotul să poată realiza o sarcină în funcție de starea inițială a sistemului și în funcție de informația existentă, legată de mediul de lucru.
Succesul în îndeplinirea acestor sarcini depinde atât de cunoștințele pe care robotul le are asupra configurației inițiale a spațiului de lucru, cât și de cele obținute pe parcursul evoluției sale.
Problemele specifice ce apar la roboții mobili ar fi următoarele: evitarea impactului cu obiectele staționare sau în mișcare, determinarea poziției și orientării robotului pe teren, planificarea unei traiectorii optime de mișcare.
În cazul unui sistem robotic automat distribuit, pozițiile spațiale sunt de o extremă importanță și de ele depinde îndeplinirea scopurilor dorite și funcționarea întregului sistem. Cu alte cuvinte, robotul trebuie să fie capabil să-și planifice mișcările, să decidă automat ce mișcări să execute pentru a îndeplini o sarcină, în funcție de aranjamentul momentan al obiectelor din spațiul de lucru. Planificarea mișcărilor nu constă dintr-o problemă unică și bine determinată, ci dintr-un ansamblu de probleme dintre care unele sunt mai mult sau mai puțin variante ale celorlalte.
Evitarea coliziunii cu obstacole fixe sau mobile (de exemplu alți roboți mobili) aflate în spațiul de lucru al robotului se poate face prin mai multe metode: realizarea unei protecții mecanice care prin deformare oprește robotul, folosirea senzorilor ce măsoară distanța până la obstacolele de pe direcția de deplasare, folosirea senzorilor de proximitate, folosirea informațiilor corelate de la mai multe tipuri de senzori.
Localizarea obiectelor se poate realiza și prin contact fizic, dar aceasta impune restricții asupra vitezei de mișcare a structurii manipulate. Contactul fizic dintre robot și obiectele din mediu generează forțe de reacțiune care modifică starea robotului. Vitezele mari de lucru fac ca efectele dinamice ale unui contact fizic cu obstacole sau obiecte manipulate să fie riscante (pot duce la deteriorarea obiectelor sau a robotului).
Navigarea robotului este posibilă și fără o determinare a poziției și orientării față de un sistem de coordonate fix, dar această informație este utilă pentru sisteme de comandă a mișcării. Dintre metodele de navigație mai des utilizate se pot menționa: măsurarea numărului de rotații făcute de roțile motoare, folosirea de acceleratoare și giroscoape, geamanduri electromagnetice instalate în teren, semnalizatoare pasive sau semipasive de tip optic sau magnetic.
Caracteristicile roboților mobili
Roboții mobili au următoarele caracteristici comune:
structura mecanică este un lanț cinematic serie sau paralel respectiv tip “master-slave”;
sistemul de acționare utilizat este electric pentru sarcini mici și medii și hidraulic pentru sarcini mari;
sistemul senzorial utilizează senzori interni (de turație, poziție, efort) la nivelul articulațiilor, senzori externi(camere TV) pentru scanarea mediului și senzori de securitate( de proximitate, de prezență cu ultrasunete);
sistemul de comandă este ierarhizat, de obicei multiprocesor;
limbajele de programare utilizate sunt preluate de la roboții staționari.
Clasificarea robotilor mobili
Roboții mobili se clasifică astfel:
În funcție de dimensiuni: macro, micro și nano-roboți.
În funcție de mediul în care acționează: roboți tereștri – se deplasează pe sol, roboți subacvatici – în apă, roboți zburători – în aer, roboți extratereștri – pe solul altor planete sau în spațiul cosmic;
În funcție de sistemul care le permite deplasarea în mediul în care acționează există de exemplu pentru deplasarea pe sol.
Roboți pe roți sau pe șenile ;
Fig.1.1. Roboți mobili pe șenile
Roboți pășitori : bipezi, patrupezi,hexapozi, miriapozi;
Fig.1.2. Roboți mobili pășitori
Roboți târâtori: imită mișcarea unui șarpe, unei râme, etc. ;
Fig.1.3. Roboți târâtori
Roboți săritori: imită deplasarea broaștelor, cangurilor, etc. ;
Fig.1.4. Roboți săritori
1.3.Structura lucrării
Lucrarea este structurată in cinci capitole în care sunt prezentate detaliat toate etapele prin care trecut în vederea realizării robotului mobil cât și detalii despre piesele utilizate și importanța lor.
În primul capitol am prezentat noțiuni introductive despre roboții mobili autonomi,cu ce scop s-a realizat această lucrare și modul în care a fost structurată întreaga lucrare.Al doilea capitol cuprinde noțiuni despre structura robotului mobil, schema generală a acestuia,ansamblul de piese ce formeaza structura de acționare de comandă și principiul logic al algoritmului utilizat.
În capitolul trei se prezintă structura harware a robotului, elementele componente și prezentarea detaliior pentru fiecare componentă. În următorul capitol se prezintă structura software ce conșine programul de testare a celor trei senzori, detalierea algoritmului utilizat, structura programului ce realizează controlul robotului autonom. Ultimul capitol cuprinde o prezentare în ansamblu a întregii lucrări și prezentarea unor concluzii cu privire la tema aleasă.
2.Structura robotului mobil
2.1Principiul de funcționare
Robotul mobil autonom pentru evitarea obstacolelor este un tip de robot care are doar o simplă sarcină de îndeplinit, aceea de a interpreta date primite de la senzori și în funcție de datele returnate să-ți schimbe direcția de deplasare.
Acest robot folosește principiul de acționare diferențială, care utilizează două motoare independente montate în poziții fixe pe partea dreaptă și stângă a șasiului robotului. Aceasta înseamnă că în momentul în care senzorul din față detectează un obstacol și senzorul din stânga nu detectează nimic semnalul PWM trimis către motorul din stânga va face vehiculul să se întoarcă spre stânga, în momentul în care se dectează un obstacol atîât în față cât și în partea dreaptă a robotului mobil autonom, semnalul trimis motorului din dreapta va face robotul să se întoarcă spre acea dreapta și în cazul în care sunt obstacole atât în față, cât și în stânga și drepta robotului, acesta virează la stânga după care citește din nou valorile returnate de către senzori și decide în ce direcție se va deplasa.
Fig.2.1 Principiul de funcționare a robotului mobil autonom
2.2Structura de acționare a sistemului de comandă
Pentru realizarea hardware a robotului mobil autonom se utilizează structura comandă din figură (Fig.2.3) .Întregul ansamblu de piese utilizate ajută la determinarea poziției și orientării, la realizarea deplasării robotului cât și la determinarea distanței la care se află un obstacol față de robot și evitarea acestuia.
Determinarea distanței la care se află un obstacol se realizaeză cu ajutorul a trei senzori de distanță ultrasonici HC-SR04. Semnalul returnat de către senzori este determinat cu ușurință de către un microcontroller ATMega 328 ce este încorporat în placa de dezoltare compactă Arduino Nano.
În funție de distanța la care se află obstacolul față de robot, se acționează asupra controlului motoarelor prin intermediul punții H integrate prin semnal PWM realizându-se astfel un sistem de acționare electrică în buclă deschisă. Controlul și schimbarea direcției de mișcare se realizează diferențial, în funcție de valorile returnate de către senzorii de distanță ultrasonici, prin intermediul funcțiilor definite pentru posibilele traiectorii pe care le poate urma robotul mobil.
Schimbarea direcției de mers se face prin accelerarea diferențială a sistemului de șenile, lucru realizabil prin intermediul punții H. Aceasta are rolul de a mări puterea semnalului PWM generat de microcontroller, astfel fiind posibilă reglarea vitezei.
Implementarea software a avut la bază algoritmul de realizare a regulatorului neliniar cu trei stări distincte.
Fig.2.3 Structura de comandă a robotului mobil
Alimentarea sistemului se realizază cu ajutorul a două surse de tensiune diferite, o baterie de 9V cu care este alimentat driver-ul de motoare L298N și un set de baterii de 1.5V (4×1.5V) care asigură alimentarea plăcii de dezvoltare Arduino Nano și a celor trei senzori de distanță ultrasonici HC-SR04.
Între sursa de alimentare, placa Arduino și senzori există un stabilizator de tensiune, care verifică nivelul de curent consumat și ajustează astfel nivelul de tensiune. Tensiunea de alimentare trebuie să fie puțin mai ridicată decât cea necesară de sistem.
2.3 Principiul algoritmului utilizat
Robotul mobil autonom după ce s-a realizat partea hardware pentru controlul direcției și pentru a se putea deplasa în spații necunoscute fără să se intersecteze cu obstacolele din acel spațiu se implementează un algorim pe microcontroller.Algoritmul utilizat în acest caz are la bază principiul de funcționare a regulatoarelor automate electronice neliniare tripoziționale. Funcționarea regulatoarelor neliniare este caracterizată în regim staționar de o dependență neliniară între mărimea de comandă xc și eroarea (sau mărimea de abatere xa). Această dependență este denumită caracteristică statică pentru a sublinia că este valabilă numai în regimul staționar.
Cele mai utilizate regulatoare neliniare sunt regulatoarele bipoziționale (RBP) și regulatoarele tripoziționale (RTP). Aceste regulatoare, un caz particular al regulatoarelor neliniare, pot fi considerate regulatoare discontinue, deoarece mărimea de comandă de la ieșirea regulatorului poate avea numai anumite valori (variază în funcție de eroare după o funcție discontinuă) și sunt utile în procesele industriale la care sunt admise mici variații ale mărimii reglate în jurul valorii de referință.
După cum le spune și numele, regulatoarele tripoziționale (RTP) se caracterizeaz prin
faptul că mărimea de comandă nu poate lua decât trei valori.Caracteristica statică a acestor regulatoare are forma din figura urmăroare :
Fig.4.x Caracteristica statică a regulatorului tripozoțional
a.caracteristica ideală b. caracteristica reală
Din aspectul caracteristicii statice ideale se constată că dacă eroarea satisface condiția:
– ε0 < ε < ε0 xc = 0
ε > ε0 xc = xcmax
ε < – ε0 xc = – xcmax
Mărimea de comandă xc poate avea trei valori (- xmax, 0, xmax ), de unde vine și denumirea de regulator tripozițional.Zona erorilor definită de relația – ε0 < ε < ε0 este numită și zonă de insensibilitate, deoarece pentru valori ale erorii în interiorul zonei se obține o mărime de comandă egală cu zero. Caracteristica statică reală a RTP este o caracteristică cu histerezis, valorile mărimii de comandă xc depinzând și de sensul de variație, creștere sau descreștere, a erorii ε.
Pentru:
– εr < ε < εr xc = 0
ε < – εa xc = – xcmax
ε > εa xc = +xcmax
SCHEMA Pentru Algoritm !!!!
3.Structura hardware
3.1.Elemente componente
Pentru a putea proiecta și realiza un robot mobil autonom capabil să detecteze și să evite obstacole vom avea nevoie de următoarele elemente :
O plăcuță de plastic cu grilaj de 60×160 mm formată din găuri de 3 mm cu spații de 5 mm între ele , spațiu pentru mai multe conexiuni mecanice . Plăcuța are 2 suporți de arbore pentru a susține axul .Pentru conectarea brațelor unghiulare și a suporților de arbore pe placuță avem nevoie de 10 șuruburi.
. Un set care contine :
2 șenile ;
2 roți motoare;
2 roți mari de ghidaj;
6 roți mici de ghidaj ;
Axe din metal pentru montaj .
Cutie de viteză dublă Tamiya care are incluse două motoare de curent continuu și angrenajele necesare pentru doua roți motoare .
O platformă de procesare open-source Arduino Nano
Un driver de motoare L298 utilizat pentru controlul motoarelor de curent continuu.
Senzori de distanță HC-SR04
Stabilizator de tensiune de 5V
Suport de 4 baterii
3.2.Motoare de curent continuu
Motorul de curent continuu a fost inventat în 1873 de Zénobe Gramme prin conectarea unui generator de curent continuu la un generator asemănător. Astfel, a putut observa că mașina se rotește, realizând conversia energiei electrice absorbite de la generator.
Motorul de curent continuu are pe stator polii magnetici și bobinele polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situat un colector ce schimbă sensul curentului prin înfășurarea rotorică astfel încât câmpul magnetic de excitație să exercite în permanență o forță față de rotor.
Fig.3.1 Construcția unui motor
În funcție de modul de conectare a înfășurării de excitație motoarele de curent continuu pot fi clasificate în:
motor cu excitație independentă – unde înfășurarea statorică și înfășurarea rotorică sunt conectate la două surse separate de tensiune;
motor cu excitație paralelă – unde înfășurarea statorică și înfășurarea rotorică sunt legate în paralel la aceași sursă de tensiune;
motor cu excitație serie – unde înfășurarea statorică și înfășurarea rotorică sunt legate în serie;
motor cu excitație mixtă – unde înfășurarea statorică este divizată în două înfășurări, una conectată în paralel și una conectată în serie.
Înfășurarea rotorică parcursă de curent va avea una sau mai multe perechi de poli magnetici echivalenți. Rotorul se deplasează în câmpul magnetic de excitație până când polii rotorici se aliniază în dreptul polilor statorici opuși. În același moment, colectorul schimbă sensul curenților rotorici astfel încât polaritatea rotorului se inversează și rotorul va continua deplasarea până la următoarea aliniere a polilor magnetici.
Fig.3.2 Motorul electric de curent continuu
Pentru acționări electrice de puteri mici și medii, sau pentru acționări ce nu necesită câmp
magnetic de excitație variabil, în locul înfășurărilor statorice se folosesc magneți permanenți.
Turația motorului este proporțională cu tensiunea aplicată înfășurării rotorice și invers
proporțională cu câmpul magnetic de excitație. Turația se reglează prin varierea tensiunii aplicată
motorului până la valoarea nominală a tensiunii, iar turații mai mari se obțin prin slăbirea câmpului
de excitație. Ambele metode vizează o tensiune variabilă ce poate fi obținută folosind un generator
de curent continuu (grup Ward-Leonard), prin înserierea unor rezistoare în circuit sau cu ajutorul
electronicii de putere (redresoare comandate, choppere). Motor universal folosit la râșnițele de
cafea.Cuplul dezvoltat de motor este direct proporțional cu curentul electric prin rotor și cu câmpul
magnetic de excitație.
Reglarea turației prin slăbire de câmp se face, așadar, cu diminuare a cuplului dezvoltat de motor.
La motoarele serie același curent străbate înfășurarea de excitație și înfășurarea rotorică. Din această
considerație se pot deduce două caracteristici ale motoarelor serie: pentru încărcări reduse ale
motorului, cuplul acestuia depinde de pătratul curentului electric absorbit; motorul nu trebuie lăsat să
funcționeze în gol pentru că în acest caz valoarea intensității curentului electric absorbit este foarte
redusă și implicit câmpul de excitație este redus, ceea ce duce la ambalarea mașinii până la
autodistrugere. Motoarele de curent continuu cu excitație în serie se folosesc în tracțiunea electrică
urbană și feroviară (tramvaie, locomotive).
Schimbarea sensului de rotație se face fie prin schimbarea polarității tensiunii de alimentare, fie
prin schimbarea sensului câmpului magnetic de excitație.
La motorul serie, prin schimbarea polarității tensiunii de alimentare se realizează schimbarea
sensului ambelor mărimi și sensul de rotație rămâne neschimbat. Așadar, motorul serie poate fi
folosit și la tensiune alternativă, unde polaritatea tensiunii se inversează o dată în decursul unei
perioade. Un astfel de motor se numește motor universal și se folosește în aplicații casnice de puteri
mici și viteze mari de rotație (aspirator, mixer).
Fig.3.3 Schema constructivă a motorului de c.c
În general, sunt similare în construcție cu generatoarele de curent continuu. Ele pot, de fapt sa fie
descrise ca generatoare care "funcționeaza invers". Când curentul trece prin rotorul unui motor, este
generat un câmp magnetic care genereaza o forță electromagnetică, și ca rezultat rotorul se rotește.
Acțiunea periilor colectoare și a plăcuțelor colectoare este exact aceiași ca la generator.
Rotația rotorului induce un voltaj în bobinajul rotorului. Acest voltaj indus are sens opus
voltajului exterior aplicat rotorului. În timp ce motorul se rotește mai rapid, voltajul rezultat este
aproape egal cu cel indus. Curentul este mic, și viteza motorului va ramâne constanta atât timp cât
asupra motorului nu acționează nici o sarcina, sau motorul nu efectuează alt lucru mecanic decât cel
efectuat pentru învârtirea rotorului. Când asupra rotorului se aplică o sarcină, voltajul va fi redus și
un curent mai mare va putea să treacă prin rotor.
Astfel, motorul este capabil să primească mai mult curent de la sursa care îl alimentează, și astfel
să efectueze mai mult lucru mecanic. Deoarece viteza rotației controlează trecerea curentului prin
rotor, mecanisme speciale trebuie folosite pentru pornirea motoarelor cu curent continuu. Când
rotorul se află în repaus, el, efectiv, nu are nici o rezistență, și dacă voltajul normal este aplicat, va
trece un curent mare, ceea ce ar putea avaria periile colectoare sau motorul.
Mijloacele obișnuite pentru prevenirea acestor accidente este folosirea în serie a unei rezistențe,
la început, împreună cu rotorul, pentru a limita curentul pâna când motorul începe să dezvolte un
curent suficient. Pe parcurs ce motorul prinde viteză, rezistența este redusă treptat, fie manual ori
automat.
Tabel3.1 Specificații tehnice a motoarelor de curent continu
Fig.3.4 Cutia de viteze și motoarele de c.c asamblate
Semnale PWM(Pulse Width Modulation)
Semnalele PWM sunt folosite în general pentru a controla viteza unui motor de curent
continuu.Aceste motoare permit controlul vitezei prin modificarea tensiunii de alimentare însă viteza
se modifică neliniar.Pentru a controla această viteză liniar s-a recurs la metoda de controlprin
semnale PWM.
Semnalele PWM au următoarea formă:
Fig.3.4 Forma semnalului PWM
În schema de mai sus observăm că semnalul este de perioadă T. Această perioadă este compusă
din timpul în care semnalul este 1 logic (Tplin care se mai numește și factor de umplere) și timpul în
care semnalul este 0 logic (Tgol). De obicei intervalul T este dat de 256 de tacte de ceas astfel Tplin
sau TGol putând modifica viteza motorului cu pasul de aproximativ 0.4% la fiecare modificare cu o
unitate a registrului de control al factorului de umplere.[5]
3.3.Circuitul integrat folosit pentru comanda motoarelor
Circuitul integrat ales de noi este L298N.
Circuitul integrat L298N este o punte H folosită pentru a controla viteza de rotație precum și sensul
de rotație pentru cele 2 motoare. Acest circuit este controlat de către softul aflat pe microcontroller.
Schema de control a motoarelor cu circuitul L298N este următoarea:
Fig.3.5 Schema de control a circuitului L298N
Conectarea la Arduino se face cuplând placă shield peste placă Arduino și conectând pinii
marcați VIN și GND la sursa de alimentare pentru motoare. Pinii PWM care controlează
driver-ul L298 sunt 3, 5, 6 și 9.
Fig.3.6 Placa shield
Fig.3.7 Stuctura punții H L298N
Fig.3.8Placa shield montată pe suport de plastic
3.4.Stabilizator de tensiune de 5V
Un stabilizator de tensiune fixă se utilizează pentru stabilirea locală a tensiunii de alimentare pe module cu circuite integrate. Avantajele utilizării unui astfel de stabilizator sunt că oferă simplitate în utilizare și optimizează raportul dintre cost și performanță.
Fig.3.9 Stabilizator de tensiune de 5V
Tab.3.2 Specificații tehnice stabilizator de tensiune
Fig.3.10 Schema de funcționare a unui stabilizator de tensiune
Fig.3.10 Stabilizatorul de tensiune asamblat pe robotul mobil
3.5.Placa de procesare Arduino Nano
Arduino Nano este o placă de dezvoltare compactă, proiectată pentru utilizarea pe un breadboard.
Ea are la bază un microcontroler ATMega 328. Aceasta se conectează la computer utilizând un cablu
USB Mini-B.
Fig.3.11 Placa Arduino Nano
Alimentare
ARDUINO Nano poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de
alimentare externă. Sursa de alimentare este selectată automat.
Alimentarea externă (non-USB) poate veni fie de la un adaptor AC-la-DC sau baterie.
Adaptorul poate fi conectat printr-un conector cu centru-pozitiv. Conectarea de la o baterie
poate fi realizată legând la GND si V’in capetele de la conectorii de alimentare.
Placa de dezvoltare poate opera pe o sursa externă de 6-20 volti. Dacă este alimentată la
mai putin de 7V, există posibilitatea, ca pinul de 5V să furnizeze mai putin de cinci volți și
placa să devină instabilă. Dacă se alementează cu mai mult de 12V, regulatorul de tensiune se
poate supra-încălzi acest lucru ducând la deteriorarea plăcii. Intervalul de tensiune
recomandat de catre producător este de 7-12 volți.
Memoria
ATmega328 are 32 KB (cu 2 KB utilizate pentru bootloader). Ea are, de asemenea,2 KB
SRAM și 1 KB de EEPROM.
Arduino UNO prezintă o serie de facilități în comunicarea cu calculatorul, cu alt
Arduino sau cu alte microcontrollere. ATmega328 oferă comunicație serială UART
TTL (5 V), valabilă pe pinul 0 și 1 (RX și TX).LED-urile RX și TX de pe placă vor
lumina intermitent când datele sunt transmise prin portul USB de la calculator către
Arduino. [7]
Fig.3.12 Planul general al plăcii microcontrollerului
Tab.3.3 Specificații tehnice Ardiono Nano
Fig.3.13 Schema electrică a plăcii Arduino Nano
Fig.3.x Placa Arduino Nano montată pe platforma robotului
3.6.Senzorul de distanță ultrasonic HC-SR04
Senzorul cu ultrasunete HC-SR04 oferă o metodă ieftină și foarte ușoară de
măsurare a distanței. Acest senzor este perfect pentru orice tip de aplicații în care aveți nevoie
să efectuați măsurători între obiecte în mișcare sau staționare.
Acest senzor de distanță cu ultrasunete este utilizat pe scară largă în aplicații de robotică și
este, de asemenea, util în sistemele de securitate sau ca un înlocuitor pentru senzorii cu infraroșu.
Senzorul măsoară distanța, folosind un sonar; un impuls ultrasonic (mult peste auzul uman) este
transmis de la unitate, iar distanța până la țintă este determinată prin măsurarea timpului necesar de
întoarcere a ecoului. Ieșirea de la senzor este un impuls cu lățime variabilă, care corespunde cu
distanța până la țintă. Conectarea la microcontroller sau alte controllere programabile este ușoară: un
singur pin I / O (sau de semnal) este folosit pentru a activa senzorul și "ascultă" impulsul ecoului
returnat, un pin pentru alimentare și un alt pin pentru masă.
Fig.3.14 Senzorul de distanță ultrasonic HC-SR04
Specificații tehnice:
Principial, directivitatea sonarelor depinde de puterea emițătorului și câștigul amplificatorului de
recepție, de dimensiunea obiectului reflectător, de textura (reflectivitatea) suprafeței și de orientarea
acestei suprafețe. Există situații extreme, cînd un obiect aflat în fața sonarului nu poate fi detectat,
cum ar fi cea în care suprafața este lucioasă (oglindă), orientată înclinat față de axa normală la
suprafața sonarului.
DIAGRAMA DE TIMP !!!!
Fig.3.x Senzorii de distanță montați pe robotul mobil
4.Structura software
4.1 Noțiuni introductive Arduino
Microcontrollerul se poate programa cu ajutorul softului oferit pe site-ul oficial
arduino-1.0.5-windows.exe. În figura umătoare sunt prezentate principalele
caracteristici ale programului după cum urmează :
denumire proiect: fiecare program creat în mediul de programare Arduino se numește “sketch” (schița) și se salvează cu extensia “.ino”.
bara meniu utilitare: este o bară de opțiuni care se întâlnește la majoritatea
programelor create pentru sistemul de operare Windows, dar care are în plus secțiunea “Sketch” unde avem opțiunea de compilare/ verificare, adăugare fișiere și importare librării.
butoanele de compilare, încărcare program, proiect nou, deschidere proiect și salvare proiect sunt practic scurtături pentru opțiunile din bară cu utilitare.
un lucru foarte important îl reprezintă Serial Monitor care se deschide cu ajutorul
butonului evidențiat în figură și cu ajutorul căruia se pot observa valorile citite de la microcontroler primite de la pinii de intrare.
zona de mesaje: afișează rezultate cu privire la salvarea, compilarea, încărcarea programului dar și erorile de sintaxa pe care le conține codul.
Fig.4.1Principalele caracteristici ale softului Arduino
Programele Arduino pot fi divizate în 3 mari părți componente:
structuri ;
variabile și constante ;
funții .
Orice program Arduino are doua secțiuni. Secțiunea "setup", care este rulată doar o singură dată, atunci când placa este alimentată (sau este apasat butonul "Reset"), și secțiunea "loop", care este rulată în ciclu, atât timp cât este alimentată placă.
void setup() {
//codul scris aici rulează o singură dată
}
void loop() {
//codul scris aici rulează tot timpul
}
Astfel, în rutina "setup" vom pune de obicei cod de inițializare, iar în rutina "loop" vom scrie partea principală a programului nostru.
4.2 Testare senzori
Robotul mobil autonom are în componența lui trei senzori ultrasonici de distanță HC-SR04 care stabilesc distanța la care se află un obstacol. Cei trei senzori sunt alimentați la tensiunea de 5 V, iar pe placa Arduino sunt conectați în umătorul mod :
Senzorul din față pentru emițător este conectat la pinul 7 al plăcii și pentru receptor la pinul 8 ;
Fig.4.2 Sezorul din față al robotului autonom
Senzorul din dreapta pentru emițător este conectat la pinul 2 și pentru receptor la pinul 4 al plăcii ;
Fig4.3 Senzorul din dreapta al robotului autonom
Senzorul din stânga este conectat la pinul 10 pentru emițător și pinul 11 pentru receptor .
Fig4.4 Senzorul din stanga al robotului autonom
#define trigPin1 2
#define echoPin1 4
#define trigPin2 7
#define echoPin2 8
#define trigPin3 10
#define echoPin3 11
void setup()
{
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
}
void loop()
{
long duration, distance;
digitalWrite(trigPin1, LOW);
digitalWrite(trigPin2, LOW);
digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
digitalWrite(trigPin2, HIGH);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1= (duration1/2) / 29.1;
Serial.println("Senzor dreapta: ");
Serial.println(distance1);//dist senzorului din drepta returnată este în cm
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2= (duration2/2) / 29.1;
Serial.println("Senzor fata: ");
Serial.println(distance2);//dist senzorului din față returnată este în cm
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance3= (duration3/2) / 29.1;
Serial.println("Senzor stanga: ");
Serial.println(distance3);
}
Controlul și schimbarea drecției de mișcare se realizează diferențial, în funcție de valorile returnate de către senzori, prin intermediul funțiilor definite entru posibilele traiectorii pe care le poate urma robotul mobil autonom. Valorile returnate de către acești senzori au fost determinate experimental, prin intermediul funcției de afișare ce se află în fereastra Arduino “Serial Monitor “, după cum se poate observa în următorul tabel:
Dezavantajul utilizării acetui tip de senzori este că în timpul emiterii consumul de energie electrică este mai mare și că atunci când se utilizează mai mulți senzori aceștia se pot influiența reciproc.
4.3.Algoritmul utilizat
După cum am prezicat și într-un capitol anterior algoritmul care stă la baza robotului mobil autonom are ca principiul funcționarea regulatoarelor automate electronice neliniare tripoziționale. Cele trei stări posibile pe care le poate avea robotul mobil sunt determinate în funcție de valorile pe care le returnează senzorii ultrasonici de distanță HC-SR04 ți în funcție de aceste valori se ia o decizie cu privire la schimbarea direcției de mers a robotului autonom
Structura algoritmului utilizat va fi sub următoarea formă :
Fig4.x Organigrama algoritmului utilizat
Algoritmul funcționează în următorul mod :
în momentul în care senzorul din față returnează o valoare mai mica decat cea precizată, citește valoarea senzorului din dreapta și dacă este posibil face virajul ;
dacă senzorul din față și senzorul din dreapta returnează o valoare mai mică decât valoarea dată se încearcă virajul la stânga ;
în caz contrar, dacă se detectează obstacol în față, în stânga și în dreapta robotului puntea H crește viteza de rotație a motorului montat pe șenila din dreapta facându-se virajul la stânga și după se va analiza din nou valorile returnate de senzori
4.4.Structura programului
Programul este format din funcțiile principale setup() și loop() la care se mai adaugă și următorele funcții și definiri:
Încarcarea librăriilor necesare,definirea pinilor și conectarea componentelor și a variabilelor;
Funcția void setup() ;
Funcția void loop() ;
Funcțiile pentru direcțiile de mers ale motoarelor :
Inainte() ;
Dreapta();
Stanga();
Stop();
Funcția void algoritm() care prelucrează datele primite de la senzori și determină schimarea sensului de mișcare în momentul în care se detectează un obstacol.
Încarcarea librăriilor necesare,definirea pinilor și conectarea componentelor și a variabilelor;
#include "Ultrasonic.h"
#define Motor2_Pin1 3
#define Motor2_Pin2 5
#define Motor1_Pin1 6
#define Motor1_Pin2 9
#define dreapta 10
#define stanga 170
#define trigPin1 2
#define echoPin1 4
#define trigPin2 7
#define echoPin2 8
#define trigPin3 10
#define echoPin3 11
int distantaFata; // se definește mărimea de tip întreg distantaFata
int distantaDreapta; // se definește mărimea de tip întreg distantaDreapta
int distantaStanga; // se definește mărimea de tip întreg distantaStanga
bool decizie=false;
int k=0;
Serial.println("Senzor dreapta: ");
Ultrasonic ultrasonic1(2,4); // dreapta
Serial.println("Senzor fata: ");
Ultrasonic ultrasonic2(7,8); // fata
Serial.println("Senzor stanga: ");
Ultrasonic ultrasonic3(10,11); // stanga
Funcția void setup() ;
void setup()
{
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin3, INPUT);
Serial.begin(9600); // se începe comunicarea serială cu computerul la valoarea de 9600 biți
pinMode(Motor1_Pin1, OUTPUT); // se declară pinii la care sunt conectate motoarele ca pini
pinMode(Motor1_Pin2, OUTPUT);
pinMode(Motor2_Pin1, OUTPUT);
pinMode(Motor2_Pin2, OUTPUT);
delay(1000);
}
Funcția void loop() ;
void loop()
{
if(k==0)
{
delay(5000);
k=1;
}
algoritm();
}
Funcțiile pentru direcțiile de mers ale motoarelor :
void Inainte()
{
Serial.println("Inainte");
digitalWrite(Motor1_Pin2, LOW);
digitalWrite(Motor2_Pin2, LOW);
analogWrite(Motor1_Pin1, 120);
analogWrite(Motor2_Pin1, 120);
return;
}
void Dreapta()
{
Serial.println(" Dreapta");
digitalWrite(Motor1_Pin2, HIGH);
digitalWrite(Motor2_Pin2, LOW);
analogWrite(Motor1_Pin1, 130);
analogWrite(Motor2_Pin1, 200);
analogWrite(Motor1_Pin1, 200);
return;
}
void Stanga()
{
Serial.println(" Stanga");
digitalWrite(Motor1_Pin2, LOW);
digitalWrite(Motor2_Pin2, HIGH);
analogWrite(Motor1_Pin1, 200);
analogWrite(Motor2_Pin1, 130);
return ();
}
void Stop()
{
Serial.println(" Stop");
digitalWrite(Motor1_Pin1, LOW);
digitalWrite(Motor1_Pin2, LOW);
digitalWrite(Motor2_Pin1, LOW);
digitalWrite(Motor2_Pin2, LOW);
return;
}
5.Concluzii
Bibliografie:
[1] Nițulescu, M. “Sisteme robotice cu capacitate de navigație”, Ed. Universitaria, Craiova, 2002.
[2] Bajd, T., Mihelj, M., Lenarcic, J., Stanovnik.,A., Munih, M. “Robotics”, Springer Science,
London, 2010.
[3] Frangu, L., Mazarel, M., Olteanu, D. "Using the Sensory System of the Robot for Obstacle Avoidance Tasks", Proc. of the 2-nd National Workshop on Mobile Robots, Craiova, Romania, oct. 18-20, 2001, pp. 131-137.
[4] Borenstein, J., Koren, Y. “Real-time Obstacle Avoidance for Fast Mobile Robots”, IEEE Trans. on System, Man and Cybernetics, Vol. 19, No. 5, 1989, pp. 1179-1187.
[5] Floroian D. Notițe curs Sisteme cu microprocesoare
[6] http://en.wikipedia.org/
[7]***“Arduino”,2014.[Online]. Available: http://www.arduino.cc/en/Main/
ArduinoBoardNano.
[8]***“Sensor HC-SR04”. [Online]. Available: http://www.micropik.com/PDF /HCSR04.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: Structura Robotului Mobil (ID: 163758)
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.
