Ansamblul acestuia va fi construit în jurul plăcii de dezvoltare Arduino . [311142]
Introducere
Lucrarea are numele de „Proiectarea și realizarea unui robot de explorare folosind o placă de dezvoltare Arduino”și prezintă în detaliu procesul de asamblare și programare.
Această temă a fost aleasă datorită faptului că implică pe langă programearea software a microcontrolerului Arduino și o [anonimizat].
Scopul acestei lucrări este realizarea unui robot controloabil de la distanță care să poată intra în zone nesigure și sa analizeze mediul trimițând feedback .
Ansamblul acestuia va fi construit în jurul plăcii de dezvoltare Arduino .
Pentru comunicarea la distanță se va folosi tehnologia bluetooth .
Conexiunea între cipul Arduino și modulul bluetooth a fost facută cu ajutorul unui modul (shield) USB .
Analiza mediului se va face cu ajutorul senzorului de gaz și fum (MQ-2) , iar pentru depistarea obstacolelor roborul este dotat cu un senzor de proximitate (HC-SR04).
Mobilitatea este asigurată cu ajutorul unui șasiu motorizat cu roți conectat prin intermediul unui driver L293D .
Robotul poate fi controlat folosind un controller pentru PlayStation sau alt dispozitiv care emuleaza aceste comenzi. Acest model de controler are integrate leduri și vibrații pentru feedback.
[anonimizat] a indica prezența gazului sau a fumului.
Cipul Arduino UNO folosește un limbaj asemănător cu C++
[anonimizat] .
Capitolul I
1.Descrierea componentelor hardware
Acest proiect este construit în jurul unei plăci de dezvoltare Arduino UNO folosind senzori și module compatibile pentru a obține rezultatul dorit.
Conexiunea între componente în varianta finală a fost facuta folosind conectori sau mufe standardizate.
Modulele au fost testate separat și individual cu ajutorul unui Arduino nano montat pe o plcă pentru montaje folosind fire.
Placa de dezvoltare Arduino UNO este de fapt un calculator în miniatură. Aceasta contine un microprocesor și memorie precum și pini de intrare și ieșire.
[anonimizat] 2.0 mai veche compatibil însa cu majoritatea dispozitivelor de azi.
Modulul de expansiune USB (Usb Host Shield) este componenta necesară pentru a putea folosi dispozitive usb conectate usor și simplu ansamblului.
HC-SR04 este un senzor pentru măsurarea distanței care folosește unde ultrasonice .
MQ-2 [anonimizat], metanol , hidrogen s.a.
Driverul L298N este un controller pentru motoare care de asemenea amplifică voltajul pentru semnalele date de cip.
1.1.Descrierea plăcii Arduino UNO
Plăcile de dezvoltare Arduino sunt microcontrolere cu o structură simplă din punct de vedere hardware și un software ușor de folosit .
Scopul acestor plăci este de a capta date în mod analog sau digital cu ajutoul unor senzori sau module și de a [anonimizat] a datelor .
[anonimizat] . În funcție de scopul folosiri putem alege un Arduino simplu, unul mai dotat cu mai multe intrări și ieșiri sau unulul cu module integrate direct pe placă cum ar fi un modul wifi. Modelele mai complexe pot avea dimensiuni mai mari iar cele mai simple dimensiuni foarte mici .
1.1.1. Alegerea unei plăci Arduino
Din varietatea mare de plăci de dezvoltare diponibile am ales un Arduino pentru că :
Este ușor de folosit și programat , codul fiind intuitiv și usor de înțeles.
Poate fi folosit pe Windows , MacOS sau Linux
Are un raport calitate preț foarte bun
Este ușor de găsit
Poate fi programat prin USB și nu necesită un modul separat
Este open-source
Are disponibile o gamă largă de module compatibile și instrucțiuni pentru acestea
În primele faze ale dezvoltări acestui proiect am folosit un cip Arduino Nano pentru că era extrem de accesibil și ușor de găsit . Acesta are un conector mini-usb care este folosit atât pentru programare cât și pentru alimentarea microcontrolerului . Arduino Nano are un format mic , aproximativ 2 x 4.5cm , 12 pini pentru semnal digital și 7 pentru cel analog , destul de multe pentru dimensiunea sa .
Figura 1.1.1. Placa de dezvoltare Arduino NANO
Prima problemă întâlnită cu acesta a fost faptul că prin mufa de alimentare micro usb nu puteam alimenta intreg ansamblul , aceasta fiind limitară .
A doua problemă a fost indiponibilitatea modulelor compatibile cu acest cip.
După aceste observații am decis să îl schimb cu un Arduino cu alimentare separată și cu conectori modulari compatibili cu diferite module pentru a elimina eventualele probleme de conexiune în timpul funcționării , ținând cont că acesta va fi un ansamblu mobil expus vibrațiilor.
Arduino Uno era urmatoarea varianta ce are caracteristicile necesare acestui proiect . Acesta are următoarele caracteristici:
Microcontroller Atmel ATmega328p
Clock Speed 16 MHz
Memory Flash 32 KB
SRAM 2 KB
EEPROM 1 KB
Converter serial – usb
14 intrari și ieșiri digitale din care 6 PWM
6 intrari și ieșiri analogice
Alimentare 12V sau 5V-Usb
DC Current pe I/O Pin 40 mA
Iesiri de 3.3V si 5V
Buton de reset integrat
Led integrat pentru debugging (pin 13)
Capcitori pentru stabilizarea curentului de intrare
Figura 1.1.2 Placa de dezvoltare Arduino UNO
Alimentarea acestui cip se poate face folosind o sursă de 6 și până la 24 volți recomandat de către producător este 7-12 volți.
În cazul în care voltajul de alimentare nu este suficient, să zicem mai puțin de 5 volți cipul poate să aibă simptome precum nefurnizarea semnalelor pentru pini de ieșire sau restart în timpul rulării .
Alimentarea cpiului cu un voltaj mare, mai mult de 14 volți duce la supraîncălzirea circuitului de stabilizare și in condiții grave distrugerea acestuia.
Spre deosebire de alte cipuri, Arduino nu este foarte pretențios în privința alimentări iar in cazul unei alimentări necorespunzătoare în cele mai multe cazuri acesta ori nu funcționează de fel ori își dă restart datorita sarcini prea mari.
Pe scurt este un cip greu de stricat excelent pentru a încerca și dezvolta.
Pini I/O am putea să îi împărțim astfel :
Pini de alimentare unde avem importanți : VIN ca fiind o alimentare alternativă pentru cei 12 volți recomandați pentru funcționarea cipului , iesirile de 3.3 respectiv 5 volți si pini GND pentru împământare.
Avem și un pin alternativ pentru reset printre aceștia.
Pini pentru semnale digitale sunt în număr de 14 din care 6 sunt capabili PWM 8-bit (Pulse width modulation ) .
Pini pentru semnale analogice toți 6 au o sesivitate de 10-bit
Procesarea informației se face cu ajutorul unui microcontroler Atmel Mega328p amplasat în centrul cipului.
Specificații tehnice:
1.2 Modulul de expansiune USB (Shield-ul USB)
Shield-ul pentru expansiune usb permite conectarea dispozitivelor USB cu placa Arduino.
Acest modul este conceput cu un cip de expansiune MAX3421E.
MAX3421E este un controler care conține componete logice digitale și analogice ale circuitului necesare pentru comunicarea cipului arduino cu dispozitive USB 2.0 la viteza maximă a portului .
Revizia 2.0 este compatibil cu Arduino UNO , Duemilanove ,Mega si Mega 2560.
Figura 1.2 Keyes USB host shield
Specificații tehnice ale acestuia sunt :
Voltaj de alimentare dual 3.3V/5V
Temperatura de funcționare -40°C până la 85°C
Compatibil cu dispozitive USB revizia 2.0 la viteză de pană la 12Mb/sec în regim full speed, sau low-speed 1.5Mb/sec .
Cu ajutorul acestui shield putem folosi dispozitive de tip HID precum tastatură , mouse sau joystick .
Functionează de asemenea cu unitați de stocare cum ar fi stick de memorie USB , cititor de carduri USB sau hard disk extern în format FAT 32.
Transmiterea datelor de la cip la shield-ul usb se face folosind interfața SPI a conectorului ICPS
Pinii folosiți de acest shield sunt pinii digitali 9 si 10 dar in cazul de față și pinii 11, 12, 13 care sunt conectați direct la conectorul ICPS in cazul cipului Arduino UNO
1.3.Modulul bluetooth
Modulul bluetooth folosit este un stick-USB generic cu un controller fabricat de Broadcom modelul BCM2046.
Interfața de comunicare cu cipul Arduino UNO este una USB 2.0
Tehnologia bluetooth folosită pentru a comunica cu Controllerul este bluetooth 2.0
Conexiunea între acest modul și cipul Arduino UNO este facuta prin intermediul modulului Shield USB
Figura 1.3. Modul bluetooth USB
Specificații tehnice:
Conexiunea acestuia la shildul usb se va face prin intermediul conexiuni USB 2.0
Ansamblul va comunica cu dispozitivul de comandă (controllerul bluetooth pentru Ps3) pe frecvența de 2.4Ghz folosind tehnologia bluetooth 2.0 .
1.4 Senzorul ultrasonic
Senzorul Ultrasonic modelul HC-SR04 este un modul compatibil Arduino care măsoară distanța folosind unde ultrasonice asemenea unui sonar . În partea din față acesta are un emițător care emite un puls și un receptor care captează pulsul după ce acesta a fost reflectat de potențialul obstacol.
HC-SR04 este capabil sa măsoare distanțe de până la 4 metri cu o precizie de 2 cm.
Figura 1.4 Senzor ultrasonic (sonar)
Specificații tehnice:
Conexiunea acestui modul cu cipul Arduino UNO se va face folosind două linii de conexiune în regim analog. Una este pentru pinul Trig destinat emițătorului de puls și cealaltă pentru pinul Echo care este receptorul ecoului.
Alimentarea se va face cu 5 volți de pe linia de iesire din Arduino.
1.5 Senzorul de gaze.
Acest senzor de gaze , modelul MQ-2 , poate să detecteze gaz Propan, gaz Metan , Hidrogen , GPL sau fum .
Senzorul funcționează folosindu-se de conductivitatea gazului între două terminale SnO2 care în aer curat au o conductivitate slabă . Astfel acest senzor convertește conductivitatea electrică într-un semnal analog.
Senzorii precum acesta sunt ușor de achiziționat și extrem de durabili.
Figura 1.5 Senzor MQ-2
Se pot folosi în diferite alicații cele mai întalnite fiind sisteme de detecție a diferitelor gaze inflamabile sau fum .
Specificații tehnice:
Având o structură atât de simplă folosește o singură conexiune de date cu cipul Arduino și anume un pin analog .
Alimentarea este cea standard de 5 volți însa trebuie ținut cont de faptul că are un consum de curent destul de mare și de asemenea se încălzeste destul de tare .
1.6. Modulul pentru motoare ( L298N H Bridge)
Pentru a putea folosi motoare bidirecționale DC multiple sau motoare pas cu pas este nevoie de o punte H care permite schimbarea polarități alimentări motorului și schimbă sensul
Acest controler poate controla 2 motoare cu ajutorul unui cip L298N dual H-bridge sau un motor pas cu pas.
Curentul furnizat este de până la 2A iar voltajul poate fi între 5 și 35v. Este răcit cu un radiator din aluminiu pentru o functionare optimă și bneficiază de un circuit cu diode pentru protecție împotriva unui scurt circuit.
În majoritatea cazurilor motoarele în sarcină au un consum destul de mare, mult peste capacitatea cipul Arduino uno de aceea acest modul este alimentat de la propria sursă.
Figura 1.6 Modul L298N H-bridge
Pe langă alimentarea separată a motoarelor acest modul include un regulator care în cazul folosiri unei surse de 7 până la 12v furnizează 5v, excelen în cazul de față pentru alimentarea servomotorului care controlează direcția sau alimentarea cipului arduino.
Controlul fiecărui motor DC se face prin intermediul a 2 pini digitali care setează direcția de mers și unu al 3-lea digital capabil PWM care setază viteza de rotație.
Specificatii tehnice:
1.7 Controllerul bluetooth Dualshock 3
Acest model de controller face parte din a 3-a generație de controllere pentru Play Station . A fost lansat în 2008 ca manetă de control pentru Play Station 3 . Spre deosebire de modelul precedent din 2006 numit Sixaxis, acesta beneficiază de „force feedback” o tehnologie mai veche de la Sony care face ca , controllerul să vibreze pentru o experiență cât mai reală .
Figura 1.7 Maneta de control (controller Dualshock 3)
Alimentarea este asigurată de un acumulator intern li-ion iar comunicarea se face prin bluetooth 2.0 sau conexiunea USB folosită și prentru încărcare .
Pe langă butoanele normale acest model de controller are doua trăgace analog (L2, R2) , doua joystick-uri cu precizie de 10 biți , butoane sensibile la presiune ( , , , , L1, R1 ) și senzori de mișcare pe 6 axe.
Deși a apărut de aproape 10 ani, datorită multiplelor variante de înregistrare a comenzilor și accesibilitați sale acest controller este comercializat până și in ziua de azi individual sau alături de produse precum PS TV sau Ps3 superslim și a ajuns să poată fi conectat, folosind drivere customizate, la majoritatea dispozitivelor cu bluetooth precum smartphone, PC, cipuri/plăci de dezvoltare s.a.
Pentru a putea comunica cu modulul bluetooth controllerul trebuie să cunoască adresa MAC a acestuia. Împerecherea lor se va face separat folosind un PC pentru a simplifica procesul de inițializare și punere în funcțiune a robotului .
Scopul acestuia în acest proiect este să transmită comenzi și să dea feedback utilizatorului .
Capitolul II
Conectarea și modul de funcționare al componentelor
2.1 Metodologia de funcționare
Scopul robotului de explorare este să transmită de la distanță informația către utilizator pentu a evita contactul acestuia cu un mediu periculos.
Transmiterea informației către utulizator se va face folosind ledurile de avertizare ale controllerului și motoarele pentru vibrații. Pentru detectarea unui obstacol controllerul va vibra iar în cazul detectări unui gaz periculos acest lucru va fi semnalizat prin aprinderea ledurilor în funcție de substanța detectată.
Figura 2.1.1 leduri de avertizare
De asemenea cotrollerul este folosit și pentru transmiterea comenzilor direcționale pentru deplasare , astfel , acesta va acționa ca un dispozitiv de intrare și ieșire pntru ansamblu.
Un rol important pentru comunicarea între cipul Arduino și controllerul bluetooth îl are shieldul usb care asigură transmiterea datelor astfel:
Figura 2.1.2 Metodologia de functionare
2.2 Conectarea modulului de expansiune USB (Shieldului USB)
Modulul este conectat cu cipul Arduino prin pini digitali 9 (INT), 10 (SS) și conectrorul ICSP (In Circuit Serial Programmer). Acesta din urmă folosește o interfață de tip SPI (Serial Peripheral Interface ).
Pini conectorului ICSP sunt de asemenea conectați la pini digitali 11 (MOSI), 12 (MISO), 13 (SCK), Reset, 5V și GND .
Figura 2.2.1 conector ICSP
Figura 2.2.2 Schema de conectare a shieldului USB
2.3 Conectarea modulului Bluetooth.
Având în vedere faptul că am ales un modul cu o conexiune usb, conectarea și deconectarea acestuia este foarte simplă, mufele usb fiind extrem de cunoscute și fară posibilitatea de a conecta ceva greșit.
Am ales să folosesc module cu o conexiune usb pentru că acestea oferă flexibilitatea de a folosi o gamă largă de dispozitive fară nici o modificare hardware.
Figura 2.3 Usb pinout
2.4 Conectarea modulului pentru motoare L298N
Circuitul integrat L298N funcționează folosind un circuit intern format din porți logice și tranzistori.
Figura alaturată prezintă funcționarea în situația în care In1 este High , In2 Low si EnA activ.
În acest caz tranzistori 1 și 4 permit trecerea curentului, astfel OUT1 devine pozitiv și OUT2 negativ . Acest lucru duce la rotirea motorului și deplasarea înainte .
L298N include două astfel de circuite .
Figura 2.4.1Circuit logic L298N
Conectarea acestui modul cu cipul Arduino se face folosind 3 pini digitali: D8 (In1), D7 (In2) si pinul D6 (EnA) . In1 este folosit pentru a activa direcția îmainte prin semnal de tip High, In2 activează direcția spate iar pinul EnA setează viteza de rotație printr-un semnal PWM.
De asemeana avem și o conexiune de masă , GND între toate modulele.
Alimentarea va fi facută folosind baterii cu un voltaj de 7-12V pentru a putea beneficia de regulatorul care furnizează 5V. Pentru ca acest regulator să fie activ jumperul JP1 trebuie să fie conectat.
Figura 2.4.2 Conectarea modulului pentru motoare
2.5 Conectarea motorului DC și a servomotorului
Pentru a asigura mobilitatea ansamblului am folosit un motor DC cu alimentare de 6-9V și un servomotor alimentat cu 5v.
Motorul este conectat la terminalele OUT1 si OUT2 ale modulului cu L298d. Acesta din urmă asigurand alimentarea de la sursa externă și schimbarea sensului de mers.
Figura 2.5.1 Conectarea servomotorului
Servomotorul este alimentat cu 5V generați de regulatorul modulului pentru motoare și folosește pinul D5 al cipului Arduino pentru a seta poziția.
Figura 2.5.2 Conectarea motorului si a servomotorului
2.6 Conectarea senzorului de proximitate HC-SR04
Bazat pe tehnologia cu ultrasunete HC-SR04 va determina distanța pană la urmatorul obstacol fiind amplasat cu vederea în direcția de deplasare înainte. Este alimentat cu 5V de la cipul arduino și folosește doi pini analogi , în cazul nostru A5 Trig și A4 Echo.
Distanța este determinată calculând durata de la emiterea semnalului Trig pană la întoarcerea acestuia ca și ecou catre senzor.
Figura 2.6 Conectarea senzorului HC-SR04
2.7 Conectarea senzorului de gaz MQ-2
MQ-2 este conectat la cipul Arduino folosind un pin analog, în cazul nostru pinul A3. Senzorul de gaz înregistrează conductivitatea aerului ca valoare analogică , astfel putem determina în funcție de valoare ce tip de gaz este detectat.
Alimentarea se face cu 5V și gnd direct de la cipul Arduino.
Figura 2.7 Conectarea senzorului de gaz
2.8 Schema completă de conectare
Figura 2.8 Schema completa a conexiunilor
3 Programarea și testarea
3.1 Aplicația pentru programarea plăci Arduino
Plăcile Arduino se pot programa folosind aplicația Arduino IDE disponibiă pe pagina web a producătorului în secțiunea de Software. Aceasta este disponibilă pentru Windows , Mac OS și Linux.
În fereastra principală a aplicației se poate vedea structura de bază a unei aplicații arduino.
Figura 3.1.1 programul Arduino IDE
Putem observa bucla „void setup()” unde codul inclus se execută o singură dată la pornirea cipului Arduino. Aici putem face conexiunea între variabile declarate și cele captate de cipul arduino precum și inițializarea anumitor librării incluse precum cea de comunicare serial.
Bucla „void loop()” este pentru codul care se va executa în mod repetat. Aici vom scrie codul de execuție al programului.
Înaintea celor două bucle principale se pot defini variabile și felul acestora, sau include librării construite pentru folosirea mai simplă a anumitor module sau acțiuni.
În cazul nostru librăriile simplifică modul în care ne putem adresa modulelor și felul în care acestea răspund cererilor. Acestea având comenzi simple pentru acțiunile de care sunt capabile modulele.
Arduino dispune de o gamă largă de librarii pentru module și diferite operații . Acestea pot fi adăugate manual în program din meniul „Sketch -> Include Library” sau pot fi incluse la începutul codului sub forma „#include <nume_librarie.h>”
Figura .3.1.2 includerea unei librarii in program
Arduino IDE permite adăugarea de librării externe. Astfel dacă avem nevoie de alte librării decât cele deja incluse în Arduino IDE se pot dauga și altele selectând opțiunea „Add .ZIP Library ” prezentă tot în meniul „Sketch -> Include Library”. După daugare acestea se pot include în program fiind prezente în „Include Library”.
3.1.3 Adaugarea unei libarii externe
3.2 Programarea și testarea plăci Arduino uno cu Arduino IDE
Primul pas care trebuie făcut pentru a putea programa corect placa Arduino UNO este selectarea modelului din meniul „Tools -> Board:” , în cazul nostru „Arduino/Genuino UNO”.
Figura 3.2.1 Selectarea modelului plăcii Arduino
Dacă driverul s-a instalt corect conexiunea cu placa arduino este recunoscută în rubrica „Port” din meniul Tools, ca și un COM, și putem începe procesul de programare a plăcii Arduino UNO.
Pentru a monitoriza funcționarea corectă a programului și valorile variabilelor pe placa Arduino am folosit funcția „Serial Monitor”.
Comunicarea plăci cu PC-ul prin portul serial trebuie inițializata folosind în programul plăcii Arduino comanda :
unde (115200) este bana de comunicare .
Pentu a trimite o informație de la Arduino la Pc prin portul serial folosim:
Între paranteze fiind mesajul transmis, care poate să fie orice tip de variabilă . În cazul de față „F()” este folosit pentru ca variabila de tip string să fie salvată în memoria flash, economisind astfel memorie ram.
Pe placa Arduino UNO pinul D13 are deja un led conectat împreuna cu un rezistor și se poate folosi pentru debuging.
Am construit astfel următorul program de test, pentru a testa componentele .
3.3 Împerecherea controllerului cu modulul bluetooth
Pentru a putea comunica cu modulul bluetooth , controllerul trebuie să știe adresa acestuia .
Procedeul de conectare a două dispozitive bluetooth se numește împerechere.
În cazul de față varianta cea mai la îndemană este împerecherea acestora cu ajutorul unui program de calculator (windows) numit „DS3 tool (offline)”sau „MotioninJoy”, disponibil gratuit online.
Pe langă opțiunile de bază pentru utilizarea unui controller conceput pentru console de jocuri la un pc , acesta are și opțiunea de a împerechea un controller cu un modul Usb bluetooth compatibil.
După conectarea la PC și instalarea driverelor , pentru ca modulul usb bluetooth și controlerul să fie corect recunoscute, accesăm opțiunea „BluetoothPair”.
In rubrica „Bluetooth Adapter ” selectăm modului usb bluetooth și în chenarul alarurat apar caracteristice acestuia.
De asemean selectăm și din rubrica „Dualshock 3” dispozitivul conectat prin usb la PC „Dualshock 3 (USB)”
Dacă ambele dispozitive au proprietățile afișate apasăm butonul „Pair Now” și observam că adresa MAC din rubrica „Paired to:” a controllerului este adresa adaptorului bluetooth.
Figura 3.3 imperecherea bluetooth
3.4 Programarea și testarea conexiuni bluetooth între Arduino și controller
Primele componente adăugate plăcii Arduino uno au fost modulul pentru expansiune cu port usb și modulul bluetooth împerechiat cu controllerul.
Pentru a testa buna funcționare a acestora am adaugat în Arduino IDE colecția de librării „USB_Host_Shield_2.0-master”. Din aceasta am folosit programul exemplu „PS3BT.ino”. Acesta afisează prin serial numele butonului apăsat pe controller și valoarea în cazul butoanelor analogice. Acest exemplu este un model excelent în care se vad o mare parte din comenzile pentru comunicarea cu controllerul bluetooth.
Construcția programului a început prin adaugarea librăriei „PS3BT” care include comenzile necesare pentru comunicarea între controller, usb bluetooth, usb shield și placa Arduino UNO.
Apoi am declarat :
Care: crează o conecxiune usb cu primul usb, în acest caz singurul pentru că nu avem un usbhub conectat, apoi dispozitivul usb este declarat ca modul bluetooth (bluetooth device) și în ultima parte este declarat ca un PS3 bluetooth care este controllerul folosit .
În bucla „void setup()” nu avem nimic care să aparțină de funcționarea acestor module.
În bucla de loop am început prin pornirea comunicări între modulul de expansiune usb și placa arduino prin comanda:
Am folosit, pentru a determina dacă controllerul este conectat, comanda :
În interiorul acesteia am scris codul pentru acționarea butoanelor cu semnal digital ale controllerului sub forma :
Pentru butoanele de tip analog am adăugat condiții. pentru ca acestea să nu fie extrem de sensibile, astfel:
-urile analog au poziția de mijloc între 0 și 256 (~128 ) pentru acestea am folosit urmatoarle condiții:
Variabila „vals” este valoarea servomotorului care indica direcția . Aceasta va fii explicată în programarea comenzilor pentru servomotor.
În cazul în care dorim deconectarea controllerului și oprirea acestuia am inclus comanda:
Aceasta oprește controllerul prin apasarea butonului PS.
3.5 Programarea servomotorului
Pentru acesta am ales să folosesc libraria „servo” deja inclusă.
Servomotorul va lua valoarea joistick-ului analog stânga însa valoarea acestuia este mult peste valoarea la care poate vira șasiul folosit. Din această cauză am folosit o variabilă int vals.
În meniul void setup() am conectat servoul la pinul A5 prin comanda:
În bucla de exacuție vals ia valoarea joystick-ului analog stanga și este remapată ca o valoare cuprinsă în parametri pe care servmotorul îi poate avea în realitate.
La pornirea ansamblului servomotorul ia valoarea 0 ceea ce nu este tocmai bine , de aceea am inclus înafara buclei „if (PS3.PS3Connected )” ,unde controllerul este pornit, următoarea instrucțiune:
3.6 Programarea modulului pentru motoare
Felul în care funcționează acest modul permite să îl acționăm cu comenzi simple definind doar pinii ca ieșiri. Comenzile pentru mers față/spate ar fii de tip High/Low pentru IN1 și IN2 iar viteza motorului se poate seta atribuind pinului ENA o valoare intre 0 si 256.
Am folosit acest cod pentru testare însa pentru a pastra programul cât mai curat și cu comenzi usor de înțeles am folosit o librărie numita L298N construită de AndreaLombardo.
După declararea librăriei am definit pini folosiți și am creat o instanță motor :
Aceste comenzi le-am inclus în cazul apăsări butoanelor . În cazul butoanelor cu valoare analogică motorul ia viteza valori butonului în funcție de cat de tare este apăsat acesta.
Trebuie ținut cont de faptul că motorul are o valoare minima PWM de la care începe să se rotească , ce este sub această valoare gnerează doar coil wine și îl poate distruge.
3.7 Citirea senzorului ultrasonic
HC-SR04 se poate folosi cu ajutorul librăriei „ultrasonic” inclusă în Arduino IDE. Pentru
Am declarat de asemenea o variabilă „int dist” pentru a memora distanța într-o valoare mai comuna, în centimetri.
Citirea distanței în centimetri și atribuirea ei către variabilă se face astfel:
În cazul detectări unui obstacol se va face avertizarea prin vibrarea controllerului.
Bucla din program care face acest lucru arată astfel:
Am apelat această buclă în „void loop” în cazul în care controllerul este conectat.
Am monitorizat de asemenea citirea distanței prin serial monitor și am observat că senzorul este destul de precis dar sensibil la interferențe.
3.8 Citirea senzorului de gaz
MQ-02 folosește la fel ca majoritatea senzorilor un singur pin cu valoare analogică .
Acest lucru îl face extrem de ușor de folosit în program. El nu necesită o librărie suplimentară și se definește ca o variabilă pe care nu o putem rescrie conectata la un pin .
const int gasPin = A3; // variabila constanta gasPin conectata la pinul analogic 3
Valoarea sa se poate fi folosită prin comanda:
Acest senzor are tendința să afișeze eronat până ajunge la temperatura optima de funcționare.
După mai multe teste am observat că valoarea sa analogică trece brusc de 200 în cazul gazului metan și am folosit codul de mai jos pentru a avertiza în cazul detactări unui asfel de gaz.
3.9.Codul complet și organigrama simplificată.
Codul programului:
Organigrama simplificată de funcționare:
Figura 3.9 organigrama de funcționare
Capitolul IV
4. Construcția întregului ansamblului
Toate componentele au fost montat pe un șasiu cu roți pentru a asigura mobilitatea.
Șasiul avea motorul DC deja conectat însă servomotorul a trebuit înlocuit cu unul care să fie compatibil Arduino. Deși acesta este conceput cu loc pentru baterii AA am ales să folosesc celule Li-Ion 18650 cu capacitate mult mai mare.
Figura 4.1 șasiul echipat si modulul pt motoare
Am montat astfel peste baterii un suport care să susțină placa Arduino și modulele conectate direct de aceasta. Modulul pentru motoare a fost înaltat puțin pentru a avea un flux de aer, pentru racire, în timpul depasări.
Figura 4.2 placa Arduino , modulul de expansiune si bluetooth
Peste placa ardnuino am pus un capac transparent. Acesta permite vuzualizarea montajului dar are rol de protecție pentru module.
Figura 4.3 toate modulele cu capac transparent
Senzorul ultrasonic a fost montat în față , în spatele bării de protecție cu vederea pe orizontal.
Senzorul pentru gaz a fost montat la vedere pentru a putea analiza cât mai bine aerul .
Figura 4.4 Senzorii
Capitolul V
5 Instrucțiuni de utilizare și debugging
5.1 Instrucțiuni pentru pornire
Pronirea se face simplu în doar 3 pași:
1.Porniți alimentarea robotului folosind butonul ON/OFF
2.Așteptați ca ledul emițătorului bluetooth să ramană rosu aprins.
2. Apăsați pe butonul PS al controllerului pentru conectare
– ledul emițătorului bluetooth se va aprinde concomitent cu cel al controllerului
– după ce ledul 1 al controllerului rămâne aprins este gata de utilizare
5.2 Instrucțiuni de utilizare
Direcția rdobotul poate fi controlat cel mai precis cu ajutorul joystick-ului analog stânga.
Acesta acționează servomotorul și virează roțile în funcție de poziția sa.
Pentru a deplasa robotul înainte se apasă tăagaciul analog dreapta. Acesta accelerează în funcție de cât de tare este apăsat.
Deplasarea înapoi se face apasând butonul triunghi , acesta înregistrază comanda analog și setează viteza în funcție de presiunea cu care este apăsat.
Butoanele direcționale stânga, dreapta se pot folosi pentru a seta permanent direcția , acestea funcționează doar dacă nu este folosit joystick-ul analog.
Butonul X se poate folosi în locul butonului R2.
În cazul detectări unei substanțe periculoase acest lucru este semnalizat de catre ledul 4 de pe controller.
5.3 Instrucțiuni pentru oprire
1. Opriți controllerul prin apăsarea butonului PS
2. Opriți alimentarea robotului
5.4 Legenda butoanelor
Analog jystick stanga – setează direcția de mers stânga/dreapta
Trăgaciul R2 – deplasare înainte
Triunghi – deplasare înapoi
X – deplasare înainte
5.5 Legenda ledurilor
Led1 controller aprins – status conexiune ON
Led4 controller aprins – gaz inflamabil detectat
Led1, Led2, Led3, Led4 controller pâlpâie lent – controllerul caută conexiune
Led1, Led2, Led3, Led4 controller pâlpâie rapid – controllerul se conectează
Led USB Bluetooth aprins – ON și se așteaptă conectarea controllerului
Led USB Bluetooth pâlpâie lent – conectat și așteaptă comenzi
5.6 Debuging
Ledurile plăcii arduino nu se aprind – problemă de alimentare sau scurt circuit
Ledul modulului pentru motoare slab luminat – bateriile trebuuiesc schimbate
Ledul modulului usb nu se aprinde – baterie insuficientă (verificați conexiunea)
Controllerul nu se conectrază – verificați dacă acesta este împerechiat cu modulul usb
Controllerul pâlpâie o singură dată – acesta trebuie încărcat
Capitolul VI
6. Concluzii și posibilități de îmbunatațire
6.1 Concluzii
Plăcile Arduino sunt populare pentru mulitudinea proiectelor care pot fi realizate cu acestea.
Plăcile Arduino sunt cel mai bine documentate dintre plăcile de dezvoltare , se găsesc mii de tutoriale explicate pentru toate gusturile și nivelele de pricepere.
6.2 Posibilități de îmbunătățire a proiectului.
Un modul pe care aș fi dorit să îl adaug acestui robot de recunoaștere este un senzor de radiații. Acestea însa sunt destul de greu de găsit și imposibil de testat în condiții normale.
Putem îmbunatați acest proiect cu mai multe tipuri de senzori pentru detectarea altor substanțe sau medii periculoase precum : senzor de temperatură, senzor de radiații UV, senzor de oxigen.
O altă îmbunatățire s-ar putea aduce șasiului pentru ca robotul să poată explora medii cât mai dificile.
Avand în vedere că ansamblul dispune de o conexiune usb am putea înlocui destul de ușor tehnologia bluetooth cu wifi. Raza de acțiune ar fi astfel mult mai mare sau chiar infinita virtual prin folosirea unui conexiuni online sau a unui modem usb.
Ce ar trebui adăugat cu adevarat ar fi o camera care să transmita în timp real video pentru un control precis de la o distanta mult mai mare și o antena bluetooth mai puternica.
Bibliografie.
[1]Vari Kakas Ștefan , Sisteme cu microprocesoare, Curs ,Editura Universității Oradea
[2]Jhon Crisp , Introduction to microprocessors, Editura Elsevveier
[3] http://datasheet.octopart.com/A000066-Arduino-datasheet-38879526.pdf
[4]https://arduino.stackexchange.com/questions/16348/how-do-you-use-spi-on-an-arduino
[5]http://www.thaieasyelec.com/downloads/EFDV521/Datasheet_Keyes_USBHostShield.pdf
[6]https://www.arduino.cc/en/Tutorial/Knob
[7]https://learn.adafruit.com/memories-of-an-arduino/measuring-free-memory
[8]https://forum.arduino.cc/index.php?topic=137747.0
[9]https://create.arduino.cc/projecthub/YoussefSabaa/ps3-controller-control-servo-wireless-c6b8db
[10] http://www.avalpa.com/assets/andrea/studio15/docs/broadcom-bcm2046-bluetooth.pdf
[11]https://www.youtube.com/watch?v=lUVQGWLmuwI
[12]http://www.instructables.com/id/HOW-TO-use-the-ARDUINO-SERIAL-MONITOR/
[13]http://www.instructables.com/id/Simple-Arduino-and-HC-SR04-Example/
[14]http://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/
[15]https://playground.arduino.cc/Main/AdafruitMotorShield
[16]https://www.geeetech.com/wiki/index.php/L298N_Motor_Driver_Board
[17]http://platformio.org/lib/show/1695/L298N/examples
[18]https://github.com/AndreaLombardo/L298N
[19]http://sandboxelectronics.com/?p=165
[20]https://playground.arduino.cc/Main/MQGasSensors
[21]https://create.arduino.cc/projecthub/Aritro/smoke-detection-using-mq-2-gas-sensor-79c54a
DECLARAȚIE DE AUTENTICITATE A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării _________________________________________________________
____________________________________________________________________
____________________________________________________________________
Autorul lucrării _______________________________________________________
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _________________________________________ din cadrul Universității din Oradea, sesiunea _______________________ a anului universitar ______________.
Prin prezenta, subsemnatul (nume, prenume, CNP) _________________________
___________________________________________________________________
___________________________________________________________________,
declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
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: Ansamblul acestuia va fi construit în jurul plăcii de dezvoltare Arduino . [311142] (ID: 311142)
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.
