Proiect Diploma Manolescu Cosmin, Grupa 4841,profil Robotica,fac Iesc [304054]

[anonimizat]:dezvoltarea

simulatorului realizat pentru robotul didactic

Nero

Îndrumător:

Prof. dr. ing. Pozna Claudiu

2018

Listă imagini

Figure 1.1.1 Roboți industriali 8

Figure 1.1.2 [anonimizat] 9

Figure 1.1.3 Braț robotic folosit in medicină 9

Figure 1.1.4 Robot terestru 10

Figure 1.1.5 Microrobot 10

Figure 1.1.6 Autovehicul intelligent 11

Figure 1.1.7 Robot IRB 8700 13

Figure 1.1.8 Robot Kuka 13

Figure 1.1.9 Robot Nachi 14

Figure 1.1.10 Robotul Mate 200iD 14

Figure 3.1 Schema realizării robotului Nero 15

Figure 1.1.11 Componente braț Robotic 16

Figure 1.1.12 Baza robotului 17

Figure 1.1.13 Atașare suport susținere 17

Figure 1.1.14 Montarea suportului pentru servomotor 18

Figure 1.1.15 Montarea suportului de tip U și rulmentu radial cu bile 18

Figure 1.1.16 Suportul pentru servomotor 19

Figure 1.1.17 Suporții de tip U 19

Figure 1.1.18 Montare servomotor 20

Figure 1.1.19 Suportul de tip L 20

Figure 1.1.20 Montarea suportului de tip L 21

Figure 1.1.21 Asamblare suport servomotor 21

Figure 1.1.22 Montare suport servomotor 22

Figure 1.1.23 Montarea prehensorului și a servomotoarelor 22

Figure 1.1.24 Robotul Nero(vedere laterală) 23

Figure 1.1.25 Robotul Nero (vedere frontală) 23

Figura 3.1.1.1 Aluminiu 27

Figura 3.1.1.2 Șurub 28

Figura 3.1.1.3 Piulița Hexagonală și tip future 28

Figura 3.1.1.4 Vedere 2D rulment flanșă 29

Figura 3.1.1.5 Rulmenți cu flanșă pe interior 30

Figure 1.1.26 Componente asamblare electronică 31

Figure 1.1.27 Alimentare motoare 32

Figure 1.1.28 Montaj baterii 32

Figure 1.1.29 Montarea firelor pe breadboard 33

Figure 1.1.30 Montaj buton 33

Figure 1.1.31 Montaj LED 34

Figure 1.1.32 [anonimizat] 34

Figure 1.1.33 Montaj rezistențe 35

Figure 1.1.34 Montare Bluetooth 35

Figure 3.3.11 Asamblare 36

Figure 1.1.12 Montaj circuite Fritzing 36

Figure 1.1.1.1 Arduino Uno 37

Figure 1.1.1.2 LED 38

Figure 1.1.1.3 Simbol LED 39

Figure 1.1.1.4 PCA 9685 40

Figure 1.1.1.5 Rezistori 40

Figure 1.1.1.6 [anonimizat] 41

Fig 3.3.1.7 Telefon 43

Fig 3.3.1.8 Bluetooth 43

Figure 1.1.1.9 Servomotor MG996R 43

Figure 1.1.35.1 Arduino IDE 44

Figure 1.1.4.1 Mit APP INVENTOR 45

Figure 1.1.4.2 Aplicația Android 47

Figure 1.1.4.3 Construirea Codului 47

Figure 1.1.5.1 Semnal PWM 48

Figure 1.1.6.1 Limbajul C 48

Figure 1.1.36 Verificare baterii 49

Figure 1.1.37 Regulator de tensiune cu ecran LCD 51

Figure 1.1.38 Reprezentarea fazei și nulului a sursei de comutație 51

Figure 1.1.39 Reprezentarea pinilor de ieșire a sursei 52

Figure 1.1.40 Verificare rezistori 53

Figure 1.1.41 Reprezentare șurubului distrus 53

Figure 1.1.42 Defecțiune prehensor 54

Figure 1.1.43 Denavit Hatenberg 54

Figure 1.1.44 Schema cinematica a robotului Nero 55

Figure 1.1.45 Matlab 57

Figure 1.1.46 Robot Nero 59

Figure 1.1.47 Simularea cuplelor 60

Introducere

Definiția roboticii

Robotica este știința ce are la bază :mecanica, [anonimizat]-se ca ea aparține domeniului mecatronicii.[anonimizat] ,programarea și exploatarea roboților în diferite domenii precum medicină și industrie .Cei ce se ocupă și lucrează în acest domeniu se numesc roboticieni.

Aspecte ale roboticii

În anul 1921,în opera” Roboții universali ai lui Rossum” scrisă de cehul dramaturg Karel Capek,s-a introdus pentru prima dată cuvantul “robot”unde avea semnificația de lucrător perfect și neobosit.Această idee de lucrător a fost un prim pas in robotică . În următorul an 1940,în scrierile lui Isaac Asimov, apare termenul de robotică,simbolizând astfel robotica ca fiind o știintă sau un studiu ce are la bază roboții.În Europa ,robotica era definită prin cuvântul”robotologie”ce avea la bază gruparea roboților și cooperarea lor.Chiar dacă cuvântul este relativ nou, munca în cercetarea roboticii se desfăsoară și se dezvoltă de sute de ani .

De obicei,roboții sunt folosiți în scopul de a ajuta oamenii în diferite zone periculoase sau în industrii ce au un grad de pericol foarte mare.În functie de utilizările lor,ei au diferite forme de construcție:

mecanică: unde fiecare robot are o formă specifică pentru a-și îndeplini sarcina impusă .De exemplu dacă avem un teren plin de noroi ,atunci ne va trebui un robot mobil cu șenile ,astfel să eliminăm alunecarea rotilor.

electrică-unde avem nevoie de a mișca robotul ,de obicei această energie vine de la alimentatoare sau baterii .Acest aspect este folosit pentru mișcarea roților,pentru senzori(unde avem semnale de pozitie,sunet,detectare etc) și funcționare ,unde trebuie să avem un anumit nivel de energie pentru a fi puse în funcțiune motoarele și senzorii.

programare-unde fiecare robot are câte un limbaj diferit de programare .Degeaba are construcție mecanică și furnizarea energiei electrice este facută corect ,dacă robotul nu poate să se miște la cerințele impuse .Programele sunt foarte importante pentru un robot ,făcând legatura între partea mecanică și cea electrică a unui robot.[INT 1]

Caracteristicile unui robot sunt :

-manipularea obiectelor,

-deplasarea cu o anumită viteză a obiectelor ,

-grade de libertate ,de obicei sunt între 2-6 ,astfel ajutându-i pentru realizarea operațiilor

-programarea memoriei,pentru a ajuta la schimbarea operațiilor ce au loc în diferite cazuri

-funționarea independentă(autonomie) ,fară a fi nevoie de intervenția omului [EMIL 00]

Clasificarea roboților

Clasificarea principalelor părți componente ale roboticii sunt:

Robotica industrială;

Robotica mediilor ostile(teleoperarea);

Robotica medicală;

Robotica militară;

Microrobotica;

Robotii mobili.

În continuare vom descrie în parte, fiecare clasificare a robotilor:

Robotica industrială(fig 1.3.1) ,reprezintă cea mai importantă parte a roboticii , deoarece este folosită în industrie ,construcți etc.Roboții ce se găsesc în acest domeniu se numesc roboți industriali și au rolul de a transporta diferite piese precum:piese de masini,scule pentru găurit ,frezat ,șlefuit,vopsit.

Figure 1.3.1 Roboți industriali

Teleoperarea este folosită în medii periculoase sau nocive ,mai exact acolo unde omul nu are acces sau nu poate supraviețui.Roboții ce se găsesc în acest domeiu se numesc roboți telemanipulatori și sunt compuși din două brațe robotice.

Primul braț este controlat de către om și poartă denumirea de braț stăpân, iar celălalt braț numit si braț sclav are funcția de a imita mișcările brațului stăpan .

Figure 1.3.2 Braț robotic folosind funcția master-slave

Robotica medicala este compusă din doi roboți

primul robot este destinat pentru operații ce au un grad mare de dificulatate ,unde este nevoie de precizie și delicatețe,mai ales când se folosesc instrumente de medicină .

cel de-al doilea braț robotic este folosit în special pentru a ajuta persoanele cu dizabilitați ,de exemplu la mers sau chiar la înlocuirea unuia din membrele superioare sau inferioare ale omului

Figure 1.3.3 Braț robotic folosit in medicină

Robotica militară,unde se dispune de foarte multe fonduri,în special în țarile unde economia este foarte dezvoltată.Mulți cercetători consideră ca în viitorul apropiat ,câmpul de luptă ,va fi înlocuit cu roboți tereștri(fig1.3.6)și roboți aerieni(fig1.3.7),unde comunicarea lor se va face cu ajutorul satelitilor de la centrele de comandă .Momentan,în ziua de azi cei mai multi roboții militari sunt folosiți pentru spionaj sau supravegherea anumitor zone unde se gasesc conflicte de război.

Figure 1.3.4 Robot terestru

Microrobotica reprezintă dispozitive ce au dimensiuni foarte mici ,clasificarea lor făcându-se după marime:

minirobotica: mărimi cuprinse intre 1-10 mm,având in alcătuire componente fine ;

microrobotica :se folosește la realizarea microcipurilor, de obicei sunt facuți din siliciu

nanorobotica:se folosește la manipularea A.D.N.-ului,dimensiunile lui fiind nanometrice

atomorobotica: roboți ce pot manipula atomi

Figure 1.3.5 Microrobot

Roboți mobili : reprezintă roboți de tip vehicul , ce au în componența lor inteligența ,fapt ce îi determină să fie autonomi .Pe viitor se așteapta ca această tehnologie sa se folosească la autovehiculele rutiere,făcându-le astfel să meargă singure,iar oamenii putând sa se odihneacă ,în special la drumurile lungi.

Figure 1.3.6 Autovehicul inteligent

Stadiul Actual al roboților industriali și performanțele lor

În urma aspectului și al obiectivelor am constat aparținerea robotului Nero în categoria roboților industriali,astfel devenind o machetă ce va reprezenta anumite sarcini ce le poate împlini un robot industrial.În capitolul acesta vă voi prezenta anumiți roboți alături de caracteristicile și performanțele lor.

Performanțele roboților industriali

Robotica este știinta ce are la bază toate domeniile de automatizare contemporane.În momentul de fată,în fiecare tară dezvoltată,acest domeniu este în continuă desfașurare,făcându-se astfel progrese remarcabile.În fiecare an numărul roboților industriali crește, odată cu cererea lor în industrie.Alegerea roboților industriali se fac după anumite criterii principale:nevoia spațiului de lucru,gradele de libertate si greutatea maximă ce o poate ridica.Pe piața muncii există o concurență în fabricarea roboților industriali existând multiple firme ce se ocupă cu dezvolarea lor,astfel diferența lor făcându-se la precizie . Exemple de firme ce se ocupă cu roboții industriali și caracteristicile lor :

Tabelul 2.1.1

Legenda:Pn-pneumatică,Hi,hidraulică,E-electrică

(Ecuatia 2.1)

În această formulă se caracterizează anumite calităti tehnice ale unui robot industrial ,unde cu cât este mai mai mare cu atât este mai bun robotul.

Roboții industriali sunt definiți de trei tipuri de cerințe:

de tip task:reprezintă executarea unei piese la o anumită calitate dorită.

de tip performanță economică:definind costul operației

de tip performanță-om :semnificând implicarea omului în acțiunile robotului

Cele de tip Task se împart in urmatoarele categorii :

spațiul de lucru unde –unde este definit volumul de lucru al robotului

orientarea prehensorului-se intamplă în anumite cazuri când robotul nu poate realiza anumite poziții în spatiul de lucru.

Sarcina utilă- reprezentând greutatea corpului ridicat

precizia de situare –ce se împarte in două mărimi:precizia de orientare și precizia de poziționare

rezoluția –reprezentând modificările cele mai mici și realizabile făcute de prehensor

viteza

sincronizarea cu alte masini

Folosirea roboților industriali în diferite industrii,mărește eficiența productivității si ajută la rezolvarea problemei forței de muncă.Dupa calculele curente 4-5.000 de roboți industriali pot înlocui ușor 10 -12.000 de muncitori,astfel în zilele noastre unii oamenii cred că o dată cu dezvoltarea roboților , nu vor mai avea locuri de muncă .

Stadiul Roboților

IRB 8700 fig(2.1)este făcut de cei de la ABB,și poate ridica obiecte până la 1000 kg ,are cu 25% viteză mai mare decât ceilalți roboți din clasa lui .Accentul punându-se pe o capacitate mare de producție,un design compact,servicii simple și costuri de intreținere reduse.În componența lui are un controller IRC5 și software-ul de control fiind RobotWave.Cu ajutorul software-ului putem controla mișcarile,dezvolta programe sau aplicații .

Figure 2.2.1 Robot IRB 8700

KR 240 R3200 PA-HO(fig2.2) robotul este făcut de cei de la Kuka și poate ridica maxim 240 kg,are o poziție de repetabilite de 0,06 mm,greutatea lui fiind de 1103 kg,numărul de axe este 5,poziția de montare fiind pe podea

Figure 2.2.2 Robot Kuka

Următorul robot industrial este de la firma Allmetech,Nachi- MZ04/MZ04E,ce are o poziție de repetabilitate de ,instalarea având-o tot pe podea sau perete,temperatura pentru o funcționare corectă este de 0-45 grade Celsius.Programarea este foarte simplă și ușor de controlat pentru orice operator neexperimentat.Are o configurare rapidă ,astfel dacă se dorește scchimbarea procesului se poate instala ușor datorită greutații sale,26Kg.

Figure 2.2.3 Robot Nachi

Robotul LR Mate 200iD este produs de cei de la Fanuc,având urmatoarele caracteristici:viteza axelor până la 25%,accelerația 32% în 0.32 secunde,187.5 cicluri pe minut,are un spațiu de lucru de 717 mm și sarcina utilă de 7Kg.El mai poate fi echipat cu senzori de forța sau viziune,Ethernet sau cabluri pentru anumite axe auxiliare.În componența lui mai are un controller Mate R-30IB ce are capacitatea de a trimite informațiile foarte rapid spre robot.

Figure 2.2.4 Robotul Mate 200iD

Prezentarea și realizarea robotului cu post fix Nero

Obiectivele proiectului sunt :

Folosirea unui modul de bluetooth pentru controlarea la distantă a unui robot post fix

Manipularea si transportarea obiectelor

Determinarea anumitor unghiuri de poziție a unui braț robotic

Determinarea modelului cinematic al robotului

Construirea unui simulator a robotului Nero cu ajutorul parametrilot Denavit-Hatenberg

Realizarea robotului Nero se va face după schema următoare având urmatoarele principii de bază: ansamblarea mecanică unde va fi prezentat montajul robotului post fix,asamblarea electronică unde avem componetele electronice,creare codului unde vom realiza codul sursă cu ajutorul unui limbaj de programare și testarea codului,verificarea și masurarea componentelor electrice și verificarea asamblului mecanic .

Figure 3.1 Schema realizării robotului Nero

Asamblarea mecanică a robotului Nero

Robotul Nero este un kit ce reprezintă un braț robotic ,ce are 6 grade de libertate,făcându-l astfel flexibil în aplicațiile de manipulare a obiectelor.Caracteristicile robotului sunt:unghiul de rotație ce îl are 180 de grade,inalțimea lui fiind de 46 cm atunci când prehensorul este închis,deschiderea maximă a prehensorului este de 5.5 cm.

Kit-ul conține urmatoarele componente:

6 x servomotoare de tip MG996R Tower Pro

1 x set de șuruburi

4 x rulmenți radiali cu bile miniaturizați

1 x prehensor

1 x suport braț de tip L

3 x suport pentru talie

6 x suport metalic servomotor

5 x suport pentru servomotoare

4 x suport tip U

Figure 3.1.1 Componente braț Robotic

Montarea suporților talie cu șuruburi de diametrul M3 ,reprezentând alcatuirea bazei robotului

Figure 3.1.2 Baza robotului

După ce am montat baza vom veni cu înca un suport talie ,acesta fiind montat in partea laterală a bazei,

Figure 3.1.3 Atașare suport susținere

Venirea suportului pentru servomotoare ce va fi pus pe baza robotului ,acesta va fi prins în șuruburi de diametrul M3,urmând imediat să fie prins și servomotorul cu șuruburi de diametrul M5

Figure 3.1.4 Montarea suportului pentru servomotor

După montarea servomotorului, va fi aplicarea rulmentului radial cu bile ce va avea rolul de a susține și a permite mișcarea suportului de tip U ,care va fi atașat de servomotor.Astfel vom termina alcătuirea primei cuple a robotului (Fig2.1.5)

Figure 3.1.5 Montarea suportului de tip U și rulmentu radial cu bile

Urmează asamblarea suportului pentru servomotoare ce va fi poziționat deasupra suportului de tip U ,ce a fost montat anterior.Fixarea fiind tot cu șuruburi M3.

Figure 3.1.6 Suportul pentru servomotor

După ce am montat suportul pentru servomotor urmează ansamblarea celor doi elementi de tip U (Fig 2.1.7)alcătuind astfel a doua cuplă a robotului ,după ,urmează montarea servomotorului cu șuruburi M5 (fig2.1.8).

Figure 3.1.7 Suporții de tip U

Figure 3.1.8 Montare servomotor

Urmează montarea suportului de tip L(Fig 2.1.9) ce va susține celelalte două parți: suportul de tip U și suportul pentru servomotor.Prima oară se va face prinderea cu șuruburi a suportului de tip U ,urmând în continuare suportul pentru servomotor,ca urmare acest montaj reprezintă cupla a treia a robotului(Fig 2.1.10)

Figure 3.1.9 Suportul de tip L

Figure 3.1.10 Montarea suportului de tip L

Urmează montarea ultimelor două suporturi pentru servomotoare(Fig 2.1.11) ce va avea rolul de susținere a prehensorului și formarea cuplei a patra și a cinciei a robotului

Figure 3.1.11 Asamblare suport servomotor

Urmează prinderea șuruburilor de tip M3 și a rulmentului radial cu bile(Fig 2.1.12)

Figure 3.1.12 Montare suport servomotor

Urmează montarea servomotoarelor si prehensorului (Fig 2.1.13)

Figure 3.1.13 Montarea prehensorului și a servomotoarelor

În final ,( Fig 2.1.14 ) avem terminarea montării robotului Nero ,urmând să îl programăm cu ajutorul placuței Arduino Uno și driver-ului ce ne va ajuta în continuare și la poziționarea servomotoarelor

Figure 3.1.14 Robotul Nero(vedere laterală)

Componentele unui braț robotic va fi prezentat în figura urmatoare:

Figure 3.1.15 Robotul Nero (vedere frontală)

Poziționarea servomotoarelor

Înainte ,de montarea componentelor robotului, va trebui să pozitionăm servomotoarele ce va reprezenta cuplele cinematice ale robotului nostru.Astfel avem primul servomotor reprezentând baza , ce va fi poziționat la 90 de grade,al doilea servomor va fi poziționat la 180 de grade ,al treilea servomotor va fi poziționat la 180 de grade ,al patrulea servomotor va fi poziționat la 90 de grade ,al cincilea servomotor va fi poziționat tot la 90 de grade ,urmând ca al șaselea sa fie poziționat la 0 grade atunci când prehensorul este deschis și 90 de grade când prehensorul este închis.

Table 3.1.1 Pozitionare Servomotor

Materialul componentelor robotului Nero

Kitul robotului Nero , ce include elementele componente ,sunt făcute dintr-un material ce se numește Aluminiu.

Aluminiul(Fig 2.3.1) este un metal ușor ce este simbolizat în tabelul chimic cu prescurtarea Al.Numărul lui atomic este 13,iar masa lui fiind 26.97.Se gasește sub formă de minerale precum:silicații,silicoaluminatii,criolitul,bauxita și corindonul.Este al doilea ca intrebuințare după fier , este un metal ușor ce este folosit foarte mult la industria navală și aeronautică,densitatea lui fiind de 2.7g / .Caracteristicile aluminiului sunt

un conducător electric si termic foarte bun, el este folosit în industria electricochimică sub formă de sârma

este ductil si maleabil,această proprietate îl ajută foarte mult în industria alimentară sau farmaceutică ,ajutând foarte mult la ambalarea alimentelor sau produselor farmaceutice

rezistența la coroziune este una din cele mai importante proprietăți ale lui .

mai este utilizat și în obținerea altor materiale precum:Crom,Mangan,Cobaltul

Proprietățile fizice ale aluminiului sunt :

culoarea ,fiind alb metalic

aliajele ce sunt făcute din aluminiu de obicei au o tracțiune între 70 si 700MPa

folosit pentru extrudare

nu devine casant atunci când temperaturile sunt joase,astfel rezistența lui crescând,

la temperaturi înalte de pana la 100 de grade Celsius ,rezistența lui este afectată ,chiar ajungând până la înmuierea lui

El apare pentru prima dată sub termenul de “alumen”,în lucrarea, Naturalis Historia scrisă de Pliniu cel Batrân,ca în anul 1760 sa fie numit “alumină” de către chimistul francez L.G Morveau. În anul 1807 se reușește obtinerea sub formă metalică a sodiului,potasiului ,stronțiului,bariului sau calciului cu ajutorul lui,cercetarea fiind facută de Sir Humphry Davy

Figura 3.1.2.1 Aluminiu

Aluminiul a fost folosit la creearea varfului pentru Monumentul Washington în anul 1884,valoarea lui fiind pe atunci cat un salariu al unui colaborator pentru acest proiect.

Producția maximă a aluminiului a fost atinsă în celui de-al doilea Razboi mondial ,avand circa 2.000.000 de tone .

Descrierea parților componente ale asamblării mecanice

Șurub

Șurubul este o componentă ce aparține domeniul mecanic ,având rolul de fixare, de îmbinare a două sau mai multe piese,sau de a transmite forțe sau mișcări pentru un mecanism.El de obicei vine în pereche cu piulița, ce are rolul de a menține stabil piesele mecanice ce au fost prinse. De obicei șurubul este compus din: cap ,ce diferă forma,o tijă ce este filetată pe toată lungimea șurubului sau pe anumite porțiuni,un vârf conic sau cilindric ce are rolul de a asigura direcția de orientare a șurubului.De obicei el este făcut din metal,plastic sau lemn.

Șuruburile au fost fabricate în secolul al XIX-lea ,când s-a făcut pentru prima dată crestarea lor .În secolul urmator,XX-lea, s-a fabricat șuruburile cu cap pătrat ,ele având rolul de a menține șurubelnița făra a aluneca pe capul șurubului ,această idee a fost fondată de canadianul Peter L.Robertson.Clasificarea șuruburilor se face după forma capului (cilindric,bombat,patrat,stifturi,prezoane etc) și după rolul lor de funcționare(fixare,îmbinare,transmiterea forțelor și mișcarilor,reglare sau măsurare).

Figura 3.1.3.1 Șurub

Piuliță

Piulița este o componentă mecanică ce are rolul de a strânge sau de a slăbi anumite îmbinări mecanice.Strângerea sau slăbirea lor se face cu ajutorul mâini sau cu ajutorul cheii. Clasificarea lor se face:după forma exterioară(exemplu:piulița fluture)sau acționate cu ajutorul cheii(exemplu:piulița hexagonală).În proiectul nostru este folosită piulița hexagonală unde strangerea ei se va face cu ajutorul cheii

Figura 3.1.3.2 Piulița Hexagonală și tip fluture

Rulment radial cu bile

Rulmentul este un element mecanic ce are rolul de a reduce forțele de frecare și de a permite o centrare bună a suporților ce formează cupla. Rulmenții radiali sunt folosiți când avem viteze mari și putem prelua sarcini radiale. Trebuie neapărat să avem o întreținere specială față de ei .În cazul robotului Nero ,avem inclus în kit rulmenții radiali cu flanșă pe interior 5mm.

Utilizarea rulmenților oferă urmatoarele avantaje:

creează forțe de frecare mai mici,astfel au un randament ridicat

dimensiunile axiale reduse

au de obicei un joc redus

Clasificarea rulmenților dupa tipul de frecare :

de alunecare

de rostogolire

In cazul nostru avem rulmenți de rostogolire

Mai există si clasificarea după sarcini

radial-axial

radial

axial

axial-radial

Partile componente ale unui rulment radial cu flanșă sunt : Fig (2.4.3.1)

inelul interior

inelul exterior

bilele/rolele

colivia

Figura 3.1.3.3 Vedere 2D rulment flanșă

Figura 3.1.3.4 Rulmenți cu flanșă pe interior

Asamblarea mecanica sa facut cu ajutorul unui set de surubelnite de diferite forme.

Gradele de libertate ale robotului Nero

Pentru a putea afla câte grade de libertate are robotul Nero ,va trebui să aflăm numarul elementelor ,tipul cuplei cinematice,si numarul cuplelor .

Elementul cinematic reprezintă o componenta rigidă ce are rolul de a transmite o mișcare sau o forță.

Cuplele cinematice reprezintă legătura a două sau mai multe elemete cinematice ce au diferite mișcari și grade de libertate.Ele se împart în mai multe clase :

clasa l –cupla sferică pe plan

clasa a II-a-cupla cilindru pe plan

clasa a III-a –cupla sferică

clasa a IV-a-cupla cilindrică

clasa a V-a-cupla de translație

Gradele de libertate reprezintă numărul mișcărilor independente ce le poate face un corp.

Ecuația gradelor de libertate este urmatoarea:

(3.2.1)

unde n-reprezintă numărul de elemente

c-numărul cuplelor cinematice

Asamblarea electronică a robotului Nero

Înainte de a începe o ansamblare a circuitului electric trebuie să știm că pentru evitarea oricărui pericol intotdeauna e recomandat , verificarea tensiunii sa fie corectă și să avem suficient curent pentru aplicația noastră.Astfel putem risca arderea placuțelor sau nefuncționarea corespunzătoare a anumitor componente.

Curentul electric este foarte periculos de aceea trebuie să fim conștienți și siguri pe noi de ceea ce facem pentru a nu declanșa anumite accidente grave,sau mortale. El este de două feluri:curent alternativ, în limba engleză îl găsim notat cu AC ceea ce inseamnă Alternate Curent și curentul continuu ,notat cu DC insemnând în limba engleză Direct Continuu .În asamblarea noastră folosim curenți continuu.

Pentru partea electrică a robotului Nero am avut nevoie de următoarele componente:

un Arduino Uno,

un driver pentru servomotoare,

un regulator,pentru menținerea curentului constant

o placuță de breadboard,

un modul de Bluetooth HC-06,

fire pentru a face legăturile dintre componente

,LED-uri,buton ,rezistențe

Baterii tip Li-ion 18650 3.7 Volți,5000 Miliamperi

Suport baterii 18560

Încarcator baterii 18650

Figure 3.3.1 Componente asamblare electronică

Vom incepe prima dată cu driver-ul de servomotoare PCA 9685 ce va fi conectat la Arduino Uno.Trebuie să avem foarte mare grijă la montarea driver-ului de servomotor deoarece trebuie sa corespundă cu pini placuței de Arduino Uno(Tabelul 3.3.1).

Table 3.3.1 Conectare Arduino-PCA 9685

Figure 3.3.2 Montaj Arduino Mega și driver de servomotoare

Punerea bateriilor de tip Li-ion în suport, pentru crearea unei surse de alimentare separată pentru driver-ul de servomotoare .Suportul are la ieșire două fire ce reprezintă GND reprezentat de culoare neagră ,si alimentarea Vcc de obicei este reprezentată de culoare roșie. (Fig 3.3.3)

Figure 3.3.3 Alimentare motoare

Conectarea sursei de alimentare cu driver-ul de servomotor, ce este conectat de placuța Arduino Uno,pentru alimentarea servomotoarele cu tensiunea și curentul necesar.

Figure 3.3.4 Montaj baterii

După alimentarea driver-ului va trebui să folosim breadboard-ul .Așadar vom porni cu alimentarea și masa din placuța de Arduino Uno,și le vom conecta la breadboard.Firul negreu va reprezenta masa și alimentarea firul alb.Bineînteles,alimentarea driver-ului se va face din placuța de breadboard.

Figure 3.3.5 Montarea firelor pe breadboard

Urmează montarea butonului ce va avea rol de a porni aplicația de manipulare a obiectelor al robotului Nero .

Figure 3.3.6 Montaj buton

Urmează montarea LED-ului de culoare roșie ,ce se va aprinde la începutul aplicației ,însemnând poziția de stop a robotului Nero.

Figure 3.3.7 Montaj LED

Montarea celui de al doilea LED de culoare verde.Când se va apăsa butonul se va aprinde LED-ul verde si robotul va începe să pornească aplicația pentru manipularea obiectelor.

Figure 3.3.8 Montarea LED-ului al doilea

Urmează montarea rezistențelor(Fig 3.9) în serie ce va forma un divizor de tensiune pentru pinul RX al bluetooth-ului

Figure 3.3.9 Montaj rezistențe

Montarea Bluetooth-ului HC-06 și conexiunilor, cu placa Arduino Uno.

Figure 3.3.10 Montare Bluetooth

Și în final montarea servomotoarelor pe driver-ul PCA9685

Figure 3.3.11 Asamblare

Fritzing este un soft conceput pentru a-i ajuta pe artiști,designeri, profesori sau studenți,să realizeze și să proiecteze diferite circuite electronice.De obicei când deschidem programul apare o placuță de breadboard ,ce se adaugă diferite componente electronice ce se conectează cu ajutorul firelor.Acest soft folosește elemente vizuale ,și nu simboluri electronice ,din această cauză el este un program simplu pentru începatori.Are o grafică placută,clară și ușor de manevrat.El se gasește pe site-ul oficial unde putem să îl descărcăm pe diferite platforme:Mac,Windows și Linux .

Interfața lui se compune din

Project view-unde se poate lucra pe breadboard,pe schema electrică sau pe un anumit circuit imprimat

Palette window – unde găsim componentele electronice și setările lor.

Part creator-unde creăm și modificăm componentele.

În imaginea ce urmează avem desenarea circuitului nostru pe placuța de breadboard.

Figure 3.3.12 Montaj circuite Fritzing

Pentru construirea circuitului,se va incepe prima oară cu adaugarea componentelor ce le gasim în bibliotecă.De obicei elementele se pot copia,muta șterge cu ușurință folosind meniul sau combinațiile de taste .

Fritzing mai are opțiunea de a folosi funcția de PCB,unde se pot imprima circuite.Din păcate acest soft nu poate simula un circuit electronic ,acesta fiind un mare dezavantaj .

Descrierea componentelor ale asamblării electronice

Arduino Uno

Arduino Uno este o placuța ce are la bază microcontrolerul ATMEGA 328P.Ea dispune de 6 pini PWM ,6 intrari analogice,un oscillator de cristal ce are 16 MHz,buton de resetare,o conexiune USB,și 14 intrări sau ieșiri digitale .Toate componentele au rolul de a asigura o funcționare bună și corectă a microcontrolerului.Alimentarea plăcii se face cu ajutorul unui cablu USB sau cu ajutorul unei baterii.

Placa poate rezista pana la 7 -12 de volți dacă se alimentează cu o sursă de putere externă.Daca se aplica o putere mai mare de 12 Volti atunci regulatorul de tensiune se va încălzi foarte tare si placa se va deteriora.Recomandat e să folosim o tensiunde de 7 până la 11 Volți.Alimentarea plăcii se poate face cu următorii pini:

Pinul VIN :când este utilizată sursa de putere externă

5V când alimentarea este facută prin portul USB,de obicei această tensiune este cea mai potrivită pentru o funcționare bună a microcontrolerului.

3.3V,unde rezistența curentului este de 50 mA

GND(Ground)

Microcontroler-ul ATMEGA 328P are o memorie flash unde se poate stoca 256 KB pentru stocarea unui cod.

După cum spuneam placa are 14 intrări și ieșiri ,atfel putând sa fie utilizate anumite funcții precum:pinMode(),digitalWrite(),si digitalRead(),fiecare utilizând 5 Volți.Din afară de cele 14 intrări sau ieșiri ,mai există si alți pini ce au diferite funcții speciale:

Serial:pentru a putea primi și trimite date seriale.Primirea se face cu ajutorul pinilor simbolizați cu RX si trimiterea cu ajutorul pinilor ce au simbolul TX.

PWM:ce sunt numerotați pe placa 3,5,6,9,10,11.

LED: toate plăcile de Arduino vin încorporate cu un led ce este reprezentat de pinul 13

Comunicarea I2C :A4 (SDA) si A5(SCL)

Figure 3.3.1.1 Arduino Uno

LED-ul

În proiectul nostru s-a folosit două LED-uri de culoare roșie și verde .LED-ul roșu se va aprinde atunci când vom alimenta placa Arduino Uno și va reprezenta modul off al robotului Nero,iar LED-ul verde se va aprinde atunci când vom apăsa butonul,acesta având rolul de a porni aplicația ce execută manipularea obiectelor.

LED-ul reprezintă o componentă electronică ce are rolul de a emite lumină.Ele sunt cele mai răspândite componente în lume.Denumirea de LED vine de la cuvintele în engleză Light Emitting Diode.

LED-urile au două terminale numite anod si catod,recunoașterea lor se face după dimensiuni ,cel mai mic terminal reprezintă catodul unde are sensul negativ și este reprezentat de semnul ”-“,iar cel mai mare terminal reprezintat de anod ce are sensul pozitiv și semnul fiind “+”.Pentru aprinderea unui led avem de nevoie de o tensiunce cuprinsa intre 1,3 si 3 Volti,iar curentul intre 10 mA si 20 mA.De obicei valorile depind și de culorile reprezentate de led sau tipul lui.(tabelul 3.1.2.1)

Mai există și LED-uri RGB ce conține în înterior trei leduri:unul de culoare roșu,unul verde și unul albastru,așadar au patru terminale.LED-urile infraroșu ce emit lumină invizibilă sunt folosite de obicei la telecomandă sau la lentilele de noapte.

Table 3.3.2 Tabel valori LED

Figure 3.3.1.2 LED

Simbolul LED-ului este reprezentat de figura urmatoare:

Figure 3.3.1.3 Simbol LED

PCA 9685

Este un shield ce ne ajută la controlarea a 16 servomotoare.Fiecare port este alcătuit din 3 pini:V+,Ground,și semnalul PWM.Semnalul PWM trebuie să funcționeze independent,dar cu condiția să aibe aceeași frecvență.De exemplu dacă vrem să controlăm simultan ledurile si servomotoarele pe driver ,nu vom putea, deoarece frecvențele diferă,ledul folosește probabil 1 KHz,iar servomotoarele folosesc 50-60 de Hz.PWM poate să fie controlat cu I2C,acesta fiind un protocol de comunicare.

Figure 3.3.1.4 PCA 9685

Rezistori

Sunt componente electronice ce au rolul de a reduce un curent.Ele sunt construite din materiale ce permit o rezistență la trecerea unui anumite cantități de curent:de exemplu cuprul ,este un bun conductor ce are o valoare aproape nulă la trecerea curentului prin el,un alt material este fierul,dar nu este la fel de bun precum cuprul.Unitatea de masură a curentului este Ohm,si poartă denumirea celui care a descoperito George Simon Alfred Ohm(1789-1854).

Cei mai folositi rezistori sunt cei de putere mică și au anumite dungi colorate ce ne ajută la identificarea valorii sale.De obicei pe rezistori găsim patru sau cinci dungi,ultima reprezentâdu-se prin culoarea aurie.Rezistorii ce se folosesc la circuitele electronice au valori de cațiva ohmi la cateva milioane de ohmi.Pentru descifrarea valorii lui va trebui sa poziționăm dunga aurie spre partea dreaptă,astfel făcându-se citirea de la stânga la dreapta.Codurile pentru culori va fi reprezentat de figura ce urmează :

Table 3.3.3 Valori rezistori

Avem în figura ce urmează citirea unui rezistor de :

Figure 3.3.1.5 Rezistori

Așadar avem următorul calcul :% ; unde 5% reprezintă toleranța rezistorului .

Bluetooth HC-06

Este o componentă ce are la bază schimbul datelor fără intermediul firului,astfel devenind un mod de comunicare foarte avantajos .Cuvantul “Bluetooth “ a apărut prima dată în Danemarca în secolul al X –lea ,sub numele de Blåtand/Blåtann,după cum era supranumit regele viking Harold l,cel ce a reusit sa uneasca Danemarca cu Norvegia.Traducerea in română a cuvântului “Bluetooth”inseamnă “dinte albastru”.Aparatele care au în componența lor un bluetooth pot comunica între ele,pe o anumită distanță.Pentru a transmite, ele folosesc un sistem de comunicații radio,fara a fi nevoie sa stea față în față.Cu cât transmisia este mai puternică ,cu atât comunicarea se poate face mai departe.Ele sunt clasificate în funcție de puterea și raza(tab 2.3.4)

În zilele noastre:telefoanele mobile,laptop-urile,imprimantele,camerele foto pot face schimb de informații cu ajutorul bluetooth-ului fără a se ține cont de diferențele lor .

În aplicația noastră ,robotul Nero va folosi modulul de Bluetooth HC-06 ,ce va avea rolul de a comunica cu telefonul mobil .

Table 3.3.4 Clasificare bluetooth

Caracteristicele Bluetooth-ului HC-06 sunt:

Protocolul Bluetooth: standard Bluetooth 2.0 + EDR

Protocolul USB: USB v1.1 / 2.0

Frecvența de operare: banda de frecvență ISM de 2,4 GHz

Modul de modulare: Gauss Shift Keying

Puterea de transmisie: ≤ 4dBm

Sensibilitate: ≤-84dBm

Viteza de transmisie: 2.1Mbps (Max) / 160 kbps (asincron); 1Mbps / 1Mbps (sincron)

Funcție de siguranță: Autentificare și criptare

Configurație acceptată: port serial Bluetooth

Tensiune de alimentare: +3.3 VDC 50mA

Temperatura de operare: -20 la 55 ℃

Dimensiune: 36,5 * 16mm

Greutate: 4g

Figure 3.3.1.6 Vedere față-spate Bluetooth

Schema conexiune: telefon-bluetooth- robot

Fig 3.3.1.7 Telefon Fig 3.3.1.8 Bluetooth

Servomotor

Servomotorul este un component ce conține o roată dințată ce are rolul de a se învârti.Rotația nu este facută complet ,ajungând maxim la poziția de 180/270 de grade.Ele ajung în poziția dorită ,reușind să o mențină.Mai sunt numite și RC servo ,unde RC înseamnă remote control.Din servomotor ies trei fire:unul de culoare închisă ce reprezintă Ground(GND),unul de culoare roșie ce reprezintă alimentarea (Vcc),iar ultimul fir de culoare galbenă sau portocalie ce are rolul de a primi semnalul.

Servomotoarele pot avea forțe considerabile , ce se masoară in “cuplu”, exprimarea făcându-se in kg/m.Semnalul servomotorului poate fi 0 Volți sau 5 Volți .

Componentele servomotorului:

Motor de curent continuu

Un potențiometru-ce ne ajută la identificarea poziției

Un grup de angrenaje-ce ne ajută la conectarea potențiometrului și creșterea puterii mecanice

Circuit de acționare-unde se primește semnalul ,și se citește poziția servomotorului.

Servomotorul MG996R este un servomotor de turație mare ce are in componența lui angrenaje metalice. Față de predecesorul său MG995,servomotorul este imbunătățit să reziste împotriva șocurilor.Folosește librăria Arduino,făcându-l astfel ușor de controlat și util pentru începători.

Specificațiile servomotorului:

Greutatea: 55 Kg

Dimensiune: 40.7 x 19.7 x 42.9 mm aproximativ

Cuplul:9.4 kgf∙cm(4.8V) , 11 kgf∙cm(6V)

Viteza de operare:0.17s/60 de grade(4.8V),0.14s/60 de grade(6.0 V)

Tensiunea :intre 4.8 V si 7.2 V

Funcționare curent:500mA-900mA

Oprire curent:2.5 A

Lătimea benzii:

Temperatura: cuprinsă intre 0 grade si 55 grade Celsius

Figure 3.3.1.9 Servomotor MG996R

Crearea si testarea codului pentru controlarea robotului Nero

Arduino IDE

Programarea în Arduino se face cu ajutorul unui program numit Arduino IDE,ce are la bază limbajul C/C++.El este ușor de folosit,și se poate descărca după site-ul lor official.Pentru a programa în Arduino se poate folosi și alte limbaje de programare,dar cu condiția de a avea un compilator capabil să transforme programul în cod masină binar.

O altă modalitate de a programa în Arduino este folosirea unui programator ISP ce ne ajută la programarea cipurilor.Avantajul acestei programări, de exemplu la aprinderea ledului, este reducere biților de la 2800 la 250,rezultând astfel o scădere enormă.Dezavantajul este că nu ni se mai permite citirea sau setarea pinilor,pentru activarea semnalelor PWM(Pulse Width Modulation).

Compilarea se face cu ajutorul avr-dude,unde ne ajută la transformarea codului intr-un fisier Hex,pentru a putea comunica cu cipul.

Revenind la programul Arduino IDE ,este compus din doua funcții :

Setup():-unde codul rulează o singură dată atunci când pornim programul

Loop():-rularea codului în mod repetat pănâ când se va opri placuța .

Mai conține opțiuni ce se găsesc în bara de sus:

File(fisier):unde găsim opțiuni New pentru crearea unui fișier,Open pentru deschiderea fisierelor cu format .ino ,Save unde putem salva etc.

Tools-modificarea portului unde avem placuța sau tipul ei,

Help

În continuare mai găsim în bara de meniu șase opțiuni dintre care cele mai importante sunt:

Verify- având rolul de a verifica codul dacă este scris corect sau gresit

Upload-încarcarea codului pe microcontroller

Serial Monitor-având rolul de a comunica datele de la Arduino către PC

Figure 3.4.1.1 Arduino IDE

Creare codului pentru poziția servomotoarelor și testarea lui

Pentru controlarea servomotoarelor s-a folosit librăria <Adafruit_PWMServoDriver.h> unde se poate controla 16 motoare pe driver-ul PCA 9685 .

În prima faza am setat servomotoarele la o poziție cât mai corectă pentru a reuși asamblarea corectă a robotului Nero.Montarea servomotoarelor s-a făcut pe pinii1,2,3,4,11,15 unde primesc semnal PWM(Pulse Width Modulation).

Cu ajutorul codului din Anexa 1 am reușit să aflu și să poziționez servomoatoarele la poziția de start a robotului sau poziția inițială în care se va afla robotul la începutul operației.

La începutul programalui se incepe cu declararea librăriei ,urmând să declarăm servomotoarele la pinii ce vor fi conectați, în setup va fi crearea semnalului PWM ,ce va rezulta la final unghiurile servomotorului ,iar in loop vom defini la câte grade dorim să fie servomotorul,cu ajutorul comenzii .setPWM.

Reamintim că servomotoarele se pot roti maxim până la 180 de grade.

Așadar, după scrierea codului vom verifica daca e scris corect cu ajutorul comenzii Verify ,astfel sa il uploadăm pe placa de Arduino Uno .

Crearea codului pentru manipularea obiectelor

Pentru o controlare mai bună a robotului Nero ,avem nevoie de scăderea vitezelor pentru servomotoare,pentru a reuși ,vom folosi comanda for ce va cuprinde trei elemente,primul ce va inițializa poziția servomotorului,al doilea ce va reprezenta condiția cât timp este adevarată,iar al treilea va executa de atâtea ori cât este valabilă condiția .

Controlul la distanță prin Bluetooth

Aceasta modalitate este facută cu ajutorul modului Bluetooth HC-06(vezi subcapitolul 3.1.5) unde a avut la bază ideea controlării robotului cu ajutorul telefonul mobil.Pentru a face această comunicare posibilă va trebui sa construim o aplicație pentru telefon,ce va avea rolul de a comunica cu Bluetooth-ul si de a controla servomotoarele.Programul s-a făcut cu ajutorul unei aplicații numite Mit App Inventor.(Fig 4.4.1)

Această aplicație a fost concepută pentru sistemele de operare Android(OS),utilizând o interfață grafică,foarte ușoară unde se aseamană cu soft-ul Scrath sau StarLogo TNG.Aplicația folosește drag-and –drop pentru creerea aplicațiilor cu ajutorul obiectelor vizuale.În anexa 3 avem crearea codului in Arduino IDE , pentru a face conexiunea telefon-bluetooth.

Figure 3.4.4.1 Mit APP INVENTOR

În figura ce urmează avem prezentarea programului realizat cu ajutorul aplicației MIT App Inventor:

Figure 3.4.4.2 Aplicația Android

El este compus din urmatoarele funcții principale

Viewer-reprezentarea unui display ce se aseamănă cu cel al telefonului ,urmând să fie introduse obiectele vizuale

Palette-unde găsim obiectele vizuale.Aplicarea lor, după cum am specificat în paragrafele anterioare ,făcându-se cu ajutorul funcției drag-and-drop.În această comandă găsim ,butoane,tabele,textbox,slider etc. ce ne ajută la construirea aplicației din punct de vedere vizual.

Components-găsim componentele ce le-am introdus în aplicație

Properties-modificarea componentelor ,culoare,dimensiuni ,schimbarea scrisului, după cerințele fiecărui client.

Urmatoarea figură(4.4.3) avem construcția codului utilizând obiectele vizuale ce le-am folosit:

Figure 3.4.4.3 Construirea Codului

Semnale PWM(Pulse Width Modulation)

Semnalul PWM este un semnal electric ce poate avea valoarea 0 volti atunci când tensiunea este nulă ,sau avem valoarea 6 -7.2 Volți ,în cazul nostru, când tensiunea este maximă.

Figure 3.4.5.1 Semnal PWM

În urma figurii 3.4.5.1 putem calcula durata unui ciclu:

Limbajul C/C++

Limbajul C a apărut în anii ’70 în laboratoale AT&T Bell .Cel care a creat limbajul C a fost Dennis Ritchie.Înainte de limbajul de programare C,a fost limbajul de programare B.

Limbajele sunt de diferite nivele.Limbajul C este de nivel mediu,el are anumite părți ce seamănă cu limbajul de asamblare.Caracteristicile limbajului C sunt:

Simplitatea ,ce il face sa fie important când avem de folosit funcții matematice sau manipularea fisierelor

Are un limbaj preprocessor,ce ajută la introducerea fisierelor sursă

Folosirea variabilelor și declararea lor

Poate sa folosească memoria calculatorului la un nivel scăzut cu ajutorul pointerilor

Aplicații ce folosesc limbajului C sunt:

în inteligență artificială

în prelucrarea imaginilor

în proiectarea asistată pe calculator

în grafică

Limbajul C este cel mai popular în zilele noastre pentru scrierea sistemele software.El cooperează foarte mult cu partea de hardware. Sintaxa lui are la bază crearea altor limbaje precum:Java,C#,JavaScript.

Figure 3.4.6.1 Limbajul C

Verificarea asamblării electronice

Pentru a verifica asamblarea electronică,va trebui sa știm legea lui Ohm (ecuatia 6.1) de unde va rezulta tensiunea,curentul și rezistența :

(Ecuația 3.5.1)

V=tensiune;I=curentul;R=rezistența

(Ecuația 3.5.2)

(Ecuația 3.5.3)

Pentru a afla rezistența LED-ului,va trebui să folosim formula rezistenței(Ecuația 6.3).

Exemplu:

Ledul trebuie sa fie alimentat la un curent cuprins intre 10mA si 20mA și tensiunea de 3 Volți.În urma aplicării formulei deducem :

Valoarea rezistenței pentru un led este de 200 .În comert nu exista valoarea aceasta ,așadar putem folosi o rezistență de 220 .Vom putea calcula și puterea rezistenței cu ajutorul formulei:

Rezistența LED-ului si al Butonului sunt puse la GND, deoarere are rolul de a reduce un semnal înalt atunci când îl trimit,de aceea vom folosi o rezistență de 10 K pentru buton și 220 pentru led.

Urmează să verificăm tensiunea la baterii,reamintim faptul că avem baterii de tip Li-on cu tensiunea de 3,7 Volți și un curent de 5000mAh.Având două legări în serie,ar trebui să avem in total 7,4 Volti,dar în figura ce urmează ,vedem că avem o abatere pe plus de 0.7 Volți

Figure 3.5.1 Verificare baterii

Pentru a avea o tensiune necesară pentru servomotoare, a trebuit să cumpăr un regulator de tensiune DC-DC pentru a reduce tensiunea de la 8.09 Volți la circa 6 -7.2 Volți ,prevenind astfel arderea servomotoarelor.Regulatorul are încorporat un ecran LCD ce are rolul de a observa atât tensiunea de intrare cât si tensiunea de iesire.Este dotat cu două potențiometre:primul ne ajută la modificarea tensiunii de iesire și al doilea la modificarea curentului.

Figure 3.5.2 Regulator de tensiune cu ecran LCD

În urma testelor făcute am constatat o descărcare a bateriei în mai puțin de 3 ore(Ecuatia 6.4),fapt ce m-a determinat la achiziționarea unei surse de comutație cu 12 Volți tensiune ți 15 Amperi curentul.

(Ecuația 3.5.4)

De unde rezultă , t=timpul, h=ore

Sursa de comutație este alimentată cu 230 Volți de la rețea,rezultând folosirea curentului alternativ.Alimentarea se face prin intermediul pinilor marcați “L” reprezentând faza și “N”reprezentând nulul,al treilea pin fiind împământarea.Dupa conectarea firelor va trebui sa verificăm dacă acestea nu fac scurt-circuit,evitând astfel accidentele grave.

Figure 3.5.3 Reprezentarea fazei și nulului a sursei de comutație

Ca ieșire avem doi pini Ground,reprezentați prin simbolul “-V” și doi pini de alimentare simbolizați cu “+V”,tensiunea de ieșire fiind de 12 Volți.

Figure 3.5.4 Reprezentarea pinilor de ieșire a sursei

Modulul Bluetooth HC-06 are un regulator de 3.3V care permite utilizarea unei tensiuni de intrare mai mari, în intervalul de la 3,6 până la 6 volți. Pinul RX poate totuși accepta doar 3.3V. Acest lucru înseamnă că va fi nevoie de un divizor de tensiune pentru conectarea la un arduino de 5V. Un simplu divizor de tensiune poate fi creat folosind 2 rezistențe(Fig 6.6). Eu folosesc un rezistor de 1K ohm și un rezistor de 2.2K ohm. Arduino va citi 3.3V ca HIGH astfel încât pinul HC-06 TX poate fi conectat direct la Arduino.

Figure 3.5.5 Verificare rezistori

Verificarea asamblărilor mecanice

În urma asamblării mecanice și al testelor făcute am constatat deteriorarea unui filet al șurubului,fapt ce a dus la slăbirea piuliței și descentrări cuplei.Ca măsură ,am desfăcut robotul,am fixat din nou rulmentul , și am schimbat șurubul.

Figure 3.6.1 Reprezentare șurubului distrus

O altă problemă a fost neîmbinarea prehensorului fată de șurubul servomotorului ce îl susținea (Fig 7.2),fapt ce a determinat polizarea interioară a capătului prehensorului .În urma polizării am remediat situația ,astfel încat șurubul s-a potrivit cu prehensorul

Figure 3.6.2 Defecțiune prehensor

Modelul geometric al robotului

Descrierea elementelor

Un laț cinematic este adăugarea mai multor elemente ,realizate cu ajutorul cuplelor de rotație sau de translație.Descrierea elementului este definirea unui sistem de referință și al unei transformări omogene fată de reperul a cărui postură trebuie sa fie cunoscută .

Cel mai consacrat formalism este cel al lui Denavit Hatenberg (fig 5.5.1)modificat ,ce conține patru parametri:

Lungimea elementului notat cu litera “a”

Unghiul de rasucire al elementului notat cu” 𝛼”

Offsetul elementului ,il găsim notat cu “d”

Unghiul articulației notat cu “𝜃”

Figure 4.1.1 Denavit Hatenberg

Formalismul reperului translatat

Prin analiza reperului translatat înțelegem următoarele aspecte:

Utilizarea pentru orice axa a cuplelor de rotație sau translație al lanțului cinematic

Conține un număr minim de parametrii pentru a defini o matrice de transformare

Soluții multiple,ceea ce este un dezavantaj deoarece îngreunează decizia celui ce o utilizează

Formalismul reperului translatat urmarește următorul algoritm:

Definirea fiecărui centru al cuplei

Drumul parcurs de la centrul curent al cuplei la cel consecutiv

Primitivele algoritmului Reperului Translatat:

Table 4.2.1 Transformările omogene

În exemplul următor avem transformarile omogene pentru robotul Nero

Figure 4.2.1 Schema cinematica a robotului Nero

În tabelul ce urmează o să utilizăm formalismul reperelui translatat pe schema cinematică a robotului Nero,urmând sa se facă transformările de la baza 1 până la baza 6 și în final prehensorul

Table 4.2.2 Transformările omogene

Simularea robotului Nero

Simularea s-a făcut cu ajutorul softului Matlab(Fig 5.3.1),ce conține un pachet de programe dedicat calcului numeric și reprezentărilor grafice.Matlab-ul este compus din mai multe toolbox-uri.El a fost conceput de Carl Engeman în anul 1964,și introdus ăn anul 1967 ăn universități.Matlab-ul este foarte util în manipularea matricelor,creare interfețe cu ajutorul comenzi GUI si implementarea algoritmilor.

Figure 4.3.1 Matlab

Toolbox-ul lui Peter Corke furnizează funcții care sunt utile pentru studiul și simularea brațelor robotice, de exemplu, cinematica, dinamica și generarea de traiectorii.

Conține clase pentru a reprezenta orientarea și poziționarea în 2D și 3D ca de exemplu matricile, mai oferă, de asemenea, funcții pentru manipularea și conversia între tipurile de date, cum ar fi vectori, transformări omogene care sunt necesare pentru a reprezenta poziția și orientarea tridimensională.

Aceasta simulare folosește cei patru parametrii a lui Denavit-Hartenberg(DH).Reamintim cei patru parametri în succesiunea lor .Structura robotului particularizat cu ajutorul parametrilor DH este realizat in tabelul 5.3.1

Table 4.3.1 Parametrii DH

În anexa 4 avem simularea robotului Nero unde s-a făcut construirea lui cu ajutorul celor patru parametri ai lui Denavit-Hartenberg,după această fază urmează construirea lanțului cinematic cu ajutorul comenzii “Serial Link”unde mai putem modifica și numele robotului,urmează comanda “plot” unde vom afișa robotul Nero în 3D,iar comanda “.teach” ce ne va ajuta la simularea cuplelor.Cu ajutorul toolbox-ului lui Peter Corke putem crea un braț robotic

Figure 4.3.2 Robot Nero

In figura alaturată avem demonstrația unde putem simula cuplele cu ajutorul comenzi “.teach”

Figure 4.3.3 Simularea cuplelor

Concluzii

Contribuți personale

Asamblarea mecanică a robotului (subcapitolul 3.1)

Asamblarea electronică(subcapitolul 3.2)

Crearea codului pentru manipularea obiectelor cu ajutorul librăriei driver-ului de servomotoare PCA 9685

Crearea codului pentru controlul la distanța cu ajutorul bluetooth-ului HC-06

Crearea suportului pentru fixarea placuței Arduino Uno,breadboard și driver

Construirea și simularea robotului în Matlab cu ajutorul celor patru parametrii ai lui Denavit-Hatenberg

Îmbunătățirea bazei cu ajutorul șuruburilor,șaibelor și piulițelor.

Prelucrarea și adăugarea anumitor obiecte în proiect

Dezavantaje

Lipsa unei schițe pentru montarea robotului,a fost un mare dezavantaj deoarece nu am știut cum se asamblează robotul,fapt ce m-a determinat la căutarea anumitor surse de pe internet.Pentru a putea monta robotul este important să avem un set de șurubelnite de diferite forme,deoarece avem șuruburi de diferite dimensiuni.

Dezavantajul unui kit, sunt dimensiunile greșite la anumiți suporți ,de exemplu, cel de la baza robotului,fiind prea scurt ,servomotorul va acționa mai greu deoarece toată greutatea robotului va veni în față. Pentru controlarea servomotoarelor trebuie să avem foarte mare grijă la alegerea unui driver,deoarece în prima fază a proiectului am ales un driver Arduino Sensor Shield V.5 ,ce mi-a ars trei servomotoare și o placă Arduino Uno .Cu toate că pentru a controla servomotoarele trebuia să scot jumperul ,pentru a nu intra tensiunea de la alimentarea separată în Arduino,driver-ul tot a reușit să îmi ardă servomotoarele,cauzele fiind probabile lipsa unei tensiuni constante.

O altă problemă este lipsa unor filete la elemetele de fixare a servomotorului ,fapt ce a condus la introducerea forțată a șurubului sau blocarea lui.

Din punct de vedere electric va trebui să achiziționăm un multimetru ce ne va ajuta la măsurarea curentului continuu,(de exemplu la circuitul electronic sau regulator) dar și al curentului alternativ, unde ne-a trebuit la deosebirea și măsurarea firelor ce veneau montate pe sursă ,pentru a preveni arderea ei

Bibliografia

[Fig 1.3.2] https://am.is.tuebingen.mpg.de/pages/robots

[Fig 1.3.3]

https://www.mtdemocrat.com/special-sections/medical-guide-

2012/marshall-medical-center-brings-in-new-technology/

[Fig 1.3.4] http://banateanninja.blogspot.com/2013/06/dronele-de-lupta-arma-preferata.html

[Fig1.3.5]http://www.keywordlister.com/bWljcm8tcm9ib3RzIGFkdmFuY2VzIGluIG1lZGljaW5l/

[Fig 1.3.6] https://www.nissan.ro/experienta-nissan/mobilitate-inteligenta.html

[Fig 2.2.1]https://www.pinterest.com/pin/12103492726286465/

Fig[2.2.2] https://robo-hunter.com/resume/kr-240-r3200-pa-ho–moshnii-robot- palletoukladchik-ot-kuka

[Fig 2.2.3] http://www.nachi-fujikoshi.co.jp/eng/rob/hand/mz04a.htm

[Fig 2.2.4] https://www.fanuc.eu/fi/en/robots/robot-filter-page/lrmate-series/lrmate-200id-4s

[Fig 3.1.2.1] https://ro.wikipedia.org/wiki/Aluminiu#/media/File:Aluminium-4.jpg

[ Fig 3.1.3.1 ] http://www.westech-solare.ro/produse-recente.php?page=2

[Fig 3.1.3.2]

https://www.dedeman.ro/ro/piulita-hex-m6-zn-

22700b06000f2/p/6005476

[Fig 3.1.3.2] https://www.bizoo.ro/firma/meteorlmpex/vanzare/9888179/piulita-fluture-din-315

[Fig 3.1.3.3] http://nichelina-cnc.ro/product_info.php?products_id=766

[FIG 3.1.3.4]https://www.olx.ro/oferta/rulment-flansa-f623zz-3104mm-cnc-imprimanta-3d-ID7LwiS.html

[Fig 3.3.1.1] https://kitskart.com/product/arduino-uno-r3-smd-development-board/

[Fig 3.3.1.2] https://magazin.unda.tech/tehnologie-led/352-dioda-led-rosu-5-mm.html

[Fig 3.3.1.3] https://commons.wikimedia.org/wiki/File:LED_symbol.svg

[Fig 3.3.1.4] https://www.xelogix.com/product/16-channel-12-bit-pwm-servo-driver-pca9685-arduino-raspberry-pi/

[Fig 3.3.1.5] https://raihansyah13.wordpress.com/

[Fig3.3.1.6]http://wiki.sunfounder.cc/index.php?title=Bluetooth_Transceiver_Module_HC-06

[Fig 3.3.1.7] https://www.amazon.it/Huawei-Smartphone-Processore-Octa-Core-Fotocamera/dp/B01GPGJQL6

[Fig 3.3.1.8] https://www.amazon.com/Pass-Through-Communication-Compatible-Atomic-Market/dp/B00TNOO438

[Fig 3.3.1.9] http://www.creatividadahora.com/motores#

[Fig 3.4.4.1] http://appinventor.mit.edu/explore/blogs/karen/2017/08/about.html

http://vanar.md/ro/cursuri-programare/s-si

[Fig 3.4.6.1] http://vanar.md/ro/cursuri-programare/s-si

[Fig 3.5.2] https://www.okazii.ro/surs-259-reglabil-259-cobor-226-toare-cu-ecran-lcd- a189011969

[Fig 3.5.3]

https://www.optimusdigital.ro/ro/surse-ac-dc-de-12-v/1947-sursa-de-

tensiune-in-comutaie-12v-15a-180-w.html?search_query=sursa&results=321

[Fig 3.5.4]

https://www.optimusdigital.ro/ro/surse-ac-dc-de-12-v/1947-sursa-de-

tensiune-in-comutaie-12v-15a-180-w.html?search_query=sursa&results=315

[Fig 4.1.1] https://en.wikipedia.org/wiki/Denavit%E2%80%93Hartenberg_parameters

[Fig 4.3.1] https://commons.wikimedia.org/wiki/File:Matlab_Logo.png

[1]Neagoe Mircea ,Cinematica robotilor industriali*Precizia robotilor/Editura

Universitatii”Transilvania” din Brasov,2002 ,pag16-18

[Tabelul 2.1.1] Neagoe Mircea, Cinematica robotilor industriali*Precizia

robotilor/Editura Universitatii”Transilvania” din Brasov, 2002,,pag16-18

[Ecuatia 2.1.1] Neagoe Mircea ,Cinematica robotilor industriali*Precizia

robotilor/Editura Universitatii”Transilvania” din Brasov, 2002,,pag16-18

[Tabel 2.3..4] https://ro.wikipedia.org/wiki/Bluetooth

[2] http://www.nachi-fujikoshi.co.jp/eng/rob/hand/mz04c.htm

[3] http://allmetech.com/solutii-de- automatizare/?gclid=CjwKCAjwjZjZBRAZEiwAPeLSK1BNx2xQ8bm71pjhluknfQaux1kVC1Z8o l_HHK0GVEkds2GebsgcSxoCYP8QAvD_BwE

[4] https://en.wikipedia.org/wiki/Robotics

[5] https://ro.wikipedia.org/wiki/Piuli%C8%9B%C4%83

[6] https://ro.wikipedia.org/wiki/%C8%98urub

[7] https://ro.wikipedia.org/wiki/Aluminiu

[10] http://wiki.sunfounder.cc/index.php?title=Bluetooth_Transceiver_Module_HC-06

[11] https://ro.wikipedia.org/wiki/Bluetooth

[12] http://www.electronicoscaldas.com/datasheet/MG996R_Tower-Pro.pdf

[13] https://ro.wikipedia.org/wiki/Arduino

[14] https://www.digikey.com/en/maker/blogs/2018/introduction-to-the-arduino-ide

[15] https://en.wikipedia.org/wiki/App_Inventor_for_Android

[16] https://ro.wikipedia.org/wiki/C_(limbaj_de_programare)

[17] https://en.wikipedia.org/wiki/MATLAB

[18]

https://www.optimusdigital.ro/ro/surse-ac-dc-de-12-v/1947-sursa-de-

tensiune-in-comutaie-12v-15a-180-w.html?search_query=sursa&results=321

[19] http://www.martyncurrey.com/arduino-and-hc-06-zs-040/

[20]

http://wiki.sunfounder.cc/index.php?title=PCA9685_16_Channel_12_Bit_PWM_S

ervo_Driver

[21] https://mecanismeucv.files.wordpress.com/2012/03/carte-mecanisme-analiza- structurala-teorie-si-aplicatii-s-m-cretu.pdf

[22] https://www.optimusdigital.ro/ro/225-surse-ac-dc

[23] Paolo Aliverti ,Manual de electronica pentru amatori Ghid complet/Editura

M.A.S.T,2016,pag 31-32, pag 39-41, pag 58-60, pag 76-77, pag 272-273.

[24] https://www.youtube.com/watch?v=9o7DFpJShsQ

[25] Claudiu Pozna,Modelarea Roboților cu post fix,Editura Matrix ROM

BUCUREȘTI,2015,pag 41-63.

[26] https://www.youtube.com/watch?v=HvtD1tgpC3s

[27]https://www.kuka.com/en-de/products/robot-systems/industrial-robots/lbr-iiwa

[28] Jamnes L.Fuller Robotics.Introduction.Programming and Projects,1999 ,pag 3

[29] Dr.Ing.Emil Balaure Robotica si Sisteme de automatizari inteligente.

Ed.U.M.F”GR.T.POPA”IASI/,2000,pag 20

[30] Olimpiu Munteanu Bazele roboticii Arhitectura robotilor manufacturieri/Editura

UniversitatiiTransilvania Brasov,2003,pag 19-22

[31] Dr.ing.Adrian Pascu Robotica vol 2, Manipulatoare si Roboti industriali pentru

Masini-Unelte cu Comanda Numerica ,Partea,1984 ,pag 103-107

Anexe

Anexa 1

#include <Wire.h>

#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver robot_Nero = Adafruit_PWMServoDriver();

#define MIN_PULSE_WIDTH 500

#define MAX_PULSE_WIDTH 2400

#define DEFAULT_PULSE_WIDTH 1500

#define FREQUENCY 60

uint8_t Cupla1 = 1; //atasare servo-motor pin 1 //

uint8_t Cupla2 = 2; //atasare servo-motor pin 2;

uint8_t Cupla3 = 3; //atasare servo-motor pin 3;

uint8_t Cupla4 = 4; //atasare servo-motor pin 4;

uint8_t Cupla5 = 11; //atasare servo-motor pin 11;

uint8_t Cupla6 = 15; //atasare servo-motor pin 15;

void setup() {

robot_Nero.begin();

robot_Nero.setPWMFreq(FREQUENCY);

}

int pulseWidth(int angle)

{

//servomotorul 1

int pulse_wide;

int analog_value;

//––––––––––––––––––––

pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);

//––––––––––––––––––––-

return analog_value;

}

//servo motor 2-modulul 2

int pulse_width2 (int angle2)

{

int pulse_wide2;

int analog_value2;

//––––––––––––

pulse_wide2 = map(angle2, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value2 =int(float(pulse_wide2)/1000000 * FREQUENCY* 4096);

//––––––––––––

return analog_value2;

}

//servomotor 3 – modul 3

int pulse_wide3(int angle3)

{

int pulse_wide3;

int analog_value3;

//–––––––––––––-

pulse_wide3 = map(angle3, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value3 =int(float(pulse_wide3)/1000000 * FREQUENCY * 4096);

//––––––––––––

return analog_value3;

}

//servomotor 4- modul 4

int pulse_wide4(int angle4)

{

int pulse_wide4;

int analog_value4;

//–––––––––––

pulse_wide4 = map(angle4, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value4 = int(float(pulse_wide4)/1000000 * FREQUENCY *4096);

//––––––––––

return analog_value4;

}

//servomotor 5 – modul 5

int pulse_wide5(int angle5)

{

int pulse_wide5;

int analog_value5;

//–––––––––––

pulse_wide5 = map(angle5, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value5 = int(float(pulse_wide5)/1000000 * FREQUENCY * 4096);

//––––––––––––-

return analog_value5;

}

//servomotor 6 -modul 6

int pulse_wide6(int angle6)

{

int pulse_wide6;

int analog_value6;

//–––––––––––––––––

pulse_wide6 = map(angle6, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value6 = int(float(pulse_wide6)/1000000 * FREQUENCY * 4096);

//–––––––––––––––––

return analog_value6;

}

void loop() {

robot_Nero.setPWM(1, 0, pulseWidth(90)); //1

robot_Nero.setPWM(2, 0, pulseWidth(180)); //2

robot_Nero.setPWM(3, 0, pulseWidth(0)); //3

robot_Nero.setPWM(4, 0, pulseWidth(80)); //4

robot_Nero.setPWM(11, 0, pulseWidth(80)); //5

robot_Nero.setPWM(15, 0, pulseWidth(90)); //6

}

Anexa 2

#include <Wire.h>

#include <Adafruit_PWMServoDriver.h>

Adafruit_PWMServoDriver robot_Nero = Adafruit_PWMServoDriver();

#define MIN_PULSE_WIDTH 500

#define MAX_PULSE_WIDTH 2400

#define DEFAULT_PULSE_WIDTH 1500

#define FREQUENCY 60

//–––-Actiune Buton–––––––––-

const int Pinbuton =2;//numar pin buton1

const int led =7;//numar pin led:Culoare Verde

const int led2 =4;//numar pin led2:Culoare Rosu

//–––Stare Buton–––––––

int starebuton = 0;//buton1

//–––––––––––––––

uint8_t Cupla1 = 1; //atasare servo-motor pin 1 //servonum

uint8_t Cupla2 = 2; //atasare servo-motor pin 2;

uint8_t Cupla3 = 3; //atasare servo-motor pin 3;

uint8_t Cupla4 = 4; //atasare servo-motor pin 4;

uint8_t Cupla5 = 11; //atasare servo-motor pin 11;

uint8_t Cupla6 = 15; //atasare servo-motor pin 15;

//–––––––

uint16_t pozitia= 0;

uint16_t pozitia2= 20; // cupla3

uint16_t pozitia3=40; //prehensor

//–––––––-

void setup()

{

robot_Nero.begin();

robot_Nero.setPWMFreq(FREQUENCY);

//––initializam ledul–––-

pinMode(led, OUTPUT);

pinMode(led2,OUTPUT);

//pinMode(led3,OUTPUT);

//––initializam butonul––

pinMode(Pinbuton, INPUT);

//–––––––-

digitalWrite(led2,HIGH);

//––––––––

robot_Nero.setPWM(1, 0, pulseWidth(80));

robot_Nero.setPWM(2, 0, pulseWidth(150));

robot_Nero.setPWM(3, 0, pulseWidth(10));

robot_Nero.setPWM(4, 0, pulseWidth(70));

robot_Nero.setPWM(11,0, pulseWidth(80));

robot_Nero.setPWM(15, 0, pulseWidth(20));

}

int pulseWidth(int angle)

{

//servomotorul 1

int pulse_wide;

int analog_value;

//––––––––––––––––––––

pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);

//––––––––––––––––––––-

return analog_value;

}

//servo motor 2-modulul 2

int pulse_width2 (int angle2)

{

int pulse_wide2;

int analog_value2;

//––––––––––––

pulse_wide2 = map(angle2, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value2 =int(float(pulse_wide2)/1000000 * FREQUENCY* 4096);

//––––––––––––

return analog_value2;

}

//servomotor 3 – modul 3

int pulse_wide3(int angle3)

{

int pulse_wide3;

int analog_value3;

//–––––––––––––-

pulse_wide3 = map(angle3, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value3 =int(float(pulse_wide3)/1000000 * FREQUENCY * 4096);

//––––––––––––

return analog_value3;

}

//servomotor 4- modul 4

int pulse_wide4(int angle4)

{

int pulse_wide4;

int analog_value4;

//–––––––––––

pulse_wide4 = map(angle4, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value4 = int(float(pulse_wide4)/1000000 * FREQUENCY *4096);

//––––––––––

return analog_value4;

}

//servomotor 5 – modul 5

int pulse_wide5(int angle5)

{

int pulse_wide5;

int analog_value5;

//–––––––––––

pulse_wide5 = map(angle5, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value5 = int(float(pulse_wide5)/1000000 * FREQUENCY * 4096);

//––––––––––––-

return analog_value5;

}

//servomotor 6 -modul 6

int pulse_wide6(int angle6)

{

int pulse_wide6;

int analog_value6;

//–––––––––––––––––

pulse_wide6 = map(angle6, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value6 = int(float(pulse_wide6)/1000000 * FREQUENCY * 4096);

//–––––––––––––––––

return analog_value6;

}

void loop() {

starebuton=digitalRead(Pinbuton);

if(starebuton == HIGH){

digitalWrite(led,HIGH);

digitalWrite(led2,LOW);

delay(2000);

for (uint16_t pozitia = pulseWidth(80); pozitia >= pulseWidth(20); pozitia=pozitia-1) { //cupla 1 de la 80-0

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);//

}

delay(2000);

for(uint16_t pozitia = pulseWidth(150); pozitia >=pulseWidth(120); pozitia=pozitia-1) { //cupla 2 de la 150 -120 se lasa jos

robot_Nero.setPWM(Cupla2, 0, pozitia);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(10); pozitia2 <= pulseWidth(40); pozitia2=pozitia2+3) { // cupla 3 de la 20-40 se lasa in jos

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia3 = pulseWidth(40); pozitia3 <= pulseWidth(65); pozitia3++) { // cupla 6 prehensorul se inchide

robot_Nero.setPWM(Cupla6, 0, pozitia3);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(40); pozitia2 >= pulseWidth(10); pozitia2 =pozitia2-3) { //cupla 3 de la 40-20 se ridica

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia = pulseWidth(120); pozitia <=pulseWidth(150); pozitia=pozitia+1) { //cupla 2 de la 120-150 se ridica

robot_Nero.setPWM(Cupla2,0,pozitia);

delay(20);

}

robot_Nero.setPWM(Cupla3, 0, pulseWidth(10));

delay(2000);

for (uint16_t pozitia = pulseWidth(20); pozitia <= pulseWidth(150); pozitia=pozitia+1) { //cupla 1 revenire de la 0-80

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);

}

//––––––––––––––––––––––––––––––-

delay(2000);

for(uint16_t pozitia = pulseWidth(150); pozitia >=pulseWidth(120); pozitia=pozitia-1) { //cupla 2 de la 150 -120 se lasa jos

robot_Nero.setPWM(Cupla2, 0, pozitia);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(10); pozitia2 <= pulseWidth(40); pozitia2 =pozitia2+3) { // cupla 3 de la 20-40 se lasa in jos

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia3 = pulseWidth(65); pozitia3 >= pulseWidth(20); pozitia3–) { // cupla 6 prehensorul prehensorul se inchide

robot_Nero.setPWM(Cupla6, 0, pozitia3);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(40); pozitia2 >= pulseWidth(10); pozitia2 =pozitia2-3) { //cupla 3 de la 40-20 se ridica

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia = pulseWidth(120); pozitia <=pulseWidth(150); pozitia=pozitia+1) { //cupla 2 de la 120-150 se ridica

robot_Nero.setPWM(Cupla2,0,pozitia);

delay(20);

}

robot_Nero.setPWM(Cupla3, 0, pulseWidth(10));

delay(2000);

for (uint16_t pozitia = pulseWidth(150); pozitia >= pulseWidth(80); pozitia=pozitia-1) { //cupla 1 de la 120-80

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);

}

//––––––––––––-incheiere primul cub––––––––––

//–––––––––––––CUBUL 2–––––––––––––-

for (uint16_t pozitia = pulseWidth(80); pozitia >= pulseWidth(40); pozitia=pozitia-1) { //cupla 1 de la 80-40

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);

}

delay(2000);

for(uint16_t pozitia = pulseWidth(150); pozitia >=pulseWidth(120); pozitia=pozitia-1) { //cupla 2 de la 150 -120 se lasa jos

robot_Nero.setPWM(Cupla2, 0, pozitia);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(10); pozitia2 <= pulseWidth(40); pozitia2=pozitia2+3) { // cupla 3 de la 20-40 se lasa in jos

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia3 = pulseWidth(40); pozitia3 <= pulseWidth(65); pozitia3++) { // cupla 6 prehensorul se inchide

robot_Nero.setPWM(Cupla6, 0, pozitia3);

delay(15);

}

delay(5000);

for(uint16_t pozitia2 = pulseWidth(40); pozitia2 >= pulseWidth(10); pozitia2 =pozitia2-3) { //cupla 3 de la 40-20 se ridica

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia = pulseWidth(120); pozitia <=pulseWidth(150); pozitia=pozitia+1) { //cupla 2 de la 120-150 se ridica

robot_Nero.setPWM(Cupla2,0,pozitia);

delay(20);

}

robot_Nero.setPWM(Cupla3, 0, pulseWidth(10));

delay(2000);

for (uint16_t pozitia = pulseWidth(40); pozitia <= pulseWidth(130); pozitia=pozitia+1) { //cupla 1 revenire de la 40-80

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);

}

//––––––––––––––––––––––––––––––––––––––––

delay(2000);

for(uint16_t pozitia = pulseWidth(150); pozitia >=pulseWidth(120); pozitia=pozitia-1) { //cupla 2 de la 150 -120 se lasa jos

robot_Nero.setPWM(Cupla2, 0, pozitia);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(10); pozitia2 <= pulseWidth(40); pozitia2 =pozitia2+3) { // cupla 3 de la 20-40 se lasa in jos

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia3 = pulseWidth(65); pozitia3 >= pulseWidth(20); pozitia3–) { // cupla 6 prehensorul prehensorul se inchide

robot_Nero.setPWM(Cupla6, 0, pozitia3);

delay(15);

}

delay(2000);

for(uint16_t pozitia2 = pulseWidth(40); pozitia2 >= pulseWidth(10); pozitia2 =pozitia2-3) { //cupla 3 de la 40-20 se ridica

robot_Nero.setPWM(Cupla3, 0, pozitia2);

delay(15);

}

delay(2000);

for(uint16_t pozitia = pulseWidth(120); pozitia <=pulseWidth(150); pozitia=pozitia+1) { //cupla 2 de la 120-150 se ridica

robot_Nero.setPWM(Cupla2,0,pozitia);

delay(20);

}

robot_Nero.setPWM(Cupla3, 0, pulseWidth(10));

delay(2000);

for (uint16_t pozitia = pulseWidth(130); pozitia >= pulseWidth(80); pozitia=pozitia-1) { //cupla 1 de la 120-80

robot_Nero.setPWM(Cupla1, 0, pozitia);

delay(15);

}

}

digitalWrite(led,LOW);

digitalWrite(led2,HIGH);

delay(5);

}

Anexa 3

#include <Wire.h>

#include <Adafruit_PWMServoDriver.h>

#include <SoftwareSerial.h> // TX RX software library for Bluetooth

Adafruit_PWMServoDriver robot_Nero = Adafruit_PWMServoDriver();

#define MIN_PULSE_WIDTH 500

#define MAX_PULSE_WIDTH 2400

#define DEFAULT_PULSE_WIDTH 1500

#define FREQUENCY 60

uint16_t Cupla1 = 1; //atasare servo-motor pin 1 //servonum

uint16_t Cupla2 = 2; //atasare servo-motor pin 2;

uint16_t Cupla3 = 3; //atasare servo-motor pin 3;

uint16_t Cupla4 = 4; //atasare servo-motor pin 4;

uint16_t Cupla5 = 11; //atasare servo-motor pin 11;

uint16_t Cupla6 = 15; //atasare servo-motor pin 15;

uint8_t RobotbluetoothTx = 10; // bluetooth tx to 10 pin

uint8_t RobotbluetoothRx = 11; // bluetooth rx to 11 pin

SoftwareSerial Robot_Nero_bluetooth(RobotbluetoothTx, RobotbluetoothRx);

void setup() {

uint16_t Cupla1 = 1; //atasare servo-motor pin 1 //servonum

uint16_t Cupla2 = 2; //atasare servo-motor pin 2;

uint16_t Cupla3 = 3; //atasare servo-motor pin 3;

uint16_t Cupla4 = 4; //atasare servo-motor pin 4;

uint16_t Cupla5 = 11; //atasare servo-motor pin 11;

uint16_t Cupla6 = 15; //atasare servo-motor pin 15;

//––––––––––––––––-

//––––––––

robot_Nero.begin();

robot_Nero.setPWMFreq(FREQUENCY);

//––––––––––

Serial.begin(9600);

Robot_Nero_bluetooth.begin(9600);

//––––pozitia de start a robotului

robot_Nero.setPWM(Cupla1, 0, pulseWidth(90));

robot_Nero.setPWM(Cupla2, 0, pulseWidth(160));

robot_Nero.setPWM(Cupla3, 0, pulseWidth(30));

robot_Nero.setPWM(Cupla4, 0, pulseWidth(70));

robot_Nero.setPWM(Cupla5, 0, pulseWidth(80));

robot_Nero.setPWM(Cupla6, 0, pulseWidth(0));

}

int pulseWidth(int angle)

{

//servomotorul 1

int pulse_wide;

int analog_value;

//––––––––––––––––––––

pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);

//––––––––––––––––––––-

return analog_value;

}

//servo motor 2-modulul 2

int pulse_width2 (int angle2)

{

int pulse_wide2;

int analog_value2;

//––––––––––––

pulse_wide2 = map(angle2, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value2 =int(float(pulse_wide2)/1000000 * FREQUENCY* 4096);

//––––––––––––

return analog_value2;

}

//servomotor 3 – modul 3

int pulse_wide3(int angle3)

{

int pulse_wide3;

int analog_value3;

//–––––––––––––-

pulse_wide3 = map(angle3, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value3 =int(float(pulse_wide3)/1000000 * FREQUENCY * 4096);

//––––––––––––

return analog_value3;

}

//servomotor 4- modul 4

int pulse_wide4(int angle4)

{

int pulse_wide4;

int analog_value4;

//–––––––––––

pulse_wide4 = map(angle4, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value4 = int(float(pulse_wide4)/1000000 * FREQUENCY *4096);

//––––––––––

return analog_value4;

}

//servomotor 5 – modul 5

int pulse_wide5(int angle5)

{

int pulse_wide5;

int analog_value5;

//–––––––––––

pulse_wide5 = map(angle5, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value5 = int(float(pulse_wide5)/1000000 * FREQUENCY * 4096);

//––––––––––––-

return analog_value5;

}

//servomotor 6 -modul 6

int pulse_wide6(int angle6)

{

int pulse_wide6;

int analog_value6;

//–––––––––––––––––

pulse_wide6 = map(angle6, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);

analog_value6 = int(float(pulse_wide6)/1000000 * FREQUENCY * 4096);

//–––––––––––––––––

return analog_value6;

}

void loop() {

//Read from bluetooth and write to usb serial

if(Robot_Nero_bluetooth.available()>= 2 )

{

uint16_t pozitieservomotor = Robot_Nero_bluetooth.read();

uint16_t pozitieservomotor1 = Robot_Nero_bluetooth.read();

uint16_t servomotor = (pozitieservomotor1 *256) + pozitieservomotor;

Serial.println(servomotor);

if (servomotor >= 1000 && servomotor <1180) {

uint16_t servomotor1 = servomotor;

servomotor1 = map(servomotor1, 1000, 1180, 100 ,550 );

robot_Nero.setPWM(Cupla1, 0, servomotor1);

Serial.println("Servo 1 ON");

delay(10);

}

if (servomotor >= 2000 && servomotor <2180) {

uint16_t servomotor2 = servomotor;

servomotor2 = map(servomotor2, 2000, 2180, 100, 550);

robot_Nero.setPWM(Cupla2, 0, servomotor2);

Serial.println("Servo 2 ON");

delay(10);

}

if (servomotor>= 3000 && servomotor <3180) {

uint16_t servomotor3 = servomotor;

servomotor3 = map(servomotor3, 3000, 3180, 100, 550);

robot_Nero.setPWM(Cupla3, 0, servomotor3);

Serial.println("Servo 3 ON");

delay(10);

}

if (servomotor >= 4000 && servomotor <4180) {

uint16_t servomotor4 = servomotor;

servomotor4 = map(servomotor4, 4000, 4180, 100, 550);

robot_Nero.setPWM(Cupla4, 0, servomotor4);

Serial.println("Servo 4 ON");

delay(10);

}

if(servomotor>=5000 && servomotor <5180){

uint16_t servomotor5 =servomotor;

servomotor5 = map(servomotor5,5000, 5180, 100 ,550);

robot_Nero.setPWM(Cupla5, 0, servomotor5);

Serial.println(servomotor5);

delay(10);

}

if(servomotor >= 6000 && servomotor <6180){

uint16_t servomotor6 = servomotor;

servomotor6 = map(servomotor6,6000,6180, 100, 550);

robot_Nero.setPWM(Cupla6, 0, servomotor6);

Serial.println(servomotor6);

delay(10);

}

}

}

Anexa 4

%%Creare robot Nero cu ajutorul criteriului Denavit

L(1)=Link([ 0 1.5 0 pi/2]);

L(2)=Link([ 0 0 14 0 ]);

L(3)=Link([ 0 0 9 0 ]);

L(4)=Link([ 0 0 0 pi/2]);

L(5)=Link([ 0 6.25 0 0 ]);

%%creare robotului Nero

robotNero=SerialLink(L, 'name','Nero')

%%afisare

clf

robotNero.plot([ 0 0 0 0 0])

%%adaugarea unui simulator pentru cuple

robotNero.teach

Rezumat

Proiectul s-a imparțit în următoarele capitole principale :asamblarea mecanică unde a fost prezentat montarea robotului Nero, ca subcapitol am avut poziționarea servomotoarelor unde a trebuit să ne gândim la mișcările robotului ce le va face pe parcursul sarcini,a urmat subcapitolul ,materialul componentelor robotului, deoarece a trebuit să polizez capătul prehensorului și pentru a nu se ajunge la defectarea lui a trebui să mă documentez despre caracteristicile materialului,un alt subcapitol a fost descrierea componentelor mecanice,mai precis șurubul,piulița și rulmentul radial cu flanșă pe interior.

Următorul capitol a fost asamblarea electronică,unde am montat elementele electronice .Ca și în capitolul anterior s-a făcut un subcapitol cu descrierea componentelor electronice:Arduino Uno,driver-ul de servomotor PCA 9685,LED-ul,rezistori,Bluetooth HC-06,servomotor.

A urmat verificarea asamblărilor mecanice ,unde am găsit defecțiuni la montarea prehensorului și la filetul șuruburilor,ca după urmând verificarea electronică ce sa făcut cu ajutorul unui multimetru,ce a avut rol de a verifica tensiunile și de a deosebi anumite fire .

The project was divided into the following main chapters: the mechanical assembly where the mounting of the Nero robot was presented, as a subchapter we had the positioning of the servomotors where we had to think about the movements of the robot that will make them during the tasks, followed by the sub-chapter, the material of the robot components I had to polish the end of the prehensor and to avoid damaging it I had to document the material characteristics, another subchapter was the description of the mechanical components, namely the bolt, the nut and the radial flange with the flange on the inside.

The next chapter was electronic assembling, where I installed the electronic elements. As in the previous chapter, a subchapter with the description of the electronic components: Arduino Uno, PCA 9685 servomotor driver, LED, resistors, Bluetooth HC-06, servomotor .

We followed the mechanical assembling check, where we found defects in the mounting of the prehensor and the thread of the bolts, as after the electronic verification that was done with a multimeter, which had the role of checking the tensions and distinguishing certain threads.

Similar Posts