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.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Proiect Diploma Manolescu Cosmin, Grupa 4841,profil Robotica,fac Iesc [304054] (ID: 304054)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
