Controlul unui robot prin senzori flex Conducător științific , Sl. Dr. Ing. ANCU ȚI COSMIN Absolvent , ȘERBAN ALEXANDRU EMANUEL TIMIȘOARA Iunie 2 020… [628405]
UNIVERSITATEA “POLITEHNICA” TIMIȘOARA
FACULTATEA DE ELECTRONICĂ, TELECOMUNICAȚII
ȘI TEHNOLOGII INFORMAȚIONALE
PROIECT DE DIPLOMĂ
Controlul unui robot prin senzori flex
Conducător științific ,
Sl. Dr. Ing. ANCU ȚI COSMIN
Absolvent: [anonimizat] 2 020
Cuprins
Capitolul 1 – Introducere 4
1.1. Sinteza lucrării 4
1.2. Scurt istoric 4
1.3. Prezentarea temei 6
1.4. Lista de componente 8
Capitolul 2 – Noțiuni teoretice 11
2.1. Echipamente hardware 11
2.1.1. Placa de dezvoltare Arduino UNO R3 11
2.1.2. Placa de dezvoltare Arduino Nano V3 14
2.1.3. Driver motor L293D 16
2.1.4. Modul Bluetooth HC -05 17
2.1.5. Senzori flex 18
2.1.6. Kit șasiu robot tip tanc 19
2.2. Echipamente software 20
2.2.1. Mediul de dezvoltare Arduino IDE 21
2.2.2. Limbaj ul de programare 24
Capitolul 3 – Arhitectura sistemului 29
3.1. Arhitectura hardware 29
3.1.1. Arhitectura hardware a robotului 29
3.1.2. Arhitectura hardware a mănușii 31
3.2. Arhitectura software 33
Capitolul 4 – Implementarea sistemului 35
4.1. Dezvoltări hardware 35
4.2. Dezvoltări software 36
4.3. Testarea si configurarea elementelor sistemului 42
Capitolul 5 – Rezultate 49
Capitolul 6 – Concluzii 50
6.1. Concluzii 50
6.2. Direcții de dezvoltare 51
Figuri 52
Tabele 54
Bibliografie 55
CAPITOLUL 1 – INTRODUCERE
1.1. Sinteza lucrării
Lucarea prezintă o aplicație în scopul controlării unui robot. Acest lucru se vă realiza prin
ajutorul unor senzori flexibil i. Principiul funcționării se va prezenta în următoarele capitole mai
detaliat. Conținutul legat de partea hardware se va concentra pe componentele utilizate, testarea
lor, conexiunile între ele și rezultatul final. O a doua parte a lucrării este alocată părții de softw are.
Aici voi prezenta codurile folosite pentru testarea componentelor și codurile necesare pentru robot,
mănușa și modulele bluetooth. Conținutul capitolelor vor fi explicate în continuarea acestui
subcapitol.
În Capitolul 1 este relatată partea introduc tivă a lucrării, cuprinzând aspecte despre
dezvoltarea roboticii, începutul dezvoltării plăcii Arduino urmând să fie prezentată tema aleasă
pentru acest proiect.
Următorul capitol este alocat prezantarii teoretice a componentelor folosite în construcția
robotului și a mănușii și o prezentare a mediului de dezvoltare plus limbajul de programare utilizat.
Capitolul 3 face referire la arhitectura hardware și software adică pașii de asamblare,
explicații pe baza structurii realizate, urmat de Capitolul 4 în c are se prezintă implementarea
realizată pe partea de software și hardware.
Capitolul 5 este destinat prezentării rezultatelor în urma implementării și modul de testare al
acestuia, iar Capitoliul 6 descrie concluziile avute în urma realizării lucrării de licență și prezintă
noi direcții de dezvoltare.
1.2. Scurt istoric
Dorința omenirii spre eficientizarea efortului pentru obținerea de materii prime, a dus la
construirea unor noi unelte, care să îl scutească pe om de la munca fizică. Evoluția mecanicii și a
automatizării a dus la creșteri importante ale productivității umane. Această evoluție a inițiat în
mod continuu, noi descoperiri și inovații respectiv, realizarea unor mașinării cu scopul înlocuirii
sarcinilor monotone, printre care amintim roboții, asupr a cărora ne vom axa în lucrare de față.
Au existat mai mulți factori care au condus la crearea roboților, printre care amintim:
economia, tehnologia , factorii de mediu,cei istorici dar nu numai. Apariția micoprocesoarelor a
fost un moment cheie în această evoluție deoarece a permis realizarea miniaturizării în electronică.
Denumirea de robot a apărut pentru prima data în anul 1921 în celebra piesa de teatru RUR
(„Rossumovi univerzální roboti“), creația dramaturgului Karel Čapek. Cuvântul robot provine di n
limba cehă “robota”, care în limba română înseamnă “robie”,”sclavie”. În ziua de azi, când auzim
cuvântul robot ne putem imagina diverse lucuri: fie entități umanoide care să se aproprie extrem
de mult de caracteristicile umane fie ele fizice sau logice, ori ne gândim la mașini care realizează
operații cu o dificultate ridicată pent ru om și așa mai departe, c ert este că avem o varietate de tipuri
de roboți cu nenumărate caracteristici. Există roboți ce pot măsura câțiva centimetrii ( majoritatea
în domeni ul medical ), până la roboți masivi ce pot ajunge la câțiva metrii.
Apariția roboților s -a datorat mai multor inovații, aici doresc să aduc aminte de anii ’60, când
au existat evoluții semnificative în ceea ce privește concepția în acționarea axelor mecan ice.
Înainte de a ajunge la modelul de acționare de astăzi, în vremea descoperirii mașinii cu abur și
chiar mai tărziu când a apărut conceptul de motor termic ori motor electric, conceptul avea la baza
utilizarea unei surse unice care să comande elementel e mecanice dintr -un sistem. Până la a
determina mișcarea la nivelul axelor mecanice, trebuia utilizat un sistem sofisticat pentru a
transmite mișcarea de la o singura sursă, la mai multe axe ( ca un exemplu putem aminti celebrele
roți dințate din mecanismu l ceasului ). În timpurile noastre , fiecare axă este acționată individual
utilizând motoare de diferite valori a puterii în funcție de necesitate. Termenul folosit pentru acest
tip de conducere este acela de conducere distribuită.
În 1955 s -a introdus o nouă metodologie de abordare și de calcul în mecanisme care a co ndus
la apariția metodologiei de calcul pentru analiza cinematică directă și inversă la brațele de robot
de către R.P.Paul. Mai tărziu au fost create programe dedicate mecanicii roboților.
Un alt factor exponențial, care a ajutat în mod decisiv aceste evoluții, a fost și știința
materialelor. Astăzi ne este atât de cunoscut termenul de “materiale inteligente” ori “materiale cu
memorie”. Aceste tipuri de materiale sunt materiale ce își schimbă calitățile în funcție de condițiile
lor de utilizare (schimarea temperaturii externe, umiditatea, lumina etc.) sau pot memora modul în
care au fost folosite anterior.
În anul 1948 au apărut primii doi roboți, Elmer și Elisie, așa numiții roboți mobili, e i fiind
niște triciclete care puteau merge spre o sursă de lumină și erau capabili să recunoască prezența
coliziunilor din jurul lor. Astăzi roboții sunt folosiți în diferite domenii: transport, militar,
medicină, cercetare, în procese de fabricații etc. E xistă roboți care funcționează într -un mediu
static, controlați de către om, însă interesul este direcționat pe roboții autonomi. Aceștia au două
componente importante, respectiv componenta hardware și componenta software care ajută acești
roboți să parcur gă anumite trasee și a reacționa în anumite evenimente neprevăzute (ca de exemplu
obstacolele apărute în drumul robotului). [1]
Construcția fiecărui robot diferă în funcție de complexitatea acestuia. Multe elemente însă
sunt necesare fiecărui robot, ca de exemplu sursa de energie, motor ori un element de comandă al
acestuia. În cele ce urmează voi folosi ca și element de comandă, p laca de dezvoltare Arduino.
Familia Arduino include o varietate largă de placi cu microcontroller pentru dezvoltare sau
testare software. Este o formă open -source accesibil oricărei persoane, placa fiind la un preț
accesibil iar aplicația de dezvoltare s au testare de soft, Arduino IDE, se poate descărca gratuit de
pe site -ul oficial .
Ideea acestei placi a fost prezentata pentru prima oara în proiectul de Master a lui Hernando
Barragan, proiect de master la universitatea Interaction Design Institute Ivr ea din Italia. El plecase
de la ideea de a dezvolta o placă care să realizeze conexiunea facilă între elemente elect rice ( ca
de exemplu senzori,module, motoare etc) pentru realizarea de diferite proiecte astfel încât oricine
să își poată permite o placă d e dezvoltare. Cu timpul, această placă a ajuns foarte populară deoarec e
are o multitudine de avantaje : cum spuneam și mai sus, prețul accesibil dar în același timp are o
ușuri nță atât pe partea de accesare a pinilor ș i înțelesul funcționarii , pe scurt part ea de hardware
dar și ușurința scrierii de cod. Cu un cod relativ scurt și de o complexitate scăzută, se poate realiza
o aplicație destul de dezvoltată . Mai jos voi prezenta un capitol special pentru partea de hardware
al plăcilor Arduino folosite în acea stă lucrare de licență și voi arăta și partea de software folosită
pentru dezvoltarea acestui proiect . [2]
1.3. Prezentarea temei
Lucrarea de licență își propune realizarea unui robot controlat cu ajutorul unor senzori
flexibili pentru a se deplasa în anumite puncte. Acest robot poate fi dezvoltat în multe domenii si
utilizabil in diferite aplicații(medical, pentru oameni cu dificult ăți locomotorii, intervenții în spații
strâmte, model educațional, poate chiar în domenii militare ), modelul putând fi ușor de înțeles,
codul este accesibil de folosit și dezvoltat în domeniile dorite. Practic această lucrare este un punct
de început pent ru mai multe posibile domenii.
Principiul de funcționare este următorul. Senzorii amplasați pe fiecare deget funcționează ca
o rezistență variabilă. În momentul îndoirii unui deget, valoarea rezistenței se va modifica iar
această valoare este citită de A rduino Nano . La pinii Arduino -ului se va conecta un Bluetooth care
comunică cu un alt Bluetooth care recepționează informația de pe mănușă. Bluetooth -ul care va
primi informaț ia este conecatat la Arduino UNO de pe robot iar în funcție de semnalul primit,
robotul va urma o anumită direcție . În momentul în care nu se va modifica valoarea oricărui
senzor, robotelul o să fie într -o stare de stand -by.
Structura hardware se concentrează în jurul plăcii de dezvoltare Arduino, atât în cazul
robotului cât și al mă nușii. Alegerea este destul de simplă dacă e să analizăm ușurința în utilizare
a unei astfel de plăcuțe iar competențele în programare nu trebuie să fie printre cele mai mari.
Aplicații care să utilizeze acest tip de placă se regăsesc peste tot în mediul o nline, site -ul oficial al
celor de la Arduino oferind de asemenea un suport . Fiecare funcție este explicată. La fel putem
găsi și pentru partea de hardware nenumărate scheme, idei, informații necesare realizării unui
proiect funcțional.
Pe lângă plăcile de dezvoltare de la Arduino, proiectul mai conține și module bluetooth de
tip HC -05, necesare comunicării între cele 2 dispozitive ( robotul și mănușa ), bineînțeles, senzorii
flexibili , baterie LiPo care va servi ca sursă de alimentare pentru cele doua mo toare de la robot și
o sursa de alimentare pentru Arduino -ul plasat pe mănușă. Șasiul robotului a fost construit piesă
cu piesă, robotul utilizând două motoare DC pe axul din spate care se vor conecta indirect la
Arduino printr -un driver de motor. Despre d escrierea componentelor și mai multe aspecte legate
de acestea, voi povesti în următoarele capitole.
Din punct de vedere software, pentru programarea microcontrollerului plasat pe placa de
dezvoltare, s -a ales mediul de dezvoltare Arduino IDE, aplicația o ficială a celor de la Arduino,
care include suport pentru limbaje de programare ca C și C++ folosind, însă, și reguli speciale
pentru organizarea codului. Această aplicație prezintă și un submeniu numit Serial Monitor prin
care putem vedea mai exact ce val ori se citesc în anumite variabile.
1.4. Lista de componente
Datorită necesității utilizării unor anumite componente, am fost constrâns de situație iar
componentele au fost achiziționate de pe mai multe site -uri sau în cazul senzorilor au ajuns din alt
continent. Mai jos voi prezenta un tabel în care voi enumera componentele utilizate în acest proiect
și câteva informații utile despre ele.
Necesitatea unei liste de componente ajută enorm în economisirea de timp deoarece este un
mod mult mai organi zat si util de a observa lipsa unei anumite componente necesare, astfel
economisind timp pentru comandă și transportul ei.
Nr.crt. Denumire Nr. buc. Descriere Furnizor Observații
1 Kit robot 1 Kit pentru construirea unui
robot tip tanc .Vine împreună
cu două motoare DC 3V htttp://.robofun..ro Kitul va trebui
asamblat bucată cu
bucată
2 Arduino Uno 1 Microcontroller Atmega328p,
tensiune de funcționare: 5V, 13
pini digitali, 6 pini analogici,
port Jack și USB htttp://.robofun..ro Vine împreună cu un
cablu USB
3 Arduino Nano 1 Microcontroller Atmega3 28p,
tensiune de funcționare : 5V, 14
pini digit ali, 8 pini analogici,
port mini USB https://ardushop.ro/ro/ Pinii nu sunt mereu
lipiți. Opț ional : Cablu
Mini USB
4 Driver motor L293D 1 Driver cu tensiune înaltă,
curent înalt, 4 canale, se pot
utiliza motoare DC și sursă de
alimentare de până la 36 V https://cleste.ro/ Compatibil cu Arduino
5 Modul bluetooth 2 Modul de comunicare prin
intermediul interfeței USART
cu rată de 9600. Poate opera
atât Slave cât și Master.
Tensiune alimentare 3.6V -6V https://cleste.ro/ STATE și EN nu
prezinta pini pentru
conectarea mufei
mamă
6 Senzori Flex 4 Senzori flexibil, variația
rezistenței în momentul
îndoirii, rezistența în stare
normală: 9kΩ https://www.aliexpress.com/ Senzorii sunt construiți
din material plastic
subțire, necesită
utilizarea fragilă a lor
7 Rezistență 4 Valoarea rezistenței : 4 7kΩ,
putere 0.25W, toleranță 5% https://www.tme.eu/ro/ Se pot comanda minim
10 bucăți
8 Baterie LiPo 1 Capacitate :800mAh, tensiune:
7.4V, conector de tip JST 2P https://www.gensace.de/ Baterie cu descărcare
foarte rapidă
10 Baterie externă 1 – – –
11 Conector JST 2P 2 Tip conector: JST, număr pini
2 https://ardushop.ro/ro/ Firele au culoarea roșu
(alimentare) și negru
(masă)
13 Mufă micro USB –
USB 1 Cablu USB 2.0 type A la mini
USB type B https://ardushop.ro/ro/ Compatibil cu Arduino
NANO
14 Fire mamă – mamă Fire dupont mamă -mamă,
utilizate pentru conectarea
modulelor cu o placă de
dezvoltare https://ardushop.ro/ro/ Se pot cumpără minim
40 de bucăți
15 Fire mamă -tată Fire dupont mamă -tată,
utilizate pentru conectarea
modulelor cu o placă de
dezvoltare https://ardushop.ro/ro/ Se pot cumpără minim
40 de bucăți
16 Fire tată -tată Fire dupont tată -tată, utilizate
pentru conectarea modulelor cu
o placă de dezvoltare https://ardushop.ro/ro/ Se pot cumpără minim
40 de bucăți
17 Baretă pini tată -tată 1 Barete pin tată, grosime: 2.54
mm, utilizați pentru conectarea
cu un fir cu capăt mamă https://ardushop.ro/ro/ Conține 40 de pini care
se pot separa ușor cu
ajutorul unui clește
Tabel 1.4.1. Lista de componente utilizate
Pentru realizarea acestui proiect am avut nevoie și de instrumente și unelte care au fost
indispensabile iar mai jos voi prezenta o listă în care voi include toate acestea:
Stație de lipit/pistol de lipit/letcon – personal am utilizat un letcon cu toate că ar fi fost mai
de ajutor o stație . Acesta a fost folosit pentru lipirea firelor pe Arduino UNO , la bluetooth
și senzorii flex;
Multimetru – necesar pentru a măsură tensiunea de pe motoare, verificarea rezistențelor
variabile a senzorilor flex ori pentru verificarea componentelor pasive și a conexiunilor;
Tester și încărcător pentru LiPo – tester -ul a fost utilizat pentru a verifica dacă bateria LiPo
este încărcată iar încărcătorul a fost necesar deoarece bateriile LiPo au un sistem mai
special pentru a fi încărcate ;
Imprimantă 3D – Am util izat această imprimantă pentru a produce carcasa situată pe mănușă
unde vor fi introduse o parte din elementele componente ale acesteia. O astfel de
imprimantă nu este la îndemăna oricărui om însă carcasa se poate obține și prin alte
modalități.
CAPITOLUL II – NOȚIUNI TEORETICE
2.1. Echipamente hardware
Pentru realizarea lucrării de licență au fost necesare mai multe componente care sunt
enumerate în capitolul anterior numit „Lista de componente”. În continuare voi detalia cele mai
importante componente utilizate, și anume :
• Placa de dezvoltare Arduino UNO R3
• Placa de dezvoltare Arduino Nano
• Driver motor L293D
• Modul bluetooth
• Senzori flex
• Kit șasiu robot tip tanc
2.1.1. Placa de dezvoltare Arduino UNO R3
După cum am spus și mai sus, ideea plăcii Arduino o fost dezvoltată pentru prima dată în
proiectul de Master a lui Hernando Barragan. Numele „UNO” provine din italiana „unu” și
marchează lansarea software -lui Arduino (IDE) 1.0 de la care au fost dezvoltate modele noi . Placa
Arduino Uno este prima serie de platforme USB Arduino.
Placa de dezvoltare utilizată în această lucrare de licență este un Arduino UNO R3 Board
care include un microcontroller Atmega328p care este probabil cel mai robust și cel mai
documentat mode l din întreaga familie Arduino. Acesta are 14 pini care sunt intrări/ieșiri digitale
iar 6 dintre acești pini pot fi folosiți ca ieșiri PWM, 6 pini reprezentând intrări analogice. Placa
mai prezintă un cristal quarț de 16MHz,buton de reset și două mufe, un a de alimentare de tip /Jack
și o mufa de tip USB prin care se poate ține sub alimentare placa dar mai ales pentru transmiterea
informației.
Figura 2.1.1. 1. Placa de dezvoltare Arduino UNO R3
În cele ce urmează voi prezenta caracteristicile plăcii de dezvoltare Arduino UNO R3:
• Microcontroller ATmega328 pe 8 biți;
• Tensiunea de operare: 5V;
• Tensiunea de alimentare recomandată: 7 -12V;
• Limita de tensiune: 6 -20V;
• Pini de intrare/ieșire digitali: 14 (dintre care 6 pot oferi ieșiri PWM);
• Pini anal ogici de intrare: 6;
• Curent per pin I/O: 20mA;
• Memorie Flash: 32KB din care 0.5 KB utilizați pentru bootloader;
• SRAM: 2KB ;
• EEPROM: 1KB ;
• Oscilator cristal quarț de 16MHz;
• Frecventa de lucru: 16MHz;
• Conectare la calculator prin USB;
Placa s e poate alimenta de la o sursă de tensiune continuă (7…12V, cu un curent de minim
0.25A), sau alternativ printr -un cablu de tip USB care se poate conecta la un calculator. Portul de
alimentare de tip Jack se utilizează de principiu atunci când avem consu matori mari , portul USB
nefiind capabil de a ajuta în astfel de cazuri, de exemplu pentru a alimenta motoare.
Microcontrollerul plăcii Arduino este direct programat cu un program de rulare care este
denumit Boot Loader pentru a simplifica încărcarea în m emoria chipului a programelor. Acest
microcontroller este un chip care prezintă un consum redus și performanțe înalte. Acesta conține
28 de pini și 23 de linii programabile de tip I/O. În memoria de tip flash de 32KB se vor stoca
programele de la Arduino I DE iar pe lângă această memorie, microcontrollerul mai prezintă și o
memorie RAM de 2KB de runtime dar și o memorie de tip EEPROM de 1KB (memorie nevolatilă
adică care stochează datele și după restartarea sau repornirea dispozitivului.
Fiecare din cei 14 pini digitali pot fi de tip input sau output, asta însemnând că se pot folosii
de funcțiile digitalWrite() sau digitalRead(). Dacă sunt utilizați ca ieșiri, aceștia vor funcționa ca o
sursă de alimentare pentru componentele care vor fi conectate la acești pini. Tensiunea de
funcționare este de 5V iar curentul maxim este de 40 mA ( suficient pentru a aprinde un LED). Ca
pini de intrare, aceștia vor citi semnalele care vin de la componentele conectate la ei. Pinii care
prezintă simbolul „~” tilda sunt pini c are se pot utiliza de asemenea ca pini PWM.
Pinii analogici (A0…A5) se utilizează pentru citirea semnalelelor care pot proveni de la
senzori și vor converti semnalele în valori digitale. Aceștia nu sunt capabili să măsoare curentul
deoarece au o rezist ență internă foarte ridicată iar aceștia pot măsura doar tensiunea. Acești pini
cu toate că sunt pini analogici, ei vor putea fi utilizați atât ca intrări cât și ca ieșiri digitale.
Placa prezintă și pini cu funcționare mai specială. În această lucrare vo m utiliza spre exemplu
pinii TX și RX care sunt utilizați pentru a transmite date (TX) dar și pentru a citi date (RX) seriale
TTL. Arduino prezintă și două leduri pentru a indica trasmiterea sau primirea de date, practic
ledurile se aprind de fiecare dată când pinii TX sau RX lucrează. Pe lângă Aceste 2 leduri , Arduino
mai prezintă și un led ON pentru a putea verifica conectarea la alimentare a acestei plăci. [2]
Pe lângă placa de dezvoltare Arduino UNO R3, familia arduino conține o mulțime de alte
plăci iar în cele ce urmează voi prezenta unele dintre cele mai importante tipuri de plăci Arduino
ce sunt scoase pe piață până în momentul actual: [3]
Denumire
placă Mircrocontroller Frecvent ă
[MHz] Tensiune
[V] I/O digital Ieșiri PWM Intrări analogice
ADK ATmega2560 16 5 54 14 16
BT ATmega328 16 5 14 4 6
Diecimilia ATmega168 16 5 14 6 6
Due ATMEL SAM3U 96 – 54 16 16
Duemilanove ATmega168/328p 16 5 14 4 6
Ethernet ATmega328 16 5 14 4 6
Fio ATmega328p 8 3.3 14 6 8
Leonardo ATmega32u4 16 5 14 6 12
LilyPad ATmega168/328V 8 2.7-5.5 14 6 6
Mega ATmega1280 16 5 54 14 16
Mega 2560 ATmega2560 16 5 54 14 16
Tabel 2.1.1.1. Tipuri de plă ci din familia Arduino
2.1.2. Placa de dezvoltare Arduino Nano V3
În tabelul „Tipuri de pl ăci din familia Arduino” observam absenta a două plăci de dezvoltare
importante, una este Arduino UNO despre care s -a vorbit în capitolul de mai sus iar a dou a poartă
numele de Ar duino Nano. În acest subcapitol , plăcuța Arduino Nano nu va fi foarte detaliată din
punct de vedere al informa țiilor, principiul de funcționare este același ca la Arduino UNO, adică
pinii au aceasi funcționalitate , arhitectura diferă iar motivul pentru care am utilizat această placă
este simplu, dimensiunile. Arduino Nano este o placă cu dimensiuni mai mici față de Arduino
UNO.
Aceasta folosește tot un procesor ATmega328p iar o diferența vizibila intre cele doua placi
de dezvoltare există la partea de porturi și anume Arduino Nano folosește un port de tip micro
USB iar pentru a putea re aliza transferul de date intre calculator și placă v om avea nevoie de un
driver nou , un driver care nu este integrat în aplicația Arduino IDE .
Figura 2.1.2.1. Arhitectura plă cii de dezvoltare Arduino Nano
După cum se vede, și în acest caz ne putem folosi de mulți pini iar în cele ce urmează voi
prezenta caracteristicile acestei plăcuțe plus câteva noțiuni teoretice:
• Microcontroller: ATmega328p;
• Tensiune de funcționare: 5V;
• Tensiune de intrare (recomandată): 8 -12V;
• Pini digitali I/O: 14 (din care 6 pini PWM de ieșire);
• Pinii de intrare analogici: 8;
• Conexiune: mini USB;
• Curent DC pe pin I/O: 40mA;
• Memorie FLASH:32 KB (ATmega328p)
• Frecvență: 16MHz
• Dimensiuni: 0.73” x 1.70”
Arduino Nano poate fi alimentat prin portul USB Mini -B dar și prin pinul 30 prin alimentare
externă neregulată de 6 -20 V ori regulată de 5V la pinul 27. ATmega are o memorie de 32KB și
prezintă memorii de tip SRAM și EEPROM.
La fel ca la Arduino UNO, cei 14 pini digitali pot fi folo siți ca I/O iar parametrii sunt identici
cu UNO . Nano prezintă pini RX,TX (pentru transmiterea și recepția de date), pinii 2 și 3 pentru
intreruperi externe, pinii 3,5,6,9,10 si 11 de tip PWM iar de la pinul 13, in functie de starea lui
(High sau Low), se va putea porni LED -ul de pe Nano. El mai prezin tă 4 pin i de comunicație de
tip SPI. Nano utilizează 8 intrări analogice pe rezoluție de 10 biți iar pinii 6 și 7 care sunt analogici
se pot folosi ca și pini digitali. [4]
2.1.3. Driver motor L293D
L293D este unul dintr e numeroasele drivere pentru motor monolitic integrat, cu tensiune și
curent înalt și care prezintă 4 canale. Se pot utiliza motoare CC la fel cum avem și în acest proiect
iar ca surse de alimentare se pot folosi cu tensiune de până la 36V. Acest tip de dri ver conține un
chip care este cunoscut ca unul de tip H -Bridge . Acesta are proprietatea că permite aplicarea unei
tensiuni pe o sarcină în ambele direcții către o ieșire . Mai pe scurt ceea ce se întâmplă daca
conectăm motoarele în ambele părti. Se mai ut ilizează termenul de shield. Acesta conține registru
de shiftare ( shift register ) de tip 74HC595 care ajută la ușurința controlului.
După cum spuneam , acesta este un circuit de înaltă tensiune , iar driverul este proiectat astfel
încât să accepte nivelur i standard TTL și conducerea de sarcini inductive, motoare de CC, motoare
pas cu pas, relee etc.Acest shield poate alimenta direct senzorii folo sind pinii asociați din Arduino .
Spre exemplu, în lucrarea de față am putut conecta un bluetooth prin utilizarea pinilor care
comunică direct cu pinii de la Arduino de care avem nevoie să ne folosim.
Poate conduce 4 motoare CC sau 2 se rvo/motoare pas cu pas. Puntea H asigură o protecție
terminalelor de 0.6A și pot rula motoare de la 4.5 la 36V DC. Prezintă 2 inter fețe externe de
alimentare pentru te rminale și buton de reset iar di mensiunile sunt la fel ca la Uno : 70x55mm. [5]
Figura 2.1.3.1. Driver de control motor L293D
În continuare voi prezenta câțiva parametrii a unui astfel de driver:
• Tensiune de alimentare: 5V;
• Curent de lucru: ≤ 36mA;
• Curent driver I/O: ≤ 2A;
• Distribuția maximă a puterii: 25W;
• Nivelul electric de intrare a semnalului de comandă :
o Nivel ridicat: 2.3V ≤ Vin ≤ 5V
o Nivel scăzut : -0.3V ≤ Vin ≤ 15V
• Temperatura de funcționare : -25 ° C ~ + 130 ° C
2.1.4. Modul Bluetooth HC -05
Modulul HC -05 este un modul care prezintă funcții wireless în două direcții (full -duplex)
pentru microcontroller. Acest tip de plăcuță se utilizează pentru a comunica între diferite module,
microcontrol lere etc. De exemplu, dacă dorim să realizăm o aplicație care să folosească un Arduino
și să controlăm din telefon, vom avea nevoie de un modul Bluetooth pentru transmisia și recepția
datelor.
Acest tip de bluetooth are un consum mic de energie, dimensiun i mici dar este de înaltă
performanță. Prezintă următorii pini: STATE (se poate verifica starea bluetooth -ului , pornit sau
oprit), RXD, TXD (pini pentru recepția și transmisia de date), GND (masă), VCC (alimentare),
EN (pin folosit pentru a intra în modul AT). Acest modul comunică prin intermediul interfeței
USART la o rată de baud de 9600. Modulul se poate configura prin anumite com enzi prin modul
AT pentru a fi folosit ca s lave sau master . Câteva caracteristici a acestei plăcuțe vor fi prezentate
în cele ce urmează : [6]
• Tensiune de alimentare: 3.6V -6V;
• Consum: 30mA;
• Pinii I/O sunt compatibili pentru 3.3V;
• Raza acoperirii: max 100m;
• Folosește protocolul IEEE 802.15.1 ;
• Poate fi operat atât ca Slave cât și ca Master;
• Baud Rate: 9600 -460800 b ps;
• Putere de transmisie: +4dBm;
• Senzitivitate recepție: -80dBm;
Figura 2.1.4.1. Modulul bluetooth HC -05
2.1.5. Senzori flex
Principiul de funcționare al acestor tipi de senzori este foarte simplă. Flex senzorii
funcționează ca niște rezistențe variabile. Mai exact aceștia prezintă o rezistență de oridinul KΩ
care își schimbă valoarea în momentul îndoirii. El este realizat cu aj utorul unui material de tip
plastic și carbon (are nevoie de un material care permite îndoirea acestui senzor fară dificultăți
foarte mari). Suprafața de carbon este introdusa între benzile de plastic .
Flex senzorii putem să îi clasificăm în două tipuri , pe baza dimensiunilor sale. Avem senzori
care măsoară 2.2 inch și 4.5 inch. Mărimea precum și rezistența acestor diferă, însă principiul de
funcționare este același la ambele tipuri de senzori. Pentru acest proiect am folosit senzori de 2.2
inch. Aplicab ilitatea acestor senzori se poate găsi în mai multe aplicații precum : interfața
computerului, control servomotoare, sistem de securitate, interfață muzicală , control de intensitate
și în orice alta aplicație care necesită modificarea rezistenței în timpu l îndoirii.
Flex senzorul este un dispozitiv cu două terminale : la un terminal vom aduce VCC -ul iar
celălalt terminal va fi conectat la masă ( în cazul nostru vom mai avea o rezistență de 4 7 KΩ și
încă un pin înainte de rezistenta pentru a citi valoarea a nalogică a senzorului). Acest senzor nu
prezintă terminale polarizate (de exemplu cum e cazul diodei ), deci nu prezintă terminal pozitiv
sau negativ. Tensiunea de funcționare a acestui senzor este cuprins între 3.3V și 5V .
Dacă e să ne facem o idee a va lorii rezistenței putem spune următoarele : când senzorul nu
este îndoit, valoarea rezistenței este de aproximativ 9KΩ, la îndoiri de 90 de grade, valoarea
rezistenței devine aproximativ 14KΩ iar la 180 de grade, rezistența are o valoare aproximativă de
22KΩ.
Acești senzori au un mic dezavantaj privind costul însă compensează pe partea de
funcționalitate deoarece având doar două terminale sunt foarte ușor de utilizați iar pentru a testa
acești senzori, rezistența de la terminalul conectat la masă poate var ia .
Figura 2.1.5.1. Senzor de tip flex ibil
2.1.6. Kit șasiu robot tip tanc
Necesitatea folosirii unui robot a dus la căutarea unui tip de șasiu pentru construcția acestuia.
Pe site -uri de specialitate se pot găși o multitudine de tipuri de diferite arhitecturi, dimensiuni,
culori etc. Există roboți care sunt mai dezvoltați sau efectiv se pot construi pe o placă de diferite
materiale pentru a susține toate componentele și care alături de un pachet de roți și motoare
realizează condu cerea acestuia prin diferite moduri.
După cum spunea m și în primul capitol, scopul acestui proiect este construirea unui
sistem format din tr-o mănușă și un robot s pre a duce la controlul acestuia prin ajutorul co menziilor
venite de la mănușă. Alegerea ac estui tip de robot a fost strict subiectivă. Unul dintre motive era
dorința personală de a construi un robot de la 0 spre a înțelege arhitectura robotului pentru a avea
o misiune mai ușoară în modificarea lui.
Dimensiunile kit -ului după asamblare sunt următoarele : lungime = 157mm, lățime 149mm
iar înălțimea lui (fără placa de dezvoltare și driver) 60mm , dimensiuni aproximative iar diametrul
roților este de 52mm. Acest kit nu a venit cu o placă de dezvoltare da r a avut un pachet care a
continut urmatoarele [8] :
care a conținut următoarele :
• 1x cutie de aluminiu
• 4 roți plastic
• 2 șenile de cauciuc
• 2x 48:1 DC cutie de viteze
• Set șuruburi
• Set piulițe
• Set șaibe
• Set rulmenți
• 1x suport baterii 5*AA
• 2x chei de piulițe
• 1x șurubelniță
• Ulei pentru ungerea roților Figura 2.1.6.1. Șasiu tip tanc
2.2. Echipamente software
Acest subcapitol este destinat prezentării mediului software necesar acestui proiec t. După
cum spuneam și mai sus, vom folosi ca placă de dezvoltare Arduino UNO respectiv Nano care au
nevoie de mediul de dezvoltare Arduino IDE. Acesta folosește un limbaj de programare de genul
lui C și C++ iar în cele ce urmaza voi aduce câteva noțiuni despre cele două, noțiuni cunoscute
deja dar ele sunt necesare pentru a avea o bază de cunoștinte despre acestea.
2.2.1. Mediul de dezvoltare Arduino IDE
Placa de dezvoltare Arduino a fost dezvoltată cu scopul utilizării în domeniul educațional în
realizarea proiectelor pentru studenți. Această placă a prins repede deoarece avea un cost mai
mic în comparație cu alte prototipuri disponibile pe piață în acel moment.
Mediul de dezvoltare a codului necesar pentru comanda acestor plăcute se numește Arduino
IDE. Acest mediu este proiectat pentru a ușura viața celor nefamiliarizati cu dezvoltarea software.
Acesta folosește un limbaj de programare bazat pe sintaxe similare celor din C/C++, chiar mai
simplificate.
Arduino IDE se poate găsi pe site -ul oficial al celor de la Arduino IDE, este OpenSource,
poate funcționa pe mai multe sisteme de operare ca Windows, Mac OS X, Linux etc și nu cosuma
multe resurse iar conectarea cu placa Arduino se poate face printr -un port USB.
O bilă albă adusă acestei aplicații și interfețe este disponibilitatea la informații. Avem acces
la lecții și informații atât legate de aplicație și interfață ei cât și despre moduri în care putem
implementa cod. Se pot găsi o multitudine de exemple de coduri schiță pentru diferite aplicații
(exemple: aprinderea unui LED, comanda unui motor , etc ) direct din aplicație ceea ce ajută enorm
orice nou doritor de dezvoltare a unei aplicații ori se pot utiliza direct aceste coduri fără a trebui să
le mai modificam. O mica paranteză, pentru unele plăc i de dezvoltare vom avea nevoie de driver .
Dacă e să vorbim despre interfața acestei aplicații putem să ne întindem destul de mult însă
în cele ce urmează voi prezenta strict meniurile, submeniurile aplicației și arhitectura de bază a
unui program .
Ca și meniuri, această aplicație conține meniurile: File, Edit, Sketch, Tools, Help. Din meniul
file, ca și în alte aplicații, putem să deschidem un program deja existent ori să îl facem de la zero,
să îl salvăm și așa mai departe. Tot aici putem găsi și u n submeniu „Examples” care mi se pare
destul de interesant deoarece aici putem găsi programe gata făcute și ne putem forma o idee sau le
putem utiliza.
În meniul Sketch întâlnim un submeniu pe care îl folosim foarte des, submeniul „Include
Library”. Aici p utem găsi librăriile la care avem acces și tot de aici putem introduce noi alte librarii
deoarece multe funcții necesită acest lucru, ele nefiin d pread ăugate .
Din meniul Tools ne putem folosi de două tool -uri de mare ajutor: Serial monitor și Serial
plotter. Primul ne va deschide o interfață în care apar valorile citite de la anumiți pini, în funcție
de codul introdus de noi. Serial plotter face oarecum același lucru doar că o va face sub formă
grafică (mai sus sunt generate doar valorile). Tot din ac est meniu trebuie să selectăm placa utilizată
și portul la care este conectat .
Cele de mai sus sunt doar câteva din opțiunile disponibile în această aplicație dar pentru a
putea rula un program ne vom folosi de alte doua opțiuni disponibile sub aceste meni uri și anume
„Verify” care cerifica corectitudinea codului din punct de vedere al sintaxei sau dacă apar alte
tiprui de erori și „Upload”. După verificarea codului și a celorlalte condiții necesare funcționarii,
putem să încarcăm codul pe placa Arduino. Ac est lucru se poate realiza prin opțiunea „Upload”
iar în momentul în care informația a fost transmisă ne va apărea un mesaj de confirmare, la fel că
și în cazul verificării codului.
De asemenea, Arduino IDE conține o zonă de mesaje, o consolă de text. Un program scris
cu Arduino IDE este numit „schiță”. Schițele sunt salvate ca și fișiere cu extensia .ino.
Putem împărții un program Arduino în trei. Prima parte este legată de declararea variabilelor
urmate de părțile funcțiilor setup() și loop(). Dacă utili zăm variabilele globale, acestea pot fi
declarate în afara funcțiilor fiind vizibile în tot programul. Funcția setup() este apelată o singură
dată și aici vom iniția modurile de input și output în tot programul, semnalele provenite de la pini
sau pentru in itializarea modului serial (Serial.begin()) după cum vom vedea și în programele scrise
în capitolele următoare. Este o funcție obligatorie chiar dacă în interiorul ei nu se execută nici o
operetie. Serial.begin() deschide portul serial și setează rata pent ru transmiterea de semnale seriale.
Rata folosită în general pentru a comunica cu un calculator este de 9600.
În funcția loop() vom introduce instrucțiunile necesare proiectului nostru, Această funcție
include instrucțiuni care vor fi executate într -o buc lă infinită și în această parte de program vom
dezvolta fiecare comandă pe care o dorim. În imaginea de mai jos este prezentată interfața default
în momentul pornirii aplicației Arduino IDE în care putem observa funcțiile setup() respectiv
loop().
Figur a 2.2.1. Schita Arduino IDE
Tot aici aș vrea să vorbesc despre configurația pinilor digitali și analogici. Acest lucru se
face folosind funcția „PinMode()” care se va folosi în body -ul lui „void setup()” pentru a configura
pinii ca INPUT sau OUTPUT.
Citirea acestor pini se realizează cu funcția „digitalRead(pin)”. Astfel putem citi valorile de
la pinul specificat iar ca valori acesta poate fi asociat ca de tip low sau high. Pinul poate fi specificat
ca o constantă sau ca o variabilă. Dacă dorim să setăm u n pin digital pe o valoare low sau high,
putem utiliza funcția „digitalWrite(pin, valoare)”.
În cazul pinilor analogici, procedura e asemănătoare, citirea se face cu ajutorul funcției
„analogRead(pin)”, citirea se realizează pentru o valoare analogică cu o rezoluție de până la 10
biți. Dacă vom citi valorile cu ajutorul optiunii Serial Monitor, aceste valori se vor incadra intre 0
și 1023. Acești pini analogici nu trebuie declarați ca INPUT sau OUTPUT. Scrierea unei valori
pentru acești pini se face cu fun cția „analogicWrite(pin, valoare)”. Valoarea impusă poate fi ori o
constantă ori o variabilă iar valoarea introdusă poate fi de la 0 la 255. Acestor valori le sunt asociata
o anumită tensiune, astfel pentru valoarea 0 avem 0V iar pentru 255 avem 5V.
Dacă dorim să introducem un anumit delay putem să utilizăm funcția „delay(timp)”.
Valoarea timpului este de minisecunde deci trebuie să luăm asta în calcul în momentul introducerii
unei valori.[9]
2.2.2. Limbaj ul de programare
Termenul de limbaj de programar e poate fi definit ca ansamblul format dintr -un set de reguli
„gramatice” și un „vocabular”, necesar instruirii unui calculator pentru a realiza anumite comenzi.
El oferă posibilitatea utilizatorului să scrie în mod exact acțiunile pe care dorește să le ex ecute
calculatorul, putând specifica diferite intructiuni, o anumită ordine, totul fiind comandat de
utilizator prin liniile de cod respectând o anumită sintaxă a programului.
Arduino IDE permite programarea în limbaj de programare C iar în acest subcapi tol ne vom
axa strict pe acest limbaj de programare. Ca un scurt istoric, limbajul C a fost proiectat și
implementat între anii 1969 și 1973 de către Dennus Ritchie la AT&T Bells Laboratories iar scopul
lui era programarea unui sistem care până atunci era dezvoltat doar în limbaj de asamblare.
Denumirea de „C” vine ca o succesiune a denumiri limbajului „B”, anterior lui. Apariția limbajului
„C” s -a datorat indisponibilității eficienței limbajului „B” pentru a folosi unele facilități ale lui
PDP-11, pe care voiau să porteze UNIX -ul iar astfel au reușit să dezvolte un limbaj mai simplu
pentru scrierea „nucleului” sistemului de operare UNIX. Până în 1973 , sistemul de operare UNIX
este aproape în totalitate rescris în C. În 1983 limbajul C a suferit update -uri , spre exemplu au fost
adăugate lucrul cu clase iar răspândirea limbajului a dus până la utilizarea acestuia în centre
academice ori în instituții de cercetare. Automat limbajul C a primit o mai mare întrebuințare și a
fost mai ușor de dezvoltat datorită numărului din ce în ce mai mare a utilizatorilor lui iar în cele
din urmă a apărut succesorul lui C++. Programele scrise în C pot fi transformate ușor în C++ . În
următorii ani au apărut și alte limbaje de programare care aveau la bază limbajul de programa re C,
spre exemplu Java, Java Script, C# și așa mai departe.
Un program este descrierea precisă și concisă a unui algoritm deci programul execută în
ordine mai multe instrucțiuni (secvențial).
Figura 2.2.2.1. Modul de executie in C
Structura unui program C trebuie să respecte anumite reguli (sintaxă). Acest program este
compus din funcții . Dacă dorim să construim un program, el trebuie să conține cel puțin funcția
main. În C, funcțiile sunt reprezentate de blocuri formate din linii de cod. Ele au ca rol execuția
sarcinii repetitive dar și pentru a ajuta în structura codului. Caracterele se codifică conform codului
ASCII, codificarea se realizează pe 8 biți adică un octet . Exista 256 de caractere, acestea cuprizand
simboluri grafice dar și simbolur i fără corespondent grafic însă pe această temă trebuie prezente
destul de multe lucruri pentru a reuși să fie explicat fiecare element . Structura unui program C
mai poate să conțină următoarele : identificatori, constante, variabile,operatori, instrucțiu ni despre
care voi vorbi în cele ce urmează însă în aceste programe mai pot exista și alte tipuri de elemente.
Identificatorii pot fi: nume utilizator (nume de variabile, constante structuri, funcții) ,
cuvinte cheie (acestea sunt cuvinte care au fost def inite prealabil în limbajul C), cuvinte rezervate
(aici se poate modifica înțelesul însă se sugerează evitarea acestui lucru ). Acești identificatori
trebuie să respecte o serie de reguli și de recomandări pentru a -i putea utiliza.
Constantele reprezintă un spațiu din memoria internă a calculatorului destinat memorării
unui anumit tip de caracter, al cărui conținut nu mai poate fi modificat pe parcursul execuției
programului ( aceasta fiind o diferență între termenul de constante și cel de variabile ).
Variabila este tot un spațiu din memoria internă a calculatorului, destinat unui anumit tip de
date, și după cum spuneam și la constante, în cazul variabilelor, conținutul se poate modifica pe
parcursul execuției programului. Variabilele pot fi de doua tipur i: locale ( care sunt definite în
interiorul unei funcții și nu se pot utiliza decât în aceea funcție) și globale( aceste variabile se pot
utiliza oriunde în program și sunt declarate la începutul programului, înainte de funcția setup).
După cum spuneam, variabilele sunt definite ca un anumit tip de date iar în tabelul de mai
jos sunt enumerate tipuri de date utilizate în libajul C, mărimile în octeți și intervalul de valori în
care se încadrează.
Categorie Tip de date Marimi în octeți Interval de valor i
Numere întregi int, signed int 4(2) -231 ; 231-1
unsigned int 4(2) 0 ; 232
Signed char 1 -128 ; 127
Unsigned char 1 0 ; 255
Short, short int, signed
short, signed short int 2 -32768 ; 32767
Unsigned short,
unsigned short int 2 0 ; 65535
Long, long int, signed
long, signed long int 4(8) −231 ; 231-1
Unsigned long,
unsigned long int 4 (8) 0 ; 232-1
Long long, long long
int, signed long long,
signed long long int 8 263 ; 263-1
Unsigned long long,
unsigned long long int 8 0 ; 264-1
Numere reale Float 4 3.4e-38 ; 3.4e38
Double 8 1.7e-308 ; 1.7e308
Long double 12(8) 3.4e-4932 ; 1.1e4932
Numere
booleene Bool 1 False (0) ; True (1 sau diferit
de zero)
Tabel 2.2.2.1. Tipuri de variabile
Operatorii sunt simboluri utilizate pentru precizarea operațiilor care trebuie executate
asupra unor operanzi (constante, variabile, nume de funcții, expresii). Expresiile sunt entități
construite cu ajutorul operanzilor și operatorilor.
Limbajul C ar fi incomplet d acă nu am definii și termenul de instrucțiuni. Câteva dintre
aceste instrucțiuni sunt prezentate în cele ce urmează:
IF – instrucțiune de decizie; testează daca o anumită condiție este îndeplinită; daca condiția
este adevărată, se execută instrucțiunea, i ar în caz contrar, programul sare peste instrucțiunea
respectivă;
IF…ELSE – instrucțiune de decizie; permite alegerea uneia dintre cele două decizii;
SWITCH – instrucțiune de decizie; permite selectarea unei variante din mai multe cazuri
posibile;
FOR – instrucțiune de ciclare; este folosită pentru a repeta un bloc de declarații de un anumit
număr de ori; pentru a parcurge această buclă este folosit un contor pentru parcurgere;
WHILE – instrucțiune de ciclare; este un ciclu cu condiție inițială, format din tr-o primă
instrucțiune cu rolul de a deschide bucla și de a controla mecanismul de execuție, și de corpul
buclei, care poate fi format din una sau mai multe instrunctiuni. Mecanismul de funcționare al
acestei bucle constă în execuția repetată a instrucțiu nilor ce alcătuiesc corpul ei , atât timp cât
exista o expresie logică adevărată; [10]
CAPITOLUL III – AHITECTURA SISTEMULUI
3.1. Arhitectura hardware
Acest proiect are ca și componente principale, robotul respectiv mănușa. Așadar în cele ce
urmează voi prezenta arhitectura hardware pentru cele două, în capitolul următor prezentând și
structura software a acestora. Se va prezenta etapizat procesul realizării ambelor elemente. Pentru
realizarea parții de hardware a fost necesar să apelez la anumite modifi cări pentru funcționarea
acestora ( aceste modificări vor fi descrise într -un capitol destinat dezvoltării ).
3.1.1. Ar hitectura hardware a robotului
Robotul este format din mai multe elemente iar în continuare vom vorbim separat despre
kitul de asamblare a robotului și despre modulele necesare functonarii.
Ca prin pas a fost necesar asamblarea elementelor din kit -ul robotului: montarea celor două
motorașe în interorul șasiului, a elementelor de prindere pentru capacul șasiului, construirea
ansam blului necesar pentru roți, montarea roților iar în partea finală închiderea șasiului cu capacul
acestuia impruna cu șenilele de cauciuc. Kitul a venit cu un suport pentru 5 baterii de tip AA dar
am decis să înlocuiesc cu o alta formă de alimentare. În fig urile de mai jos sunt prezentate
componentele de bază a acestui kit și forma finala după asamblare .
(a) (b)
Figura 3.1.1. 1. Elementele principala ale kitului (a) si kitul asamblat (b)
După asamblarea kit -ului acestui robot, au fost adăugate modulele de comandă și
comunicație. Proiectul a necesitat următoarele module: placa de dezvoltare Arduino UNO, driver –
ul pentru motor L293D, modul bluetooth HC -05 și o baterie LiPo .
Ca și element central al robotului se află placa Arduin o UNO, toate componentele electrice
din cadrul robotului fiind conectate la placa de dezvoltare. Pentru a putea contola motoarele de
curent continuu vom folosi un driver pentru motoare L293D care va fi suprapus pe Arduino UNO.
Prin acest driver putem să ac cesăm toți pinii de la Arduino UNO.
Motoarele vor primi puterea de la sursa de alimentare iar aceasta se va realiza prin cele 4
canale, prin cei doi pini de alimentare a motoarelor iar în cazul nostru ne vom folosi doar de doua
canale având doar doua mot oare folosite pe axul din spate a robotului. Alimentarea driverului se
realizează printr -un canal care are la rândul lui doi pini în care vor fi conectați firele de la bateria
LiPo. Bateria LiPo prezintă o mufă de tip JST deci va trebui să conectăm o altă mufă JST care la
capătul opus să aibe cele două fire de care avem nevoie pentru alimentarea centrală a driver -ului.
Mai jos este prezentată o figură pentru a se observa asamblul Arduino și driverul suprapus .
.
Figura 3. 1.1.2. Conectarea driver -ului L293D la Arduino Uno
Cum spuneam, inițial kit -ul a venit cu un suport pentru 5 baterii de tip AA. Am observat
că motoarele au o putere cam mică dacă aș folosi astfel de baterii și de aceea am decis să folosesc
o baterie LiPo care întradevar este mult mai costisitoare însă are avantajul unei descărcări mai
rapide, ceea ce duce la o putere mai mare a motoarelor iar un alt avantaj este că putem să le
reîncarcăm.
Modulul bluetooth va fi conectat la driverul de motor iar pinii firele tată vor fi conectate
după cum urmează :
Pinul VCC de la bluetooth va fi conectat la pinul de 5V de la driver (am conectat la pinul
„+” de la servo);
Pinul GND de la bluetooth va fi conectat la pinul de GND de la driver (am conectat la pinul
„-” de la servo);
Pinul RX de la bluetooth va fi conectat la pinul TX de la driver
Pinul TX de la bluetooth va fi conectat la pinul RX de la driver
Modulul bluetooth situat pe robot va trebui cofigurat ca Slave deci trebuie să accesăm
modul AT iar pentru acesta vom conecta și pinul EN de la bluetooth la pinul de 5V de la driver.
Această configurație este necesară doar în intervalul în care configurăm bluetooth -ul, același lucru
fiind necesar și pentru bluetooth -ul aflat pe mănușă, el fiind configurat ca Master .
Figura 3. 1.1.3. Arhitectura finală a robotului
3.1.2. Arhitectura hardware a mănușii
Robotul prezentat mai sus poate fi controlat cu ajutorul mai multor sisteme : telefon mobil,
laptop, joystick dar în cazul nostru îl vom controla cu ajutorul unei „mănuși” mai speciale.
Elementele componente ale mănușii s unt: Ardiono Nano, flex senzorii, modul bluetooth,
alimentarea, rezistențe și firele prin care le conectăm. Mănușa vă fi fabricata dintr -un material
deoarece de mănușa trebuie să prindem elementele conponente și necesita si o flexibilitate mai
mare.
După testarea senzorilor, configurarea bluetooth -ului în modul Master și construirea unei
scheme bloc a acestui sistem, am trecut la conectarea modulelor între ele după cum urmează mai
jos. Pentru a putea conectat toți cei 4 senzori flexibili trebuie să folosim o configurație mai specială
deoarece la un singur pin de la arduino trebuie să venim cu mai multe fire iar o lipire a acestora ar
fi dificilă deoarece sunt șanse să se dezlipească ușor. Conectarea pinilor de la senzorul flex (nu au
polaritate deci îi pute m alege oricare din cei doi pini) cu cei de la Arduino se face după cum
urmează să se prezinte mai jos :
Pinul 1 de la senzorul flex se va conecta cu pinul 5V de la Arduino
Pinul 2 de la senzorul flex vă avea o bifurcație, la el se va conecta un fie care v ă duce
la unul dintre pinii analogici de la Arduino iar cealaltă parte va merge printr -o rezistenta
de 47KΩ la pinul GND de la Arduino [11]
Figura 3.1.2.1. Conectarea senzorului flex la Arduino
Bluetooth -ul se va conecta la fel ca și în cazul celui de pe robot și după cum spuneam, el
prealabil a fost setat ca Master deci ne vom folosi și de pinul EN pentru a intra în modul AT.
Modul Master ne ajută pentru a transmite datele către bluetooth -ul Slave pentru ca acesta să
transmită datele către Ard uino UNO spre a comanda robotul. Reamintesc conexiunile stabilite
între Bluetooth -ul HC -05 și Arduino [12] :
Pinul VCC de la bluetooth va fi conectat la pinul de 5V de la driver
Pinul GND de la bluetooth va fi conectat la pinul de GND de la driver
Pinul RX de la bluetooth va fi conectat la pinul TX de la driver
Pinul TX de la bluetooth va fi conectat la pinul RX de la driver
Ultima componentă este sursa de alimentare pentru toate componentele. Deoarece Ardiono
Nano prezintă o mufa de tip mini -USB, o soluție ar fi o baterie externă. Putem găsi baterii externe
de dimensiuni relativ mici pentru a fi posibilă poziționarea ei pe mănușa sau în jurul ei și astfel
putem să ne conectam printr -un cablu direct la Arduino Nano. Un alt avantaj al utilizării unei
baterii externe este că putem reîncarcă cu ușurință bateria și să o refolosim.
Tot în cadrul mănușii, am utilizat o imprimantă 3D pentru a produce o carcasă care să ne
ajute prin introducerea elementele electronice în ea. Tot aici avem o placă de prototipare unde se
fac conexiunile dintre pinul de masa al senzorului cu rezistenta fixa iar in continuare de la aceasta
se va pleca la pinul de GND al arduino -ului. În pozele următoare se vor prezenta design -ul carcasei
și a elementelor proiectate cu ajutorul imprimante i 3D dar și arhitectura finală a mănușii .
Figura 3.1.2.2. Design -ul elementelor proiectate la imprimanta 3D
Figura 3.1.2.3 . Arhitectura finala a manusii
3.2. Arhitectura software
Figura 3.2.1. Ar hitectura software a sistemului
În figura 3.2.1 este prezentată arhitectura software a sistemului format din robot și mănușa.
În ambele cazuri, ca și element principal este Arduino, pentru robot avem un arduino UNO iar
pentru mănușă avem Arduino Nano după cum a fost prezentat și în capitolele anterioare a acestei
lucrări.
Principiul de funcționare este următorul. Ope ratorul uman flexeaza unul dintre senzori, el
fiind prealabil setat pentru o anumită direcție. Din divizorul realizat cu ajutorul rezistenței de 47kΩ
se citește valoarea de către Arduino Nano prin pinii analogici(A0,A1,A2 și A3). Dacă valoarea
citită de la unul dintre acești pini analogici va fi sub un anumit prag, se va comunica bluetooth –
ului Master că acel pin este pe valoare high. Aici se termină rolul mănușii.
În partea sistemului robot se vor inampla următoarele. Datele primite de către bluetooth -ul
Master vor fi transmise bluetooth -ului Slave (existând o conexiune între cele două stabilita
anterior) iar el la rândul lui va trimite datele către Arduino UNO. Acesta o sa citească valoarea de
HIGH a respectivului pin și în funcție de configurația codulu i va activa motoarele în anumite
situații (FORWARE, BACKWARD, RELESE) prin ajutorul driverului de motor.
Alimentare
Senzori flexibili
Arduino Nano
Modul Bluetooth
HC-05 (Master)
Date
Driver motor
Arduino UNO
Modul Bluetooth
HC-05 (Slave)
Motoare
Deci din cele spune mai sus vom avea nevoie de două programe pentru acest proiect. Primul
va fi încărcat pe Arduino Nano în care vom inițializa pinii ca și variabile de tip input, initializarea
unor variablie care să citească valoarea de la pini astfel încât în funcție de modificarea valorii de
la senzor, dacă va scădea sub pragul stabilit de noi, bluetooth -ul să transmită mai departe
informația .
Al doilea cod este cel încărcat pe Arduino UNO pentru controlul robotului. Aici vom utiliza
biblioteci noi introduse în program, la fel va fi nevoie să initializam mai multe variabile și să pornit
comunicația între bluetooth -uri. Astfel, în funcție de valoarea citită de către bluetooth, acesta va
condiționă o anumită mișcare a robotului și tot în acest program trebuie să specificăm ce motoare
se acționează .
CAPITOLUL IV – IMPLEMENTAREA SISTEMULUI
4.1. Dezvoltari hardware
Pe partea de dezvoltate hardware nu se poate spune ca acest proiect a avut nevoie unor
schimbari semnificative din acest punct de vedere dar totusi au existat cateva probleme care au
necesitat modificarea hardware a sistemului initial.
Nu stiu daca pot sa il incadrez intr -o dez voltare deoarece era de asteptat dar as aduca aminte
de driverul de motor. Necesitatea folosirii a doua motoare si a unei posibile folosiri a inca doua
motoare in cazul in care deplasarea nu va fi posibila cu cele doua motoare primite in kit a
determinat f olosirea unui astfel de driver. Bineinteles, pe piata exista mai multe variante de drivere
dar alegerea a fost strict subiectiva. Din pacate folosirea lui a dus la imposibilitatea amplasarii
Arduino -ului in interiorul carcasei robotului iar pentru a evita posibilitatea unui scurtcircuit
provocat in momentul alimentarii prin carca sa, am folosit niste suruburi pentru prindere care sa
adauge un mic spatiu intre carcasa si Arduino, bineinteles , suruburi fabricate d intr-un material
izolator .
Figura 4.1.1. Sur ub de prindere pentru Arduino
Din punct de vedere al alimentarii, am decis la eliminarea suportului de 5 baterii de tip AA.
Datorita sarcinii mare din punct de vedere al frecarii unde am intampinat cateva probleme din
cauza fabricarii unor componente care nu se potriveau cum era ideal, am ales utilizarea unei baterii
de tip LiPo avand o eficienta mult mai buna din punct de vedere a puterii motoarelor si astfel s -a
putut monta si senilele deoarece in configuratia anterioara cu 5 baterii de tip AA robotul nu se
putea deplasa daca ii atasa m si senilele, avand inca un element care solicitau si mai mult motoarele.
Tot la partea de robot a fost necesara sincronizarea motoarelor. Aici vreau sa fac referire
la faptul ca motoarele nu aveau aceiasi putere, astfel daca doream sa ne deplasam in fa ta, miscarea
era putin deplasata intr -o anumita directie . Acest fapt s -a datorat sistemului de prindere a rotilor
care se opuneau puterii generate de la motor.
Despre partea de dezvoltare a manusii pot spune ca am intampinat doua probleme. A trebuit
sa ga sesc o metoda prin care sa reusesc prinderea tuturor elementelor pe manusa si a doua problema
a intampinat la conexiuni deoarece a trebuit sa gasesc e metoda de a putea conecta mai multi pini
la acelasi punct. Pentru prima problema am ales utilizarea unor elemente de plastic realizate cu o
imprimanda 3D iar la partea de conexiune am construit fire care sa se bifurce la un capat pentru a
avea posibilitatea conectarii la mai multi pini odata.
Alte mici schimari au mai fost aduse in principal pentru o mai bun a optimizare, fie ca
vorbim despre lungimea firelor sau a economisirii spatiului. In plus a mai trebuit sa ma folosesc
de o bareta de pini mama -tata pentru a avea acces la pinul EN de la ambele bluetooth -uri.
4.2. Dezvoltari software
Mai sus a fost pr ezentata functionarea sistemului si arhitetura software. Acest capitol va fi
dedicat detalierii pe baza codului a functionarii, dezvoltarea software -ului pana la forma finala si
explicatii pe baza lui pentru a intelege principiul de functionare a acestuia.
Principiu de functionare al acestui robot consta in deplasarea lui in momentul manipularii
unuia dintre senzori, in directia aferenta acestuia, setata prealabil. Deplasarea robotului se face cu
o viteza setata in intervalul 0 si 255, ultima valoarea repr ezentand cea aleasa de noi pentru motoare.
Robotul va primi comanda de deplasare si se va opri in momentul revenirii senzorului in
starea initiala, dupa reverirea lui si trimiterea de catre operatorul uman a comenzii urmatoare,
acesta va executa fara dela y urmatoarea manevra.
Codul folosit pentru realizarea acestui proiect are o dificultate redusa, fiind foarte usor de
modificat pentru a putea indeplini noi utilizari, spre exemplu daca vom dori sa adaugam noi
module fara a fi nevoiti sa intampinam problem e in implementarea lor. Senzorii sunt independenti
atat din punct de vedere hardware cat si software, aici vreau sa ma refer la faptul ca daca dorim sa
eliminam unul dintre acesti senzori ori sa ii schimbam anumita functionalitate, nu va afecta ceilalti
senzori.
Din acest moti v codul a fost optimizat pentru o usura munca dezvoltatorului . Functiile sunt
atat cele default care se gasesc in bibliotecile deja existenta in program cat si functii noi aduse prin
adaugarea unor librarii noi . In continuarea lucrari i voi prezenta principiul de functionare pe baza
codului si comentariu pe segmente a codului.
Ca prin pas in construirea codului incarcat pe Arduino Na no (cel de pe manusa) vom
importa o librarie numita SoftwareSerial.h pentru a putea specifica pinii de acces pentru Bluetooth,
altminteri programul nu va putea trimite datele catre mo dul. Prima valoarea din paranteza functiei
bluetooth reprezinta pinul de RX iar al doilea reprezinta TX, pinul situat pe placa Arduino . Vom
declara 4 variabile deoarece v om avea nevoie trimitem valorile primite la pinul analogic de la
Arduino Nano.
Figura 4.2.1. Importarea librariei si initializarea variabilelor
In blocul de setup() vom declara tipu l variabilelor pentru citirea valorii de la pinii ca pini
de intrare cu a jutorul functiei pinMode(nume_variabila, tip_variabila) urmand sa pornim
comunicarea de la bluetooth. R ata folosita este cea de 9600 in ambele cazuri.
Figura 4.2.2. Declarare pini si inceperea comunicatiei
In continuare, in blocul de loop() vom dezvolt a functionarea programului. Dupa
initializarea altor 4 variabile de tip int si a caror valori se vor egala cu cele de la variabilele
anterioare de tip INPUT, se vom folosi de functiile Serial.print si Serial.println pentru a vedea cu
ajutorul Serial Monito r valorile de la cei 4 pini. Aceasta parte de citire am pastrat -o mai degraba
pentru verificarea eventualelor probleme deoarece este mai accesibil sa verificam direct in Arduino
IDE decat sa masuram fiecare conexiune ( acest proces va fi necesar doar in caz ul gasirii unei
intreruperi la unul dintre senzori).
In continuarea programului, dupa ce am citit valoarea senzorilor cand nu sunt manipulati,
putem sa decidem care sa fie pragul de la care robotul va fi deplasat. Valoarea a fost selectata astfel
incat sa nu fie necesar nici o indoire maxima a senzoru lui dar nici sa coboram sub prag la orice
mica miscare a senzorului deoarece fiind pe mana, inevitabil la indoirea unui senzor s -ar putea
influenta starea si senzorului invecinat.
Cu ajutorul instructiunii d e decizie „IF” am pus conditia ca in momentul in care valoarea
de la oricare di ntre cele 4 variabile va cobori sub un anumit prag, acesta sa trimita cate un mesaj
pentru fiecare senzor, adica daca indoim senzorul setat la pinul analogic 0, si a carui valoa re este
introdusa in variabila flexValue1, atunci bluetooth -ul va trimite valoarea „1” in caz contrar mesajul
va fi „0” iar pe acest principiu functioneaza si ceilalti senzori, bineinteles, valoarea trimisa fiind
diferita in functie de senzor . Mai jos exis ta un exemplu pentru un singur senzor, principiul fiind
acelasi la toti.
Figura 4.2.3. Constructia functiei loop() – Arduino Nano
In continuare va fi prezentat codul dezvoltat si incarcat pe placa de dezvoltare Arduino
UNO de pe robot. Dupa ce s-a stabilit starea fiecarui senzor, informatia va fi trimisa catre
bluetooth -ul Slave de pe robot si prelucrarta de catre A rduino UNO dupa cum urmeaza sa prezint
in liniile de cod urmatoare.
Un prim pas, la fel ca in cazul de mai sus, vom avea nevoie de functii noi care se gasesc in
doua librarii pe care trebuie sa le improtam in Arduino IDE si anume librariile SoftwareSerial si
AFMotor. Libraria SoftwareSerial este cea folosita anterior deci daca am adaugat libraria anterior
putem se ne folosim de functi ile ei pentru Bluetooth. A doua librarie este folosita pentru a adauga
functii necesare comenzii motoarelor dupa cum vom vedea in cele ce urmeaza.
Dupa specificarea pinilor de la bluetooth pentru RX si TX, in continuate vom initializa 4
variabile de tip c har, fi ecare pornind cu valoarea 0. AF_DCMotor este un constructor care trebuie
apelat pentru fiecare motor in parte.
Blocul de setup() va contine doar cele doua functii pentru inceperea comunicarii :
Bluetooth.begin si Serial.begin. Ambele sunt setate l a o rata de 9600 .
Figura 4.2.4. Initializarea elementelor globale si blocul setup()
Si in acest caz,in blocului loop() se observa ca variabilele initializate anterior cu valoarea
0 vor citi valoarea de la bluetooth. Fiecare va citi tot ce va primi blue tooth -ul atat timp cat acesta
este functional.
Figura 4.2.5. Citirea valorilor de la bluetooth
In continuare, as putea spune ca aceste valori vor fi „filtrate” cu toate ca nu e cel mai corect
termen. Programul este construit tot pe baza instructiunii else-if. Fiecarei variabile i se va asocia
un numar iar in momentul citirii de la bluetooth a acelui numar, se va trece la realizarea conditiilor,
care in cazul nostru este o functie .
Functiile apelate sunt urmatoarele : daca se va citi valoarea ‚1’ se va apela functia forward,
pentru valoarea ‚2’ functia backward, pentru valoarea ‚3’ functia left iar daca se va citi valoarea
‚4’ se va apela functia right. Daca nu se va transimite informatie catre bluetooth atunci robotul va
fi in stare de standby apeland functia Stop() . Dupa parcurgerea acestor linii de cod, blocul loop()
se inchide.
Figura 4.2.6. Specificarea valorilor variabilelor si instructiunea conditionata
In continuarea programului va trebui sa specificam ce se va contine fiecare functie . Vom
utiliza comenzile motoarelor pentru fiecare miscare. Datorita polarizarii invers e ale motoarelor,
acestea vor fi comandate in sens opus astfel trebuie sa determinam cum actionam fiecare motor
pentru ca robotul sa se deplaseaze intr -o anumita directie . De exemplu, pentru a merge inainte, in
functia forward() se poate observa ca motorul conectat la primul canal este setat sa mearga in fata
in timp ce al doilea este setat sa mearga in spate dupa cum se poate vedea si in figura 4.2.7.
Figura 4.2.7. Defi nirea functiilor pentru comanda robotului
4.3. Testarea si configurarea elementelor sistemului
Partea aceasta a lucrarii va prezenta modurile de testare a elementelor fie ale robotului fie
a manusii. In orice domeniu este necesar trecerea prin acest proc es si orice produs necesita testarea
pentru a depista si identifica defectele aparute in cadrul dezvoltarii acestui produs. Testara apare
de la dezvoltarea produsului si pana la punerea in functiune a produsului.
In companiile mari exista modele de testa re dar in cazul acestui proiect nu este necesar
parcurgerii unei ierarhii sau respectarea unui anumit proces cu toate ca si aici am avut o oareacare
organizarea din acest punct de vedere. Ca sa explic mai clar, motoarele au fost testate inainte de a
fi mon tate deoarece daca montam moroul , apoi conectam Arduino si driverul de motor, trebuia sa
iau etapizat verificarea fiecarui element, astfel verificand motoarele de la bun inceput la fel ca si
celalalate componente, puteam sti daca exista un defect la o anum ita componenta.
Trecand de aceasta prezentare, as vrea sa adaug faptul ca tot in acest subcapitol voi adauga
si o mica parte a configurarii modulelor bluetooth de care tot am vorbit pana in momen tul de fata.
Dupa cum spuneam, testarea acestui sistem a inceput cu motoarele. Am gasit o metoda care
mi s-a parut destul de usoara si care am folosito in cele din urma si pentru codul final incarcat pe
Arduino UNO. Pe scurt, ne vom folosi ca si adineauri de libraria A FMotor dupa care am folosit
constructorul AF_DCMotor pentru ambele motoare. Facand o paranteaza, initial am pornit cu un
singur motor folosind un singur canal apoi am schimbat cu cel de -al doilea motor pentru a fi sigur
de functionarea lor dupa care am tes tat toate canalele sa verific functionarea lor corecta.
In partea aceasta am gasit o oarecare problema deoarece motoarele trebuie prinse cu atentie
in suruburile de la pini altminteri motoarele ori functioneaza eronat cu un oarecare gol in
momentul rula rii ori nu functioneaza deloc.
In continuarea codului, pe partea blocului setup() am setat viteaza motoarelor la 255 iar in
continuare, in cadrul functiei loop() am adaugat linile de cod necesare comenzii motoarelor. In
poza urmatoare se va vedea ca direc tia este cea lasata ca FORWARD dar putem alege si
BACKWARD ori RELESE.
Ca rezultat final, dupa conectarea motoarelor la cele 2 canale de la driver, alimentarea
driver -ului si incarcarea programului in Arduino, motoarele au functionat corec t iar dupa
asam blarea robotului, acesta s -a deplasat conform comenziilor introduse in functia loop(). [14]
Figura 4.3.1. Codu l pentru testarea motoarelor DC
Urmatoarele elemente care au urmat testate au fost modulele bluetooth HC -05. Inainte de a –
i configura trebuia sa verific functionalitatea lor . Pentru aceasta etapa vom avea nevoie de: o placa
Arduino, un breadboard , un modul bluetooth HC -05, 4 fire de tip mama -tata, un led si un telefon
care sa aibe ca sistem de operare Android.
Conexiunile intre bluetooth si Ard uino se fac dupa cum urmeaza : VCC (Bluetooth) la
VCC (Arduino), GND (Bluetooth) la GND (Arduino), RX ( Bluetooth) la TX (Arduino) iar TX
(Bluetooth) la RX (Arduino). Ledul se va conecta cu anodul la pinul 8 de la Arduino iar catodul la
GND. Mai jos este p rezentata o imagine mai clara a conexiunii .
Figura 4.3.2. Conexiunea pentru testarea Bluetooth -ului
Codul incepe prin initializarea pinului 8 ca pin de OUTPUT, acesta fiind pinul la care e
conectat led -ul nostru. Ideea codului est e ca atunci bluet ooth-ul citeste valorile trimise de la
telefon, el va intra intr -o instructiune switch care are 2 cazuri. Primul caz in care ‚a’ este selectat
din aplicatie de la telefon iar atunci ledul se aprinde iar daca apasam butonul aferent lui ‚d’ atunci
ledul se v a opri. [15]
Figura 4.3.3. Codul pentru testarea bluetooth -ului
Dupa incarcarea codulu i si conexiunea pin , in prima faza a conectarii dintre telefon si
modulul HC -05 trebuie sa introducem parola acestuia (de obicei parola este 0000 sau 1234) . Dupa
ce cele doua dispozitive s -au conectat, putem intra in aplicatie. In multe aplicatii trebuie sa ne
conectam iar unele cer inca odata parola. Aplicatia folosita in acest caz este gratis si se poate
descarca de pe Magazin Play si se numeste BlueControl .
Dupa ce am verificat ambele module HC -05 a trebuit sa le configurez, unul ca Master si al
doilea ca Slave. Modulul HC -05 este usor de folosit ca bluetooth SPP (Serial Port Protocol),
dezvoltat pentru conexiunea fara fir.
Pentru a configura un modul HC -05 trebuie sa intram in modul AT. Configuratia hardware
folosita in acest caz aduce in plus pinul EN care se va conecta la pinul 9 al Arduino -ului. Prima
data va trebui sa conectam pinii conform celor spune mai sus. Inainte d e a conecta cablul USB la
Arduino, deconectam firul VCC ia r apoi dupa conexiunea USB -ului vom tine apasat butonul de
pe bluetooth si vom conecta firul de VCC. Va trebui ca led -ul de pe modulul bluetooth sa clipeasca
la interal de 2 secunde pentru a indica ca este intrat in modul AT.
In continuare vom deschide Serial Monitor si ne asiguram ca avem selectate „Both
NL&CR” iar rata e setata la 9600. Pentru configurarea in modul Slave trebuie sa trimitem
urmatoarele comenzi :
AT+RMAAD (pentru a elimina orice alt a conexiune)
AT+ROLE=0 (pentru al seta ca Slave)
AT+ADDR (pentru a obtine adresa acestui bluetooth de care vom avea nevoie in
configuratia modulului Master)
AT+UART=38400,0,0 (setarea ratei de transfer la 38400)
Confirmarea se va face la primirea raspunsu lui „OK”. Aceste comenzi nu sunt singurele
disponibile iar pe internet se pot gasi mai multe astfel de comenzi, spre exemplu putem schimba
numele sau parola.
Configurarea in modul Master se va realiza urmand comenzile :
AT+RMAAD
AT+ROLE=1 (pentru setarea in modul Master)
AT+CMODE=0 (modul de conexiune cu bluetooth -ul Slave)
AT+BIND=xxxx,xx,xxxxxx (aici va trebui sa adaugam adresa modulului Slave)
AT+UART=38400,0,0
La fel ca in cazul modulului Slave, confimarea se va face la afisarea mesajului „OK” si la
fel avem acces la mai multe comenzi. In acest moment daca avem conectate ambele bluetooth -uri
la cate un Arduino iar ele sunt alimentate putem observa ca led -urile s -au sincronizat. [13]
La final a urmat testarea senzorilor flexibili. Initial am verificat valoarea senzorilor cu un
multimetru insa valorile obtinute nu erau foarte exacte iar de accea am realizat o configura tie la
fel ca in schema de mai jos.
Figura 4.3.4. Schema electrica pentru testarea senzorilor flex
Principiul codului este ac elasi ca cel prezentat in capitolul anterior unde s -a utilizat acesti
tipi de senzori. Pe scurt vom initializa o variabila globala pentru pinul analogic A0, iar in functia
loop() von initializa alta variabila care va utiliza functia analogRead pentru a ci ti valoarea de la
variabila globala. Dupa rulare vom putea citi in Serial Monitor valoarea senzorului in functie de
starea lui. [11]
Figura 4.3.5. Codul pentru testarea senzorilor flex
CAPITOLUL V – REZULTATE
Pentru confirmarea functionalitatii sistemului, am realizat un traseu pe care robotul sa il
poata urma iar astfel vom verifica rezultatele finale ale acestui proiect, daca este calibrat corect
sau daca respecta comenzile operatorului uman.
Astfel am realizat un traseu care a aibe 4 puncte d e deplasare . Pornind din punctul „A” sa
inainteze catre punctul „B” astfel se testeaza functionalitatea de FORWARD. Din punctul „B” se
va pleca spre punctul „C” astfel vom testa si fuct iionalitatea RIGHT urmand sa mergem in fata
pana cand vom ajunge la pu nctul destinatie. U ltimul pas se va testa functia LEFT pentru a ajunge
pana in punctul „D” . Al doilea pas al acestui traseu este de a reveni in punctul „A” pentru a realiza
si testarea functionalitatii BACKWARD.
Figura 5.1. Deplasarea robotului
Al doil ea caz de verificare a rezultatelor va fi asemanator la fel ca in primul caz doar ca pe
parcursul traseului vor exista cateva obstacole pentru a vedea daca robotul se descurca si pe un
teren mai diferit decat cel plat.
Figura 5.2. Deplasarea robotului pe u n traseu cu obstacole
CAPITOLUL 6 – CONCLUZII
6.1. Concluzii
In aceasta lucrarea am analizat posibilitatea realizarii unui robot condus cu ajutorul
senzorilor flexibili situati pe o manusa. Lucrarea contine notiuni introductive atat despre
element ele componente ale acestei lucrari dar si notiuni despre partea de software.
Partea practica a acestui robot a constat in realizarea unei scheme structurale ca prin pas,
determinarea elementelor necesare acest proiect proiect. Urmatorul pas a fost asamblarea
sistemului din punct de vedere hardware, bineinteles, rezolvarea problemelor din punct de vedere
arhitectural al componentelor care au necesitat acest lucru. Au existat doua elemente principale a
acestui sistem, robotul si manusa. Fiecare a avut la baza placa de dezvoltare Ardui no UNO
respectiv Arduino Nano.
Modelul hardware a fost construit tinand seama de o buna optimizare mai ales din punct
de vedere a spatiului utilizat de catre componente. Acest fapt se datoreaza atat ideii de a dezvolta
in continuarea acest robot cu mai multe functionalitati posibile dar si pentru controlul mai bun. De
exemplu firele puteau patrude la roti ori unele componente sa nu aibe loc pentru o buna prindere
iar din cauza posibilelor perturbatii sa se desfaca.
Partea de software a constat in dezvoltarea unor programe necesare celor doua placi de
dezvoltare. Acestea folosesc mediul de dezvoltare Arduino IDE despre care s -a si vorbit in
capitolele anterioare. Dupa cum spuneam au existat doua programe care sa realizeze f unctia de
captarea datelor, transmitator si receptor al datelor.
Tot in aceasta lucrare am prezentat un subcapitol de testare si configurare atat din punct de
vedere de hardware cat si de software. Au fost prezentate elementele necesare acestui subcapito l
si pasii pentru realizarea testarii si configurarii elementelor din aceasta lucrare.
In final am prezentat rezultatele finale ale acestui proiect de licenta pentru demonstarea
functionalitatii lui. Pot spune ce aceasta licenta m -a ajutat sa descoper mul te lucruri interesante din
acest domeniu. Functionalitati ale multor elemente, chiar si a unora care nu au fost incluse
moemntat in proiect dar dupa cum spuneam , am lasat loc de dezvoltare in continuare a acestui
proiect. Am descoperit un domeniu care din punctul meu de vedere este accesibil oricarui pasionat
de electronica iar ca rezultat final pot spune ca sunt multumit atat din punct de vedere a realizarii
proiectului dar mai ales din princina cumularii cunostiintelor si a unei noi experiente.
6.2. Direc tii de dezvoltare
Din punct de vedere al dezvoltarii acestui sistem, in timpul in care am lucrat la el ma
gandeam la noi elemente care ar putea fi adaugate robotului despre care voi vorbi in continuare.
Facand parte din domeniul electronic, acest robot po ate evolua si pe partea de automatizare iar
daca ar fi sa gasesc un domenii de utilizare a acestuia, cred ca poate fi dezvoltat pentru diverse
domenii ca :
protopit educational – dupa cum spuneam adineuri, constructia lui a fost optimizata astfel
incat sa fie usor de inteles atat hardware cat si software
medical – pentru oameni care au anumite probleme si nu isi pot misca decat degetele
militar – usor de utilizat cu anumite adaugari de sistem pentru anumite misiuni
Acestea sunt doar cateva dintre cele ma i cunoscute si accesibile domenii dar sunt sigur ca
exista multe locuri unde ar putea fi utilizat.
Din punct de vedere al dezvoltarii robotului, as putea spune cateva dintrei ideile intalnite
de catre mine in procesul de constructie a lui
– Adaugarea un ui sistem pentru ocolirea obsacolelor imposibile de trecut;
– Inlocuirea unor componente cu altele pentru o si mai buna optimizare a sa si o eficienta mai
ridicata
– Implementarea unui sistem pentru a ilumina traseul
– Detectarea persoanelor cu un sensor d e temperatura care sa observe daca exista in raza lui
persoane
– Conectarea la o baza de date pentru a memora traseul, obstacolele sau anumite lucurui pentru a
cunoaste aceste obstacole in cazul in care va reveni pe acest traseu ori pentru a realiza un fel de
harta cu cele intalnite pe traseul urmat.
Index figuri
Figura 2.1.1.1. Placa de dezvoltare Arduino UNO R3
Figura 2.1.2.1. Arhitectura plăcii de dezvoltare Arduino Nano
Figura 2.1.3.1. Driver de control motor L293D
Figura 2.1.4.1. Modulul bluetooth HC -05
Figura 2.1.5.1. Senzor de tip flexibil
Figura 2.1.6.1. Șasiu tip tanc
Figura 2.2.1. Schita Arduino IDE
Figura 2.2.2.1. Modul de executie in C
Figura 3.1.1.1. Elementele principala ale kitului (a) si kitul asamblat (b)
Figura 3.1.1.2. Conectarea driver -ului L293D la Arduino Uno
Figura 3.1.1.3. Arhitectura finala a robotului
Figura 3.1.2.1. Conectarea senzorului flex la Arduino
Figura 3.1.2.2. Design -ul elementelor proiectate la imprimanta 3D
Figura 3.1.2.3 . Arhitectura finala a manusii
Figura 3.2.1. Arhitectura software a sistemului
Figura 4.1.1. Surub de prindere pentru Arduino
Figura 4.2.1. Importarea librariei si initializarea variabilelor
Figura 4.2.2. Declarare pini si inceperea comunicatiei
Figura 4.2.3. Constructia functiei loop() – Arduino Nano
Figura 4.2.4. Initializarea elementelor globale si blocul setup()
Figura 4.2.5. Citirea valorilor de la bluetooth
Figura 4.2.6. Specificarea valorilor variabilelor si instructiunea conditionata
Figura 4.2.7. Definirea functiilor pentru comanda robotului
Figura 4.3.1. Codul pentru testarea motoarelor DC
Figura 4.3.2. Conexiunea pentru testarea Bluetooth -ului
Figura 4.3.3. Codul pentru testarea bluetooth -ului
Figura 4.3.4. Schema electrica pentru testarea senzorilor flex
Figura 4.3.5. Codul pentru testarea senzorilor flex
Figura 5.1. Deplasarea robotului
Figura 5.2. Deplasarea robotului pe un traseu cu obstacole
Index tabele
Tabel 1.4.1. Lista de componente utilizate
Tabel 2.1.1.1. Tipuri de plăci din familia Arduino
Tabel 2.2.2.1. Tipuri de variabile
Bibliografie
[1]. UPT ETcTi, Curs Bazele Sistemelor Flexibile Inteligente, an III EA
[2]. UPT ETcTi, Laborator Senzori si Actuatori, an III EA
[3]. Tipuri de placi Arduino preluat de pe: https://www.robofun.ro/arduino -19
[4]. https://ardushop.ro/ro/ele ctronica/31 -placa -de-dezvoltare -nano -v3-atmega328.html
[5]. https://cleste.ro/placa -de-control -motoare -l293d.html
[6]. https: //cleste.ro/modul -bluetooth -hc-05.html
[7]. https://www.aliexpress.com/item/33006789980.html
[8]. https://www.robofun.ro/kit -roboti/multi -sasiu -tanc.html
[9]. Introduction, Homepage, Environment preluat de pe: https://www.arduino.cc/en
[10]. Introducere in limbajul C preluat de pe: http://elf.cs.pub.ro
[11].Example circuit preluat de pe: https://learn.sparkfun.com/tutorials/flex -sensor -hookup –
guide/all
[12].Get a robot https://www.instructables.com/id/Flex -Sensor -Controlled -Robot/
[13]. Configure Master and Slave preluat de pe: https://www.instructables.com/id/How -to-
Configure -HC-05-Bluetooth -Module -As-Master -/
[14].Control 2 motors preluat de pe: https://www.robo tshop.com/community/forum/t/control -2-
motors -with-arduino -motor -shield/8233
[15]. Bluetooth control leds preluat de pe :
https://create.arduino.cc/pro jecthub/SURYATEJA/bluetooth -control -leds-27edbd
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: Controlul unui robot prin senzori flex Conducător științific , Sl. Dr. Ing. ANCU ȚI COSMIN Absolvent , ȘERBAN ALEXANDRU EMANUEL TIMIȘOARA Iunie 2 020… [628405] (ID: 628405)
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.
