Sunteți pe pagina 1din 79

Facultatea de Automatică şi Calculatoare

Programul de Licență: Informatică

Robot sferic de tip Star Wars cu


Raspberry Pi și Arduino
Lucrare de licență

Student

Horațiu-Luchian NEMEȘ

Conducător științific:

Ș.L. Dr. Ing. Adrian KORODI

Timișoara
2017
Lucrare de licență Horațiu-Luchian NEMEȘ

Cuprins
FIGURI ...................................................................................................................................... 5

TABELE .................................................................................................................................... 7

CAPITOLUL 1. INTRODUCERE.......................................................................................... 8
1.1. Analiza stadiului actual în domeniul problemei ............................................................. 8
1.2. Tema lucrării de licență ................................................................................................ 10
1.3. Structura lucrării ........................................................................................................... 11

CAPITOLUL 2. FUNDAMENTARE TEORETICĂ .......................................................... 13


2.1. Echipamente Mecanice ................................................................................................. 13
2.1.1. Despre imprimantele 3D ....................................................................................... 13
2.1.2. Despre magneții neodim ....................................................................................... 15
2.2. Echipamente Hardware ................................................................................................. 15
2.2.1. Placa Raspberry Pi ................................................................................................ 16
2.2.2. Camera Raspberry Pi v2.1..................................................................................... 19
2.2.3. Placa Arduino ........................................................................................................ 21
2.2.4. Placă de recunoaștere vocală Geetech................................................................... 23
2.2.5. Modem 3G ZTE MF110 ....................................................................................... 26
2.3. Echipamente Software .................................................................................................. 27
2.3.1. Despre Python ....................................................................................................... 27
2.3.2. Despre Bash .......................................................................................................... 27

CAPITOLUL 3. ARHITECTURA SISTEMULUI ............................................................. 29


3.1. Arhitectura mecanică .................................................................................................... 29
3.1.1. Carcasa .................................................................................................................. 30
3.1.2. Schelet ................................................................................................................... 32

2
Lucrare de licență Horațiu-Luchian NEMEȘ

3.1.3. Mecanism intern .................................................................................................... 34


3.1.3.1. Suport motor cu reducție ............................................................................... 34
3.1.3.2. Suport circuit ................................................................................................. 35
3.1.3.3. Suport greutate pendul .................................................................................. 36
3.1.3.4. Suport servomotor pendul ............................................................................. 37
3.1.3.5. Suport servomotor 1 pentru mișcare cap ....................................................... 38
3.1.3.6. Suport servomotor 2 pentru mișcare cap ....................................................... 38
3.1.3.7. Suport magneți .............................................................................................. 39
3.1.3.8. Suport magneți cu roți ................................................................................... 40
3.1.3.9. Suport rulment ............................................................................................... 41
3.2. Arhitectura hardware .................................................................................................... 42
3.3. Arhitectura software...................................................................................................... 45
3.4. Funcțiile sistemului ....................................................................................................... 46

CAPITOLUL 4. IMPLEMENTAREA SISTEMULUI ....................................................... 49


4.1. Dezvoltări hardware ...................................................................................................... 54
4.2. Dezvoltări software ....................................................................................................... 57
4.2.1. Partea de software Raspberry Pi ........................................................................... 57
4.2.1.1. Modul recepționare comenzi controller ........................................................ 57
4.2.1.2. Modul procesare comenzi controller ............................................................. 58
4.2.1.3. Modul procesare date cameră ........................................................................ 61
4.2.1.4. Modul recepționare instrucțiuni vocale ......................................................... 63
4.2.1.5. Modul punct de acces de tip Hotspot ............................................................ 64
4.2.1.6. Modul conexiune 3G ..................................................................................... 65
4.2.1.7. Modul control de la distanță .......................................................................... 65
4.2.1.8. Modul trimitere instrucțiuni Bluetooth ......................................................... 66
4.2.2. Partea de software Arduino cap ............................................................................ 67
4.2.2.1. Modul procesare date microfoane ................................................................. 67
4.2.2.2. Modul procesare comenzi vocale .................................................................. 68
4.2.3. Partea de software Arduino corp ........................................................................... 69
4.2.3.1. Modul recepționare instrucțiuni .................................................................... 69
4.2.3.2. Modul acționare motoare .............................................................................. 70

CAPITOLUL 5. REZULTATE ............................................................................................. 72


5.1. Scenariul sferei.............................................................................................................. 72
5.2. Scenariul capului ........................................................................................................... 73

3
Lucrare de licență Horațiu-Luchian NEMEȘ

CAPITOLUL 6. CONCLUZII SI DIRECTII DE CONTINUARE A DEZVOLTĂRII .. 75


6.1. Concluzii ....................................................................................................................... 75
6.2. Direcții de dezvoltare .................................................................................................... 75

CAPITOLUL 7. BIBLIOGRAFIE ........................................................................................ 77

4
Lucrare de licență Horațiu-Luchian NEMEȘ

Figuri

Figura 1: BB8 surprins în trailer-ul oficial al filmului .......................................................... 11


Figura 2: BB8 Sphero(stânga), BB8 Disney(mijloc) și BB8 Hasbro(dreaptă) ...................... 12
Figura 3: Printarea uneia dintre componentele carcasei a lucrării de licență ........................ 18
Figura 4: Raspberry Pi 3 Model B [8] ................................................................................... 21
Figura 5: Cameră Raspberry Pi v2.1 [12] .............................................................................. 24
Figura 6: Plăcuță Arduino Nano ............................................................................................ 26
Figura 7: Modulul de recunoaștere vocală Geetech [26] ....................................................... 28
Figura 8: Modem 3G ZTE MF110 ........................................................................................ 30
Figura 9: Vedere frontala a arhitecturii mecanice ................................................................. 34
Figura 10: O parte din piesele pentru carcasă printate .......................................................... 35
Figura 11: Piesele capului printate ........................................................................................ 36
Figura 12: Scheletul în proces de asamblare ......................................................................... 37
Figura 13: Design suport motor cu reducție .......................................................................... 38
Figura 14: Design suport circuit și șine ................................................................................. 39
Figura 15: Design suport greutate pendul .............................................................................. 40
Figura 16: Design suport motor pendul și conexiune cu pendul ........................................... 41
Figura 17: Design suport servomotor pentru mișcare cap pe axă x ....................................... 42
Figura 18: Design suport servomotor pentru mișcare cap pe axă z ....................................... 43
Figura 19: Design suport magneți din sferă și capac magnet ................................................ 44
Figura 20: Design suport magneți din semisferă, capac magnet și mecanism roată ............. 45
Figura 21: Design suport rulment .......................................................................................... 46
Figura 22: Schema bloc a arhitecturii hardware .................................................................... 48
Figura 23: Schema bloc a arhitecturii software ..................................................................... 49
Figura 24: Schema software functională ............................................................................... 51
Figura 25: Instalare ds4drv .................................................................................................... 62
Figura 26: Inițializarea obiectelor necesare pentru procesare comenzi controller ................ 62
Figura 27: Gruparea ID-urilor pe tipuri de buton .................................................................. 63
Figura 28: Exemplu de funcție responsabilă de event ........................................................... 64
Figura 29: Funcție scrisă în Python echivalentă cu funcția map din Arduino ....................... 64
Figura 30: Exemplu de citire analogică a datelor controller-ului .......................................... 65
Figura 31: Librăriile necesare pentru funcționarea modului de recepționare date cameră .... 66
Figura 32: Exemplu de cod al procesării de imagine ............................................................ 66
Figura 33: Cod tratate instrucțiuni speciale de modulul de recepționare instrucțiuni vocale 68
Figura 34: Exemplu cod al modului de transfer instrucțiuni prin Bluetooth ......................... 70
Figura 35: Inițializare conexiune serială de tip software pe Arduino .................................... 72

5
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 36: Exemplu cod: modulul de recepționare instrucțiuni de pe placa Arduino sferă .. 73
Figura 37: Exemplu cod acționare servomotoare .................................................................. 75
Figura 38: Scenariul de testare a sferei .................................................................................. 77
Figura 39: Testarea scenariului capului ................................................................................. 78
Figura 40: Stadiul final al proiectului .................................................................................... 79

6
Lucrare de licență Horațiu-Luchian NEMEȘ

Tabele

Tabel 1: Comparare lucrare de licență cu soluții existențe .................................................... 13


Tabel 2: Specificațiile plăcii Raspberry 3 Model B [9] [10] ................................................. 22
Tabel 3: Comparare Cameră v1 și Cameră v2 Raspberry Pi ................................................. 24
Tabel 4: Specificații Arduino Nano [23] ............................................................................... 27
Tabel 5: Specificații modul recunoaștere vocală Geetech [25] ............................................. 29

7
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 1. Introducere

1.1. Analiza stadiului actual în domeniul problemei

Robotica este știința a cărui scop constituie proiectarea, fabricarea și dezvoltarea


tehnologiei roboților. Denumirea de robot a fost introdusă pentru prima dată în anul 1921 în
lucrarea ,,Roboții universali a lui Rossum” de către scriitorul ceh, Karel Capek. Această idee a
fost preluată mai departe de către scriitorul american, Isaac Asimov, în anul 1941, în povestirea
sa științifico-fantastică, ,,Fuga în cerc”. Conform acestora, un robot este un mecanism care se
deplasează singur, și care are potențialul de a replica orice poate fi realizat de sau asociat unui
om. [1]

Primii roboți creați, capabili de acțiuni complexe, au fost creați între anii 1948-1949,
de William Grey Walter al Institutului Neorologic din Bristol. Aceștia au fost denumiți drept
Elmer și Elsie. Viteza celor doi roboți nu era punctul lor forte, fiind și denumiți drept “țestoase”
din cauza formei designului exterior și a ritmului de deplasare, însă erau capabili de o acțiune
complexă, și anume găsirea stației de încărcare în momentul în care se apropiau de a rămâne
fără baterie. Acest lucru era realizat cu ajutorul unei lumini, plasate în vecinătatea stației de
încărcare, a cărui intensitate era urmărită de un senzor al roboților. [2] [3]

Figura 1: BB8 surprins in trailer-ul oficial al filmului

Un aspect important al roboticii este încercarea continuă de inovare. Astfel se asigură


o evoluție neîntreruptă a proiectării, implementării și dezvoltării roboților. Sursa multor idei
care au dat o notă de noutate și au schimbat regulile jocului, au venit din surse precum cărți sau

8
Lucrare de licență Horațiu-Luchian NEMEȘ

filme ale unor oameni care nu au neapărat ca fundal o pregătire tehnică necesară pentru
implementarea lor sau vreo legătură cu robotica înșine.

Lucrarea de licență se va axa pe introducerea unui concept prezentat în cadrul unui film
apărut recent, față de momentul realizării proiectului, și anume ,,STAR WARS Episodul VII –
Trezirea fortei”. În cadrul acestui film ne este prezentată noțiunea unui robot, reprezentat în
figura 1, pe nume BB8, sferic, capabil să se rostogolească de unul singur, care are atașat
constant pe plan vertical, pe post de cap, o semisferă. Ideea de proiectare, a venit din partea a 3
regizori, Lawrence Kasdan , J. J. Abrams și Michael Arndt, care nu au nicio formare
educațională necesară pentru a crea fizic un astfel de robot.

Figura 2: BB8 Sphero(stanga), BB8 Disney(mijloc) si BB8 Hasbro(dreapta)

Popularitatea filmului a impulsionat compania Disney, deținătorii filmului, să semneze


contracte cu mai multe firme de jucării care să îi dea viață roboțelului. Următoarele paragrafe
vor explica de ce s-a luat această decizie după ce și aceștia au realizat o versiune a lor. În scopul
studiului, vom menționa trei dintre cele mai reușite versiuni apărute: BB8 de la Sphero, BB8
de la Disney, și BB8 de la Hasbro, evidențiate în figura 2. Am ales cele mai vândute trei modele
pentru a putea face o comparație, a celor mai importante specificații ale acestora, cu a celor ale
lucrării de licență.

Conform tabelului 1, putem observa o parte din cele mai importante caracteristici ale
roboților. Luând prima caracteristică în vedere, se poate explica de ce Disney a preferat să dea
altor firme dreptul de a crea jucării BB8. Aceștia nu au reușit, în modelul lor, să obțină
caracteristica de bază a robotului, și anume, învârtirea sferei. Soluția lor a fost de a pune o roată
la baza sferei care să îl deplaseze strict față-spate fără a învârti sfera propriu zisă în vreo direcție.

9
Lucrare de licență Horațiu-Luchian NEMEȘ

Caracteristici BB8 Disney BB8 Hasbro BB8 Sphero Lucrarea de licență


Rotire sferă X ✓ ✓ ✓
Rotire cap axa X X X X ✓
Rotire cap axa Y X X X ✓
Rotire cap axa Z ✓ ✓ ✓ ✓
Baterii reîncărcabile X X ✓ ✓
Recunoaștere vocala X X ✓ ✓
Sistem pendul X X X ✓
Tehnologie Raspberry X X X ✓
Camera X X X ✓
3G X X X ✓
Hotspot X X X ✓
Control X infraroșu telefon bluetooth

Tabel 1 Comparare lucrare de licență cu soluții existente

Mergând mai departe, se poate vedea o limitare în mișcarea capului din partea roboțeilor
comercializati, putând să își miște capul doar stânga, respectiv dreapta. Bateriile reîncărcabile
n-au fost o prioritate decât pentru cei de la Sphero. Ca tehnologie de încărcare, ei au decis să
folosească una wireless pentru a putea beneficia de o sferă închisă ermetic, care este astfel și
rezistentă la apă. Dimensiunea extrem de redusă a modelului a ajutat mult că această tehnologie
să poată fi folosită. O dimensiune redusă înseamnă o putere mai mică necesară pentru
functionarem, și astfel baterii mai mici, care pot fi încărcate într-un timp acceptabil la curentul
redus oferit de tehnologia încărcării wireless disponibilă astăzi.

Recunoașterea vocală, în cazul lor, este realizată cu ajutorul telefonului cu IOS sau
Android, prin intermediul aplicației cu care îl controlează. Controlul robotului Hasbro se face
prin intermediul unui controller care vine împreună cu robotul care are la bază tehnologia
infraroșu, Sphero, după cum am menționat anterior, folosește o aplicație prin intermediul căreia
se realizează controlul, iar lucrarea de licență are la bază tehnologia Bluetooth, folosind un
controller DualShock 4. Această poate fi adaptată ulterior să fie controlat de orice dispozitiv
capabil de comunicare Bluetooth.

1.2. Tema lucrării de licență

Lucrarea de diplomă își propune ca scop proiectarea mecanică, hardware și software al


unui robot care să se deplaseze acționat prin Bluetooth și să preia informații audio respectiv

10
Lucrare de licență Horațiu-Luchian NEMEȘ

video din mediu. Deplasarea robotului se realizează precum este prezentat în figură 1, adică o
sferă acționată hardware din interior, care se va roti păstrând semisferă, capul, deasupra acesteia
pe tot parcursul mișcării robotului. Orientarea ulterioară a proiectului este de a putea procesa
datele primite din mediu astfel încât sistemul să poată funcționa autonom și să ajungă astfel să
interacționeze cu el.

Conceptul software al proiectului se bazează pe procesarea datelor primite de la


controller-ul Bluetooth, procesarea datelor primite de la microfoane, procesarea datelor primite
de la modulul de recunoaștere vocală și transmiterea acestora mai departe sferei pentru a putea
execută instrucțiunile transmise.

Conceptul Hardware are la bază tehnologia Bluetooth care realizează comunicarea


celor două entități, și anume cap și sferă. Bazanduse pe conceptul software, datele primite vor
fi recepționate de către Raspberry Pi și vor fi transmise mai departe către Arduino-ul din corp
care va acționă astfel motoarele în conformitate cu instrucțiunile primite. Comunicarea dintre
Raspberry Pi și modulul de recunoaștere vocală va fi una serială precum și comunicarea cu
modulul 3G.

Pentru realizarea scopului lucrării se vor utiliza următoarea componente hardware


principale: Raspberry Pi 3 Model B, Arduino Nano, Camera Raspberry Pi v2.1 și Placă
procesare sunet. Ca și componente software se enumeră limbajele de programare Python și
Bash pe partea de Raspberry Pi, și C/C++ pe partea de Arduino.

1.3. Structura lucrării

În capitolul 2 sunt descrise tehnologiile mecanice, hardware și software folosite. Partea


mecanică conține o scurtă prezentare despre imprimantele 3D și magneții neodim. Partea de
tehnologii hardware face referire la componentele hardware folosite. În final din punct de
vedere software sunt descrise limbajele de programare folosite și programul folosit pentru
proiectarea 3D a componentelor printate.

Capitolul 3 reprezintă arhitectura sistemului din punct de vedere mecanic, hardware,


software cât și funcțiile sistemului. Fiecare dintre ele conțin câte o schemă reprezentativă.

În capitolul 4 găsim implementarea sistemului pe partea hardware și software.

Capitolul 5 prezintă rezultatele obținute și cum au fost acestea testate.

11
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 6 descrie concluziile avute în urmă realizării lucrării de licență și prezintă idei
de direcții pentru continuarea dezvoltării.

12
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 2. Fundamentare teoretică

Lucrarea de diplomă este formată din trei părți:


o Echipamente din categoria Mecanică, prezentate in subpunctul 3.1
o Echipamente din categoria Hardware, prezentate în subpunctul 3.2
o Echipamente din categoria Software, prezentate în subpunctul 3.3

2.1. Echipamente Mecanice

Pentru elaborarea lucrării de diplomă, din punct de vedere mecanic, s-au proiectat piese
și printat mai apoi cu ajutorul unei imprimante de tip 3D. Aceste piese au dus la îmbinarea
componentelor hardware și la formarea celor două entități ale robotului. Pentru îmbinarea și
susținerea celor două entități menționate, s-au folosit magneți, cu o forță de atracție ridicată,
denumiți magneți neodim.

2.1.1. Despre imprimantele 3D

Deși imprimantele 3D au început sa devină populare in anul 2009, cand patentul FDM 1
a devenit valabil domeniului public, tehnologia apare în istorie pentru prima data în urmă cu
mai bine de 30 de ani. În data de 9 Mai 1983, co-fondatorul firmei 3D System, Chuck Hull, a
realizat primul printaj 3D cu succes folosind un procedeu puțin diferit față de cel menționat
anterior. Platformă de printare a acestuia era scufundată într-un material vâscos care avea
capabilitatea de a fi întărit în momentul în care era acționat de laser. Astfel acesta începea cu
platforma aproape de suprafața lichidului și coborâ platformă puțin câte puțin în funcție de
grosimea stratului. La fiecare strat un laser era teleghidat pentru a întări formele necesare. Acest
procedeu a primit denumirea de stereolitografie. [4] [5]

1
Fused deposition modeling: una dintre tehnicile folosite pentru imprimarea 3D a obiectelor, care consta in
adaugarea strat cu strat a materialului cu scopul de a forma forma finala

13
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 3 Printarea uneia dintre componentele carcasei a lucrării de licență

Procesul FDM se aseamănă cu soluția propusă de Chuck Hull prin faptul că procedeul
de construcție este același, strat cu strat, prezentat în figură 3. Un avantaj al procesului mai
actual este o economie uriașa a materialului de construcție. În loc de a fi nevoie de îndeajuns
material cât să fie umplut un acvariu, acesta are nevoie exact de cât se va consuma pentru
prototipul final. Acest lucru este posibil deoarece acesta nu mai folosește laser pentru a întări
un material ci are un capăt încălzit prin care trece material îndeajuns de fierbinte cât să fie
maleabil și este trasat în aceași manieră, strat cu strat. Folosind această tehnică se deschide și o
varietate de materiale disponibile. Nu mai este nevoie de un material cu proprietatea specială
de a putea fi întărit prin acționarea laserului ci de un material care poate fi topit la temperatură
la care poate ajunge vârful imprimantei.

Pentru realizarea lucrării de licență am folosit trei variații de plastic cunoscute drept
PLĂ (PolyLactic Acid), ABS(Acrylonitrile Butadiene Styrene) și PET-G(PolyEthylene
Terephthalate Glycol-modified). Toate cele trei materiale se găsesc că și filament pentru
printare și sunt categorizate că fiind perfecte de folosit pentru începătorii din industria
printajului 3D. Caracteristica de bază al PLĂ este rigiditatea materialului iar ABS-ul este
considerat ușor flexibil, fiind mai rezistent la șocuri. Dezavantajul ABS-ului este că nu poate fi
folosit cu ușurință când vine vorba de printat obiecte mari deoarece are un factor mare de
micșorare la răcire și astfel rezultatele ies deformate. Materialul PET-G este clasat undeva la
mijlocul celor două fiind aproape la fel de rigid că PLĂ-ul cât și la fel de rezistent la șocuri că
ABS-ul fără un factor prea mare de micșorare.

14
Lucrare de licență Horațiu-Luchian NEMEȘ

2.1.2. Despre magneții neodim

Un magnet este un material sau un obiect capabil de a produce un câmp magnetic. Acest
câmp este invizibil cu ochiul liber și are proprietatea de a atrage alte materiale feromagnetice.

Neodimul este un metal gri spre argintiu, descoperit în 1895 de un chimist austriac pe
numele Carl Auer von Welsbach. Acest metal, de șine stator, este maleabil la temperatură
camerei și se oxidează extrem de ușor în contact cu aerul.

În 1982, două corporații din industria de mașini, General Motors și Sumitomo Special
Metals, au descoperit în aceeași perioadă, în mod independent, un aliaj format din neodim, fier
și bor care a pus bazele descoperirii magneților neodim. Magneții neodim au devenit în scurt
timp cei mai comuni și cei mai puternici magneți disponibil pe piață. Aceștia au ajuns să fie
folosiți în unități de stocare, motoare electrice și difuzoare.

Scopul folosirii acestui tip de magnet în lucrarea de licență este de a susține atât din
interiorul sferei cât și din interiorul semisferei legătură celor două entități ale robotului. Au fost
folosiți în total șase magneți de acest tip, câte trei pentru fiecare parte.

2.2. Echipamente Hardware

Pe partea de Hardware, lucrarea de diplomă s-a realizat folosind următoarele


componente:

o Placă Raspberry Pi 3 Model B


o Cameră Raspberry Pi v2.1
o Placă Arduino Nano
o Placă de recunoaștere vocală Geetech
o Modem 3G ZTE MF110
o Modul amplificator microfon MAX9814
o Modul Bluetooth HC-05
o Driver motor L298N
o Motor metalic cu reductie 34:1 HP
o Servomotoare
o Baterii Lithium-ion 18650
o Controller Bluetooth DualShock 4

15
Lucrare de licență Horațiu-Luchian NEMEȘ

2.2.1. Placa Raspberry Pi

Având primul model lansat în februarie 2012, gamă Raspberry Pi a prins rapid
popularitate pe piață, datorită dimensiunii compacte, a prețului redus(poate ajunge până la 35
de dolari ) și a flexibilității oferite de diferitele modele apărute. Până în prezent, au fost lansate
3 generații, cu 3 configurații diferite de PCB 2: prima la data deja menționată, februarie 2012,
a două generație 3 ani mai târziu în februarie 2015, iar a treia generație în februarie 2016. În
aceeași perioadă cu lansarea celei de-a două generații, fundația Raspberry Pi a atins numărul de
5 milioane de plăcute vândute, ajungând astfel cel mai vândut computer personal al Mării
Britanie. În noiembrie 2016 a fost întrecut numărul de 11 milioane de unități vândute. [6]

În noiembrie 2015, un model special a fost lansat pentru aplicațiile care necesitau o
dimensiune și mai redusă decât al generațiilor de bază. Acest model a fost denumit Raspberry
Pi Zero și poate fi asemănat cu ușurință cu prima generație apărută din punctul de vedere al
specificațiilor. Dimensiunea acestuia este de 65 x 30 mm, dimensiune cu mult redusă față de
cea a ultimei generații care este de 86 x 56 mm. Acesta este singurul model care nu dispune de
mufe USB 2.0, jack audio și pini GPIO 3 preinstalati. Prin această decizie de a nu mai face pinii
GPIO preinstalati, au redus astfel foarte mult și grosimea plăcuței. De la o grosime de 20 mm
s-a ajuns la o grosime de 5 mm, care poate însemna extrem de mult în proiectele de dimensiuni
reduse.

Toate generațiile și modelele apărute până în prezent folosesc SoC 4 produse de


Broadcom. O caracteristică extrem de importantă ale acestei soluții este plasarea chip-ului de
memorie RAM lipit de chip-ul procesorului, realizând astfel o latență foarte mică în
comunicarea dintre cele două componente. [7]

Că mediu de stocare, aceste plăci suportă un cârd de memorie micro SD cu capacitate


de până la 128 GB. Tipul de formatare suportat este FAT32 5. Producătorii ofera posibilitatea
achiziționării unui astfel de card de memorie de tip NOOBS 6. Se ofera o varietate de sisteme
de operare care se pot adapta scopului utilizatorului. Astfel, având un monitor capabil de redare

2
Printed Circuit Board: placa cu cablaj imprimat, format dintr-un ansamblu de componente electrice si
electronice, conectate din punct de vedere electric si sustinute din punct de vedere mecanic, cu rolul de a realiza
un produs final functional
3
General-purpose input/output: pin care se gaseste pe un circuit integrat sau circuit imprimat, al carui scop si
stare poate fi modificat de catre utilizator la run time
4
System on a chip: o solutie de chip des intalnita in aria sistemelor embedded, si pe piata dispozitivelor mobile,
datorita consumului redus de curent, si a dimensiunii reduse in care este plasata majoritatea componentelor
necesare pentru functionarea unui sistem de calcul
5
File Allocation Table pe 32 biti: arhitectura de organizare a fisierelor pe un mediu de stocare in clustere de
dimensiune de pana la 32KB in functie de dimensiunea partitiei in cauza
6
New Out Of Box Software: solutie care nu necesita nicio instalare, ci poate fi realizata prin dezarhivarea
datelor necesare pe mediul de stocare pentru a boot-a direct in sistemul de operare dorit

16
Lucrare de licență Horațiu-Luchian NEMEȘ

prin conector HDMI, mouse, tastatura și un cablu de alimentare de tip micro USB,
achiziționarea unei plăcuțe si a acestui card de memorie permite sistemului sa devina gata de
folosire direct din cutie. Pentru cazurile in care monitorul, mouse-ul si tastatura nu sunt
disponibile utilizatorului, acesta poate folosi laptop-ul/calculatorul personal pentru a se conecta
prin SSH 7. Această conexiune poate fi realizată cu ajutorul unui client precum Putty, după ce
utilizatorul a legat placa prin ethernet la același router la care este legat și calculatorul personal
de pe care se va face conexiunea. Această conexiune permite logarea pe plăcuță și trimiterea de
comenzi precum cele din consolă. După ce accesul este permis, se poate instala pe plăcuță
pachete de date precum VNC Server pentru a permite utilizatorului să se conecteze de la distanță
la plăcuță. Folosind adresa IP a plăcuței în aplicația Remote Desktop din Windows, sau orice
aplicație similară, permite utilizatorului să obțină acces la interfață grafică a sistemului de
operare ales.

Figura 4: Raspberry Pi 3 Model B [8]

Alimentarea se poate face de la un încărcător de 5V care poate aproviziona un curent


de cel puțin 2 A. Este nevoie de 2.5 A pentru cazurile de folosire intensă a procesorului sau

7
Secure Shell: protocol de retea ce permite ca datele sa fie transferate folosind un canal securizat intre
dispozitivele retelei prin criptarea datelor

17
Lucrare de licență Horațiu-Luchian NEMEȘ

folosirea a multor periferice care consumă o cantitate mai mare e curent precum un display
sau modul driver pentru motoare. Atunci când scopul proiectului nu permite că plăcută să fie
alimentată de la priză, sau mai bine zis, să fie o componența stabilită într-o locație fixă,
folosirea unui powerbank, capabil de aceleași specificații menționate anterior, este o soluție
destul de fiabilă.

Una dintre limitările acestor plăci este inabilitatea de a operă cu date analogice.
Singurii pini folosibili ai acestor plăcute sunt pinii GPIO care sunt doar digitali. O soluție
pentru acest impediment, este folosirea unei plăcute arduino care să comunice pe Serial prin
USB sau pinii RX/TX ale celor două plăcute, această oferind posibilitatea de a lucra cu date
analogice.

System on Chip Broadcom BCM2837


Procesor 4× ARM Cortex-A53 @ 1.2GHz
Procesor grafic Broadcom VideoCore IV @300/400 MHz
Memorie RAM 1GB LPDDR2 8 @ 900 MHz
Stocare microSD de pana la 128 GB
Conexiune ethernet RJ45 @ 10/100
Conexiune Wireless 802.11n @ 2.4GHz, viteza pana la 600MBit/s
Conexiune Bluetooth Bluetooth 4.1 Low Energy, viteza pana la 24 MBit/s
Conexiune Display HDMI 1.3
Conexiune Audio-Video 3.5mm jack analog
Porturi USB 4 porturi USB 2.0
Alte interfete: Camera Serial Interface (CSI), Display Serial Interface (DSI)
Numar pini GPIO 40 pini
Consum maxim 4W/h
Dimensiuni 85.6 x 56 x 21 mm

Tabel 2: Specificatiile placii Raspberry 3 Model B [9] [10]

Pentru această lucrare de diplomă, am ales să folosesc Raspberry Pi 3 Model B, prezent


în figură 4, deoarece este cel mai performant model în momentul de față. Am luat în considerare
majoritatea specificațiilor hardware ale plăcii și am ajuns la concluzia că ar fi cea mai bună
variantă pentru o prototipizare cât mai simplă, oferind posibilități de flexibilitate în proiectare
ridicate. Puterea cea mai ridicată de procesare și numărul cel mai mare de nuclee, dintre

8
Low Power Double Data Rate 2: versiune a memoriei Random Acces Memory cu un consum scazut de curent
datorita trecerii de la 1.8V la 1.2V si a unor imbunatatiri pentru reimprospatarea multimii de date transferate

18
Lucrare de licență Horațiu-Luchian NEMEȘ

modelele disponibile, a fost un factor important de decizie. Această determină viteză cu care se
execută instrucțiunile și libertatea de paralelizare a proceselor. Memoria RAM a fost și ea bine
venită deoarece orice aplicație care implică folosirea camerei, indiferent dacă pe portul de CSI
sau USB, chiar și doar pentru o simplă supraveghere video, fără vreo procesare de imagine va
consumă multe resurse în acest sens. Numărul de comunicări UART 9 posibile este de patru însă
acest număr poate fi ridicat cu ajutorul unui hub usb. Este primul model cu procesor pe 64 de
biți și cu toate că are componentele cele mai puternice din familia Raspberry, consumul de
curent rămâne destul de redus, fiind doar 4W/h în cazul de load 100% a tuturor nucleelor. Un
alt aspect de apreciat este faptul că această generație este singură cu modul Wifi și Bluetooth
incluse, nemaifiind nevoie de achiziționarea altor adaptoare compatibile cu placă. Sistemul de
operare ales este Raspbian Jessie, o distribuție Debian dezvoltată special pentru plăcuțele
Raspberry.

Pentru cazurile în care puterea de procesare nu este suficientă, plăcuțele au opțiuni de


setare overclocking 10. În cazul ultimului model apărut, acest lucru nu este recomandat fără
folosirea unui radiator deoarece acesta disipa o cantitate rezonabilă de căldură și fără vreo
modificare a frecvenței procesorului. Folosirea unei carcase închise, prin care aerul nu este
capabil să circule, nu este de asemenea recomandat pentru această placă fără un mediu de
disipare a căldurii.

2.2.2. Camera Raspberry Pi v2.1

În Aprilie 2016, modulul de cameră Raspberry Pi v2, prezentat în figură 5, a fost lansat
cu un senzor de 8 megapixeli de la Sony sub numele IMX219. Acesta a fost o îmbunătățire
drastică față de versiunea originală de 5 megapixeli cu senzor de la OmniVision denumită
OV5647. [11] O comparare mai clară intre cele două generații poate fi observată in tabelul 3.

9
Universal asynchronous receiver/transmitter: dispozitiv hardware folosit pentru comunicare seriala
asincrona in care formatul datelor si viteza de transfer sunt configurabile
10
Procedeu a carui scop este de a obtine performante mai mari a unei componente prin fortarea acesteia de a
functiona la o frecventa mai mare decat cea specificata de catre producator

19
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 5: Camera Raspberry Pi v2.1 [12]

Acest modul este unul recomandat pentru începători, fiind capabil să surprindă poze și
să filmeze în rezoluție Full HD cu ușurință. Utilizatorii avansați nu pot fi nici ei dezamăgiți de
acest modul, având la dispoziție posibilitatea de a încerca proiecte precum filmări time-lapse
sau slow-motion [13], crearea unui telescop [14] și opțiuni nelimitate de procesare de imagine
[15]. Sunt puse la dispoziție și diferite librării care produc efecte [16] în timp real asupra
filmărilor realizate.

Modul Camera v1 Modul Camera v2


Rezolutie 5 Megapixeli 8 Megapixeli
Moduri Video 720p30 si 640 × 480p60/90 1080p30, 720p60 si 640 × 480p60/90
Senzor OmniVision OV5647 Sony IMX219
Rezolutie senzor 2592 × 1944 pixeli 3280 × 2464 pixeli
Arie senzor imagine 3.76 × 2.74 mm 3.68 x 2.76 mm
Marime pixel 1.4 µm × 1.4 µm 1.12 µm x 1.12 µm
Camp vizual orizontal 53.5 de grade 62.2 de grade
Camp vizual vertical 41.41 de grade 48.8 de grade
Focal ratio (F-Stop) 2.9 2

Tabel 3: Comparare Camera v1 si Camera v2 Raspberry Pi

Cameră v2.1 este compatibilă cu toate generațiile de Raspberry Pi, datorită conexiunii
seriale standard CSI. Unul dintre îmbunătățirile vizibile la această cameră este tehnologia
introdusă de cei de la Sony de AWB 11. Scopul acesteia este de a reda culorile reale ale
obiectivului filmat indeferent de temperatură luminii din încăpere. Filmarea unui obiect alb va
rezultă în redarea a unor pixeli albi chiar dacă sursă de lumina este un LED, un bec
incandescent, soarele sau de tip fluorecenta. [12]

11
Auto White Balance: balanta de culori la camere foto si video

20
Lucrare de licență Horațiu-Luchian NEMEȘ

O decizie în legătură cu alegerea modelului de cameră, pentru această lucrare de


diplomă, a fost, din nefericire, redusă la o opțiune implicită din cauza faptului că acestea erau
singurele versiuni apărute până în prezent, iar versiunea 1 a fost scoasă de pe piață de către
OmniVision Technologies, producătorii senzorului de imagine. Aceștia au încetat producția
camerei în 2014, că mai târziu în Aprilie 2015 să fie cumpărați de mai mulți investitori chinezi
pentru sumă de 1,9 miliarde de dolari. [17]

2.2.3. Placa Arduino

Anul 2005 marchează începuturile companiei Arduino, când un student columbian


numit Hernando Barragan, a construit primul prototip al plăcuței, pentru un proiect din cadrul
facultății sale, Instituția de Interacțiune a Designului din comună Ivrea, Italia. Țintă, propusă
de student, pentru acest proiect, a fost asigurarea unei soluții simple și ieftine, atât pentru
începători cât și pentru profesioniști, pentru crearea unor dispozitive capabile de interacțiune
cu mediul cu ajutorul senzorilor și sistemelor de acționare. [18]

Numele a fost inspirat după un bar din comună Ivrea, Italia, unde studentul care a
construit prototipul împreună cu ceilalți fondatori ai companiei obișnuiau să se întâlnească.
Barul a fost numit după un rege al Italiei, Arduin din Ivrea.

Plăcută de dezvoltare folosită de studenți, în acea vreme, era o plăcută de dezvoltare


BASIC Stamp 12, care, de șine stătătoare, costă în jur de 100 de dolari. Această era, și este,
considerată o sumă foarte mare pentru bugetul studenților. Prețul unui kit complet Arduino, în
momentul de față, cu nenumărați senzori, ecran LCD, fire, breadboard, LED-uri, motor DC,
motor servo și o mulțime de alte module compatabile este cu puțin peste 30 de dolari. Un astfel
de pachet este atât de voluminos din punct de vedere al numărului de module conținute încât
întrece greutatea de 1 kg. Un lucru de notat este că înafară de breadboard, niciunul din module
nu întrece dimensiunea plăcii, iar placă înșine nu cântărește mai mult de 20 de grame. [19]

Pe lângă partea Hardware, aceștia au dezvoltat și propriul lor IDE 13, Arduino Software.
Programarea se face prin intermediul unui limbaj asemănător cu C++, având la dispoziție clase
și librării specifice Arduino. AVR Studio și Atmel Studio sunt două exemple de alternative
fiabile pentru compilarea pe Arduino. Diferență este suportul IDE-urilor pentru sistemele de

12
Microcontroller dezvoltat de firma Parallax care se poate programa cu o distributie a limbajului de programare
Basic, denumit pBasic.Numele Stamp este inspirat de dimensiunea acestuia, fiind cat un timbru postal.
13
Integrated Development Environment: un set de programe, menit sa ajute programatorul in creearea altor
programe, folosindu-se de o interfata grafica prietenoasa, care ofera posibilitatea de editarea a codului sursa,
depanare erori sintaxa, testare si compilare, totul intr-un singur soft

21
Lucrare de licență Horațiu-Luchian NEMEȘ

operare. Arduino Software are suport pentru Windows, Linux, Linux ARM și OS X, ceea ce îl
face cel mai recomandat din punct de vedere al compatibilității. [20]

Figura 6 Placuta Arduino Nano

Pentru proiectul de diplomă, am ales să folosesc o plăcută Arduino Nano, prezentată în


figură 6, datorită dimensiunii, 5 ori mai mică, și a costului mult mai redus, jumătate, decât a
unui model mai popular precum Arduino Uno [21]. Dimensiunea acestuia este cu puțin mai
mare decât cea a modelului Pro Mini, dar avantajul acestei plăcute este că vine pregătit cu un
port USB pentru a putea fi programat direct. În cazul unei plăcute Pro Mini este nevoie de
achiziționarea unui conector de programare FTDI 14.

Înafară de câteva excepții din cele 24 de modele oficiale apărute (7 la număr în


momentul de față și anume: Arduino 101, Gemma, MKR1000, Zero, Due, Yun și MKRZero),
toate modelele de Arduino au fost proiectate în jurul unui procesor ATmega. Vitezele de
procesare disponibile, în funcție de model, sunt de 8 și 16 Mhz. Viteză modelului de Arduino
Nano este de 16 Mhz, după cum este prezentat în tabelul4. Fiecare model de placă are schema
open source, ceea ce înseamnă că urmând indicațiile primite, îți poți construi propria placă.
Acest lucru este util pentru crearea unui PCB pentru un proiect specific unde ai libertate de
aranjare al pieselor și știind exact numărul și tipul de pini folosiți, poți economisi spațiu prin
înlăturarea a celor nefolosiți. [22]

14
Future Technology Devices International: companie din industria semiconductoarelor specializata in
tehnologia Universal Serial Bus

22
Lucrare de licență Horațiu-Luchian NEMEȘ

Microcontroller ATmega328
Arhitectura AVR
Tensiune iesire 3,3V sau 5 V
Memorie Flash 32 KB din care 2 KB sunt folosiți de bootloader
Memorie SRAM 15 2 KB
Frecvență procesare 16 MHz
Pini Analog I/O 8
Memorie 1 KB
Curent per pin I/O 40 mA (I/O Pins)
Tensiune intrare 5V sau 7-12 V
Pini Digitali I/O 22 din care 6 PWM 17
Curent consumat 19 mA
Mărime PCB 18 x 45 mm
Greutate 7g

Tabel 4 Specificatii Arduino Nano [23]

Pentru realizarea acestui proiect, raportul mărime specificații este unul excelent.
Există alte modele mai voluminoase care au putere de procesare mai bună, însă și consumul
de curent era pe măsură. De asemenea există modele mai compacte, însă nu veneau echipate
cu un port de programare. Alte specificații precum memoriile și numărul de pini au rămas
constante printre ceilalți candidați posibili pentru folosirea la acest proiect.

2.2.4. Placă de recunoaștere vocală Geetech

În anul 1952, trei cercetători de la un laborator numit Bell Labs au construit un sistem
capabil să recunoască cuvintele pronunțate de oameni. Tehnologia acelei perioade a limitat
sistemul la un vocabular de aproximativ 10 cuvinte însă această lucrare a pus bazele
recunoașterii vocale de astăzi. Până pe la finalul anilor ’60, orice sistem creat obligă utilizatorii
să facă o pauză după fiecare cuvânt pronunțat. Atunci un absolvent al Universității Stanford,

15
Static Random Access Memory: memorie semiconductoare care foloseste circuite logice combinationale
pentru a memora fiecare bit, astfel nu mai are nevoie de un ciclu periodic de reimprospatare precum Dynamic
Random Access Memory [21]
16
Electrically Erasable Programable Read Only Memory: memorie nevolatila folosita in echipamente
electronice pentru stocarea datelor care trebuie sa persiste si dupa intreruperea alimentarii circuitului; aceasta
memorie poate fi stearsa si reprogramata in timp ce sunt in circuit aplicand o tensiune mai mare decat cea
generata de circuit [22]
17
Pulse Width Modulation: tehnica de codificare a unei informatii intr-un semnal care pulseaza si modalitate
de control al fluxului de curent pentru echipamente precum led-uri si motoare

23
Lucrare de licență Horațiu-Luchian NEMEȘ

Raj Reddy, a îmbunătățit proiectul proiectând un sistem care a făcut posibil că un joc de șah să
poată fi controlat doar din comenzi vocale. [24]

Având proprietăți foarte asemănătoare cu exemplul cercetătorilor, plăcută modernă de


la Geetech, reprezentată în figură 7, are dimensiunea unei cărți de credit, este un modul ieftin
și poate fi configurată să recunoască un anumit set de instrucțiuni folosind un microfon și o
soluție de comunicare serială între plăcută și un calculator. Plăcută are o acuratețe de 99% într-
un mediu ideal și are capabilitatea de a-ți recunoaște vocea. Dacă instrucțiunea este rostită de
către o altă persoană decât cea care le-a înregistrat, există șanse foarte mari că aceste comenzi
să nu fie recunoscute. [25]

Figura 7 Modulul de recunoastere vocala Geetech [26]

Un mare dezavantaj al acestei plăcute este memoria limitată pe care se pot programă
doar 15 instrucțiuni vocale. Aceste 15 instrucțiuni sunt grupate câte 5, având astfel 3 grupuri
individuale. Înainte de a da comenzi plăcuței, trebuie încărcat grupul de comenzi dorit. Cu alte
cuvinte, plăcută nu va recunoaște o comandă dintr-un alt grup decât cel selectat chiar dacă
această face parte din lista celor înregistrate.De menționat faptul că instrucțiunile și setările nu
se vor pierde după scoaterea de sub tensiune a plăcii. [26]

24
Lucrare de licență Horațiu-Luchian NEMEȘ

Voltaj 4.5 - 5.5V


Consum curent sub 40 mA
Interfata digitala interfata UART la nivel TTL 18 de 5V
conector jack 3.5mm pentru microfon cu canal mono
Interfata analog si alternativa de interfata prin pini tot pentru microfon
Dimensiune 30 x 47.5 mm
Greutate 5g

Tabel 5 Specificatii modul recunoastere vocala Geetech [25]

Datorită faptului că acceptă o alimentare la 5V și consumă mai puțin de 40 de mă,


această plăcută este perfectă de a fi legată direct la o plăcută Arduino fără vreo sursă de curent
exterioară. Plăcută poate fi configurată trimițând anumite comenzi de câte 8 biți pe portul serial.
Una dintre comenzile cele mai utile pentru o parsare cât mai ușoară a rezultatelor primite de la
plăcută de recunoaștere vocală pe plăcută Arduino este schimbarea din modul comun în modul
compact. Ceea ce face această setare este să spună plăcuței să răspundă la comenzi prin afișarea
unui byte în locul unui strîng text. O lista completă de comenzi și instrucțiuni de folosire a
acestei plăcute poate fi găsită aici: [25].

Unul din lucrurile de menționat când vine vorba de utilizare, este faptul că legarea unui
microfon de calitate și folosirea modulului într-o încăpere liniștită este recomandată pentru a
reduce riscul de erori din partea plăcuței. De asemenea este recomandat să se aleagă comenzi
cu pronunție diferită, structură cât mai diferită și cuvinte cât mai diferite. De exemplu cuvintele
,,lei” și ,,tei” au o probabilitate mare să fie încurcate de către plăcută dacă pronunția
utilizatorului nu este una excelentă.

Scopul includerii acestui modul în lucrarea de diplomă este viteză cu care recunoaște
comenzile. Deși acuratețea și calitatea este cu mult mai bună, folosirea unui API 19 de
recunoaștere vocală pe Raspberry Pi, sau orice altă variantă mobilă găsită, impune așteptarea
de câteva secunde după ce o comandă a fost data. În schimb această plăcută reacționează
aproape instant. Această așteptare poate fi justificată pentru comenzi care presupun căutarea
unor date pe internet însă este inadmisibilă pentru cazul în care doar ne adresăm proiectului sau
dăm comenzi simple care nu necesită nicio căutare sau alte procesări de date.

18
Transistor-transistor logic: clasa de circuite digitale construita din tranzistori bipolari si rezistori unde
tranzistorul se ocupa atat de partea logica a operatiei cat si de partea de amplificare cu scopul de a lega
functionalitatea a doua blocuri logice [23]
19
Application Programming Interface: set de protocoale, subprograme si unelte pentru programarea de
aplicatii si software, care se ocupa de interfatarea dintre doua entitati

25
Lucrare de licență Horațiu-Luchian NEMEȘ

2.2.5. Modem 3G ZTE MF110

ZTE(Zhongxing Telecommunication Equipment) este o companie de origine chineză,


producătoare de echipamente de telecomunicații precum produse wireless, transmisie optică și
telefoane mobile. Este în top 5 al celor mai mari producători de telefoane de tip smartphone pe
piață din China. În principal aceștia vând produse sub numele propriu însă sunt de asemenea și
OEM 20. [27]

Modulul prezent în figură 8 este un dispozitiv compact capabil de tehnologii 3G/3G+ și


EDGE/GPRS. Acesta folosește o cartela SIM de dimensiune standard. Viteză de transfer a
datelor pe rețeaua 3G+ poate ajunge paana la 4.5Mbps iar cele de recepționare de până la
7.2Mbps. Pe lângă conexiunile de tip rețea, acest modul este capabil de citire memorii microSD.
[28]

Figura 8 Modem 3G ZTE MF110

Scopul folosirii acestui modul este accesul la internet de pe plăcută Raspberry Pi, având
suport din partea comunității linux pentru această conexiune. Posibiliatile și oportunitățile unui
robot capabil de conexiune la internet, fără vreo constrângere din punct de vedere a prezenței
în apropiere a unui router Wifi , sunt imense. Cel mai evident și folositor caz este controlul la
distanță, lucru discutat în ultimul capitol.

20
Original equipment manufacturer: companie care produce echipamente si produse care pot fi
comercializate sub numele altui producator

26
Lucrare de licență Horațiu-Luchian NEMEȘ

2.3. Echipamente Software

Pentru elaborarea lucrării de diplomă, din punct de vedere software, s-au folosit
următoarele tehnologii:

o Limbajul de programare Python


o Limbajul de programare Bash

2.3.1. Despre Python

Creat în 1989, Python este un limbaj dinamic de programare cu proprietăți de mulți-


paradigma. Acesta a fost creat de un programator oladnez, pe nume Guido van Rossum.
Diversitatea de aplicații posibile realizate în acest limbaj duc de la aplicații web la aplicații
stintifice sau doar de script.

Trăsătură de bază a acestui limbaj de programare este simplitatea codului și sintaxa


care obligă programatorul să scrie un cod curăț și ordonat. Acest fapt este dat de necesitatea
folosirea identarii pentru că un cod scris în Python să poată fi compilat cu succes. O calitate
importantă a limbajului este posibilitatea versatila a acestuia. Paradigma să de programare
permite dezvoltarea de software orientat pe obiect, procedurală, funcțională sau una scrisă într-
un stil imperativ. Administrarea memoriei este realizată automat cu ajutorul serviciului de
garbage collecter.

Comunitatea care folosește acest limbaj de programare fiind din ce în ce mai


numeroasă, duce la o creștere continuă a unei biblioteci deja de dimensiuni ample. Abordarea
open source și deschis către comunitate a dus la crearea a multor librării nonstandard care mai
apoi au fost acceptate în pachetul de bază a acestuia.

2.3.2. Despre Bash

Lansat în 1989, Bash este un limbaj de programare realizat pentru Unix cu scopul de a
înlocui shell-ul Bourne. Acesta a fost scris de un programator american, pe nume Brian Fox,
făcând parte din proiectul de compilator GNU. Numele ales este un acronim pentru Bourne-
again shell. Această a fost modalitatea autorului de a aduce un omagiu și râde în același timp

27
Lucrare de licență Horațiu-Luchian NEMEȘ

de limbajul care urmă a fi înlocuit și de sintagmă „Born again” prin care se semnalează ideea
spirituală de renaștere.

Scopul acestui limbaj de programare este în principiu de creare de scripturi sau de


executare a comenzilor din linux. Acesta rulează în mod normal în fereastră text de consolă în
care utilizatorul notează comenzi care fac acțiuni specifice. Acesta are mai multe aspecte în
comun cu un limbaj de programare obișnuit. Este capabil de condiții de test, de variabile,
documentație, legătură între procese și multe altele.

Popularitatea scriptului pe sistemele de operare linux a dus la integrarea acestuia că


fiind principală metodă de scriere în consolă. Unul dintre caracteristicile prezentate la [29] este
autocompletarea comenzii , doar prin apăsarea primei sau a câtorva dintre taste și mai apoi
acționarea tastei TAB.

28
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 3. Arhitectura sistemului

Lucrarea de diplomă este formată din trei părți:


o Arhitectura Mecanică, prezentată in subpunctul 4.1, unde este explicată
proiectarea, aranjarea si interactiunea pieselor intre ele
o Arhitectura Hardware, prezentată în subpunctul 4.2, unde este explicată
comunicarea, legătura și dependința dintre componentele hardware
o Arhitectura Software, prezentată în subpunctul 4.3, unde este explicată
comunicarea și interacțiunea dintre componentele software

3.1. Arhitectura mecanică

Arhitectură mecanică a lucrării de diplomă presupune mai multe seturi de piese printate
cu ajutorul imprimantei 3D. Proiectul înșine este format din două entități de șine stătătoare.
Avem semisferă, capul robotului, și sferă, corpul robotului. Acestea sunt formate din 3 straturi
principale:

o Carcasa
o Schelet
o Mecanism intern

În figură 9 se poate vedea așezarea celor două entități, cap și corp. Un lucru de
menționat, absent în figură prezentată, este distingerea între schelet și carcasă. Scheletul este
prezent doar în corp iar carcasă este prezența în ambele entități. Am considerat irelevantă
grosimea pereților celor două entități în prezentarea așezării modulelor. Acestea sunt mai multe
componente proiectate în Autodesk Fusion 360 și mai apoi printate. Fiecare componența este
complet modulară și a fost proiectată astfel cu scopul de a putea înlocui cu ușurință dacă una
dintre regiuni cauzează probleme, are nevoie de reparații sau chiar are nevoie de o reproiectare.
Astfel am redus costul de printare atât din punct de vedere financiar cât și din punct de vedere
al timpului, nemaifiind nevoie să se reprinteze tot asamblul pentru modificarea sau înlocuirea
unei anumite zone. O bară de metal cu diametrul de 8 mm, M8, a fost folosită pentru a legă
modulele între ele.

29
Lucrare de licență Horațiu-Luchian NEMEȘ

Legendă

█ perete cap

█ perete corp

█ perete modul

█ bara de legatura
din metal

Figura 9 Vedere frontala a arhitecturii mecanice

În subcapitolul 3.1.3 se va detalia formă, poziția și rolul fiecărui suport din figură 9
atât din interiorul sferei cât și din interiorul semisferei.

3.1.1. Carcasa

Pentru carcasă am folosit un set de componente proiectate de unul din administratorii


unui forum dedicat pentru construirea acestui gen de roboțel, pe nume Steele Smith. Fișierele
originale pot fi găsite aici [30]. Dimensiunea maximă de printare, a imprimantelor 3D puse la
dispoziție, nu a fost suficient de mare pentru a printa toate aceste piese. Astfel a fost nevoie că
toate piesele să fie scalate la 55% din dimensiunea lor originală. Piesele carcasei sunt menite să
vina prinse de schelet cu șuruburi M3. În urmă scalării, s-a ajuns la un diametru de mai puțin

30
Lucrare de licență Horațiu-Luchian NEMEȘ

de 2 mm. Pentru a putea folosi măcar șuruburi M2, a fost nevoie de corecție manuală la fiecare
eroare în mod individual. Corectarea nu a fost tocmai ușoară din pricină faptului că fișierele
sunt în format *.stl. Fișierul în acest format este defapt un mesh al unui obiect 3D, format doar
din puncte care alcătuiesc triunghiuri. Modificările se fac ori prin aducerea unui alt obiect,
intersectat cu obiectul cu care se dorește a face modificări și se optează pentru tool-ul de
diferientere pentru a creă găuri într-o anumită formă și locație, sau prin selectarea individuală
a fiecărui triunghi și mutarea acestora în spațiu.

Figura 10 O parte din piesele pentru carcasa printate

În figura 10 se pot vedea câteva din piesele necesare pentru asamblarea carcasei
robotului. Pentru realizarea sferei este nevoie de 8 triunghiuri, 6 cercuri ( un exemplu este cel
ținut în mână ) și 6 cercuri interioare( precum cel de sub echerul din figură precizată).
Triunghiurile au fost printate folosind PLĂ și ABS în funcție de disponibilitatea imprimantelor
iar cercurile transparente folosind PETG. Acestea au fost menținute transparente cu scopul de
a se vedea iluminarea din interiorul sferei.

31
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 11 Piesele capului printate

În figura 11 putem observa cele 4 piese necesare pentru realizarea semisferei robotului.
Am decis să printez tot ansamblul folosind filament PETG transparent din același motiv de a
putea ilumina anumite zone. Am considerat mai simplă variantă în care am acoperit zonele care
am dorit să rămână libere și să vopsesc restul cu vopsea neagră decât cea în care aș fi printat
separat acele zone din motivul prezentat mai sus al fișierelor *.stl . Rezultatele vor fi vizibile în
poze ulterioare.

3.1.2. Schelet

Modelul scheletului a fost ales din nou pe principiul economiei de material și a timpului
de printare. Doar două din cele trei variante populare și testate puse la dispoziție erau
compatibile cu design-ul proiectului de diplomă de deplasare. Cel mai popular sistem numit
T&M, este destinat sistemului “hamsterbal”. Acest design se bazează pe principiul unui hamster
care se deplasează din interiorul unei bile. Cu alte cuvinte, un roboțel convențional, cu o
greutate mai mare la bază, care este pus într-o bilă, perfect sferică, atât pe interior, cât și pe
exterior.

32
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 12 Scheletul in proces de asamblare

Modelul ales a fost proiectat de un alt membru al aceluiași forum, pe nume Micke
Askernäs. Deși nu este la fel de solid precum cealaltă variantă fiabilă, acest design a fost ușor
de modificat, scalat și printat. În figură 12 se poate observă scheletul asamblat cu unul dintre
triunghiuri deja atașat. Autorul nu recomanda printarea brațelor din plastic deoarece la
dimensiunea originală ar fi fost îndeajuns de rezistent pentru a susține toată greutatea. Cum a
fost scalat și acesta la aproape jumătate, contragreutatea a fost în mare parte și ea înjumătățită,
astfel structural este rezistent și plasticul.

A fost nevoie de 8 hub-uri ( cercurile cu 12 brațe), din care 2 au fost dedicate pentru suportul
ax-ului principal al mecanismului intern, 24 de brațe lungi, 24 de brațe scurte și 48 de cleme (
distantierele negre dintre brațe zărite din loc în loc ). Brațele lungi formau câte 4 un x. Acestea
oferă suport de prindere pentru cercurile transparente iar hub-urile oferă suport de prindere
pentru triunghiuri. A fost nevoie de aproximativ 130 de șuruburi M2 doar pentru asamblarea
scheletului.

33
Lucrare de licență Horațiu-Luchian NEMEȘ

3.1.3. Mecanism intern

În figura 9, unde am prezentat arhitectura mecanică, se pot observa modulele de


suport proiectate pentru mecanismul intern. Acestea sunt:

o Suport motor cu reducție


o Suport circuit
o Suport greutate pendul
o Suport servomotor pendul
o Suport servomotor 1 pentru mișcare cap pe axa x
o Suport servomotor 2 pentru mișcare cap pe axa z
o Suport magneți
o Suport magneți cu roți
o Suport rulment

3.1.3.1. Suport motor cu reducție

Acest suport a fost proiectat cu scopul de de a oferi o poziție fixă pentru motor în sferă
pe axă principală. După cum se poate observă în figură 13, într-un capăt avem gaură de 8 mm
pentru bară de metal conectoare iar în partea opusă avem sistemul de prindere.

Figura 13 Design suport motor cu reductie

Sistemul de prindere se bazează pe cele două locații amenajate din partea motorului
pentru două șuruburi M3 și un sistem de strângere din margini. Axul motorului iese prin gaură
de mijloc iar celelalte două găuri de lângă sunt cele menționate anterior. Găurile de pe marginea
construcției reprezintă sistemul de strângere. Două șuruburi tot de dimensiune de 3 mm se

34
Lucrare de licență Horațiu-Luchian NEMEȘ

strâng de pereții motorului pentru a-l ține în loc. Bară principală de metal poate susține și ea din
spate dacă este necesar.

3.1.3.2. Suport circuit

Acest suport are rolul de a oferi un loc stabil pentru circuitul robotului. Locul acestuia
este prins de suportul pentru motorul cu reducție. Se pot observă în figură 14 cele două
prelungiri care se alineaza cu sistemul de prindere al suportului menționat anterior.

Figura 14 Design suport circuit si sine

Pe marginea acestui suport se pot observa niște cleme care au o gaură pentru un șurub
de 2mm deasupra. Acestea sunt 6 la număr dintre care primul se repetă de 5 ori iar cel de-al
doilea mai mic doar odată. Cel mic vine amplasat în zonă din spate iar celalalte în celelalte cinci
locații de formă dreptunghiulara cu aceeași gaură prezentată. Pe mijlocul acestor cleme există
un șanț lăsat intenționat cu scopul de a alunecă circuitul pe acestea. În principiu se instalează
toate înafară de unul dintre cele din capăt, și anuma față sau spatele motorului. Apoi se înserează
circuitul. Și în final se pune ultima clemă și se strânge și această în loc.

35
Lucrare de licență Horațiu-Luchian NEMEȘ

3.1.3.3. Suport greutate pendul

Acest suport, din figură 15, a fost proiectat cu scopul de a avea o platformă pe care să
se așeze contragreutatea robotului. Această are menirea de a asigură poziția capului pe plan
vertical și de a asigură că motorul cu reducție va învârti sferă în locul învârtirii lui împreună cu
întreg ansamblul interior în jurul propriului ax.

Figura 15 Design suport greutate pendul

Ca si greutate, au fost folosite bateriile 18650, cate 4 pe fiecare parte a suportului.


Sistemul a fost gandit ca bateriile sa poata fi prinse de suport folosind bratari autoblocante.
Santurile de la baza suportului sunt proiectate pe dimensiunea acestor bratari si sunt menite sa
tina in loc bateriile. Intregul ansamblu a fost gandit astfel incat bratele acestui suport sa fie
indreptate inspre fata si spatele robotului. Scopul este de a lasa cat mai mult spatiu pentru
miscarea pendulului. Acest lucru este foarte important pentru gradele curbelor luate de robot.
Cu cat bratele ajung mai aproape de axul principal, cu atat robotul poate lua o curba mai strans.

Dimensiunea intregului ansamblu este de 16 x 3 x 4 cm. Gaura din mijlocul ansamblului


este de dimensiune M8, menita pentru bara de metal care conecteaza de suportul servomotorului
care va invarti intreg pendulul. Grosimea bratelor a fost aleasa de 1 cm pentru a putea sustine
cu usurinta greutatea necesara. Latimea acestora a fost proiectata pentru a incapea doua baterii
din cele mentionate pe lungime. Astfel s-au pus 2 baterii pe brat, si inca alte 2 baterii peste
acestea, pe fiecare brat pentru a asigura greutate, echilibru si sursa suficienta de energie pentru
robot.

36
Lucrare de licență Horațiu-Luchian NEMEȘ

3.1.3.4. Suport servomotor pendul

Acest suport are rolul de a mentine greutatea pendulului si sa ofere locatie pentru
servomotorul FUTABA 3003 care va actiona deplasarea pendului. Se poate observa in figura
16 zona amenajata pentru motor in partea din spate si cele 4 gauri alineate cu cele oferite de
motor. Folosind aceasta locatie, centrul axului motorului se va alinia cu cele doua gauri de
dimensiune M4 pozitionate la gaura pentru bara de metal de legatura de dimensiune de 8 mm.

Figura 16 Design suport motor pendul si conexiune cu pendul

În dreaptă figurii 16 avem conexiunea care vine poziționată între capetele celor două
găuri de 4mm. În interioriul conexiunii se introduce un rulment cu dimensiune interioară de 4
mm pentru a se asigură o mișcare cât mai lînă. Folosind una dintre capetele primite împreună
cu motorul, se va face legătură cu conexiunea. Ideea de bază este că toată greutatea pendulului
să fie susținută de această parte mecanică iar motorul doar să îl împingă în direcția corectă.
Alternativă de legare a greutății direct de axul motorului ar fi rezultat în distrugerea în timp a
zimților motorului.

37
Lucrare de licență Horațiu-Luchian NEMEȘ

3.1.3.5. Suport servomotor 1 pentru mișcare cap

Locația acestui suport este la mijlocul axului principal. Suportul din subcapitolul
anterior este poziționat de asemenea la mijlocul ansamblului, astfel rezultă că acesta se va află
între pereții suportului din subcapitolul curent. Se poate observă în figură 17 poziția găurilor
pentru bară metalică de legătură și sutinere de dimensiune de 8 mm. Comparând cele două
componente, se poate vedea cum vin acestea îmbinate.

Figura 17 Design suport servomotor pentru miscare cap pe axa x

În partea frontala există un loc amenajat special pentru un micromotor servo SG90 care
va stă cu axul motorului îndreptat în partea dreaptă. Rotația motorului va asigură acționarea
poziție capului pe axă x, adică mișcare față/jos – spate/sus a capului. În aceeași parte se pot
observă cele două găuri micuțe de 2 mm care corespund cu cele oferite de motor pentru a-i
asigură poziția în loc. În spatele motorului se află o scobitură în formă de pătrat pentru o piuliță
de dimensiune M4. Se va discută în următorul subcapitol scopul acesteia.

3.1.3.6. Suport servomotor 2 pentru mișcare cap

Scopul acestui suport, din figură 18, este de a asigură locație tot pentru micro
servomotor SG90 care va învârti capul pe axă Z, cu alte cuvinte stânga-dreaptă. Locația
servomotorului se poate observă în partea superioară a platformei. Tot acolo găsim cele două
găuri pentru șuruburi M2 care să îl țină în loc.

38
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 18 Design suport servomotor pentru miscare cap pe axa z

Poziția acestui suport este în jurul servomotorului menționat în subcapitolul anterior.


În partea dreaptă observăm două găuri de dimensiune M2 iar în partea din spate de dimensiune
M4. Găurile de 2 mm sunt dedicate pentru două șuruburi de această dimensiune care vin prinse
de elicea motorului. Această prindere va asigură mișcarea acestui ansamblu. În partea stânga,
șurubul M4 va face legătură cu piuliță M4 de la suportul anterior asigurând astfel suport
structural și o apăsare mai puțin drastică pe motor din cauza greutății. Datorită faptului că
mișcarea nu se dorește a fi mai mult de 30 de grade în oricare din direcții, și flexibilitatea de
care da dovadă plasticul PLĂ folosit, serviciul adus de piuliță M4 poate înlocui cu succes un
rulment.

3.1.3.7. Suport magneți

Acest suport are rolul de a oferi magneților din interiorul sferei o locație solidă și o
înclinație corespunzătoare. În figură 19 se poate observă suportul cu față care va fi lipită de
peretele interior al sferei vizibilă. În mijlocul suportului avem triunghiul cu gaură de 8 mm
pentru suportul metalic folosit, iar pe marginea acestuia avem cele 3 locații pentru cei 3 magneți
folosiți. După introducerea unui magnet în una dintre locații, se folosește unul din capace și se
poziționează cu față vizibilă în sus. Apoi se securizează în loc magnetul cu mare grijă prin
înșurubarea a două surubururi de dimensiune M2. Acest proces se repetă pentru fiecare magnet
în parte. Pentru a fi sigur că magneții nu vor fi smulși din loc cu tot cu capac și șuruburi în
momentul în care se va face contact cu ceilalți magneți din semisferă, se pot folosi niște piulițe
pe partă opusă al suportului de magneți.

39
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 19 Design suport magneti din sfera si capac magnet

Designul presupune pereți groși, capabili de a rezistă la șocuri din pricină mișcării
magneților și o înclinație a suprafeței de 10 grade. Luând în calcul dimensiunea sferei interioare,
această a fost înclinația aproximativă necesară pentru a ține magneții cât mai aproape de pereții
interiori.

3.1.3.8. Suport magneți cu roți

Acest suport reprezintă modalitatea de susținere a capului pe sferă în timpul deplasării


cât și reducerea frecării la minimumul posibil dintre cele două entități prin sistemul de roți. În
mare parte proiectarea se aseamănă cu suportul din subcapitolul anterior. Se poate observă în
figură 20 că principiul este același: 3 locații pentru 3 magneți la un unghi de 10 grade.
Mecanismul de închidere rămâne din nou același. Diferență este orientarea opusă a acestora și
distanță magneților față de triunghiul central. Pornind de la suportul de magneți pentru sferă,
am calculat o distanță de 3 cm cu loc de eroare între cei doi suporți, datorită pereților scheletului
și a carcasei. Folosind această distanță am putut află deplasarea magneților față de centru.

40
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 20 Design suport magneti din semisfera, capac magnet si mecanism roata

Pe lângă suporții de magneți mai avem acum și 3 brațe solide cu menirea de a oferi
prindere a sistemului de roți. Și acestea au aceeași înclinație de 10 grade însă la o distanță mai
îndepărtată pentru a avea cât mai mult spațiu pentru mecanismul de roți.

Mecanismul de roată are la bază conceptul folosit la scaunele de birou: o roată prinsă
de un suport capabil să se învârte în jurul propriei axe. Acest lucru a fost realizat cu ajutorul a
doi rulment pentru fiecare mecanism. Unul din rulmenți a fost prins în interiorul roții iar unul
în suportul acesteia. Prin interiorul rulmentului trece un șurub de dimensiune M2 care va face
legătură dintre cele trei componente.

Întreg ansamblul se va deplasa pe suprafața sferei fiind ghidat de magneți. Rotația


mecanismului din interiorul sferei este posibilă datorită faptului că unul dintre magneți în ambii
suporți de magneți sunt inversați față de ceilalți doi. Astfel câmpul lor magnetic opus îi va
împinge pe ceilalți doi în direcția dorită.

3.1.3.9. Suport rulment

În interiorul sferei, după cum s-a prezentat, în una din capete se află motorul cu reducție
care face posibilă deplasarea sferei iar în cealaltă parte există un rulment care reduce frecarea
dintre bară de metal de legătură și plasticul carcasei.

41
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 21 Design suport rulment

În figură 21, se poate observă pe mijloc adâncitură menită pentru rulment și gaură prin
care să poată trece bară de metal. Locația pentru rulment a fost proiectată cu intenție cu o mică
zonă de eroare pentru o înlocuire mai rapidă și mai simplă a acestuia în cazul necesar. Pentru
menținerea în loc se folosește același principiu că la suportul de motor și anume un șurub care
îl va apăsa dintr-o direcție, ținându-l astfel lipit de pereții respectivi.

Cele 8 găuri sunt menite pentru prinderea suportului de peretele interior al scheletului
sferei. În acest capăt se găsește un hub prezentat în 3.2.1 a cărui găuri pentru șuruburi se alineaza
cu găurile acestui suport.

3.2. Arhitectura hardware

Structură arhitecturii hardware poate fi găsită în figură 22. În această figură putem găsi
compnentele hardware și comunicarea lor între ele din fiecare dintre entități, și anume sferă și
cap. Liniile verzi reprezintă legătură prin fire a componentelor, săgeată reprezintă sensul
informației iar linia albastră reprezintă comunicația Bluetooth, care se poate vedea în schema
că este configurată pentru a fi unidirecțională.

Marcată cu linie și două puncte roșii este delimitarea capului de restul proiectului de
licență. Aici găsim că punct principal de control plăcută Raspberry Pi, având cea mai mare
putere de procesare dintre componente și procesând toate datele și instrucțiunile ce apăr în
sistem. Această comunică prin portul CSI cu cameră și prin USB cu modulul 3G și plăcută
Arduino. Plăcută Arduino se ocupă de o parte din procesarea de date și anume a celor venite de
la microfoanele și a rezultatelor primite de la modulul de recunoaștere vocală Geetech.

42
Lucrare de licență Horațiu-Luchian NEMEȘ

Procesarea acestor date duc la crearea de instrucțiuni care sunt păsate plăcuței Raspberry. În
final, plăcută Raspberry trimite instrucțiunile primite și generate mai departe la corp pentru a fi
executate.

Delimitarea oranj cu linii și două puncte reprezintă zonă corpului. Aici avem o singură
plăcută responsabilă pentru controlul fluxului de date și instrucțiuni și anume o a două plăcută
Arduino. Această are atașat un modul Bluetooth prin care primește instrucțiunile de la
Raspberry. Mai departe folosind instrucțiunile primite acesta acționează pe pinii analogici sau
digitali în funcție de comandă. Pinii digitali sunt legați la driverul motorului cu reducție. Prin
aceștia se ordonă direcția și viteză de învârtire a motorului, respectiv a sferei înșine. Folosind
pinii analogici se creează un semnal PWM de tip software prin care se setează la câte grade ar
trebui să treacă motoarele servo menționate în instrucțiunea primită prin Bluetooth.

43
Lucrare de licență

44
Legendă

█ Componenta HW

█ Semisfera(capul)

█ Sfera(corpul)

█ Sens date prin fir

█ Sens date prin BT

Figura 22 Schema bloc a arhitecturii hardware


Horațiu-Luchian NEMEȘ
Lucrare de licență Horațiu-Luchian NEMEȘ

3.3. Arhitectura software

În figura 23 putem observa structura arhitecturii software sub formă de schema bloc.
Aici putem sesiza interacțiunea modulelor sistemului cu toate componentele hardware.

Figura 23 Schema bloc a arhitecturii software

45
Lucrare de licență Horațiu-Luchian NEMEȘ

Arhitectura software este formată din urmatoarele 12 module:

o Modulul de recepționare comenzi controller


o Modulul de procesare comenzi controller
o Modulul de procesare date cameră
o Modulul de procesare comenzi vocale
o Modulul de procesare date microfoane
o Modulul de receptionare instrucțiuni vocale
o Modulul de conexiune 3G
o Modulul de punct de acces de tip Hotspot
o Modulul de control de la distanță
o Modulul de trimitere instrucțiuni prin Bluetooth
o Modulul de recepționare instrucțiuni
o Modulul de acționare motoare

Fiecare modul menționat anterior și reprezentat în schema bloc al arhitecturii, figură


23, reprezintă câte o funcție a sistemului. Săgețile verzi indică traseul de la emițător la receptor
al informațiilor cât și sensul acestora.

3.4. Funcțiile sistemului

Sistemul conceput este format din două entități de șine stătătoare:capul și sferă. Aceste
entități sunt menite a lucra împreună pentru a realiză un robot funcțional. Legarea celor două
se face prin intermediul câmpului magnetic generat de seturile de magneți din interiorul sferei
și a capului. Având că și contragreutate bateriile situate la bază sferei, acesta își poate menține
capul pe poziție verticală. Folosind greutatea pe post de pendul, robotul își poate schimbă
centrul de greutate de pe o parte pe altă, putând astfel când se deplasează înainte să se încline
în stânga sau dreaptă pentru a luă curbă precum un automobil.

La bază acestui sistem stă o plăcută Raspberry Pi 3 Model B, prezența în interiorul


capului, care prin intermediul conexiunii de tip Bluetooth face legătură cu o plăcută Arduino,
prezența în interiorul sferei. Astfel se realizează legătură dintre cele două entități și pe plan
hardware. Din punct de vedere software, cele două comunică prin intermediul a două module
responsabile pentru comunicarea fără fir. În figură 24 se poate observă fluxul de comenzi, date
și rezultatul acestora.

În interiorul capului, găsim plăcută responsabilă pentru cele mai multe module din
sistem și anume plăcută Raspberry Pi. Această se ocupă în prima fază de conexiunea Bluetooth
cu controller-ul Sony Dualshock 4. Datele primite trebuie procesate, mapate și trimise mai

46
Lucrare de licență Horațiu-Luchian NEMEȘ

departe. Modulele responsabile de partea de controller sunt Modulul recepționare comenzi


controller și Modulul procesare comenzi controller.

Figura 24 Schema software funcțională

Alte module importante sunt reprezentate de cele responsabile pentru procesarea


datelor audio. Pe lângă plăcută Raspberry, mai există o plăcută Arduino în interiorul capului.
Acestea comunică serial prin intermediul porturilor USB. În interiorul capului există în total 3
microfoane: una responsabilă pentru recepționarea comenzilor vocale și două responsabile
pentru detectarea locatiei din care vin instrucțiunile. Astfel, plăcută Arduino din cap este
responsabilă pentru două module: Modulul de procesare date cap și Modulul procesare comenzi
vocale. Modulul de transmitere instrucțiuni la plăcută Raspberry este integrată în cel de-al
doilea modul, fiind un modul mult prea mic pentru a fi unul de șine stătător.

Pe lângă extragerea datelor audio din mediu, robotul se ocupă și de procurarea celor
foto și video prin intermediul camerei Raspberry Pi.Un singur modul este responsabil de acest
lucru și anume Modulul de procesare date cameră.

Cel mai mare grup de module de pe placă Raspberry îl reprezintă grupul de comunicații.
Înafară de comunicația Bluetooth cu controller-ul wireless, mai există și acces la rețeaua 3G,

47
Lucrare de licență Horațiu-Luchian NEMEȘ

crearea unui semnal de tip hotspot, conexiune la distanță de la un alt dispozitiv la plăcută
Raspberry Pi și în final, cel mai important modul, de transmitere a datelor către plăcută Arduino
prezența în sferă robotului. Modulul de rețea 3G este cel care încărca driver-ul necesar
funcționării a modem-ului, se asigură de conexiune a semnalului și de activare a setărilor de
rețea. Modulul de asigurare a unui semnal de tip hotspot a fost integrat în fișierul rc.local, care
rulează la pornirea plăcuței. Modulul de 3G și modulul de hotspot lucrează împreună pentru a
oferi utilizatorului atât acces direct la plăcută cât și acces la internet în același timp. Astfel în
momentul în care ne apare în lista de rețele disponibile numele dat plăcuței raspberry pi, știm
cu siguranță că această a bootat și că ne putem conecta la ea pentru acces la internet. Pe lângă
conexiunea la internet, modulul de hotspot mai are rolul de a veni în ajutorul modului de
conexiune la distanță. Acest modul asigură acces la interfață de utilizator al plăcuței de pe un
alt dispozitiv. Pentru a fi posibil acest lucru, dispozitivul și Raspberry Pi-ul trebuie să fie
conectate la aceeași rețea. Conexiunea fizică prin ethernet nu mai este necesară în timp ce
modulul hotspot este în folosință.

După procesarea tututor comenzilor și datelor , se crează instrucțiuni pentru plăcută


Arduino din interiorul sferei pentu a fi executate. Acestea sunt transmise prin intermediul
conexiunii Bluetooth dintre acestea două. Pentru realizarea acestui transfer unidirecțional este
totuși necesară folosirea a două module. Unul este cel menționat de pe plăcută Raspberry de
trimitere a instrucțiunilor iar una este prezența pe plăcută Arduino din interiorul sferei, și anume
Modulul de recepționare a instrucțiunilor. Instrucțiunile au formatul a doi bytes. Primul
reprezintă comandă iar cel de-al doilea reprezintă valoarea acesteia. Astfel trebuie asigurat
faptul că se primesc datele corecte în ordinea corectă pentru a nu avea reacții eronate din partea
robotului.

Instrucțiunile primite au unicul scop de aplicare tensiune pe motoare. În funcție de


codul instrucțiunii se știe despre care motor este vorba iar în funcție de valoarea primită se
cunoaște viteză sau unghiul de rotire a motorului. Pentru determinarea direcției de rotație a
motorului cu reducție se folosesc coduri de instrucțiuni diferite pentru a putea stabili și viteză
prin intermediul aceluiași pachet de bytes.

48
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 4. Implementarea sistemului

Pentru implementarea sistemului este nevoie că dezvoltarea hardware și software să fie


susținute de proiectarea mecanică și vice versa. Componentele și tehnologiile folosite pentru
această lucrare de licență nu sunt singură variantă sau combinație posibilă pentru a realiză
rezultate identice, asemănătoare sau chiar mai bune. Există o serie de dependințe între părțile
implementării sistemului. Dezvoltarea software nu poate fi realizată în lipsă componentelor
hardware. Componentele hardware nu poți fi achiziționate fără a stabili scopul proiectului,
funcțiile sistemului sau a metodei de abordare al acestora. Proiectarea mecanică nu poate fi
realizată fără a avea informațiile precizate anterior și fără a știi exact care vor fi componentele
hardware folosite.

Personal, am început cu o parte din proiectarea mecanică. A fost foarte important de


găsit o imprimanta 3D care să fie disponibilă pentru prototipizare pe parcursul creării robotului.
După ce acest obstacol a fost înlăturat, a fost nevoie de o inspectare a specificațiilor
dispozitivului pus la dispoziție. În funcție de dimensiunile maxime suportate de imprimanta 3D
pentru printarea părților necesare, timpul disponibil pentru proiectarea componentelor, și
opțiunile disponibile pentru partea hardware, s-a decis dimensiunea finală a spațiului interior al
robotului cât și al întregului ansamblu.

În general scopul roboților este de a avea o dimensiune cât mai redusă și de a avea cât
mai multe caracteristici. Scopul personal, în această privință, a fost de a mă apropia cât mai
mult de dimensiunea originalului, având astfel o libertate mai mare la proiectarea suporților
interiori și a alegerii componentelor hardware. Luând în considerare specificațiile imprimantei
precizate în paragraful anterior, am ajuns să realizez o versiune a robotului care e jumătate din
dimensiunea originalului prezentat în film.

Având dimensiunea finală a carcasei, scheletului, și astfel dimensiunea spațiului


interior atât din interiorul capului cât și a sferei, am căutat componente hardware care să își
atingă obiectivul. Știind că una dintre caracteristicile de bază ale robotului este rostogolirea de
una singură a sferei, am început cu componentele necesare pentru asta.

Prima componența luată în considerare a fost motoarele folosite pentru deplasare. Tipul
de motor pentru această sarcină a ajuns să fie un motor cu reducție. Că variantă de rezervă era
folosirea unui servomotor, cu rotație continuă care avea aceeași putere de rotire. Dezavantajul
acestor motoare este viteză redusă. Motorul cu reducție este alegerea perfectă pentru acest
proiect având atât putere de rotire foarte mare ( de la 3 kilograme/cm3 în sus) cât și o viteză
ridicată (de la 150 de rotații per minut în sus).

49
Lucrare de licență Horațiu-Luchian NEMEȘ

Am ales să merg pe o proiectare care constă în folosirea a unui singur motor cu cuplu
pentru rostogolirea efectivă a sferei în locul unei abordări convenționale care presupunea
folosirea a două motoare. Această decizie a inclus mai multe motive. Unul dintre ele a fost
reducerea costului de producție. Aceste motoare au un preț de start destul de ridicat iar după o
analiză mai atentă am observat că diferență de preț și de specificații nu era în niciun caz direct
proporțională. Un alt motiv a fost reducerea consumului de putere. Astfel bateriile robotului ar
trebui să reziste mai mult. Un ultim motiv, dintre cele mai importante, a fost nevoia folosirii
unui driver cu acest tip de motoare. Fiind motoare cu reducție și putere de rotire mare, este
nevoie și de un consum de curent pe măsură. Folosirea a două drivere era din nou ineficiența
din punct de vedere financiar și al consumului. Pentru un design mai restrâns ar fi fost o piedică
lipsă de spațiu. Un driver cu canal dublu care să suporte cantitatea de curent necesară pentru
fiecare motor este din nou costisitor.

Știind puterea de învârtire a motorului, am putut calculă dimensiunea robotului care va


putea fi învârtita de acesta. Deși am fost deja decis pe mărime, această a fost prima verificare
că sistemul într-adevăr va funcționa și aici am putut decide grosimea componentelor printate.
Componente mai groase înseamnă rezistentă mai mare. Din păcate înseamnă și o greutate mai
mare. Este de înțeles faptul că în acest set de păși și această ordine a trebuit că toate valorile să
fie luate estimativ și să se creeze cazul cel mai rău pentru a preveni o incompatibilitate de
design.

După ce tipul de motor, tipul de abordare și motorul principal au fost alese, am început
să caut un driver capabil pentru a-l controla. Conform specificațiilor, motorul are un consum de
curent de 6A la 5V când axul motorului este oprit în timp ce el este funcțional. Acesta este un
consum imens pentru un motor de 5V. Driverele de motor capabile pe un singur canal de atât
de mult curent sunt aproape la fel de scumpe cât motorul înșine. Soluția găsită a fost folosirea
unui driver dual capabil de consum de 2A per canal. Chiar din specificațiile driverului se vine
cu soluția de legare a celor canale în serie, creînd astfel un singur canal capabil de 4A. Știind
că motorul nu va ajunge niciodată blocat și din experiență cu motoarele folosite anterior, am
considerat valoarea de 4A că fiind un prag sigur de folosire pentru acest motor.

Având motorul principal și driverul necesar pentru a-l controla, următorul pas a fost
achiziționarea unui microcontroller capabil de semnal digital și PWM. Am ales pentru acest
lucru un Arduino Nano fiind o versiune compactă a lui Arduino Uno, mai ieftin și cu
specificațiile necesare amintite anterior. Pentru un proiect de dimensiuni mai reduse se
recomanda folosirea unui Arduino Pro Mini. Acesta are din nou specificațiile necesare
momentan cât și majoritatea specificațiilor în general doar că este de dimensiuni și mai reduse
decât Arduino Nano. Singurul dezavantaj este că va fi nevoie achiziționarea unei soluții de
comunicare între plăcută și calculatorul de pe care se va programă, neavând un port USB direct
atașat.

50
Lucrare de licență Horațiu-Luchian NEMEȘ

Având primul ansamblu de componente disponibil, s-a putut testa prima dezvoltare
hardware. Am scris astfel un cod scurt de Arduino în care am dat valoare celor doi pini legați
la driver. Unul are scopul de control al direcției iar celălalt de control al vitezei. Fiind doar două
direcții proibile, un semnal digital este suficient pentru această sarcină. Viteza având mai multe
trepte s-a folosit un pin digital capabil de semnal PWM. Scopul testului este de a confirma
compatibilitatea celor 3 componente: motor, driver și Arduino. Motorul și Arduino nu aveau
atât de multă nevoie de test cât înțelegerea driverului cu motorul.

Continuând pe partea hardware, următoarea decizie a fost achiziționarea unui motor


necesare pentru acționarea pendului. După cum a fost prezentat și în capitolul cu arhitectură
mecanică, scopul acestui pendul este de a asigură o contragreutate necesară pentru susținerea
pe plan vertical al capului cât și schimbarea centrului de greutate al robotului. Schimbând
centrul de greutate, sferă se va înclină într-o parte sau altă. Acționând motorul principal în timp
ce centrul de greutate a fost schimbat va rezultă în schimbarea direcției de deplasare al
robotului. Astfel acest sistem va ajută robotul să treac din linie dreaptă în line curbă în partea
dreaptă sau stânga în funcție de poziția pendului. Știind scopul acestui motor, se poate alege
ușor unul compatibil. Este nevoie în primul rând din nou de un motor cu putere mare de rotire
pentru a putea mișcă greutatea din loc. Știind că în momentul în care motorul va mișcă pendulul,
acesta va rămâne mereu perpendicular cu pământul și va înclină defapt sferă înșine, e
deductibila informația că e nevoie de o forță care va putea cel puțin să o miște din loc. De
asemenea cunoscând faptul că pendulul se va află în partea inferioară a sferei și că această nu
se va află la mai mult de 90 de grade, putem consideră folosirea unui servomotor capabil de o
rotire de 180 de grade. Astfel avem alocat câte 90 de grade pentru fiecare direcție. Avantajul
principal al folosirii acestui tip de motor este faptul că encoder-ul sau integrat poate fi apelat
printr-un semnal PWM care îi va dictă unghiul de rotație. Motorul va știi mereu unde se află 0
și 180 de grade. Semnalul transmis îl va seta la unghiul transmis prin semnal. În cazul meu un
motor Futaba 3003 și-a îndeplinit scopul cu succes.

Pentru a încheia cu achiziția de motoare, am trecut în căutarea unor servomotoare


pentru poziția capului. Fiind dovedit de la pendul că un control al poziției dintr-un simplu
semnal PWM este pe cât de ușor pe atât de eficient, am decis că și aici vor fi folosite tot de
acest tip. Știind că greutatea capului nu fi o , m-am îndreptat înspre niște micro servo motoare.
Modelul fost SG90. Acest motor are putere de rotire de 1kgf/cm3 fiind mult decât suficient
pentru mișcarea capului acestuia aceeași poziție. funcție de complexitatea se folosi 1 3
motoare pentru acest scop. Fiecare motor o planul 3D. Proiectarea lucrării de presupune
mișcarea capului același timp aceași directe cu mișcarea pendulului, deci dintre axe am
considerat-o . Astfel, am ajuns folosesc dintre aceste motoare pentru mișcarea-1select11 -
spate capului.

Ultima piesă de dimensiuni mai ample, necesară pentru un robot care se poate deplasa
fără restrângeri de distanță este bateria. Având în vedere că proiectarea robotului presupune

51
Lucrare de licență Horațiu-Luchian NEMEȘ

utilizarea unei greutăți pentru funcționarea să, putem folosi baterii mai mari, care vor da și ele
greutate. Pentru un proiect de dimensiuni mai reduse este recomandată folosirea unor baterii de
dimensiuni mai reduse și folosirea că și greutate a unor obiecte cu densitate mai mare pentru a
obține o greutate cât mai mare într-o dimensiune cât mai mică. Personal, știind că spațiul nu va
fi o problemă, am ales folosirea unor celule 18650. Aceste pot fi des întâlnite în bateriile de
laptop și powerbank-uri. Sunt celule reîncărcabile de dimensiuni mai ample decât bateriile
clasice de tip AA. Au de asemenea și o cantitate considerabilă de mah, dându-i mai mult timp
de funcționare robotului.

Având toate piesele care se presupun că ar ocupă cel mai mult spațiu în interiorul sferei,
se trece la aranjarea și eventuală poziționare a acestora. În această fază, totul rămâne încă pe
hârtie până când vom veni cu soluția ideală. Abordarea mea a fost să fac o măsurătoare
aproximativă a diametrului sferei, și a pieselor ce urmau a fi introduse. Din moment ce m-am
decis despre așezarea lor efectivă și m-am convins că vor încăpea în această formație, am trecut
la printarea componentelor pentru carcasă și schelet. Între timp am început să proiectez modular
pentru fiecare piesă hardware câte un suport pentru a le poziționa apoi în sferă. Ideea
măsurătorii doar aproximative a fost o anumită marjă de eroare luată între versiunea 3D pe
calculator și versiunea printată. Pentru atașarea modulelor proiectate am decis să folosesc o bară
de metal care să fie tăiată pe dimensiunea necesară pentru îmbinarea componentelor. În capătul
opus motorului s-a folosit un rulment care să asigure funcționarea sistemului. Și acesta se
enumera printre componentele care au necesitat un suport.

Până la începerea proiectării suporților pentru mecanismul intern, trebuie luată decizia
unei metode wireless de controlare sferei. Momentan, singurele variante fiabile Wifi
Bluetooth. Personal am bluetooth pentru aveam minte folosirea unei Raspberry care fie setat
pe post de hotspot pentru o conexiune . Astfel o conexiune cele fi mers pe Wifi.

Proiectarea presupus crearea tuturor pieselor din capitolul de . Fiecare dintre ele au
fost proiectate modular special pentru piesele alese. La secțiune, proiectarea este funcție de
autorul unui astfel de proiect. Multe modele au avut nevoie de o reproiectare din diverse motive.
fost nevoie de câteva eșuări pentru găsi dimensiunea de pentru o de eroare . Fără acest
detaliu, multe piese nu se îmbinau cum erau gândite.

Pe lângă proiectarea mecanismului intern și printarea carcasei sferei, a urmat și


printarea capului. În interiorul acestuia am introdus pentru început plăcută Raspberry Pi și setul
de baterii. Primul pas, din punct de vedere software, a fost realizarea comunicării Bluetooth și
scrierea unui cod atât pe această plăcută cât și pe cea Arduino pentru un control simplu al
motoarelor. Ulterior, am avut de ales o modalitate de control al întregului robot astfel încât să
fie convenabil pentru orice tip de utilizator. Variantele găsite includeau un program făcut în C#
care să poată fi folosit de pe orice calculator sau laptop. Această variantă deși era bună pentru
orice tip de utilizator, având interfață grafica care poate include instrucțiuni concise, nu era

52
Lucrare de licență Horațiu-Luchian NEMEȘ

fiabil din punct de vedere hardware. Nu orice calculator sau laptop vine echipat cu Bluetooth.
Astfel această variantă a picat. O a două variantă era dezvoltarea unei aplicații mobile.
Majoritatea dacă nu toate telefoanele de pe piață din ziua de astăzi are tehnologia necesară.
Impedimentul a fost estimarea unui timp prea îndelungat de investire în crearea unei astfel de
aplicații. Că ultima variantă, și cea alesa, am găsit folosirea unui controller cu conexiune
Bluetooth. Personal, consider această variantă mult mai bună decât cea a aplicației mobile
deoarece nu e nevoie că utilizatorul să privească ecranul în timp ce controlează robotul.
Controller-ul ales, Sony Dualshock 4 v2, are butoane fizice a căror locație poate fi găsită ușor,
prin simțul tactil, fără a pierde contactul vizual cu robotul.

Folosind metodă de comandă aleasă, a fost nevoie de utilizarea unui driver dedicat
pentru a asigură conexiunea dintre controller și plăcută și pentru a înregistra datele primite. Mai
departe s-au mapat datele primite astfel încât să se distingă fiecare buton printr-un ID unic și
printr-o valoare echivalentă cu starea butonului. Pentru butoanele digitale s-au primit stările de
tip ON și OFF iar pentru butoanele analogice datele primite erau valori cuprinse între -1 și 1.
După maparea corespunzătoare, codul se ocupă de transmiterea instrucțiunilor către plăcută
arduino din corp.

Cea mai grea de proiectat și cea mai importantă piesă din robot este suportul pentru
magneți. După achiziționarea unor magneți neodim, măsurarea acestora, s-a trecut la proiectare.
Pentru proiectul de licență am folosit 6 magneți de aceeași dimensiune cu o forță de atracție de
10 kg. Partea complicată în această proiectare a fost poziționarea lor cât mai apropiată de
peretele interior al sferei astfel încât să nu se piardă din puterea acestora de atracție. Suportul
pentru sferă și pentru cap au fost proiectate în același timp pentru a asigură o testare cât mai
ușoară a interacțiunii dintre cele două. Proiectarea suportului din interiorul capului a presupus
și proiectarea unui sistem de roți capabil de omnidirectie și alunecare cât mai lînă pe suprafața
sferei.

Având bazele funcționării robotului, se trece la introducerea modulelor auxiliare.


Personal, am început cu adăugarea modului de recunoaștere vocală și a plăcuței arduino care se
ocupă de acest proces. Programarea și procesul de setare sunt dezvoltate în subcapitolul 4.2.
Pentru a păstra integritatea progresului și pentru a nu mai pierde timp cu mutarea hardware-ului
din capul robotului înafară acestuia pentru acces la porturile de programare, am implementat
mai apoi modulul de punct de acces de tip Hotspot și am instalat un server VNC pentru a putea
permite conexiunea la distanță de pe calculatorul personal. Arduino-ul a fost conectat prin USB
la Raspberry. Existând suport pentru Arduino IDE pe linux, am putut astfel să programez și
plăcută Arduino folosind caracteristică discutată anterior, conexiunea la distanță. Astfel a fost
ușor de programat mai departe modulul de preluare a datelor de la microfoane care detectează
locația comenzilor vocale.

53
Lucrare de licență Horațiu-Luchian NEMEȘ

Fiind totul interconectat este ușor de adăugat noi module. Pentru a putea avea acces la
informații de pe Internet în timpul programării plăcutelor din cap, s-a adăugat modulul 3G care
permite accesul la internet atât plăcuței cât și tuturor dispozitivelor conectate la ea.

Că ultim modul introdus este modulul de procesare a datelor primite de la cameră.


Folosind librăria opencv din Python, a fost posibil realizarea unui cod capabil de recunoaster
faciala și urmărire a locatiei acesteia. Această caracteristică a dat un plus de realism în
comunicarea dintre om și robot.

În ultima fază de implementare a sistemului este nevoie de o echilibrare a brațelor


mecanismului intern cât și a pendulului. În cazul în care brațele axului principal nu sunt egale
că și greutate va rezultă în mișcare eronată din partea robotului. O soluție software este
schimbarea poziției de mijloc a pendului deși acest lucru nu este recomandat. Optarea pentru
soluția software va rezultă în reducerea unghiului de virare în ambele direcții. Pe lângă acest
lucru, singurele lucruri rămase de făcut sunt de natură cosmetică.

4.1. Dezvoltări hardware

Dezvoltarea hardware a presupus conexiunea componentelor în două entități de șine


stătătoare, și anume sferă și semisferă. Conform schemei bloc al arhitecturii hardware din figură
22, partea hardware a capului este formată din: plăcută Raspberry Pi, plăcută Arduino, plăcută
de recunoaștere vocală, cele două microfoane, modem-ul 3G și cameră. Plăcută Raspberry Pi a
reprezentat centrul de conectivitate a tuturor componentelor din cap în mod direct sau indirect
fiind cea care s-a ocupat de procesarea tuturor datelor.

Conectarea camerei s-a făcut prin interfață CSI, prezentată în capitolul de fundamentare
teoretică, folosind o panglică specifică acestei conexiuni. Această panglică s-a ocupat atât de
partea de transfer a datelor cât și de alimentare a camerei așadar dezvoltarea hardware a acestei
componente a fost directă și simplă.

Modemul 3G și plăcută Arduino au avut din nou o dezvoltare hardware îndeajuns de


simplă. Acestea sunt conectate prin intermediul porturilor USB. Astfel tipul de comunicare între
acestea și plăcută Raspberry Pi este în mod evident de tip serială.

Între plăcuța Arduino și plăcuța de recunoaștere vocală s-a realizat din nou o
comunicare de tip serială însă nu una hardware. Folosirea pinilor RX/TX de pe plăcută Arduino
a fost evitată datorită faptului că sistemul lucrări de licență a fost proiectat astfel încât plăcută
Arduino să poată fi reprogramată fără a fi nevoie de deconectarea acestor pini. Este un lucru
știut faptul că nu pot există acești pini legați în momentul programării deoarece comunicarea

54
Lucrare de licență Horațiu-Luchian NEMEȘ

va intră într-un conflict de date. Astfel a fost folosită o soluție software pentru comunicarea
serială. Acest lucru nu a afectat în vreun fel performanță ba chiar a susținut proiectarea
sistemului.

Plăcută de recunoaștere vocală nu prezintă alți pini de folosire înafară celor de


comunicare serială și cei necesari pentru alimentare. Această acceptă valori cuprinse între 4.8V
și 5.2V. Consumul este de asemenea sub 100 mă. Acest lucru a făcut perfectă folosirea plăcuței
fără a fi necesară o altă sursă de curent. Astfel am legat plăcută de recunoaștere vocală direct la
pinii de 5V și GND ai plăcuței Arduino.

Cele două microfoane prezintă mai mulți pini. Cel mai important pin este cel analogic
, numit sugestiv OUȚ, prin care se primesc datele necesare. Acesta vine în mod evident conectat
la unul din pinii analogici ai plăcuței Arduino. Amplificarea acestui modul se face prin
intermediul pinului AGC, care se conectează la 5V. Această este o altă componența perfectă
pentru folosirea împreună cu plăcută Arduino fără a fi nevoie de o sursă de putere externă.
Înafară de acești doi definitorii, pentru elaborarea lucrării de licență, nu am mai folosit decât
cei de alimentare. După cum am menționat anterior, aceștia au fost conectați direct la pinul de
5V și GND ai plăcuței Arduino.

Pentru alimentarea entității de semisferă s-a folosit 4 celule 18650 legate în serie cu un
circuit urcător de tensiune. Bateriile și circuitul au venit la pachet dintr-un powerbank
desasamblat complet. Această sursă a asigurat cei doi amperi necesari pentru funcționarea
plăcuței Raspberry Pi cât și a perifericelor acestora.

Dezvoltarea hardware a sferei a presupus existența a unei plăci Arduino Nano, al unui
modul Bluetooth, al unui driver de motor, un motor cu reducție și a trei servomotoare. Fiind
singură plăcută existența în această entitate și singură componența capabilă de a fi
reprogramată, plăcută Arduino a reprezentat creierul central aici.

Alimentarea sferei a presupus folosirea a două surse de curent. Acestea sunt


reprezentate de către 8 baterii menționate anterior. Legarea acestora este de tip 2P2S, adică
două baterii legate în paralel iar apoi acest pachet legat în serie cu un alt pachet identic. Știind
că bateriile au un voltaj de 3.7V și o capacitate de aproximativ 2500 mă, se pot deduce surselor
noi de alimentare. Legarea în paralel a dus creșterea curentului de la 2500mA la 5A, iar legarea
lor în serie a urcat voltajul la 7.4V. Astfel s-au realizat două pachete formate din câte 4 baterii
identice. Aceste baterii au fost folosite pe post de greutate pe pendul. Unul dintre pachete au
fost trecute printr-un regulator de curent care a scăzut tensiunea la o valoare aproximativă de
5V. Scopul acestor pachete vor fi explicate în următoarele paragrafe.

Modulul Bluetooth folosit pentru realizarea lucrării de fost un modul HC-05. Acesta
este capabil de conexiuni de de cele Slave, funcție de cum este programat acționeze.
Comunicarea acestui modul fost de cu Arduino folosind pinii RX/TX la ambele ale firului.

55
Lucrare de licență Horațiu-Luchian NEMEȘ

de acești pini generici -au folosit din nou pinii de alimentare. De pinii de alimentare au mers
către o de curent anume cea care oferă 5V.

S-au folosit două modele de servomotoare. Unul din ele este Futaba s3003. Acesta a
avut rolul de mișcă pendulul, schimbând astfel centrul de greutate al sferei. După cum s-a
prezentat în capitolul de arhitectură mecanică, această schimbare de centru al greutate are
scopul de a obligă sferă să meargă în locul unei linii drepte, într-o linie curbă precum un
automobil. Al doilea model de servomotoare este SG90. Acesta este un servomotor micuț dar
cu mult potențial. Două servomotoare au fost folosite din acest model pentru cele două axe de
rotație ale capului proiectate. Pinii de legătură sunt aceeași la toate cele trei servomotoare. Pe
lângă cei de alimentare este un pin ÎN care așteaptă un semnal PWM prin intermediul căruia
să se transmită unghiul de poziționare al axului motorului. Pentru elaborarea lucrării de
licență am folosit un PWM generat din software în locul celui hardware datorită librăriei
folosite. Librăria folosită ocupă unul din timer-îi plăcuței Arduino, astfel neavând indeajunsi
pini de tip PWM. Fiind ocupat, doi pini digitali capabili de semnal PWM au devenit pini
digitali standard. Avantajul acestei librării l-a reprezentat faptul că se pot folosi pini Analogici
pentru atingerea țelului. Astfel cele trei servomotoare au fost legate la 3 pini anlogici ai
plăcuței Arduino. Sursă alimentării a fost pachetul de baterii regularizat la 5V.

Driverul de motor are unicul scop de a controla motorul cu reducție, responsabil


pentru învârtirea întregii sfere. Având două canale prin care pot trece câte 2A, și având doar
un singur motor de controlat care consumă aproximativ dublu, am ales să leg aceste două
canale în paralel pentru a obține un singur canal capabil de a transmite 4A. Pinii acestui driver
au fost pinii de ÎN, de OUȚ, de alimentare a plăcuței și cei de alimentare a motorului. Pinii de
ÎN au fost legați la plăcută Arduino la doi pini digitali. Unul dintre aceștia este capabil de
semnal PWM întrucât acesta va controla viteză motorului. Celalat pin este de asemenea
digital doar că unul simplu, fiind responsabil de directă motorului. Pinii OUȚ au fost legați la
motorul cu reducție iar alimentarea plăcuței a fost legată la sursă de 5V al robotului.
Alimentarea robotului a fost legată la pachetul de 7.4V. Motivul pentru care motorul s-a legat
la această sursă și motivul pentru care toate celelalte componente au fost legate la alimentarea
de 5V a fost evitarea unei căderi de tensiune. În realizarea lucrării de licență am avut în prima
versiune o singură sursă de curent regulată la 5V. Acest lucru n-a mers deloc conform
așteptărilor deoarece în momentul în care se acționă motorul cu reducție, plăcută Arduino
intră în modul de restart. Explicația este că în momentul pornirii, motorul consumă extrem de
mult curent pentru deblocarea mecanică acestuia, nemairămânând pentru funcționarea
Arduino. Motorul cu reducție prezintă doar doi pini necesari pentru funcționarea acestuia
anume pinii de alimentare.

56
Lucrare de licență Horațiu-Luchian NEMEȘ

4.2. Dezvoltari software

Dezvoltarea software a proiectului de licență a fost împărțită în 3 categorii, echivalente


cu cele 3 plăcute pe care s-a făcut dezvoltarea și anume::

o Raspberry Pi
o Arduino cap
o Arduino corp

Aceste categorii sunt prezentate în subcapitolele următoare. Această împărțire, a


modulelor pe cele 3 echipamente hardware, poate fi reevaluată în figură 23.

4.2.1. Partea de software Raspberry Pi

Dezvoltarea software pe plăcută Raspberry Pi s-a realizat prin intermediul a 8 module


și anume:

o Modul recepționare comenzi controller


o Modul procesare comenzi controller
o Modul procesare date cameră
o Modul recepționare instrucțiuni vocale
o Modul punct de acces de tip Hotspot
o Modul conexiune 3G
o Modul control de la distanță
o Modul trimitere instrucțiuni Bluetooth

4.2.1.1. Modul receptionare comenzi controller

Modulul de recepționare comenzi are scopul de a asigură conexiunea cu controller-ul și


de a recepționă datele trimise de acesta. La bază acestui modul este un driver creat special
pentru acest model de controller, numit ds4drv.

57
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 25 Instalare ds4drv

Driverul conroller-ului poate fi instalat folosind comandă din figură 25. Este nevoie și
de instalarea compilatorului Python și a librăriei pip a acestuia. După instalare, conexiunea se
face prin ținerea apăsată a tastei Share și Home concomitent pe controller-ul care se dorește a
fi conectat la plăcută Raspberry. Controller-ul va intră astfel în modul de conectare și așteaptă
ivirea unui server la care să se conecteze. Un led alb se va aprinde la un interval rapid în acest
timp. În momentul unei conectări cu succes, led-ul va rămâne aprins continuu. În mod implicit,
această culoare va fi albastră însă se poate reconfigura acest lucru din fișierul de configurații al
driverului sau prin apelarea comenzii împreună cu parametru –led și o culoare în Hex dorită.

Acest proces a fost integrat în sistemul de operare pentru a rulă la pornirea plăcuței.
Astfel robotul este pregătit încă de la început pregătit pentru conectivitate. Pentru a realiză acest
lucru s-a adăugat comenzile necesare în fișierul rc.local al sistemului.

4.2.1.2. Modul procesare comenzi controller

După obținerea cu succes a conectivității dintre controller și plăcută Raspberry folosind


modulul de recepționare date controller, s-a trecut la implementarea unui modul care să se
ocupe de procesarea acestor date pentru a fi eligibile pentru controlul robotului. Pentru acest
lucru s-a folosit limbajul de programare Python. S-a găsit o librărie care să săra în ajutor pentru
acest scop, numit pygames.

Figura 26 Initializarea obiectelor necesare pentru procesare comenzi controller

În figură 26 se poate observă importarea librăriei necasere cât și inițializarea a


obiectelor principale. Pentru început este nevoie de initializara modulului de bază, responsabilă
pentru procesarea datelor primite în niște comenzi care pot fi reconfigurate. Variabila joystick
reține numărul joystick-ului conectat. Librăria a fost concepută pentru conectarea a până la 8
controllere însă pentru scopul lucrării de licență vom folosi doar una, și anume prima și singură
conectată. În ultima linie din figură avem inițializarea joystick-ului selectat.

58
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 27 Gruparea ID-urilor pe tipuri de buton

Folosind formatul dat de librărie, am grupat butoanele în grupuri pentru a distinge


informațiile primite de la acestea. Butoanele digitale reprezentând marea majoritate, nu a fost
nevoie să fie grupate separat. În prima line din figură 27 avem ID-urile butoanelor care
returnează o valoare analogică, cât și o mulțime în care să fie reținute acestea. Aceste butoane
sunt defapt reprezentate de joystick-urile de direcție, câte un id pentru fiecare axă a fiecărui
joystick. Variabilele pentru bumpers urmează aceleași reguli. Acestea sunt butoanele amplasate
în partea din spate a controller-ului denumite Left Trigger și Right Trigger. Variabilele hăt sunt
pentru butoanele de direcție amplasate în stânga controller-ului. Acestea merg pe principiul de
combinații binare pentru distingerea fiecărui buton amplasat. Astfel însemnând că în cazul în
care ambele valori sunt zero înseamnă că nu este niciun buton apăsat. În cazul în care cel puțin
una dintre valori este unu atunci cel puțin unul dintre axe este apăsat. Butonul este astfel
proiectat că să nu se poată apăsa două direcții diferite de pe aceeași axă deodată.

Variabilele pressed și released sunt variabilele care vor ține evidența a căror butoane,
digitale sau analogice, sunt în momentul de față apăsate sau nu. Librăria pygames ne oferă
posibilitatea de a lucra pe bază de event-uri astfel, apăsarea pe buton și ridicarea degetului de
pe buton sunt două dintre ele. Abordarea aleasă fost verificarea constanța dacă orice event a
fost întâlnit iar mai apoi verificarea fiecărui caz pentru fiecărui grup de butoane. Astfel am
minimizat consumul de resurse pentru că nu va verifică constant fiecare tip de event dacă a fost
activat și am scăpat de problemă de latență prea mare între apăsarea de buton și procesarea
datelor.

59
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 28 Exemplu de functie responsabila de event

În figura 28 putem observă un exemplu de cod care se ocupă de tratarea apariției unui
event. Pentru fiecare grupă de butoane, și implicit fiecare event în parte, a fost creață o funcție
specializată care să se ocupe de procesarea datelor specifice. În figura menționată avem funcția
pentru cazul în care un buton a fost apăsat. În prima fază verificăm dacă într-adevăr event-ul
specific pentru această comandă a butoanelor a fost realizată. Apoi folosind o blucă de tip for,
parcurgem toate butoanele reținute că nefiind apăsate pentru a verifică starea acestuia. În cazul
în care se găsește un buton cu valoarea 1, echivalentă cu apăsarea acestui buton, atunci ID-ul
acestui buton cât și valoarea acestuia sunt trimise către modulul de trimitere instrucțiuni prin
Bluetooth către Arduino-ul din corp.

Figura 29 Funcție scrisă în Python echivalentă cu funcția map din Arduino

În cazul datelor analogice, librăria folosită oferă valori cuprinse între 1 și -1. Rezoluția
acestor date este excelentă însă din păcate este mult prea mare pentru a putea fi trimise toate în
trimp util către Arduino din corp folosind tehnologia Bluetooth. Acest lucru este cu atât mai
mult amplificat având în vedere că este nevoie de trimiterea unui strîng pentru aceste valori care
durează mult mai mult din cauza translatării necesare pe partea de Arduino. Astfel soluția găsită
este reprezentată în figura 29. Am creat astfel o funcție echivalentă cu funcția map data de
librăria Arduino pentru a creă valori fixe în intervalul 0-250. Prin intermediul acestui procedeu
am putut trimite fără probleme valorile prin folosirea unui singur byte care nu mai are nevoie
de nicio procesare din partea plăcuței Arduino cât și valori direct valabile pentru folosire.
Motivul pentru care intervalul este 0-250 în locul intervalului maxim de 0-255 este pentru că
am decis că să scad din rezoluția datelor pentru reducerea latenței. Astfel marea majoritate de

60
Lucrare de licență Horațiu-Luchian NEMEȘ

procesare a datelor este realizată de plăcută Raspberry Pi, diminuând astfel cantitatea de latență
din partea plăcuței Arduino care are o putere de procesare limitată.

Figura 30 Exemplu de citire analogica a datelor controller-ului

În figura 30 se poate observa folosirea funcției de mapare. Aceasta are 5 argumente


care sunt în aceeași manieră că la soluția oferită de Arduino. Primul argument este valoarea
care trebuie mapata, următoarele două valori este intervalul în care se găsește primul argument
iar ultimele două argumente reprezintă intervalul în care se dorește a fi valorile finale. Pentru o
optimizare cu succes a problemei latenței în comunicarea bluetooth, am decis să rețin ultima
valoare trimisă și să compar dacă valoarea citită curent nu este aceeași cu cea trimisă deja.
Astfel s-a ajuns la o cantitate de date care e cel puțin ¼ din cantiatea inițială.

4.2.1.3. Modul procesare date camera

Modulul de procesare date cameră este un alt modul bazat pe limbajul Python care are
la bază să o librărie corespunzătoare. Pentru preluarea acestor date s-a folosit librăria opencv
care oferă o multitudine de posibilități de procesare a imaginii. În scopul lucrării de licență,
scriptul este nevoit să detecteze o față și să îi urmărească poziția acesteia pe ecran. Mai apoi
pentru funcționarea corectă a robotului, folosind aceste coordonate este nevoie de o mișcare a
servomotoarelor, din interiorul sferei, responsabile pentru mișcarea capului, cu scopul de a
păstra față în mijlocul imaginii procesate.

În prima fază a fost nevoie desigur de instalarea acestei librării cât și a serviciilor
necesare pentru funcționarea corectă a camerei. Cameră nu este activată din oficiu în setări, așa
că și acest lucru a făcut parte din prima parte a implementării. După conectarea hardware a
camerei cu plăcută Raspberry Pi, activarea acesteia se realizează folosind comandă raspi-
config. Aici sunt majoritatea setărilor de bază al placutie Raspberry Pi însă ceea ce ne

61
Lucrare de licență Horațiu-Luchian NEMEȘ

interesează pe noi este opțiunea de cameră care e nevoie să să treacă din dezactivată în starea
de activată.

Figura 31 Librariile necesare pentru functionarea modului de receptionare date camera

Pentru a putea prelua imagini de la cameră, a fost nevoie de folosirea librăriei picameră
din Python, după cum este arătat în figură 31. Această ne oferă posibilitatea capturării a unei
imagini din cadrul acestui script. Pentru a nu pierde timp de procesare cu stocarea pozei pe
memory cârd, s-a folosit un stream de memorie care ne oferă posibilitatea de stocare a acestora
în memorie RAM. Acest lucru este posibil datorită librăriei io, afișat în figură menționată
anterior. Pentru a putea fi procesate datele de către funcțiile librăriei cv2 se folosește convertirea
oferită de librăria numpy care transformă imaginea într-o mulțime de valori care reprezintă
culorile fiecărui pixel din imagine.

Librăria picameră oferă posibilitatea setării rezoluției cât și a formatului capturii din
codul python. Astfel este ușor de adaptat codul pentru optimizări a vitezei de procesare cât și a
calității imaginii procesate în funcție de scopul programului scris. Pentru lucrarea de licență am
ales o dimensiune de 320x240 pixeli fiind mărimea cea mai potrivită pentru o procesare într-un
timp util. Pentru rezoluții mai mari este nevoie de un timp mai îndelungat de așteptare din partea
utilizatorului până când sistemul detectează nouă locatiei a feței sale.

Figura 32 Exemplu de cod al procesării de imagine

După obținerea imaginii de la cameră și transformării acesteia în date care pot fi


procesate mai departe de funcționalitățile librăriei opencv, această trebuie încărcată împreună
cu un șablon pentru scopul codului. Codul lucrării de licență folosește un șablon de tip xml,
care este open source, a cărui conținut este format din date utile pentru detectarea unei fețe. În
figură 32 se poate observă pe a treia linie de cod încărcarea acestui șablon și stocarea să în
variabila template. În următoarea linie de cod este transformarea imaginii încărcate de către
script într-o imagine alb negru. Astfel este mai ușor de procesat pentru librărie, având mai puține
valori în mulțimea creață și fiind astfel mai rapid în obținerea de rezultate.

62
Lucrare de licență Horațiu-Luchian NEMEȘ

În ultima instanță se apelează funcționalitatea de detectare a feței care ne returnează


seturi a câte 4 coordonate în jurul fiecărei fețe detectate. Aceste coordonate au fost gândite cu
scopul de a desenă câte un dreptunghi pe imaginea finală pentru a arată unde au fost detectate
fețele. Pentru scopul lucrării de licență se va luă doar valorile primei fețe detectate, se vor
înjumătăți valorile și se va află astfel centrul feței detectate. Având coordonatele feței detectate
tot ce a rămas de făcut este o mapare între dimensiunea totală a imaginii și intervalul de mișcare
al servomotoarelor.

Țelul de a menține imaginea feței în centrul imaginii este realizată prin reținerea
constanța a poziției actuale a servomotoarelor. Știind poziția curentă, intervalul în care se poate
mișcă și coordonatele feței, putem calculă de câte grade este nevoie că servomotoarele să se
miște pentru a ajunge cu față în centrul imaginii. Având în vedere că servomotoarele nu ajung
mereu exact la unghiul dorit iar procesarea de imagine nu este realizată perfect, se ia o marjă
de eroare a câte 5-10 pixeli. În caz contrar se poate că servomotoarele să acționeze chiar dacă
n-a fost vreo mișcare din partea utilizatorului din cauza că imaginile procesate vor avea
coordonate cu puțin modificate.

4.2.1.4. Modul recepționare instrucțiuni vocale

Pentru realizarea modulului de recepționare a instrucțiunilor vocale s-a folosit aceeași


librărie Python de comunicare serială doar că în acest caz s-a folosit portul USB în locul
comunicării Bluetooth.Modulul are pe lângă rolul de bază de recepționare și de o oarecare
procesare a datelor.

În cazul în care instrucțiunile primite se referă la o acțiune provenită din partea sferei,
atunci acestea sunt trimise mai departe modulului de trimitere instrucțiuni Bluetooth.
Instrucțiunile sunt procesate de către plăcută Arduino înainte de a ajunge la plăcută Raspberry
Pi, astfel nu este nevoie decât a fi trimise mai departe către Arduino-ul din corp.

Pentru situația în care instrucțiunea în cauza nu este menită a fi trimisă sferei, ci pentru
o anumită comandă din partea plăcuței Raspberry Pi, atunci este nevoie de o mică procesare a
acestora. Acestea sunt în general proiectate cu scopul de a deschide un anumit script. Pentru
realizarea acestui lucru trebuie testate instrucțiunile primite pentru a vedea dacă nu se
încadrează în lista de instrucțiuni speciale.

63
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 33 Cod tratate instructiuni speciale de modulul de receptionare instructiuni vocale

În figură 33 avem secțiunea de cod care se ocupă de gestionarea instrucțiunilor menite


pentru Raspberry Pi. Avem o lista, pe nume special_instructions, care reține ID-ul
instrucțiunilor speciale. Astfel parcurgând lista la fiecare comandă primită, putem verifică dacă
comandă primită curent este echivalentă cu una dintre comenzile din lista menționată anterior.
În momentul identificării unei astfel de instrucțiuni se construiește comandă care se presupune
că ar trebui executată și se apelează. Pentru o apelare mai ușoară a comenzilor, am decis că
numele scriptului care trebuie executat să coincidă cu numele comenzii primite.

4.2.1.5. Modul punct de acces de tip Hotspot

Modulul de creare a unui punct de acces de tip Hotspot pe plăcuța Raspberry Pi


presupune folosirea pachetelor de date hostapd și dnsmasq. Acest modul presupune mai mult
configurarea sistemului pentru funcționarea în scopul prezentat decât scrierea efectivă a unui
cod specific.

Pentru început a fost nevoie de identificarea numelui asignat plăcuței de rețea. În mod
implicit denumirea acestuia este wlan0 însă pentru cazul în care se folosește o altă plăcută de
rețea decât cea integrată în sistem, este posibil că această denumire să difere. Pentru a
identificarea numelui s-a folosit comandă ipconfig. După identificarea acesteia, a fost nevoie
că să fie dezactivată pentru a putea fi folosită de alte aplicații. Mai departe a fost nevoie de o
reconfigurare a fișierului interfaces din folderul etc/network. Aici a fost nevoie de o stabilire a
unui IP static pentru a putea accesă plăcută oricând în mod direct fără a mai fi nevoie de alte
modificări.

După pregătirea fișierelor de configurare a urmat instalarea pachetului hostapd folosind


interfață din terminal. Prin instalarea acestui pachet de date, se va activă, respectiv dezactiva
funcția de punct de acces a plăcuței. Acesta vine cu un alt fișier de configurație care rămâne la
alegerea utilizatorului pentru modificări precum SSID rețea și parolă. Pentru activarea acestui
mod se poate apela comandă service hostapd start.

Pentru realizarea lucrării de licență, comandă amintită anterior a fost trecută în fișierul
rc.local al sistemului. Astfel plăcută va porni direct în modul de hotspot. Pentru a se asigură

64
Lucrare de licență Horațiu-Luchian NEMEȘ

faptul că această va rămâne mereu deschisă, am introdus comandă într-un proces de șine stătător
care este verificat la un anumit interval de timp dacă este încă activ .

4.2.1.6. Modul conexiune 3G

Modulul de conexiune 3G a presupus instalarea pachetelor de date oferite de comandă


apt-get install ppp usb-modeswitch wvdial. Acest pachet oferă posibilitatea conectării la rețeaua
3G folosind orice fel de dispozitiv capabil de acest lucru, deși direcția principală de
echipamente suportate a fost la început doar cele de tip USB. Pentru realizarea lucrării de licență
am folosit un modem cu conexiune prin USB, numit ZTE MF110.

Pentru realizarea conexiunii, a fost nevoie mai întâi de identificarea id-ului unic alocat
pentru modemul USB conectat. Prin intermediul terminalului, comandă lsusb a oferit o lista a
tuturor dispozitivelor conectate în acest sens. Acest id a fost folosit pentru a configura sistemul
astfel încât să găsească driver-ul necesar pentru funcționară corectă a modem-ului. Pentru acest
lucru a fost nevoie să se modifice fișierul usb_modeswitch/configPack.țar.gz cu numele și id-
ul găsit anterior. După configurarea corectă a fișierului și o reintroducere a modem-ului în
plăcută Raspberry Pi, s-a putut observă, folsind tot comandă lsusb, că id-ul s-a schimbat. Acest
lucru ne-a indicat că driver-ul s-a instalat cu succes și că putem trece mai departe.

Folsind id-ul găsit anterior, a fost nevoie să se modifice fișierul de configurare cu care
a venit pachetul, și anume wvdial.conf. În acest fișier a fost nevoie de modificarea numelui
device-ului, al ID-ului cât și al unui cod de țara.

Pentru activarea modem-ului s-a creat un fișier de tip batch care reprezintă fișierul de
start al acestui modul în care este apelată comandă sudo wvdial după un anumit interval de
timp. Acest interval de timp are rolul de a aștepta că modem-ul să fie pregătit pentru conexiune
deoarece durează mult mai mult decât îi ia plăcuței Raspberry Pi să o verifice. Pentru o bună
funcționare a sistemului prezentat în lucrarea de licență, acest modul a fost de asemenea integrat
în fișierul rc.local. Asemenea modulelor de dinainte a fost creat un proces separat cu acest script
care este verificat constant la un anumit interval de timp pentru a menține disponibilitatea
acesteia.

4.2.1.7. Modul control de la distanță

Controlul de la distanță are că scop posibilitatea utilizatorului de a putea vizualiză și


interacționa cu interfață grafica a sitemului de operare instalat pe plăcută Raspberry Pi fără a

65
Lucrare de licență Horațiu-Luchian NEMEȘ

fi nevoie de vreo legătură fizică între dispozitivul de pe care se dorește a lucra și placă. Acest
lucru a fost realizat cu ajutorul pachetelor de date xrdp.

Procesul de instalare al acestui pachet a fost îndelungată dar în mare parte automatizată
în sensul că nu a fost nevoie de modificarea unor fișiere de configurare. A fost doar nevoie de
setarea soluției oferită de sistemul de operare pe dezactivată deoarece acestea două intrau în
conflict una cu cealaltă în momentul în care se încerca conectarea la plăcută.

Din partea modulul de control la distanță a intervenit soluția întâlnită la celalalte


module și anume de creare a unui proces propriu care este verificat constant dacă este încă
valabil. Sesiunea de control de la distanță se poate realiză de pe orice dispozitiv cu aplicație
similară celei de pe Windows, numite Remote Desktop. Aceasta necesită în primul rând adresă
IP a dispozitivului pe care se dorește a realiză conexiunea. Apoi sesiunea va cere logarea în
sistemul de operare, cerând ușer-ul și parolă la care se dorește acces.

4.2.1.8. Modul trimitere instrucțiuni Bluetooth

Modulul de trimitere instrucțiuni Bluetooth este un alt modul realizat în Python care
are la bază librăria serial. După ce conexiunea dintre plăcută Raspberry Pi și Arduino este
realizată cu succes folosind un script bash, tot ce rămâne de făcut este de transmis datele pe
serial.

Acest modul reprezintă punctul central de colectare a datelor ajunse la plăcută


Raspberry pentru a fi transmise mai departe Arduino-ului din sferă.În principiu modulul asigură
conexiunea dintre cele două entități în mediul Python.

Figura 34 Exemplu cod al modului de transfer instructiuni prin Bluetooth

66
Lucrare de licență Horațiu-Luchian NEMEȘ

La baza metodei de transfer al datelor alese este transmiterea unui singur byte pe serial.
Acest lucru se realizează prin trimiterea unui caracter de tip char. Funcția sendBT ,prezența în
figură 34, se ocupă cu succes de acest lucru. Având parametru data, acesta este verificat dacă
este sau nu de tip char. În cazul în care tipul de date este deja corect, atunci acesta este trimis
mai departe plăcuței Arduino din interiorul sferei. În cazul în care parametrul transmis este de
orice alt tip decât de tipul char atunci se încearcă convertirea acestuia. Este destul de evident că
nu orice tip de data poate fi transformată într-un byte, tocmai de aceea întreg ansamblul a fost
introdus într-o secvența de tip try-catch care va asigură bună funcționare a modulului în cazul
introducerii unui parametru invalid. Utilizatorul va fi atenționat în consolă de eroarea apărută.

4.2.2. Partea de software Arduino cap

Dezvoltarea software pe plăcută Arduino, localizată în semisferă lucrării de licență s-a


realizat prin intermediul a 2 module și anume::

o Modul procesare date microfoane


o Modul procesare comenzi vocale

4.2.2.1. Modul procesare date microfoane

Modulul de procesare a datelor de la microfoane se bazează pe extragerea unor date de


tip analogic de la cele două microfoane amplasate și transformarea acestora într-o locație
aproximativă a locatiei din care vine sunetul. Având doar două microfoane la dispoziție, se
poate află locația doar pe o singură axă, iar din cauza limitării servomotorului responsabil
pentru mișcarea pe această axă, se poate află doar din poziția din față. În cazul în care sunetul
va veni din spatele robotului, datele vor continuă să fie procesate precum cele venite din față
robotului.

Scopul modulului este de a aduce un plus în comunicarea utilizatorului cu robotul și de


a da puțin mai multă viață acestuia. Acest modul vine în ajutorul modulului de procesare date
cameră. Unghiul de rotație al servomotorului în cauza este mult mai mare decât rază de
recepționare a imaginilor din partea camerei. Astfel modulul are rolul de a află o poziție
aproximativă ( cel puțin stânga sau dreaptă față de poziția actuală) pentru a fi mai eficientă
scanarea după utilizator.

Înregistrând valorile de la primul sunet care depășește pragul stabilit până la


identificarea unei comenzi valide din partea modulului de procesare comenzi vocale va asigură

67
Lucrare de licență Horațiu-Luchian NEMEȘ

un eșantion îndeajuns de mare pentru a eradica fluctuațiile de date. Pentru această vom folosi
aceste valori și vom face o medie. Acest lucru este realizat pentru fiecare microfon în parte. La
final se face diferență dintre cele două valori și se scade pragul. Diferență dintre valoarea
obitnuta și prag va stabili volumul sonorului iar diferență dintre cele două canale, stânga și
dreaptă, va stabili o poziție aproximativă a sunetului. Dacă valoarea obținută este negativă, vom
ști că poziția capului va trebui îndreptată în partea stânga, iar în caz că valoarea obținută este
pozitivă atunci logică inversă devine valabilă. Folosind valoarea obținută în modul, adică luând-
o că și valoare pozitivă mereu, o vom mapa la un unghi corespunzător pentru a putea fi folosit
de servomotor.

4.2.2.2. Modul procesare comenzi vocale

Acest modul este responsabil de mai multe aspecte. În primul rând este responsabil
pentru asigurarea conexiunii seriale dintre placă Arduino și placă de recunoaștere vocală
Geetech. Pentru realizarea acestui lucru am ales să folosesc o conexiune de tip software,
exemplificată în figură 35, în locul folosirii celei hardware. După cum s-a prezentat în
implementarea hardware, placă Arduino și placă Raspberry Pi sunt conectate folosind cablu
USB iar pentru a putea fi reprogramată nu poate avea alte echipamente legate la pinii RX/TX.
În figură 35 se poate vedea inițializarea atât a conexiunii dintre plăcută de recunoaștere vocală
și Arduino cât și cea dintre plăcută Raspberry Pi și Arduino.

După ce conexiunea s-a realizat cu succes, urmează partea de recepționare a rezultatelor


din partea plăcuței de recunoaștere vocală. Această fiind setată în modul compact, noțiune
prezentată în capitolul de fundamentare teoretică, va trimite bytes pe serial. Fiecare byte
corespunde unei comenzi recunoscute.

Figura 35 Initializare conexiune seriala de tip software pe Arduino

După ce se recepționează datele în mod corect, tot ce rămâne de făcut, pentru această
parte a modulului, este de creat cazuri specifice pentru fiecare comandă. Aceste cazuri sunt
integrate în cadrul unui bloc de tip switch unde fiecare caz va transformă datele în instrucțiuni
finale care pot fi trimise mai departe până la sferă. În cazul comenzilor speciale, se transmit

68
Lucrare de licență Horațiu-Luchian NEMEȘ

instrucțiuni aflate în lista de instrucțiuni speciale ale modulului de recepționare instrucțiuni


vocale.

Datele recepționate de la modulul de procesare date microfoane sunt și ele procesate și


transformate în instrucțiuni în aceeași manieră. Aceste instrucțiuni au un singur caz special
alocat. Fiind vorba de un singur servomotor care poate fi acționat, se va transmite doi bytes.
Primul byte este un ID unic, recunoscut de plăcută Raspberry Pi, prin care modulul de
recepționare instrucțiuni vocale știe că trebuie să aștepte venirea celui de-al doilea byte. Al
doilea byte va conține unghiul aproximativ al locatiei utilizatorului.

4.2.3. Partea de software Arduino corp

Dezvoltarea software pe plăcuta Arduino, localizată în sferă lucrării de licență s-a


realizat prin intermediul a 2 module și anume:

o Modul receptionare instructiuni


o Modul actionare motoare

4.2.3.1. Modul recepționare instrucțiuni

Acest modul este responsabil de recepționarea instrucțiunilor finale de la plăcută


Raspberry Pi prin intermediul conexiunii Bluetooth. Deși modulul reprezintă unul dintre cele
mai importante roluri din sistem, acesta nu reprezintă foarte mult cod pentru a-și îndeplini
scopul. În prima fază, se asigură pornirea comunicației Seriale pe porturile RX/TX prin
comandă Serial.begin() care are că și parametru baud rațe-ul, 9600 în cazul lucrării de licență,
la care se transfera datele.

Figura 36 Exemplu cod din modulul de receptionare instructiuni de pe placa Arduino sfera

Știind că se transfera prin Bluetooth perechi a câte doi bytes, modulul de recepționare
instrucțiuni trebuie să gestioneze aceste date în mod corect. În figură 36 se poate observă

69
Lucrare de licență Horațiu-Luchian NEMEȘ

metodă de abordare al acestui proces. În prima linie vedem că se verifică dacă se află sau nu
date pe serial care așteaptă a fi recepționate. În a două fază se verifică cantitatea acestor date.
În cazul în care nu sunt cel puțin doi bytes, modulul nu va face nimic și va aștepta până când
vor fi. Ideea din spate a așteptării a cel puțin doi bytes în locul a exact doi bytes este faptul că
modulul de acționare motoare crează o anumită latență între citirile de pe serial, făcând astfel
loc pentru cazul incare se vor adună mai mult de 2 bytes la rând. Acest caz ar fi oprit execuția
întregului cod din cadrul acestei plăcute dacă am fi așteptat exact doi bytes.

După ce se verifică cele două condiții, urmează două citiri consecutive de pe serial.
Pierderea de date de pe această conexiune este foarte improbabilă, astfel este îndeajuns de sigur
să se aștepte datele într-o anumită ordine deja stabilită de plăcută Raspberry. Așadar, s-a stabilit
că primul byte primit denotă instrucțiunea, sau în cazul de față butonul apăsat, iar al doilea byte
e valoarea acesteia.

4.2.3.2. Modul acționare motoare

După recepționarea instrucțiunilor, în final este momentul de acționare al motoarelor.


Având instrucțiunea și valoarea acesteia de la modulul de recepționare instrucțiuni, putem
realiză un bloc switch în jurul ID-ului de instrucțiune/button. În fiecare caz există un set unic
de funcții apelate folosind valoarea data.

În cadrul lucrării de licență există trei tipuri de acționare motoare. Unul dintre ele este
dedicat motorului cu reducție care este acționat printr-un semnal PWM care dictează viteză
motorului. Acest tip de acționare are rolul simplu de scriere analogică pe pin cu valoarea data.

Celelalte două tipuri de acționari ale motoarelor sunt dedicate servomotoarelor. Acestea
așteaptă de asemenea un semnal PWM prin care să li se spună poziția, sau mai bine zis unghiul,
la care să fie îndreptate. Pentru lucrarea de licență am ales să folosesc librăria Servo.h pentru
acționarea acestor motoare. După cum a fost prezentat la implementarea mecanică, acesta
folosește Timer0 al plăcuței Arduino care era responsabil de crearea semnalului PWM pentru
pinii 9 și 10. Aceștia sunt doi dintre pinii capabili, din perspectivă hardware, de semnal PWM.
Acesta este un dezavantaj mare pentru cazurile în care este nevoie de folosirea a acelor pini cu
scop PWM și nu digital simplu. Avantajul folosirii librăriei este că servomotoarele pot fi
acționate de orice pin. Folosind acel timer se pot folosi pinii analogici fără nicio problemă de
funcționare. Acesta reprezintă semnalul PWM de tip software.

70
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 37 Exemplu cod actionare servomotoare

Ultimul tip folosit este destinat instrucțiunilor/butoanelor care transmit momentul în


care au fost apăsate și momentul în care nu mai sunt apăsate. Pentru un control cu mai multă
finețe a servomotoarelor, s-au creat funcții care incrementează poziția axului servomotorului cu
câte un grad la un interval de timp. Acest lucru se realizează cât timp butonul este apăsat, cu
ajutorul a două variabile, care dictează direcția în care se deplasează . Poziția finală la care s-a
ajuns este stocată într-o variabila cu scopul de a nu porni mereu de la origine.

71
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 5. Rezultate

În cadrul realizării lucrării de licență s-au implementat caracteristicile dicutatea în


capitolul de arhitectură și s-a trecut la testarea și validarea sistemului. Complexitatea proiectului
a presupus împărțirea testelor în submodule ale modulelor software și hardware prezentate.
Dintre scenariile testate, două dintre cele mai importante care vor fi exemplificate sunt:

o Scenariul sferei
o Scenariul capului

5.1. Scenariul sferei

Acest scenariu presupune deplasarea sferei, acționat de motorul cu reducție care este
controlat de către instrucțiuni provenite prin bluetooth. Aceste instrucțiuni provin de la
controller-ul folosit care este legat la plăcută Raspberry Pi. În urmă procesării datelor primite,
instrucțiunile sunt transmise sferei pentru a fi executate.

În testarea acestui scenariu s-a pus accent pe funcționarea hardware și mecanică a


sferei. S-a testat principiul pendului și principiul contragreutății necesare pentru acționarea
corectă a motorului pentru o deplasare față-spate, stânga-dreapta.

Figura 38 Scenariul de testare a sferei

72
Lucrare de licență Horațiu-Luchian NEMEȘ

În figura 38 se pot observă trei imagini succesive preluate din cadrul unui clip video în
care s-a realizat testarea rostogolirii sferei. Pentru o testare mai rapidă și evitarea uzurii pieselor,
s-a folosit bandă adeziva în locul șuruburilor pentru susținerea carcasei.

5.2. Scenariul capului

Prin acest scenariu se urmărește testarea rotirii capului acționat de motoare. Principiul
din spate este folosirea atracției magnetice dintre sferă și cap care permite mutarea capului pe
orice plan. Motoarele din interiorul sferei deplasează ansamblul de magneți din sferă care atrage
după șine ansamblul de magneți din semisferă, astfel odată cu el și semisferă.

Acest lucru se realizează folosind instrucțiuni primite de la Raspberry Pi. Aceste


instrucțiuni sunt date primite de la un controller bluetooth care mai apoi sunt procesate. După
transformarea acestor date în instrucțiuni ele sunt trimise mai departe sferei pentru acționarea
corespunzătoare a motoarelor.

Figura 39 Testarea scenariului capului

În figură 39 se pot observă 3 imagini succesive extrase dintr-un material video din cadrul
testării scenariului capului. Se pot observă cele 3 poziții ale capului care au fost atinse.

73
Lucrare de licență Horațiu-Luchian NEMEȘ

Figura 40 Stadiul final al proiectului

În figura 40 se poate observă stadiul final al proiectului. În partea stânga găsim întreg
robotul asamblat iar în partea dreaptă se poate observă mecanismul intern al sferei folosit pentru
rostogolirea și controlarea acestuia.

74
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 6. Concluzii și direcții de continuare a


dezvoltării

6.1. Concluzii

Conform arhitecturii proiectului prezentat, s-a proiectat din punct de vedere mecanic,
software și hardware un robot sferic care se deplasează acționat printr-un semnal de tip
Bluetooth. Că punct central din punct de vedere hardware s-a ales folosirea unei plăcute
Raspberry Pi datorită puterii de procesare, consumului redus de curent și dimensiunii scăzute.
Pentru realizarea acestui întreg sistem s-au realizat următoarele structuri:

o Structura hardware de acționare a sferei principale


o Structura hardware de acționare a semsiferei
o Module de preluare imagine si sunete
o Module de procesare a datelor
o Module de comunicare intre placuțele folosite
o Modul de comunicare 3G
o Modul de inițializare punct de acces de tip Hotspot
o Modul de control la distanta

6.2. Direcții de dezvoltare

Cu scopul îmbunătățirii proiectului, câteva direcții de dezvoltare posibile sunt:

o Adăugarea unui control de tip PID folosind unul sau mai multe accelerometre
cu scopul stabilizării constante a robotului și reducerii inerției create de
mișcarea acestuia
o Dezvoltarea unui sistem software prin care acesta să devină autonom
o Implementarea hardware a unui sistem de redare audio
o Implementarea unui API de recunoaștere vocală pe Raspberry care să se
folosească de accesul la Internet prin intermediul modulului de 3G

75
Lucrare de licență Horațiu-Luchian NEMEȘ

o Proceare de imagine capabilă de adunat date care pot fi folosite pentru


orientare în mediul aflat
o Procesare de sunet folosind mai multe microfoane, bazată pe principiul
latenței primirii de sunet dintre acestea cu scopul localizării locatiei sunetului
o Folosirea unei entități pentru contragreutate cu densitate foarte mare precum
plumbul pentru reducerea spațiului ocupat
o Adăugarea unui motor care să permită învârtirea contragreutății cu scopul
folosirii inerției pentru întoarcerea pe loc a robotului
o Adăugarea unui sistem de lumini care să dea personalitate robotului
o Dezvoltarea unei aplicații mobile pentru controlul robotului și diferite setări
posibile de către utilizator

76
Lucrare de licență Horațiu-Luchian NEMEȘ

Capitolul 7. Bibliografie

[1] "Despre robotica” : https://ro.wikipedia.org/wiki/Robotic%C4%83.

[2] "Despre istoria robotilor” : https://en.wikipedia.org/wiki/History_of_robots.

[3] "Conceptul de orientare dupa lumina” : https://en.wikipedia.org/wiki/Phototaxis.

[4] "Despre Chuck Hull” : https://3dprint.com/72171/first-3d-printer-chuck-hull/.

[5] "Scurta istorie al imprimantelor 3D” : https://www.sculpteo.com/blog/2016/12/14/the-


history-of-3d-printing-3d-printing-technologies-from-the-80s-to-today/.

[6] "Raspberry Pi Wikipedia” : https://en.wikipedia.org/wiki/Raspberry_Pi.

[7] "Raspberry Pi Official Website” : https://www.raspberrypi.org/help/faqs/.

[8] "Figura Raspberry Pi 3 Model B” : http://docs-


europe.electrocomponents.com/webdocs/14ba/0900766b814ba685.pdf.

[9] "Specificatii site oficial: Raspberry Pi 3 Model B” :


https://www.raspberrypi.org/products/raspberry-pi-3-model-b/.

[10] "Specificatii si Benchmark-uri Raspberry Pi 3 Model B” :


https://www.raspberrypi.org/magpi/raspberry-pi-3-specs-benchmarks/.

[11] "Raspberry Pi Camera v2” : https://www.raspberrypi.org/products/camera-module-v2/.

[12] "Anunt lansare camera Raspberry Pi v2.1” : https://www.raspberrypi.org/blog/new-8-


megapixel-camera-board-sale-25/.

[13] "Filmari Slow-Motion si Timelapse Raspberry Pi Camera” :


https://www.raspberrypi.org/blog/science-lessons-with-the-camera-board/.

77
Lucrare de licență Horațiu-Luchian NEMEȘ

[14] "Crearea unui telescop folosind Camera Raspberry Pi” :


https://www.raspberrypi.org/blog/astrophotography-with-the-camera-board/.

[15] "Procesare de Imagine Raspberry Pi” : https://www.raspberrypi.org/blog/tag/image-


processing/.

[16] "Efecte asupra inregistrarii camerei Raspberry Pi” :


https://www.raspberrypi.org/blog/camera-board-documentation/.

[17] "Omnivision Technologies: creatorii senzorului pentru Camera v1 Raspberry Pi” :


https://en.wikipedia.org/wiki/OmniVision_Technologies.

[18] "Wikipedia Arduino” : https://ro.wikipedia.org/wiki/Arduino.

[19] "Preturi pentru Kit-uri Arduino” : https://www.aliexpress.com/premium/arduino-


kit.html.

[20] "Informatii Arduino IDE Software” : https://www.arduino.cc/en/Main/Software.

[21] "Specificatii Arduino Uno” : https://www.arduino.cc/en/Main/ArduinoBoardUno.

[22] "Comparare placi Arduino” : https://www.arduino.cc/en/Products/Compare.

[23] "Specificatii Arduino Nano” : https://www.arduino.cc/en/Main/ArduinoBoardNano.

[24] "Despre recunoasterea vocala” : https://en.wikipedia.org/wiki/Speech_recognition.

[25] "Manual de Utilizare al placutei de recunoastere vocala Geetech” :


http://img.filipeflop.com/files/download/Geeetech_Voice_Module_User_Manual.pdf.

[26] "Informatii despre recunoasterea vocala Geetech” :


http://www.geeetech.com/wiki/index.php/Arduino_Voice_Recognition_Module.

[27] "Despre compania ZTE” : https://en.wikipedia.org/wiki/ZTE.

[28] "ZTE MF110 pe linux” : https://wiki.archlinux.org/index.php/ZTE_MF110/MF190.

78
Lucrare de licență Horațiu-Luchian NEMEȘ

[29] "Despre Bash” : https://en.wikipedia.org/wiki/Bash_(Unix_shell).

[30] "FIsiere carcasa BB8” :


http://bb8builders.club/wiki/images/a/ae/Large_Format_Printer_Files.zip.

[31] "Definitie SRAM” : https://ro.wikipedia.org/wiki/SRAM.

[32] "Definitie EEPROM” : https://ro.wikipedia.org/wiki/EEPROM.

[33] "Definitie TTL” : https://en.wikipedia.org/wiki/Transistor–transistor_logic.

79

S-ar putea să vă placă și