Proiect de diplomă [608424]
Proiect de diplomă
COORDONATOR ȘTIINȚIFIC
Conf. dr. ing. Barabá s Tiberiu
ABSOLVENT: [anonimizat]ándor
ORADEA
2017 UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA
INFORMAȚIEI
PROGRAMUL DE STUDIU AUTOMATICĂ ȘI INFORMATICĂ
APLICATĂ
FORMA DE ÎNVĂȚĂMÂNT LA ZI
Comanda unui robot industrial
echipat cu motoare servo prin
microcontrol erul ATmega328 PU
COORDONATOR ȘTIINȚIFIC
Conf. dr. ing. Barabá s Tiberiu
ABSOLVENT: [anonimizat]ándor
ORADEA
2017 UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA
INFORMAȚIEI
PROGRAMUL DE STUDIU AUTOMATICĂ ȘI INFORMATICĂ
APLICATĂ
FORMA DE Î NVĂȚĂMÂNT LA ZI
Cuprins
Introducere ………………………….. ………………………….. ………………………….. ………………… 6
Capitolul 1. Introducere în lumea r oboților industriali ………………………….. ……………… 7
1.1 Istoria roboților ………………………….. ………………………….. ………………………….. ….. 7
1.2 Clasificarea roboților ………………………….. ………………………….. …………………….. 10
1.3 Structura roboților ………………………….. ………………………….. ………………………… 12
1.4 Comanda roboților ………………………….. ………….. Error! Bookmark not defined.
Capitolul 2. Prezentarea robotului din cadrul proiectului ………………………….. ………… 14
2.1 Sistemul mecanic al robotului ………………………….. ………………………….. ………… 14
2.2 Schema electrică de comandă a robotului ………………………….. …………………….. 16
2.3 Placa de dezvoltare a robotului ………………………….. ………………………….. ………. 17
2.4 Motoarele servo ………………………….. ………………………….. ………………………….. .. 18
Capitolul 3. Proiectarea sistemului de comandă ………………………….. …………………….. 24
3.1 Noțiuni introductive privind microcontrolerele ………………………….. …………….. 24
3.2 Microcontrolerul ATmega328PU ………………………….. ………………………….. …… 26
3.3 Microcontrolerul ATtiny85 ………………………….. ………………………….. ……………. 29
3.4 Interfața de dezvoltare Visual Micro ………………………….. ………………………….. .. 30
3.4.1 Instalarea extensiei Visual Micr o ………………………….. ………………………….. 32
3.4.2 Programarea microcontrolerului ATmega328P -PU ………………………….. …. 34
3.4.3 Programarea microcontrolerului ATtiny85 ………………………….. …………….. 41
3.5 Realizarea plăcii de dezvoltare pentru comanda robotului ………………………….. 44
Capitolul 4. Proiectarea programului de interfață PC ………………………….. ……………… 51
4.1 Mediul de dezvoltare Visual Studio – Windows Form ………………………….. …… 51
4.2 Instalarea programului RobotArm Control ………………………….. …………………… 52
4.3 Programul de interfață RobotArm Control ………………………….. ……………………. 53
4.3.1 Realizarea legăturilor și specificarea lor în programul de interfață ………… 55
4.3.2 Conectare la placa de dezvoltare ………………………….. ………………………….. 57
5
4.3.3 Conducerea robotului ………………………….. ………………………….. ……………… 58
4.3.4 Programarea robotului ………………………….. ………………………….. …………….. 59
4.3.5 Lansarea programul robotului ………………………….. ………………………….. ….. 61
Bibliografie ………………………….. ………………………….. ………………………….. ………………. 62
Anexa 1. Diagrama bloc pentru microcontrolerul ATmega328p -PU …………………….. 64
Anexa 2. Diagrama pinilor pentru microcontrolerul ATmega328P -PU …………………. 65
Anexa 3. Diagrama bloc pentru microcontrolerul ATtiny85 ………………………….. ……. 66
Anexa 4. Diagrama pinilor pentru microcontrolerul ATtiny85 ………………………….. … 67
Anexa 5. Schema electrică a circuitului de control RobotArm ………………………….. …. 68
6
Introducere
Automatica este acea ramură a științei care studiază și realizează metode și mijloace
prin care se exclude participarea directă a factorului uman asupra unor procese.
Această știință a apărut atunci când omul a recunoscut observat că tehnologia este așa
de bine dispusă astfel încât unele procese repetitive pot fi efectuate de mașini.
Automatica s -a evoluat împreună cu electronica, ea fiind suportul ei principal pe care se
bazează. În trecut am folosit circuite analogice complexe și uneori complicate pentru
conducerea proceselor, iar în zilele de azi apare o tendință tot mai mare de a lucra cu
microprocesoare sau cu microcontrolere, ele fiind ușor de implementat și de utilizat, oferind o
adaptabilitate mai sporită a sistemului și în unele cazuri reduc și costurile echipamentelor,
mașinilor.
În această lucrare voi prezenta automatica cu ajutorul roboților industriali, care sunt
folosite, în marea majori tate, la toate firmele de producție, funcția lor fiind de a mări
productivitatea cu deplasări mai rapide și mai precise.
Robotul industrial pe care eu voi prezenta în cadrul lucrării, este un braț r obotic cu 5
grade de libertate. Robotul aparține facultăț ii noastre și era utilizat ca și echipament didactic, să
fie prezentat, eventual utilizat în cadrul lucrărilor de laborator. Robotul avea uneori oscilații
asupra comenzii de control, caz pentru care am ales să lucrez cu el în cadrul proiectului de
diplomă și să îl îmbunătățesc atât de bine cât pot. Prin a ceastă î mbunătățire am ajuns să -i fac o
altă placă de comandă pe baza căruia stă microprocesorul ATmega328PU care împreună cu
robotul este alimentat de pe o sursă exterioară, scoasă dintr -un calculator. Pe lângă placa de
comandă i -am inventat și o aplicație de interfață pentru robot, prin care i se poate comanda,
într-un mod mai ușor, și programa.
Primul capitol vă prezintă evoluția roboților industriali , tehnici de comandă și control și
nu în ult imul rând u nde sunt ei folosiți și în ce condiții.
În capitolul doi va fi vorba despre un robot industrial cu cinci grade de libertatea și se
prezintă și partea practică a acestei lucrări.
Capitolul trei conține realizarea și descrierea sistemului de comandă responsa bil pentru
generare a semnale lor folosind placa de comandă realizată și mediul de dezvoltare Visual Micro .
Capitolul următor prezintă mediul de dezvoltare Visual Studio, unde s -a dezvoltat
programul de interfață a ro botului , respectiv instalarea și utilizar ea programului.
Nu în ultimul rând, în ultimul capitol se găsește câteva cuvinte personale despre
parcurgerea proiectului îmbinate cu opinii și păreri personale.
7
Figura 1.1.2 Ceasul lui Su Song[4]
Capitolul 1 . Introducere în lumea roboților industriali
1.1 Istoria roboților
Ideea „ automati on / automata ” își are originile în mitologiile diferitelor culturi ale lumii.
Inventatorii din civilizațiile antice au încercat să construiască mașini care să funcționeze
singure. Cele mai vechi descrieri se referă la păsările artificiale, la automaton c are vorbește sau
care spală. Aristotel a fost primul care a speculat că acele ”automatons” într -o zi va fi servi pe
om, fiind egal cu el, prin ce se înțelege că omul va fi stăpânul iar roboții scl avii lui, [1][2]
Figura 1.1 .1 „Automata” lui Yan Shji[3]
Pentru China antică s -au găsit descrieri ale „automata” din secolul III, când Yan Shji a
creat un automat în dimensiuni naturale , care a fost capabil să performez e mai multe funcții
impresionante. Automatizarea putea să se miște într-o manieră și putea cânta . Aceasta era
realizată din piele, lemn și organe artificiale. (figura 1.1 .1)
În figura 1. 1.2 este prezentat motorul cosmic al lui Su Song , care defapt un turn cu ceas
de 10 metri înalt, cu mecanism de ti p „manachin” care sun ă în fiecare oră cu un clopoțe l.[4]
Este și o legendă egipteană despre Rocail, frat ele
cel tânăr a lui Seth, că a con struit un palat și un mormânt în
care erau statui autonome ce erau acționate astfel încât
duceau o viață asemănătoare cu cea a oamenilor. Statuile
erau atât de bine real izate, încât puteau fi confundate cu
niște ființe vii.[5]
O altă poveste de la Lokapannatti (un indian din
sec. XI –XII) despre Regel e Ajatashatru din Magadha, care
a luat relicvele lui Buddha și le -a ascuns într -o „stup ă” sub
pământ. Relicvele erau prote jate de roboți mecanici
(„bhuta vahana yanta ” în limba lor ),
8
Cele prezentate de mai sus , confirmă adevărul despre istoria roboților , că ei au apărut și
au existat deja în lumea antică și dacă nu erau așa de performanți și de bine dispuși ca în zilele
de az i.
Deși istoria roboților întinde până la lumea antică, eu zic că roboții au apărut atunci,
când omul și -a imaginat dispozitive mecanizate și inteligente, care să preia cât mai mult din
efortul fizic depus. În așa fel și -a imaginat roboții în cărți, desene , filme, după ce a construit
jucării automate și mecanisme inteligente.
Termenul „robot” a fost utilizat pentru prima dată de în piesa „ Rossum’s Universal
Robots ” al scriitorului ceh, Karel Čapek , în anul 1920, după care în 1941 Isaac Asimov a folosit
cuvântul "robotizare" pentru descrierea tehnologiei roboților și a prezis creșterea unei industrii
robotice puternice . Prin urmare conceptul modern al robotului a început să fie dezvoltat, într –
adevăr, în perioada Revoluției Industriale, când era posibil să u tilizeze sisteme mecanice
complexe și a devenit cât mai accesibil și utilizarea electricității.
Primul robot industrial „The Iron Hand” a fost fabricat de către un inginer de la Erie
Engineering Company în 1938, iar poza ce se poate vedea in figura 1.1.3 era realizat undeva în
anii 1940 -1950, data aceasta fiind aproximat după mașina care apare dreapta spate pe poză.
Figura 1.1.3 The Iron Hand [6]
9
Arăta că o macarea și avea un singur motor pentru acționare. Trebuie remarcat faptul că
avea 5 grade de liberta te. Acest robot nu putea fi utilizat pentru foarte multe acțiuni dar totuși
era capabil să așeze placi și bucăți de lemne în „blocuri” de forme bine definite.[6]
Primul robot programabil și operabil în sistem digital a fost inventat de Geroge Devol
în 1954 , care ulterior a primit numele de „Unimate”. Acest robot a lucrat pe linia de asamblare
a General Motors assembly line la New Jersey. A fost utilizat de a lua și a ridica piesele turnate
din fontă și matrițe și apoi să le depoziteze. Brevetul lui Devol re prezintă fundamentul industriei
moderne de robotică. [7]
În anii 1970, compania germană KUKA, a construit primul robot industrial din lume,
cu 6 axe de mișcări comandate electromecanic, cunoscut sub denumirea FAMULUS.
Brațul robotic SCARA (Selectiv e Compliance Articulated Robot Arm) a fost creat în
1978, ca braț robotic cu 4 axe. S -a dovedit a fi deosebit de eficient pentru apucarea reperelor și
mutarea lor în altă locație, fiind introdus pe linia de asamblare în 1981.
În anii 1980, companiile din industria automobilului au făcut investiții masive la
companiile din domeniul roboticii, cu toate că, nu întotdeauna, acestea s -au dovedit a -și atinge
scopul . General Motors Corporation a cheltuit mai mult de 40 de b iliarde de dolari pe
tehnologii, dar, di n păcate, o mare parte a investiției s-a dovedit a fi fost un eșec. În 1988, roboții
de la fabrica Hamtramck Michigan au căzut, adică au spart ge amurile și s-au vopsit unul pe
altul. [8]
Anul 2010 a indus o accelerare a cererii pentru roboții industriali, datorită dezvoltării
continue inovative și îmbunătățirii performanțelor roboților. Până în 2014 s -au înregistrat o
creștere cu 29% a vânzărilor la nivel mondial. Deoarece în ultimii ani roboții au devenit tot mai
Figura 1.1.4 Primul robot programabil [7]
10
performanți, s -a dezvoltat un sistem de ope rare pe computer pentru aceștia. Robot Operating
System (ROS ), reprezintă un set de programe „ open -source ” dezvoltat la Stanford University,
Massachusetts Institute of Technology și Technical University of Munich . Sistemul permite
variante avansate de soft ware pentru programarea mișcărilor robotului, nivel ridicat de
comandă și control, procesare cu acuratețe a imaginilor, evitarea obstacolelor etc. Atunci când
ROS realizează „boot” / conexiune pe computer, se obțin date des pre lungimea și mișcările
brațulu i robotic, date care sunt apoi procesate prin algoritmi complecși , de înalt nivel
(neutrosofic, logic, fuzzy etc.).
Baxter, este un robot industrial nou, construit de compania Rethink Robotic s, care a fost
utilizat din sfârșitul anului 2012. Era diferit de ceilalți roboți industriali în aceea că poate învăța .
Un operator / muncitor îl poate învăța cum să desfășoare o activitate, mutând mâna cu mișcarea
respectivă și, punându -l pe Baxter să o memoreze. Nu este nevoie de programare pentru c a
robotul să execut e operațiile.
A face parte din lume roboților este interesant, provoc ător și cu bene ficii din ce în ce
mai mari – în special pentru aplicațiile industriale – motiv p entru care am ales această cale
pentru studiile mele superioare.
1.2 Clasificarea roboțilo r
Robotul prin definiție este un sistem automatizat de înalt nivel capabil sa îndeplinească
obiecte ș i scule î n scopul suplinirii unor activități umane. Realizarea ș i implementarea
aplicațiilor necesit ă cunoștințe din domenii diverse ( mecanică, hidraulică , electrotehnică ,
electronică, informatică ).[9]
Astfel robotul industrial, în prezent este definit ca un manipulator tridimensional,
multifuncțional, reprogramabil și capabil să deplaseze materiale, piese, unelte sau aparate
speciale după traiectorii prog ramate, în scopul efectuării unor operații diversificate de
fabricație.
Un robot indus trial, pe lângă faptul că trebuie să îndeplinească cerințele mediului
industrial după cum trebuie să fie ș i foarte flexibil , ca să poate fi adaptat pentru orice serii de
fabricație într -un mod cât mai ușor, să aibă o productivitate cât mai crescută, să fie fiabil, toate
aste cu un cost cât mai redus. Acești roboți sunt utilizați în aplicațiile ce sunt caracterizate prin
repetabilitate , cadență foarte mare, în medii nocive .
11
Roboții, după modul deplasării se disting în două mari categorii. Astfel există roboți:
• Roboți ficși, cei care sunt imobili față de anumite componente ale mediului în
care evoluează
• Roboți mobili, utilizați din ce în ce mai mult în diverse aplicații pen tru a
îndeplini sarcini complexe în spații sau în medii în care accesul omului este
dificil sau chiar imposibil. Deplasarea se face folosind roți, senile sau prin păsare
Clasificarea pe generalități, folosește drept criteriul de bază, capacitatea mașinii d e
percepere și interpretare a semnalelor din mediul exterior, precum și de adaptare la mediu în
timpul procesului de lucru.
Generațiile manipulatoarelor:
• Manuale (prima generație): este vorba de un sistem de manipulatoare
amplificatoare de efort cu cel pu țin 3 grade de libertate care permite, prin
comenzi umane, efectuarea operațiilor în medii improprii sau nocive activități
umane
• Automate (generația a doua): acestea sunt mecanisme de manipulare cu cel puțin
două axe, care realizează deplasări după un cicl u bine prestabilit, într -un regim
automat. Ele nu au senzori și lucrează în buclă deschisă, de aceea sunt utilizați
la operații mai simple cum este de exemplu încărcare/descărcare.
• Inteligente (generația a treia): sunt mecanisme de manipulare, în care coma nda
umană este îmbinată cu controlul de finețe as istat de senzori inteligenți. Scopul
acestei comenzi constă în depășirea limitelor senzoriale asupra organismului
uman.
Generațiile roboților industriali
• Manipulatoarele automate programabile construiesc pri ma generație, având
minim trei axe, dintre care măcar două sunt programabile fie printr -un limbaj
simbolic fie prin învățare. Acești roboți lucrează în buclă închisă, datorită unor
senzori de control a poziției, care se află pe fiecare axă. Comanda lor se poate
face de la un automat programabil sau de la un calculator.
• Generația a doua cuprinde manipulatoarele automate tot cu cel puțin 3 axe
programabile, dar sunt dotate cu mai multe senzori specializați, cum sunt senzori
12
de tip tactil, de forță, camere vid eo și așa mai departe. Datorită acestor senzori
au o coordonare de tip ochi -mână, ceea ce înseamnă că pot identifica obiecte de
formă simplă așezate aleator. Sunt comandați de cel puțin un calculator și cu
ajutorul lui pot face deplasări pe traiectorie în funcție de modificările mediului
de lucru într -un mod interactiv, așa că pot executa operații indiferent de poziția
inițială a subcomponentelor.
• Roboții din generația a treia sunt dotați cu senzori mai performanți și inteligenți,
care prelucrează datele lo cal, analizează datele și furnizează doar informația
necesară către sistemul de comandă.
• Inteligenți pe care rulează programe în care este implementat o inteligență
artificială la care se mai adaugă și senzori de înalt nivel, așa că robotul fiind
foarte do tat, are capacitatea de autoinstruire, interpretând și folosind experiențe
dobândite din situații anterioare.
Majoritatea roboților industriali, care sunt mai des folosite în zilele de azi aparțin
generației 1 respectiv 2.
1.3 Structura roboților
Un robot industrial este un sistem complex implemen tat pe calculatoare,
microproce soare , sisteme de acționare, structuri mecanice sau mai nou și în senzori, care are
capacitate de acțiune, de percepere, de decizie și de comunicare.
Figura 1.3.1 Structura bloc a u nui robot industrial[35]
După figura 1.3.1 se evidențiază că un robot industrial este un ansamblu alcătuit din trei
mari sisteme interconectate . Aceste sisteme sunt:
• sistemul de comandă
• sistemul de acționare
• sistemul mecanic
13
1.3.1 Sistemul de comandă
Sistemul de comandă are rolul de conducere asupra întregului robot, format dintr -un
calculator sau rețea de calculatoare. Utilizând calculatoare, avem posibilitatea de interfațare cu
utilizatorul, culegerea informației de la senzori fie tactil, de forță sau de proximitate cu care
robotul își formează o imagine despre mediul înconjurător, supravegherea respectiv
comandarea sistemului de acționare.
14
Capitolul 2. Prezentarea robotului din cadrul proiect ului
Robotu l prezentat în proiect este distribuit de firma L ynxmotion . Această firmă se ocupă
cu distribuirea mai multor tipuri de roboți cum sunt: dronele, brațele robotice, roboți
humanoide(bipeduri), quadropoduri, hexapod, mașini/rovere, roboți sumo, tancuri; respectiv
accesorii pentru asamblarea un robot anume din mici bucăți cum sunt motorașele, propellere,
roțile cu cauciucuri, cabluri, controllere și multe alte piese sau accesorii ce pot fi de folos pentru
a construi cu ușurință un robot care să ne place.
2.1 Sistemul mecanic al robotului
Acest robot este de tip SECSAC -KT Lynx SES Aluminum . Dispozitivul de ghidare este
alcătuit din cinci cuple cinematice, fiecare cuplă cinematică fiind de tip R, astfel robotul având
cinci grade de libertate de tip RRR RR. Pe lângă aceste, mai este adăugat , ca și efector final, un
gripper , pentru prinderea unor obiecte aflate în interiorul acel ei zone, unde robotul poate să
ajungă și să le prinde.
Figura 2.1.1 Robotul SECSAC -KT
Articula țiile robotului sunt puse în aplicare cu ajutorul motorașelor servo iar elementele
care se le agă articulațiile fiind legături din aluminiu. Comanda motoarelor, respectiv controlul
traiectoriei gripperului este realizat de microcontrolerului ATmega328PU, fabricat de Atmel.
15
Pentru calculele și sincronizarea motoarelor am folosit un alt microcontrole r și anume ATtiny85
care are rolul de a apela o întrerupere din exteriorul ATmega328PU. Pentru un aspect mai bun,
am realizat o placă de dezvoltare, pentru a face conexiuni mai clare, fără multe cabluri.
Echipamentele sunt alimentate de o sursă externă, cu mufa de ATX cu 24 de pini, care se poate
regăsi în orice calculator personal. Robotul în sine are o greutate de 1.5 KG și poate ridica o
greutate maximă de 250gr (10oz/inch) la înălțimea maximă de 38cm.
În ceea ce privește structura robotului, trebuie sp ecificat următoarele caracteristici:
• Distanța dintre axe este de 15,5 cm
• Gripperul se poate deschide maxim la 3.5 cm
• Rotația motoarelor este de 192o
• Alimentarea motoarelor se face la 5V
• Consumul motoarelor este de 450mA, iar la peak poate atinge și 2500mA
• Masa totală al robotului este de 1.5 KG
• Masa totală de ridicare este de 250gr
• Comanda se face cu programul „RobotArm” conectând partea de comandă la un
calculator prin cablu USB
Pe partea de comandă a robot ului inițial, se află un contro ler servo tot de la firma
Lynxmotion, numit SSC -32. Acest controler are multe caracteristici. Are o rezoluție foarte mare
de 1uS pentru poziționare cât mai clară și pentru mișcări foarte mici. Intervalul pentru impulsuri
este de la 0.5 ms până la 2.5 ms pentru 180o . Mișcare a controlată cu acest controler poate să fie
executată imediat, se poate regla viteza de mișcare sau timpul în care să fie efectuat mișcarea,
sau combinat. De asemenea este posibil controlul mai multor motoare în aceeași timp, se poate
controla astfel să s e pornească motorașele împreună și să și termine mișcarea împreună. Acest
controler avea conectivitate serială folosind protocolul RS -232 pentru a comunica cu un
calculator.
Din mo tivul că protocolul RS -232 începe să fie învechit m -am gândit să realizez e u o
altă placă, cu un alt microcontroler cu conectivitate USB pentru a comanda robotul.
16
2.2 Schema electrică de comandă a robotului
Figura 2.2.1 Schema electrică de principiu
În figura 2.2.1 est e prezentat schema electrică de conectare de principiu a robotului
realizată de mine. Placa pe lângă alte componente electrice cum sunt rezistențele,
condensatoarele și ledurile, mai conține și un oscilator cu cuarț, care furnizează un tact de ceas
pentru microcontrolerul ATmega328PU pe 16 MHz. Pe placă se regăseș te încă un alt
microcontroler și este vorba despre ATtiny85, care ajută la sincronizarea motoarelor cu un tact
la pinul de întrerupere al ATmega328PU. Pentru a informa vizual utilizatorul sunt montate
leduri de informare despre alimentare respectiv de func ționare. Pentru alimentarea plăcii
utilizez un conector ATX, care se regăsește pe orice sursa de tensiune din orice calculator PC.
Cu ajutorul acestei surse sunt alimentate atât microcontrolere cât și motoarele.
17
Placa de dezvoltare dă posibilitatea ca mot oarele servo să fie conectat la orice intrare al
microcontrolerului ATmega328PU care are dotarea de a genera semnale PWM. Astfel
motoarele pot fi conectate la pinii 3,5,6,9,10,11. In continuare, se regăsește încă doi pini liberi
de la ATtiny85 dintre care unu trebuie conectat la pini 1 și 2 la ATmega328PU pentru
întreruperea externă, iar celălalt pin la orice pin digital liber, care va da semnal de pornire/oprire
pentru generarea întreruperii. Ultimul pin care trebuie conectat este pinul de pornire sursă. E l
poate fin conectat la orice pin digital liber și are rolul de a porni sursa de tensiune, care în
momentul conectării la priza de alimentare, nu pornește simultan, ci așteaptă după un semnal.
Acest semnal este controlată de microcontroler.
Trebuie mențin ut că după conectarea motoarelor respectiv tuturor semnalelor care ajută
funcționarea corectă a robotului, când pornim aplicația RobotArm, trebuie să specificăm la
setări, locul fiecărei semnal conectat la microcontroler.
Conectarea inițială este următoare a:
• ATtiny85 pinul P0 este conectat la ATmega85PU pinul digital D4
• ATtiny85 pinul P1 este conectat la ATmega85PU pinul digital D2
• Pinul 9 (PS_ON) din conectorul ATX la ATmega85PU pin digital D12
• La ATmega328PU pinul D3 este conectat motorul de la baza robot ului
• La ATmega328PU pinul D5 este conectat motorul de la a doua articulație
• La ATmega328PU pinul D6 este conectat motorul de la a treia articulație
• La ATmega328PU pinul D9 este conectat motorul de la a patra articulație
• La ATmega328PU pinul D10 este conect at motorul de la a cincea articulație
• La ATmega328PU pinul D11 este conectat motorul de la gripper
Așa cum am specificat și mai sus, orice modificare la conectare, trebuie introdusă în
programul de control al robotului, pentru funcționare corectă. Această corectură se poate face
conform ins trucțiunilor din capitolul 4.4 .
2.3 Placa de dezvoltare a robotului
Controlul unui astfel de robot nu este așa de simplă cum se pare la început. Necesită
multe gândiri, programare și multe atenție la conectarea legăturilo r între componentele electrice
respectiv comunicarea între microprocesoare. Pentru a evita în viitor aceste greșeli, m -am
hotărât să realizez o placă de dezvoltare specific pentru controlul acestei robot.
18
Din punct de vedere estetic, este vorba despre o p lacă foarte simplă, ce se poate realiza
acasă, așa cum am fă cut și eu. Realizarea unei astfel de plăci, nu necesită echipamente scumpe,
pe care le folosim rare ori și nu sunt echipamente greu de folosit. Ne trebuie doar să folosim
capul în primul rând pent ru a realiza trasee cât mai optimizate și clare între componente. După
ce am ajuns la o versiune finală, urmează să introducem desenul nostru într -un program, specific
pentru realizarea ș i desenarea astfel de circuite, pe care la sfârșit vom lista, și cu metoda fierului
de călcat vom realiza cablajul imprimat. Această metodă presupune listarea cablajului împrimat
cu o împrimantă laser. Foaia listată punem cu fața în jos pe partea cu cupru a plăcii. După ce
am fixat, aplicăm fierul de călcat pe ei, ca să top im tonerul de pe foaie, pe placă. După pest 6 –
7 minute, luăm cu grijă placa, și punem în apa fierbinte, ca să eliminăm foaia de pe ea. Dacă
totul este în regulă și nu am stricat circuitul, putem să placa într -o soluție chimică de corodare
și anume în cloru ră ferică. Așteptăm până când soluția scoate cuprul din înafara tonerului topit,
după care scoatem și ștergem placa cu acetonă, astfel obținând circuitul final. Metoda este mai
bine arătat și explicat în capitolul 3.4.
2.4 Motoare le servo
Motoarel e servo sunt dispozitive ele ctro-mecanice, închise într -o cutie, care cuprinde
un motor de curent continu (DC), electronică pentru controlul motoarelor de la un semnal de
comandă, transmisie intermediară pentru a crește puterea de rotire și pentru a reduce turația
motorului și un potențiometru, care furnizează di spozitivului informație de spre poziția actuală
a motorului. [14]
Figura 2. 4.1 Structura servomotorului[10] electronică
pentru controlul
motorului transmisie
motor de
curent continu
potențiometru
19
Aceste motoare sunt fabricate în trei mărimi: micro, normal și gigant , iar sunt cu același
sistem de bază constructiv. Se utilizează de obicei pentru poziționare, de exemplu pentru
reglarea direcției la o mașinuță, la mișcarea brațelor robotice, etc.
Figura 2. 4.2 Tipuri de motoare servo[11]
La comanda motoarelor servo, ele vin cu mai multe fel uri de dispozitive , care pot fi
montate pe ei, depinde doar de noi care vom folosi, care se potrivește mai bine pentru proiect,
pentru aspectul (designul) robotului.
Figura 2.4 .3 Dispozitive atașabile la servomotor[12]
20
Cele mai utilizați tipuri de motoa re servo au conexiuni cu 3 pini cu același semnal de
control , care va face pe motoarele servo să fie
interschimbabili între ele în mod rezonabil.
Acești conectori sunt de tip mamă, cu cap de
0.1”. Ceea ce se poate confunda este culoarea,
care nu sunt consi stente tot timpul și depinde de
producător. O faptă bună este că ordinea pinilor, în mare majoritate, este aceeași, așa că
diferența se găsește doar la culoare. Trebuie totuși menținut culorile negru și maro care este
împământarea ( ground ) și roșu care est e alimentarea (vcc). Culoarea semnalului de comandă
poate să diferă de la un producător la altul, așa că dacă nu suntem siguri în ceea ce facem, atunci
mai bine ne uităm în documentație. De obicei pentru comandă se utilizează culorile alb, galben
și portoc aliu. [15]
A fost menționat mai sus, că semnalul de control este al treilea pin din conector, care
este utilizat pentru a zice motorului unde anume, în ce direcție să se întoarce. Acest semnal de
control este un șir de impulsuri. Impulsurile apar într -un interval de 20 de milisecunde (în 50Hz)
iar lungimea unui impuls variază între 1 -2 milisecunde. Unele sisteme cu rezoluție crescută ne
va permite comanda impulsurilor de la 0.5 ms până la 2.5 ms. Pentru generarea acestor semnale
PWM ( Pulse Width Modulation ) este ușor de a folosi un microcontroler, care să aibă pin i dotați
pentru generarea astfel de impulsuri.
Idea de protocol pentru
poziționare constă în faptul că la
o comandă de 1,5 ms motorul se
rotește la poziția centrală, având
valoarea unghiulară de 90 de
grade. Atunci când comandăm un
impuls care tinde mai spre 1 ms
atunci motorul se va roti spre
stângă, iar în caz contrar când este
mai aproape de 2 ms se va roti
spre dreapta. Fiecare impuls
măsurat va afla între 1 ms și 2 ms
după cum va fi decis rot ire la stânga sau la dreapta a motorului. Comanda fiind analog, practic
orice poziție poate fii atinsă. Știind deja cum comandăm un servo motor, știm că metoda cea Figura 2.4.5 Comanda PW M [16]
Figura 2.4.4
Cablu de conectare servo[13]
21
mai simplă pentru generarea semnalului PWM de comandă este utilizarea unui microcontroler,
rămâne de știut doar că pozițiile valabile sunt dependente de rezoluția ceasului (timer) al
microcontrolerului. De exemplu, este posibil ca un impuls să aibă numai 256 pași intre 1 ms și
2 ms care este destul de ajuns pentru orice aplicație. Trebuie mențion at observația, că motorul
în sine nu poate să fie foarte precis din cauza rezoluției. [16]
În cadrul proiectului motoarele servo utilizați sunt motoare servo analogice, furnizate
de către firma HiTec cu seria de HS -475HB și HS -645MG. Cel din urmă este un s ervo motor
de cuplu ridicat , cu rulment dublu, cu un motor de curent continuu cu 3 poli și cu magneți
ferită, cu 3 angrenaje metalice și încă un angrenaj din metal rezinat , cu un potențiometru de
calitate înaltă de 5K ohmi și cu un circuit IC hibrid pentr u controlul motorului.[19] Despre
celălalt motor nu avem așa de multe informații așa de detailate ceea ce privește structura
interioară. De știut este că în interior are un motor de curent continuu cu perii din metal
feromagnetic, cu angrenaj din metal rez inat, mă gândesc că are un potențiometru tot de 5K ohmi
și un circuit IC pentru control .[20]
Am vorbit despre circuit IC, care comandă motorul, dar să vedem ce este defapt. Un
microcontroler trimite foarte mai multe impulsuri către servo, cu lărgimea impul sului între 1
ms și 2 ms. 50 de impulsuri ajung în într -o secundă, și acest IC, amplificator, verifică tot timpul,
dacă trebuie ca motorul să fie rotit sau nu. Dacă sesizează că trebuie rotit, trimite un semnal
scurt către motor, ca să se rotească. În cele mai multe aplicații funcționează bine, iar din cauza
că nu este în continuu alimentat (este rotit doar pentru un moment, când primește semnal de la
amplificator), nu se poate folosi cuplul și viteza maximă a motorului. [22]
Problema cu motoare servo analo gice, cum avem și noi, este că nu lucrează cu aceeași
cuplu tot timpul. Valoarea cuplului depinde de diferența de poziție comandată și poziția actuală.
Cu cât această diferență este mai mică, cu atât și cuplul va fi mai mic. În realitate dacă diferența
este mică, cuplul motorului va fi foarte mică și din această cauză, nu va putea mișca brațul și
de aceea se mișcă doar foarte puțin și se aude un zgomot.
22
În figura 2.4.6 este ilustrat un amplificator liniar cu tranzistori complementari.
Figura 2.4.6 Amplif icator linear
Sensul de rotație în acest caz, va depinde de tranzistorul care comută. Dacă T1 comută
și T2 închide atunci motorul se va roti în sens invers față de cazul in care T1 se închide și T2
se deschide.
Figura 2.4.7 Amplificator diferențial
Figura de mai sus (figura 2.4.7) ilustrează un controler de comandă pentru servomotoare
cu un amplificator diferențial. Sensul de rotație a motorului va depinde care tranzistorii care se
comută, astfel va roti într -un sens, dacă este alimentat T1 și T4 și în sen s invers în cazul în care
se comută perechea format din tranzistor ii T3 și T2.
Motorașele servo utilizate în cadrul proiectului, sunt comandate după principiul
prezentat în figura 2.4.7. Dacă s -ar demonta motorul, în interiorul său am putea găsi o placă de
circuit electric, care va conține atât tranzistoarele, cât și un circuit amplificator, montat separat.
T1
R2
R1
+U
M
+U
-U
R1
R2
R3
R4
T1
T2
T4
T3
M
23
Caracteristicile motorașelor servo, sunt cuprinse în tabelul de mai jos:
HS-475HB
HS-645MG
Sistemul de control PWM cu 1500usec la mijloc (45o)
Tensiunea de alimentare 4.8V – 6.0V
4.8V 6.0V 4.8V 6.0V
Avans de lucru 0.23sec/60o 0.18sec/60o 0.24sec/60o 0.2sec/60o
Cuplul motorului 4.4kg/cm 5.5kg/cm 7.7kg/cm 9.6kg/cm
Consum curent la
menținere 7.4mA 7.7mA 8.8mA 9.1mA
Consum curent normal 160mA 180mA 350mA 450mA
Consum curent
maxim( peak ) 900mA 1100mA N/A mA N/A mA
Lățimea de bandă moartă 5 usec 8 usec
Tabelul 2.4.7 Caracteristicile motoarelor servo utilizați[19][20]
În cazul robotu lui din proiect, este utilizat 5 motorașe de tip HS -645MG pentru rotirea
bazei robotului (articulația 1) , două pentru articulația 2 ( partea superioară a brațului ), unu pentru
articulația 3 (antebrațul) și unu pentru articulația 5, care ajută la rotirea gripperului în sens orar
sau anti orar (stânga și dreapta). Motoraș ele HS -475HB se regăsesc de două ori în structura
constructivă a robotului și sunt utilizați pentru mișcarea articulației 4 pe axă verticală, deci în
sus-jos, respectiv pentru închiderea și deschiderea gripperului.
24
Capitolul 3. Proiectarea s istemul ui de comandă
3.1 Noțiuni introductive privind microcontrolerele
Înainte de apariția microcontrolerelor existau controlere care erau sisteme utilizate
pentru a comanda și prelua stări de la un proces sau elemente de execuție. Acestea erau
echipamente de dimens iuni mari, însă odată cu apariția microprocesoarelor au urmat și
îmbunătățiri ale controlerelor prin reducerea dimensiunilor acestora. Toate componentele
necesare unui controler au fost integrate pe același chip, astfel continuând procesul de
miniaturizare luând naștere calculatorul integrat pe un singur chip, adică microcontrolerul, fiind
specializat în implementarea operațiilor de control.
Numele acestui dispozitiv evidențiază caracterul său și anume cuvântul „micro” arată
că este vorba despre o mărime re dusă a dispozitivului, iar cuvântul „controler” indică faptul că
microcontrolerul este capabil să controleze obiecte, procese, etc.
Un microcontroler este asemănător unui microprocesor, ambele conținând CPU
(Unitatea Centrală de Prelucrare) care execută instrucțiuni ce îndeplinesc operațiile de bază
logice, matematice și de transmitere a informației . Totuși microcontrolerul diferă de
microprocesor prin mai multe aspecte, cel mai mare aspect de diferențiere fiind legat de
funcționalitatea acestuia. Micropro cesorul nu poate funcționa de unul singur, doar împreună cu
alte componente de memorie pentru stocarea informațiilor și a programelor, împreună cu
interfețe de intrare -ieșire (I/O) utile pentru conectarea dispozitivelor externe și împreună cu
dispozitivul cel mai necesar, generatorul de tact extern . În schimb un microcontroler este
proiectat să fie toate aceste componente într -unul singur, neavând nevoie de alte dispozitive
externe pentru că toate perifericele sunt incluse în el, acest fapt fiind un avantaj datorită
economisirii timpului și spațiului necesar pentru construirea aparatelor electronice. Datorită
acestui fapt, aparatele care stochează, măsoară, comandă, afișează sau calculează date,
informații majoritatea au în componența lor un microcontroler.[23][24]
În general un microcontroler conține de obicei următoarele:
• CPU (u nitatea centrală de prelucrare)
• Dispozitive/ interfețe de intrare -ieșire (I/O) seriale ș i/sau paralele
• generator de tact la care se adaugă din exterior un cristal de cuarț sau un circuit RC
în aplicații mai simple
25
• memorie volatilă RAM
• memorie nevolatilă ROM/PROM/ EPROM/EEPROM (depinde de model)
• controler de întreruperi
• controler DMA (pentru accesare directă memoriei)
• numărătoa re/temporizatoare
• convertoare A/D, D/A.
• și eventu al alte periferice (depinde de model)
Cu toate cele enumerate de mai sus schema bloc dezvoltată al unui microcontroler în
caz general arată conform figurii de mai jos:
Figura 3.1.1 Schema bloc generalizată a unui microcontroler[23]
Se poate observa în fig ura 3. 1.1 că blocurile funcționale ale unui microcontroler sunt
conectate între ele printr -o magistrală internă numită „BUS” care transmite semnale de control,
de adresă ș i de date. Una dintre cele mai importante caracteristici ale unui microcontroler este
mărimea acestor magistrale. Unitatea centrală de prelucrare selectează o locație de memorie sau
26
un dispozitiv prin intermediul magistralei de adrese, iar prin magistrala de date se face schimbul
de date și informații între CPU ș i memorie sau dispozitive le I/O.
Unitatea centrală de prelucrare execută instrucțiunile pe care le primește prin
intermediul magistralei de date de la memoria program. Structura Harvard fiind foarte
răspândit, se poate regăsi în microcontrolerele, fapt după care știm că instrucțiu nile sunt stocate
în memoria ROM iar datele în memoria RAM. Magistrala de date ș i cea de adrese p ot fi izolate
sau multiplexate.
Modulele I/O pot fi seriale sau paralele, fiecare modul fiind în stare să schimbe date cu
mediul exterior prin intermediul reg istrului de date. Controlerul de întreruperi al
microcontrolerului pe rmite intrări din exterior cât ș i de la modulele externe. Configurarea
modulului se face de către unitatea centrală de prelucrare datorită registrului de comenzi iar
citirea stării modulu lui se face cu ajutorul registrului de stare . Prin acest registru se pot genera
și întreruperile către unitatea centrală.
3.2 Microcontrolerul ATmega328PU
Nucleul Atmel AVR® conține un set de instrucțiuni bogat cu 32 de registre de uz
general. Fiecare regi stru este conectat direct la unitatea aritmetică și logică ALU, care acceptă
să fie accesat de doi regiștri independenți sub o singură instrucție executat î ntr-un ciclu
program . Arhitectura ce rezultă din această structură este mult mai eficient din punct de vedere
a programării astfel rezultând un microcontroler CISC convențional de aproape 10 ori mai
rapid.
Atmega328 este un microcontroler ce face parte din familia CMOS , lucreaz ă cu 8 bi ți
bazat pe arhitectura AVR (conceput ă de corpora ția Atmel în 1996) RISC, la fel ca și modelele
ATmega48PA/88PA/168PA. AVR a fost una dintre familiile de microcontrolere care utiliza pe
chip, memorie flash pentru stocarea programelor spre deosebire de alte familii de
microcontrolere care de țineau memorii ce puteau fi progr amate doar o singura dat ă, la fabrica ție
cum ar fi memorii ROM, EPROM sau EEPROM.
Se poate spune c ă AVR este o modificare a arhitecturii Harvard în care programele și
datele sunt stocate pe memorii separate acestea figurând în spa ții de adrese diferite, d ar având
posibilitatea citirii datelor din memorii utilizând instruc țiuni speciale. Microcontrolerul
ATmega328 de ține o unitate central ă de prelucrare AVR care combin ă un set bogat de
instruc țiuni cu 32 de registre de uz general de lucru .[25]
27
Figura 3.2.1 Microcontrolerul ATmega328P -PU 1
Termenul de RISC este frecvent întâlnit ă în literatura pentru calculatoare și se vor
explica câteva aspecte referitoare la acesta în rândurile urm ătoare. Arhitectura Harvard este un
concept mai nou ce s -a născut din nevoia de m ărire a vitezei microcontrolerului, magistrala de
adrese și cea de date ale acestei arhitecturi fiind separate. În acest caz este posibil un mare debit
de date prin unitatea central ă de procesare și totodat ă o vitez ă mai mare de lucru. Dac ă memoria
de date este separat ă de program este posibil ca mai departe instruc țiunile s ă nu trebuiasc ă să
fie cuvinte de 8 bi ți.
Deasemenea este ceva obi șnuit ca o arhitectur ă Harvard s ă aibă mai pu ține instruc țiuni
decât arhitectura von-Neumann și să aibă în general , instruc țiuni executate într-un ciclu.
Microcontrolerele cu arhitectur ă Harvard sunt numite și microcontrolere RISC ( Reduced
Instruction Set Computer) . Faptul c ă Atmega328 este un microcontroler RISC ne arat ă că acesta
are un set redus de instruc țiuni.
Prin executarea unor instruc țiuni precise într-un singur ciclu de tact, Atmega328
realizeaz ă un transfer care se apropie de 1 MIPS per MHz, permi țând proiectantului sistemului
să optimizeze consumul de energie raportat la viteza de procesare.
Toate cele 32 d e registre sunt conectate direct la ALU (unitatea aritmetico -logic ă) care
permite ca dou ă registre independente s ă fie accesate printr -o singur ă instruc țiune executat ă
într-un ciclu de tact. Arhitectura rezultat ă este mai eficient ă în codificare din moment ce rata de
transfer este de pân ă la 10 ori mai mare ca și la microcontrolerele CISC conven ționale .
1 http://ktechnics.com/shop/atmega328p -pu/
28
Microcontrolerul Atmega328P prezint ă următoarele caracteristici: 8/K octeți de
memorie In-System -Programmable Flash cu, capacit ăți Read -While -Write , 1K bytes memorie
EEPROM, 2K bytes memorie SRAM, 23 de linii I/O pentru scopuri generale, 32 de registre de
lucru, 3 Timer/Counter (temporizatoare/num ărătoare) cu capacitate de comparare, întreruperi
interne și externe, USART serial programabil, interfa ță serial ă, port serial SPI, ADC cu 6 canale
și 10 bi ți ( cu 8 canale în pachete TQFP și QFN/MLF), temporizator Watchdog programabil cu
oscilator intern și 5 moduri de econom isire selectabile a consumului de energie.
Func ționarea unității centrale de prelucrare poa te fi oprit ă prin modul Idle, în timp ce
memoria SRAM, temporizatoarele/ counter -ele, USART, interfa ța serial ă, portul SPI și sistemul
de întreruperi pot func ționa normal.
Modul Power -down salveaz ă conținutul registrelor, „ înghea ță” (oprește ) oscilatorul
dezactivând toate celelalte func ții ale c hip-ului pân ă la urm ătoarea întrerupere sau resetare
hardware.
În modul Power -save (economisire a energiei) temporizatorul asincron continu ă să
funcționeze , permi țând utilizatorului s ă mențină o eviden ță a timpului în timp ce alte dispozitive
sunt inactive .
Modul de reducere ADC al zgomotului oprește unitatea central ă de procesare și
modulele I/O cu excep ția temporizatorului asincron, pentru ca s ă minimizeze zgomotul cât timp
dureaz ă conversia ADC. În modul standby, oscilatorul func ționeaz ă în timp ce alte dispozitive
sunt inactive, permi țând astfel o pornire rapid ă a microcontrolerului cu un consum de energie
scăzut.
Microcontrolerul este fabricat utilizând tehnologia de memorie non -volatil ă Atmel de
nivel ridicat. Memoria On-chip ISP Flash permite ca memoria de programe s ă poată fi
reprogramat ă In-System prin interfa ța serial ă SPI de c ătre un programator de memorie
conven țional ă non-volatil ă (reprogramabil ă) sau de un program de „boo tare” (bootloader ) on-
chip rulat p e CPU. Acesta poate utiliza orice interfa ță pentru a desc ărca aplica ția-program în
Application Flash Memory .
Combinând o unitate central ă de procesare (CPU) RISC pe 8 bi ți cu un In-System
autoprogramabil Flash, ATmega328 poate fi descris ca un microcontro ler puternic care ofer ă
soluții extrem de eficiente și flexibile pentru mai multe aplica ții de control ș i pentru aparatele
alimentate de la baterie din cauza consumului s ău mic.
Diagrama bloc a microcontrolerului este afișat în A nexa1 iar diagrama pinilor în Anexa2
29
3.3 Microcontrolerul ATtiny85
În capitolul anterior am ex plicat ce beneficii are un microcontroler AVR îmbunătățit cu
arhitectura RISC. Astfel putem spune că și microcontrolerul ATtiny85 beneficiază de acești
trăsături, fiind un microcontroler ca re face parte din familia CMOS , luc rând pe 8 biți și este
bazat pe arhitectura AVR RISC, la fel ca și modelele ATtiny25/45.
Faptul c ă ATtiny85 este un microcontroler RISC ne arat ă că acesta are un set redus de
instruc țiuni dar foarte necesare și utile . Prin executarea unor instruc țiuni precise într-un singur
ciclu de tact, A Ttiny85 realizeaz ă un transfer care se apropie de 1 MIPS per MHz, permi țând
proiectantului sistemului s ă optimizeze consumul de energie raportat la viteza de procesare.
Nucleul AVR com bină un set de instrucțiuni bogat pe 32 de registre generale accesabile.
Toate cele 32 de registre sunt conectate direct la ALU (unitatea aritmetico -logic ă) care permite
ca dou ă registre independente s ă fie accesate printr -o singur ă instruc țiune executat ă într-un ciclu
de tact. Arhitectura rezultat ă este mai eficient ă în codificare din moment ce rata de transfer este
de pân ă la 10 ori mai mare ca și la microcontrolerele CISC conven ționale.
Microcontrolerul ATtiny85 prezintă următoarele caracteristici: memor ie de tip ” In-
System Programmable Flash ” de 8K bytes , memorie EEPROM de 512 bytes , 256 bytes
memorie SRAM, 6 linii de intrare -ieșire cu scopuri generale, 32 de regiștri pentru uz general,
un singur Timer/Counter (temporizator/numărător) pe 8 biți cu mod de comparare și încă unu,
tot pe 8 biți dar de mare viteză, interfață universală serială, întreruperi interne și externe,
convertor analog -numeric pe 10 biți în 4 canale, temporizator programabil Watchdog cu
oscilator intern și 3 moduri de econom isire select abile a consumului de energie .
Modul Idle oprește pe CPU (unitatea centrală de prelucrare) lăsând pe SRAM,
temporizatoarele/numărătoarele, convertoarele analog -numerice, comparatoarele analogice și
sistemul de întreruperi să funcționeze în continuare.
Mod ul Power -down salvează conținutul registrelor, oprind funcționalitatea întregului
controlerului pân ă la următoarea întrerupere sau până la o resetare hardware.
Modul de reducere zgomot la ADC oprește Unitatea Centrală de Prelucrare și toate
modulele de in trare-ieșire pentru minimizarea zgomotelor respectiv perturbațiilor în timpul
conversiei analog -numeric. [26]
Microcontrolerul este echipat de memori a non-volatil ă Atmel de nivel ridicat. Memoria
On-chip ISP Flash permite ca memoria de programe s ă poată fi reprogramat ă In-System prin
interfa ța serial ă SPI de c ătre un programator de memorie conven țional ă non-volatil ă
30
(reprogramabil ă) sau de un program de „boo tare” (bootloader ) on-chip rulat pe CPU. Acesta
poate utiliza orice interfa ță pentru a desc ărca aplica ția-program în Application Flash Memory .
Acest mic rocontroler din cauza că necesită resurse puține este de ajuns de a folosi în
cadrul proiectului cu rol ul de a genera semnalele de întrerupere către celălalt microcontroler în
fiecare 20 de milisecunde.
Diagrama bloc a microcontrolerului este afișat în Anexa3 iar diagrama pinilor în Anexa4
3.4 Interfața de dezvoltare Visual Micro
Visual Micro este un așa -numit extensie pentru Microsoft Visual Studio 2008 -2015 și
pentru Atmel Studio, care dă posibilitatea ca orice proiect Arduino să poate fi dezvoltat,
compilat și după aceasta încărcat pe orice Arduino în timp ce ia caracteristicile foarte
avantajoase de la Visual Studio sau Atmel Studio.
Această interfață de dezvoltare este compatibil total cu mediul de dezv oltare Arduino și
folosește aceeași librării, același cod sursă și același instrumente de dezvoltare.
Diferența între Arduino IDE și Visual Micro se află în interfață. Astfel cel din urmă
oferind un mediu de dezvoltare mai avansată și profesională și perm ite o dezvoltare mai
avansată și mai ușoară decât Arduino IDE actuală.
În descriere, până acuma, am folosit de mai multe ori termenul ”IDE”. Acesta este un
termen standardizat în industrie și ceea ce înseamnă este un Mediu de Dezvoltare Integrat
(Integrate d Development Environment ). Aceasta este o aplicație software care încorporează un
editor de cod sursă și construiește uneltele, instrumentele ca și un compilator și un sistem de
depanare (debugging system ). Această aplicație software IDE este folosit pent ru a scrie, edita,
construi și testa aplicația scrisă. În timp ce IDE -ul lui Arduino oferă un IDE de nivel inițial de
bază, Visual Micro împreună cu Microsoft Visual Studio sau Atmel Studio (depinde în care
mediu folosim extensia) oferă un IDE îmbunătățit și mai funcțional. [27]
Modulul de instrumente GCC constă în toate instrumentele care rulează în spate
(background) dacă selectăm comenzile ” build ” sau ” upload ”. Aceste instrumente sunt in
principal compilatorul GCC și linker -ul și in strumentul de încărcar e (de obicei avrdude.exe).
Fiindcă lucrăm cu IDE, nu trebuie să lucrăm direct cu programele de unelte sau cu modulele
deoarece aceste sunt controlate de IDE în spate. Cu toate acestea modulul GCC este un set de
linii de comandă de programe independente (*. exe) care pot fi utilizați și fără IDE.
31
Driverul USB VCP ( Virtual Com Port ) este deasemenea furnizat de Arduino (în cazul
în care avem la dispoziție o placă Arduino) sau de producătorul plăcii și este responsabil pentru
comunicarea dintre placa utilizată ș i calculator PC.
În figura 3.4.a este prezentat cum arată mediul de dezvoltare fără Visual Studio / Atmel
Studio, deci ce ne oferă furnizorul de ha rdware Arduino. Astfel putem vedea, că avem un IDE
făcut de Arduino pentru compilare, modul care ajută la compilare și la încărcarea fișierului și
driverul care va ajuta pe calculatorul nostru să comunice cu microcontroler.
În figura 3.4.b se vede foarte b ine, care este diferența între mediul de dezvoltare dintre
Arduino IDE și Visual Micro astfel putem aștepta multe diferențe și între interfața de
dezvoltare. Așa cum reiese de pe figură și cum este exprimat și mai sus, utilizând pe Visual
Micro, aceasta va înlocui IDE -ul nostru original, care nu va fi dezinstalat și vom putea folosi în
cazul în care o să mai avem nevoie de el. Visual Micro este numit ca și extensie pentru că se
integrează în Visual Studio sau Atmel Studio și adaugă funcții noi pentru acești medii de
programare, permițând astfel programarea altor plăci. În acest caz modulul GCC Toolchain și
driverul VCP va rămâne la fel și nemodificat, doar că în acest caz, va fi controlat de Visual
Micro nu de IDE -ul original. [28]
Figura 3.4.a Mediul de dezvoltare Arduino
IDE[28]
Figura 3.4.b Mediul de dezvoltare Visual
Micro[28]
32
3.4.1 Instalarea extensi ei Visual Micro
Pentru a putea folosi extensia Visual Micro, avem nevoie de un mediu de programare
Visual Studio sau Atmel Studio, care ne va oferi un IDE performant pentru compilarea codului.
Având mai multă experiență în programare, eu am avut instalat d eja mediul Visual Studio
Community 2015, cu care am mai făcut aplicații, precum și aplicația pentru comandarea
robotului din cadrul proiectului. Acest mediu de programare este compatibil cu Visual Micro și
la asta pot să adaug/instalez ex tensia respectivă .
Instalarea extensiei se va începe cu descărcarea lui de pe pagina
https://marketplace.visualstudio.com/items?itemName=VisualMicro.ArduinoIDEforVisua lStu
dio. După ce am salvat fișierul, cu dublu click îl instalăm. Asta nu necesită pricepere, trebuie
să dăm click pe next și la sfârșit pe finish . Partea mai grea urmează doar după aceasta, când
trebuie configurat în Visual Studio.
Dacă am instalat pentr u prima dată, fereastra ”Configuration Manager”, unde putem
configura sistemul nostru. Visual Micro trebuie să știe versiunea și locația, unde aplicația
Arduino IDE era instalat mai înainte., sau alte aplicații care au IDE similare , cum sunt și
mpIDE, Ener gia sau Wiring .
Figura 3.4.1.1 Fereastra ” Configuration Manager ” [29]
33
În figura de mai sus este prezentat f ereastra Configuration Manager . Pe figură sunt
numerotate următoarele căsuțele în care trebuie specificat :
1. Tipul și versiune a IDE instalat.
2. Locația m apei (Folderului) unde IDE a fost instalat
3. Dacă până acuma nu am descărcat nici un IDE, extensia ne oferă soluția să îl
descărcăm și să -l instalăm acuma
4. Cele marcate cu acest număr sunt setări opționale pentru cei mai avansați și nu
necesită să le completă m la instalarea inițială . Sketchbook location specifică locația unde Visual
Micro se va căuta după librăriile utilizatorului. Se recomandă să lăsăm liber, că atunci extensia
va utiliza locația IDE -ului original.
Dacă am trecut peste acești pași, înseamnă c ă am terminat instalarea și am configurat
setările, astfel sistemul nostru este pregătit pentru a fi utilizat. [29]
În cazul în care lucrăm cu plăci diferite, probabil vom fi obligați să lucrăm cu un alt
IDE, sau și în cazul în care avem mai de a folosi m ulte versiuni de Arduino IDE, suntem obligați
să le instalăm acești IDE. Cele instalate vor fi cuprinse într -o listă, ce vom putea găsi pe
toolboxul extensiei Visual Micro, de unde pe urmă putem selecta pe ori care dorim să folosim.
Figura 3.4.1.2 Lista cu IDE instalate
În dreapta acestei listă găsim o altă listă și anume lista acelei plăci, pentru care IDE -ul
nostru poate să compileze codul sursă scrisă de noi. De aici vom selecta iarăși placa noastră.
Figura 3.4.1.3 Lista cu plăcile de dezvoltare cunoscu te de IDE selectat
34
3.4.2 Programarea microcontrolerului ATmega328P -PU
Pentru a programa un microcontroler suntem nevoiți să c onectăm cumva la un calculator
cu care să se comunice. Pentru aceasta avem nevoie de un port deschis de comunicare atât pe
calculat orul nostru cât și în microcontroler. Sunt microcontrolere care au deja implementat
aceea funcție în care el poate comunica cu calculator direct conectând cu USB. Sunt
microcontrolere care au doar o interfață serială având pinii RX ( Receive ) și TX (Transmi t)
pentru a comunicare cu exterior, ceilalți care sunt un pic mai deștepți cunoaște și protocolul
USART, care acceptă programarea serială. La fel este dotat și microcontrolerul nostru
ATmega328P -PU.
Legătura între calculator PC și între microcontroler am realizat folosind un adaptor USB
– TTL având pe placa integratul CP2102. Acest integrat este un controler USB -UART care
ajută adaptarea semnalului RS -232 la protocolul cel mai frecvent folosit în zilele de azi USB.
Acest integrat cuprinde un controler com plet de USB 2.0 cu viteză crescută, un transmițător –
receptor USB, un oscilator, EEPROM și o magistrală serială asincronă de date (UART) totul
într-o cutiuță de tip MLP -28 de dimensiuni 5 x 5 mm. [30]
Figura 3.4.2.1 Adaptorul CP2102
Interfața asincronă UART al adaptorului CP2102 pe lângă semnalele de date TX
(transmit) și RX ( receive ) mai știe să folosească și semnalele de control RTS/CTS,
DSR,/DTR, DCD și RI (X -On/X -Off handshake ). Această interfață permite o gamă largă de
formate de date și rate de transf er (Baud Rate).
35
Programarea microcontrolerului se face folosind acest adaptor. Conexiunea se face
după figura următoare:
Figura 3.4.2.2 Conectare ATmega328 la UART
Conexiunile sunt făcute pe placa de dezvoltare, noi trebuie doar să conectăm adaptorul
CP2102 la calculator, folosind un cablu micro USB – USB. După conectare trebuie să
instalăm driver -ul adaptorului de pe pagina de web a producătorului2. Descărcăm și conform
sistemului de operare pe care îl folosim instalăm fișierul CP210xVCPInstaller_x64 pentru
sisteme cu 64 de biți sau CP210xVCPInstaller_x86 pentru sisteme cu 32 de biți. Driverul este
compatibil sistemele de operații Windows XP/Server2003/7/8/8.1/10 sau și cu alte le cum sunt
Linux, Android sau Macintosh OSX .
După instalare reconectăm adapt orul și verificăm la Device Manager numărul portului
serial pe care noi vom putea folosi în cadrul programării microcontrolerului sau la
comunicarea cu microcontroler.
Figura 3.4.2.3 Port serial CP2102
2 http://www.silabs.com/products/development -tools/software/usb -to-uart-bridge -vcp-drivers
36
În cazul meu, cum se vede și pe figura 3.4.2.3 portul serial se află la COM15, astfel
înainte de a programa sau a comunica cu microcontroler trebuie să fie selectat ca port de
comunicare portul COM15.
Figura 3.4.2.4 Pașii pentru deschiderea proiectului nou
Primul pas pentru programare este să d eschidem prog ramul Visual Studio . Din bara de
sus alegem meniul File -> New -> Project.. . Ne va deschide fereastra 2 unde trebuie să
căutăm pe Visual Micro în Installed -> Templates -> Visual C++. Din secția din dreapta vom
alege opțiunea Arduino Project. Mai rămâne s ă dăm un nume proiectului și să selectăm unde
dorim să salvăm, după care apăsând butonul OK, se va deschide fișierul programului.
Dacă cineva a mai lucrat în interfața Arduino va știe cum se lucrează, structura
programului și instrucțiunile fiind la fel, n u va avea dificultăți. Pentru ceilalți ofer să studieze
un pic cum anume se poate programa în Arduino, că restul va fi la fel.
Visual Micro
Numele fișierului
Arduino Project
Dosarul salvat
37
Un program de exemplu pentru clipirea (blinking ) unui LED este următoarea:
// funcția setup este rulat o singură dată când por nim microcontrolerul sau î l resetăm
void setup() {
// inițializează LED-ul ce se regăsește pe orice placa Arduino
// conectat la pinul D13
pinMode( LED_BUILTIN , OUTPUT);
}
// funcția loop va rula tot tim pul pană când microcontrolerul este alimentat
void loop() {
digitalWrite( LED_BUILTIN , HIGH); // aprinde becul
delay(1000); // așteaptă o secundă
digitalWrite( LED_BUILTIN , LOW); // stinge becul
delay(1000); // așteaptă o secundă
}
Figura 3.4.2.5 Încărca rea programului pe microcontroler
După ce am scris programul din toolBox -ul de sus trebuie să selectăm IDE -ul pe care
vom folosi, în cazul nostru Arduino 1.6/1.8 placa de dezvoltare pe care o utilizăm. Noi având
doar microcontrolerul, nu avem nici o placă iar prin documentație3 știu că placa Arduino Uno
folosește tot acest tip de microcontroler. Așa că în continuare voi alege placa Arduino /
Genui no Uno și portul serial COM 15. Ca să ne verificăm dacă codul sursă este corect scris și
nu avem greșeli de imple mentare apăsăm buton Compilare (Figura 3.4.2.5). Dacă totul este în
regulă și nu avem greșeli sau le -am corectat putem încărca programul în microcontroler
apăsând butonul de Încărcare (Figura 3.4.2.5)
Astfel parcurgând acești pași, putem încărca orice prog ram scris pe microcontrolerul
ATmega328P într -un limbaj foarte asemănător cu C++ în același mod cum am programa în
interfața Arduino. Motivul pentru care eu am ales totuși această interfață , Visual Micro, este
că programul rulează mai ușor, compilatorul fi ind mai optimizat față de interfața Arduino.
3 https://www.arduino.cc/e n/main/arduinoBoardUno
Compilare
Compilare și încărcare
38
Programul care a fost î ncărcat pe microcontroler utilizează librăria ServoSpeed pe care
am scris ca să fie mai ușor controlul motoarelor servo. Cu ajutorul librăriei pot să controlez
foarte multe motoare împreun ă cu posibilitatea de adăuga sau de a scoate motorașele de sub
control, modificarea vitezei, așteptarea unul pe celălalt, citirea poziției actuale și oprire în
timpul deplasării, în caz de urgență.
Astfel programul rulează utilizând următoarele variabile:
#include <ServoSpeed.h>
ServoSpeed motor[6]; //motoarele
int motor_pin[6] = { 3,5,6,9,10,11 }; //pin de conectare a motoarelor
int interruptPin = 2; //pin de intrerupere externa
int interruptEnable = 4; //pornire intrerupere
int powerPin = 12; //pin pornire sursa de alimentare
float te = 0.02; //20ms //timp de esantionare la intrerupere
int robot_speed = 30; //viteza robotului
long Ni, N; //numar esantion
int j;
float a[4][6]; //coeficientul a pentru functie de gradul3
float s[6], vit_max[6], timp_acc[6], timp_dec[6], q[6], v[6], ac[6];
int qf[6], q0[6]; //pozitie finala si actuala(start)
float tf;
String cmd = ""; //comanda de executat
char c; //caracterul primit prin serial
Am făcut programul în așa fel, încât să fie structurat cât mai bine. Folosesc multe funcții,
ca să fie cât m ai clar și mai ușor de înțeles și așa am obținut un cod în care partea de setup() și
loop() arată foarte simplu.
void setup() {
Serial.begin(9600); //pornire comunicatie seriala
pinMode(powerPin, OUTPUT); digitalWrite(powerPin, HIGH);
pinMode(interruptEnable, OUTPUT);
pinMode(interruptPin, INPUT);
pinMode(interruptPin, INPUT_PULLUP );
attachInterrupt( digitalPinToInterrupt (interruptPin), poz_move_f3, RISING);
init_move3f(); //initializare parametri pentru functia gerenator
//de traiectorie de gradul 3
Serial.println( "System Ready" );
}
void loop() {
if (Serial.available() > 0) //daca primesc caractere prin serial
{
c = Serial.read(); //citesc caracterul primit
if (c == 13) { //la sfarsitul comenzii
command(); //ma duc si execut comanda
cmd = ""; //dupa care sterg comanda anterioara
}
else MakeString();
}
delayMicroseconds(100);
}
39
Este menținut că pe lângă celelalte comenzi, deplasarea robotului este controlat
utilizând funcția de co nducere polinomială de gradul 3. Această funcție este prezentat în
capitolul x.x.x, și aici vă prezint cum este implementat acest algoritm în programul
microcontrolerului . Funcția care apelează este ”MOVE ” urmărit de pozițiile fiecărei cuplă
cinematică cu semnul ”:” între ele (exemplu MOVE 90:150:135:90:40:0) .
Se poat e afla că în setup() am folosit un pin care recepționează întreruperi externe, astfel
când apare o întrerupere va fi apelată fun cția poz_move _f3(). Această funcție se va calcula
poziția imediat următoare pentru fiecare cuplă cinematică și viteza cu care trebuie să se
deplas eze. Mai este utilizat și funcția init _move 3f() care inițializează niște valori, cum sunt
timpul de accelerație , de decelerație și viteza maximă a fiecărei cuple cinematică. Aceste funcții
sunt descrise așa cum apar mai jos:
void poz_move_f3()
{
Ni++; //numar pas de esantionare
float t = Ni * te; //timp de esantionare
for (int j = 0; j < 6; j++)
{
//calcularea pozitiei intermediar
q[j] = a[0][j] + a[1][j] * t + a[2][j] * t * t + a[3][j] * t * t * t;
v[j] = a[1][j] + 2 * a[2][j] * t + 3 * a[3][j] * t * t;
ac[j] = 2 * a[2][j] + 6 * a[3][j] * t;
//trimite pozitia calculata
if (j == 5) motor[j].write(q[j], v[j], true);
else motor[j].write(q[j], v[j], false);
}
//am ajuns la ultimul esantion
//se termina intreruperile
if (Ni == N)
{
digitalWrite(interruptEnable, LOW);
}
}
void init_move3f()
{
timp_acc[0] = 0.01; timp_dec[0] = 0.01; vit_max[0] = robot_speed;
timp_acc[1] = 0.01; timp_dec[1] = 0.01; vit_max[1] = robot_speed;
timp_acc[2] = 0.01; timp_dec[2] = 0.01; vit_max[2] = robot_speed;
timp_acc[3] = 0.01; timp_dec[3] = 0.01; vit_max[3] = robot_speed;
timp_acc[4] = 0.01; timp_dec[4] = 0.01; vit_max[4] = robot_speed;
timp_acc[5] = 0.01; timp_dec[5] = 0.01; vit_max[5] = robot_speed;
}
40
În următoarele rânduri este prezentat un parte din pro gram când este primit această
instrucțiune MOVE:
if (cmd.substring(0, 5) == "MOVE ")
{
//Stabilesc punctul tinta pentru fiecare cupla
for (int k = 0; k < 6; k++) {
int pozition = getValue(cmd.substring(5), ':', k);
if (k == 5) motor[k].write(pozition, true);
else motor[k].write(pozition, robot_speed, false);
q0[k] = pozition;
}
delay(100);
move3f();
}
După cum se vede apare o f uncție move3f() care este următoarea:
void move3f()
{
set_move3f(); //Calculeaza parametri functiei
Ni = 0;
digitalWrite(interruptEnable, HIGH); //permit generare tact pentru AT tiny
}
Funcția set_move3f() este o funcție care cal culează parametri funcției, după cum este
dat de formule, astfel:
void set_move3f()
{
//det timp de deplasare
float tmax = 0;
float t[6];
for (int j = 0; j < 6; j++)
{
s[j] = abs(qf[j] – q0[j]);
t[j] = s[j] / vit_max[j] + timp_acc[j] + timp_dec[j];
if (t[j] > tmax) tmax = t[j];
}
tf = tmax;
//det nr pasi de esantionare
N = round(tf / te);
tf = N * te;
//calcul coef functiei de conducere
for (int j = 0; j < 6; j++)
{
a[0][j] = q0[j];
a[1][j] = 0;
a[2][j] = 3 / (tf * tf) * (qf[j] – q0[j]);
a[3][j] = -2 / (tf * tf * tf) * (qf[j] – q0[j]);
}
}
41
3.4.3 Programarea microcontrolerului ATtiny85
Programarea microcontrolerului ATtiny85 seamănă cu programarea celuilalt
microcontroler , dar nu este la fe l. La acest microcontroler lipsesc pinii de date RX și TX așa că
nu putem folosi în mod direct adaptorul CP2102 pentru programarea lui, astfel vom avea nevoie
de un programator ISP care programează microcontrolerele prin pinii MISO, MOSI și SCK.
Acest tip de programator se numește USBI SP/USBISP .
Un programator USBASP se poate găsi de la 10 -20 lei în sus la noi , dar dacă nu vom
mai folosi, de ce să cheltuim și la asta, dacă putem să facem noi unu? În capitolul 3.4.2 am
prezentat cum anume se poate programa un microcontroler ATmega328P simplu printr -un
adaptor. Am căutat pe internet și am găsit un mod în care putem să convertim acest
microcontroler astfel încât să funcționeze ca un programator ISP. Dacă am avea pe asta am
putea să programez pe ATtiny85 cu aju torului unui microcontroler ATmega328 pe care îl
cunoaștem deja.
Primul lucru este să modific atunci pe ATmega328 să funcționeze ca și un programator.
Pentru asta urmărim pașii de programare din capitolul 3.4.2, iar de data asta vom încărca
programul Ardui noISP , pe care se poate găsi pe următoarea pagină web:
https://github.com/rsbohn/ArduinoISP/blob/master/ArduinoISP/ArduinoISP.ino Copiem codul
sursă de aici și lipim în Visual Micr o și încărcăm programul pe microcontroler.
Cu ajutorul interfeței Arduino IDE trebuie să descărcăm modulul care compilează
programul realizat pe microcontrolerul ATtinyXX. Pentru asta deschidem interfața Arduino și
intrăm în File -> Prefe rences unde la lista „ Addition Boards Manager URLs ” adăugăm textul4
Figura 3.4.3.1 Adăugare site de sincronizare pentru plăci cunoscute
4https://raw.githubusercontent.com/damellis/attiny/ide -1.6.x -boards -manager/package_damellis_attiny_index.json
42
cu linkul care conține informații despre modul de descărcare a compilatorului. Dăm click pe
butonul OK și mergem la me niu Tools ->Board ->Boards manager… unde se va deschide o
fereastră cu plăcile deja cunoscute. Din lista Type alegem „ Contributed ”. Din lista filtrată
3.4.3.2 Lista cu plăci cunoscute
obținută alegem pe attiny by David A. Mellis și îl instalăm, după car e cu Close închidem
fereastra . Până aici avem un microcontroler pregătit pentru programare și un alt microcontroler
care urmează a fi programat. Rămâne să le conectăm între ele și să programăm pe ATtiny85.
3.4.3.3 Schema de principiu a conectării ATtiny85 la ATmega328
Am realizat schema de mai sus conectând ATtiny85 la ATmega328 cu următoarele pini:
VCC – 5V; GND – GND; Pin 2 – Pin 13; Pin 1 – Pin 12; Pin 0 – Pin 11; RESET – Pin 10; și
un condensator la ATmega328P de 10uF între RESET și GND.
VCC
43
După ce am real izat conexiunile, deschidem interfața Arduino IDE, în care vom scrie
codul sursă. Programul încărcat pe microcontroler nu diferă mult de la exemplul numit Blink.
Știim că rolul lui este să funcționeze ca și oscilator extern atâta timp cât primește un semna l la
un alt pin. Astfel am realizat următorul program:
int wait_ = 20; //timpul de asteptare intre doua impulsuri;
//acest timp este specificat si in programul celuilalt
//microcontroler ca sa stie timpul de esantionare pentru
//calcularea pozitiilor
int pinEN = 0; //pinul unde asteptam semnalul de pornire generare
int pinTick = 1; //pinul prin care dam impulsurile
void setup() {
pinMode(pinEN, INPUT); //pinul unde așteptăm semnalul de pornire gerenare
pinMode(pinTick, OUTPUT); //pinul care va da impu lsurile de tact
digitalWrite(pinTick, LOW); //la inceput nu dam nici un semnal
}
void loop() {
while (digitalRead(pinEN) == HIGH) //timp ce trebuie actival tactul extern
{
digitalWrite(pinTick, HIGH); //dau un tact/impuls
delay(wait_/2); //astept un pic
digitalWrite(pinTick, LOW); //opresc semnalul, ca dupa un timp sa
//pot da inca un impuls
delay(wait_ / 2);
}
}
După ce am scris codul sursă alegem compilatorul (placa) conform figurii 3.4.3.4. Acest
meniu se găsește la Tools -> Board și ale gem
ATtiny25/45/85 de pe listă. Așa vom avea alte opțiuni de
selectat și anume Procesorul . Aici vom selecta pe
ATtiny85 că pe asta dorim să -l programăm. Mai jos avem
un Clock , unde după cum dorim noi selectăm frecvența.
Atenție, să fie selectat Internal și nu External ! Ultimul
este folosit în cazul în care tacul va da un oscilator extern.
Selectăm portul COM15 și la Programmer selectăm pe
ArduinoISP, astfel zicem compilatorului tipul
programatorului. Un sfat bun este ca înainte de a
programa să alegem și op țiunea Burn Bootloader , pentru
a modifica setările microcontrolerului referitor la
frecvența și modul de lucru. După ce am setat totul
urmează programarea în sine utilizând funcția Sketch -> Upload Using Programmer . Dacă totul
am făcut bine, la sfârșit primim mesajul de confirmare „ Done !”
3.4.3.4 Setările din meniul Tools
44
3.5 Realizarea plă cii de dezvoltare pentru comanda robotului
Desenul sau numit layoutul am realizat folosind programul Altium Designer 17 [17].
Acest program ne ajută să realizăm orice placă PCB. Pornind de la schema el ectrică putem să
ajungem rapid la vizualizarea în 3D a plăcii proiectat. Etapele de proiectare se încep cu
realizarea schemei electrice. Aici adăugăm fiecare c omponent în parte și le conectăm, virtual,
trasând firele între ele . După ce am terminat, și am o bținut schema electrică ce vom folosi în
continuare, trebuie actualizat aparițiile componentelor folosind comanda Annotate (Adnotare)
din meniul Tools -> Annotation -> Annotate Schematics Quietly . Această funcție identifică
componentele într -un mod unic, a tribuind referințe unice de componente la fiecare componentă
din proiect. Astfel fiecare element în parte primește un cod unic în proiect. Programul va
identifica fiecare component, după acest cod pentru a evita confuzia între elemente.
Schema electrică f iind gata și adnotat, urmează să adăugăm componentele pe placa
virtuală. Aceasta se face utilizând funcția Update PCB Document, din meniul Design -> Update
PCB Document <nume fișier>. După ce am dat click, va apărea o fereastră cu toate traseele
posibile r espectiv toate componentele folosite. Pe această fereastră, jos, vom găsi două butoane:
Validate și Executate. Vom apăsa în această ordine, timp în care programul își verifică toate
componentele și le trasează între ele cu o linie întreruptă pentru a ajuta munca noastră în
continuare. Se va deschide fereastra cu placa noastră, și lângă ea sunt puse toate componentele.
Urmează deci să facem puțină ordine și să le punem la loc, așa cum dorim să fie așezați. După
ce am făcut și această etapă, să desenăm trasee le, așa cum vor ieși și pe placă. Pentru aceasta,
programul ni le oferă opțiunea de trasare automată, ceea ce este o opțiune foarte bună, dar nu
este garantat că reușește să le traseze mai ales la un proiect mai complicat. Așa că este mai bine
să le trasăm noi, manual, că va ieși mult mai clar pentru noi și e mai posibil că evităm unele
greșeli ce pot apărea în timpul trasării automate.
După ce am realizat traseele și am salvat documentul, urmează să listăm schema.
Listarea se face pe orice foaie cu o impri mantă laser. Eu prefer să listez pe o foaie lucioasă
(cerată) și reglez imprimanta să listeze cât mai închis, ca să intră cât mai multă ”cerneală” (toner
topit) pe foaie.
Observația este că partea cu traseele trebuie printat cu ”citire din dreapta” iar tex tul
trebuie printat oglindit (invers, verso).
45
Urmează să o curățăm partea de cupru a plăcii. Astfel luăm o bucățică de hârtie abrazivă
cu duritatea de 400 -500 și se șlefuiește placa ușor, pe direcția diagonalelor pe sensuri opuse.
După aceea o curățăm câ t mai bine posibil cu acetonă sau cu alcool pe un prosop de hârtie.
Trebuie să fim atenți la petele de grăsimi, care sunt contra noastră la realizare.
Placa fiind curățată, urmează să punem foaia listată cu fața în jos pe placă, deci partea
printată a foi i să fie pe parte de cupru a plăcii, și îndoim foaia ca să nu se miște peste placă.
Între timp pregătim și fierul de călcat, pe care îl încălzim aproape la maxim. Punem o foaie albă
curată între placă și fierul de calcat ca să îl protejăm, după care îl apl icăm apăsând puternic în
jos și încercăm să nu glisăm , pentru că stratul de suprafață din plastic al hârtiei lucioase se va
topi instantaneu, formând un strat temporar alunecos. După câteva minute putem mișca fierul
de călcat încet până când întreaga placă este acoperită. Timpul total de călcare este de
aproximativ 5 -10 minute .
Acuma punem placa imediat într -o tavă cu apă fierbinte timp de vreo 15 minute. O parte
din hârtie va începe să iasă imediat. Trebuie să înlăturăm orice hârtie rămasă de pe placă, av ând
grijă la trasee, deci să nu încercăm să depărtăm cu unghiile. Aproximativ peste 20 de minute
traseele vor fi clare. Cazul în care urmele sunt încurcate în orice fel, putem curăța tonerul topit
cu acetonă și începem de la început cu curățarea plăcii, sa u dacă nu este așa de grav, putem
corecta cu un marker permanent.
Urmează partea riscantă în realizarea plăcii PCB, că trebuie să punem placa într -un
container din plastic, umplut cu o soluție corozivă, în cazul nostru în clorură ferică. Să nu lăsăm
soluți a să ajungă pe nici un obiect din metal sau pe corp omenesc. Lăsăm placa în clorură până
când iese cuprul nedorit de pe ea. În funcție de starea clorurei, aceasta poate dura și 15 -20 de
minute, iar putem ajuta să iasă mai repede mișcând un pic în soluție. Trebuie să fiim atenți să
nu lăsăm prea mult timp în soluție, că în acest caz s -ar putea să scoate și ceea ce nu ar trebui.
Ștergem tonerul rămas de pe suprafața cu cupru cu acetonă și ne va rămâne doar partea lucioasă
a traseelor. După aceasta putem găuri locurile lăsate pentru componente cu burghiu de 0.5 mm
sau 0.7 mm sau la cât am fixat noi. După ce am găurit toate găurile, a rămas doar să lipim toate
componentele pe placă și să încercăm cu un test, dacă am proiectat corect sau dacă sunt undeva
greșeli. [18]
Urmărind instrucțiunile de mai sus am realizat și eu placa mea de dezvoltare pentru
acest proiect. Schema electrică a plăcii se regăsește în Anexa 5. Tabelul următor reprezintă
componentele electrice utilizate pe schema electrică.
46
Tabelul 3. 5.1 Tabelul componentelor
Codul
componentelor Tipul componentelor Semnificație Valoarea
C1 Condensator ceramic 22 pF
C2 Condensator ceramic 22 pF
C3 Condensator ceramic 100 nF
C4 Condensator ceramic 100 nF
C5 Condensator ceramic 100 nF
C6 Condensator ceramic 100 nF
D1 LED 5 mm Placă alim entată Roșu
D2 LED 5 mm Permite generare tact Roșu
D3 LED 5 mm Tact Galben
D4 Bridge –
P1 Șir pini mamă A0,A1,A2,A3,A4,A5 6 pini
P2 Șir pini mamă RX,TX,D2,D3,D4 5 pini
P3 Șir pini tată P0, P1 2 pini
P4 Șir pini tată Alimentare motor 5V 6 pini
P5 Șir pini tată GND motor 6 pini
P6 Șir pini mamă D9,D10,D11,D12,D13 5 pini
P7 Șir pini tată Comandă motor 6 pini
P8 Pin tată DTR 1 pini
P9 Pin tată Pornire sursă alimentare
P12 Șir pini tată GND, GND, 5V, 5V 4 pini
P13 Șir pini mamă D5, D6, D7, D8 4 pini
Power ATX Soclu conector MOLEX Sursă de alimentare 24 pini
R1 Rezistentă 1/4W 10 KΩ
R2 Rezistentă 1/4W 1 KΩ
R3 Rezistentă 1/4W 1 KΩ
R4 Rezistentă 1/4W 1 KΩ
R5 Rezistentă 1/4W 1 KΩ
R6 Rezistentă 1/4W 1 KΩ
S1 Buton Buton Reset On/Off
U1 Microprocesor ATtiny85 -20PU 16.5 MHz
U2 Microprocesor ATmega328P -PU 16 MHz
Y1 Cristal cu cuarț 16 MHz
47
Pentru schema electrică de mai sus am obținu t placa cu traseele din figura 3.5 .2.
Figura 3.5.2 Traseele p lăcii de dezvoltare (2D și 3D)
După obținerea plăcii virtuale, am listat schema cu trasee cu imprimanta HP LaserJet
Pro MFP M26a pe o hârtie lucioasă .
Figura 3.5.3 Placa la început Figura 3.5.4 Placa după ce am curățat
48
Am curățat placa cu hârtie abrazivă de 400 după care am ș ters frumos cu acetonă
(figura 3 .5.4). Placa curățată fiind pregătită, am pus cu fața în jos pe partea din cupru al plăcii,
pe care după asta am pus fierul de calcat, încălzit la maxim, figura 3.5.5
Figura 3.5.5 Aplicarea fier ului de călcat
După 7 -8 minute am scos placa de sub fierul de călcat și am pus într -o tavă umplută cu
apă fierbinte, unde am scos atent hârtia de pe placă fără să îl zgâriez, obținând astfel placa cu
traseele cu toner topit pe ea, care o să protejeze parte a de cupru de la soluția de corodare (figura
3.5.6 -(1)). După asta , am pus placa în soluția numită clorură ferică, pentru a scoate cuprul de
pe dinafara traseului (2). Am legat cu o sârmă ca să pot să scot mai ușor și cu care în timp ce
este băgat în soluț ie, pot să -l mișc. Mișcarea aceasta ajută cuprul să se dezlipească mai ușor .
Trebuie să fi m atenți să nu lăsăm prea mult timp în soluție -acid, că după un timp avem șansa că
se dezlipește și ce nu am dori. După ce am văzut că a rămas doar traseul (cel mult 16 minute),
am scos placa din soluție, având grijă să nu ating soluția cu mână , altfel lasă urme grave în
piele . L-am spălat la chiuvetă, după care am curățat iarăși cu acetonă (3) ca să scap de tonerul
lipit și să văd doar cuprul rămas . Rezultatul se vede pe figura 3.5.6 , unde pe lângă pașii explicate
mai de sus, este afișat placa finală (4), care conține doar circuitele proiectate anterior.
49
Figura 3.5.6 Pașii de corodare a plăcii
Am obținut placa, urmează deci găurirea locurilor. Pentru aceasta avem ne voie de un
burghiu cu diagonală de 1 mm pentru fiecare component, cu excepția mufei ATX de alimentare,
unde avem nevoie de un burghiu de 1.5 mm. (figura 3.5.7 )
Figura 3.5.7 Găurirea circuitului
După ce toate găurile sunt disponibile, urmează lipirea compon entelor pe placă. Este
ultimul pas pentru obținerea plăcii circuitului. După ce am terminat și cu asta, urmează să le
legăm firele fiecare la locul lui , care sunt necesare pentru controlarea robotului, respectiv
50
motorașele robotului . După ce suntem gata și cu asta (figura 2.3.7) va urma partea de test, când
în primul punem placa sub tensiune, conectând sursa exterioară la rețea, după care conectăm
placa la calculator, pornim aplicația RobotArm și după ce am făcut conexiunea cu placa
(capitolul 4.3) și am se tat conexiunile (capitolul 4.4) încercăm să dăm comenzi robotului. Dacă
am lucrat bine, robotul va executa cerințele noastre și va aștepta să îl comandăm.
Figura 2.3.7 Placa realizată sub tensiune și conectată la robot
51
Capitolul 4. Proiectarea p rogramul ui de inte rfață PC
Aproape orice sistem, cu puține excepții, interacționează cu utilizatorul printr -o interfață
grafică. O interfață grafică este o structură de comandă ce permite utilizatorului să
interacționeze cu sistemul în manieră vizuală. Ea ar e este denumită în mod uzual GUI
(Graphical User Interface ) și conține pictograme, ferestre și alte elemente grafice . Majoritatea
interfețelor grafice au la bază un sistem de ferestre ce este alcătui t dintr -un sistem de tip WIMP
(Windows – ferestre, Icon – pictograme, Menu – meniu, Pointer – cursor).
Sistemul de ferestre nu controlează aspectul unei interfețe grafice, ci doar asigură un
cadru pe baza căruia se construiește o interfață. O parte componentă a interfeței grafice ce
controlează modul de afișare al ferestrelor este administratorul de ferestre (windows manager).
Acesta gestionează dimensiunea și poziționarea ferestrelor, gestionează și desenează butoanele
de închidere, minimizare și maximizare, meniurile ferestrei. Cu alte cuvinte administratorul d e
ferestre controlează cadrele ce împrejmuiesc o aplicație și poziția acestora. [31]
Pentru designul unei interfețe grafice se folosește un set de instrumente de control care
este alcătuit din programe și librării ce funcționează împreună cu administratoru l de ferestre.
Acest set de instrumente definește cum trebuie să arate o fereastră. Apoi administratorul de
ferestre desenează și gestionează ferestrele .
Administratorul de afișare(display manager) este ” ecranul de autentificare” care este
un program ce gestionează modul de afișare al ecranului de autentificare. Biroul de lucru
(desktop) este o fereastră “invizibilă” ce permite utilizatorului să își stabilească un fundal, să
își așeze pictogramele, etc. Acesta poate conține și alte elemente grafice cum ar fi lansatorul de
aplicații, bara de activități etc.
Mediul de lucru ( desktop environment ) este o colecție de programe ce determină
aspectul standard la interfeței grafice, de exemplu mediul Visual Studio Forms .
4.1 Mediul de dezvoltare Visual Studio – Windows Form
Multe dintre sistemele de operare creează evenimente ș i utilizează ferestre pentru a
interacționa cu utilizatorii. Î n ceea ce privește Microsoft Windows, pentru a crea o fereastră
sunt utilizate rutinele bibliotecii Win32 . Aplicația Visual Studio .NET, produsă de compania
Microsoft este un mediu de dezvoltare folosit pentru crearea de aplicații în limbajele de
programare: Visual Basic, C#, C++ si/sau J# .
52
Visual Studio.NET dispune de un editor complex de cod, care se folosește pentru
crearea, modifi carea și depanarea codului aplicației (poate fi vorba de cod Visual Basic.NET,
Visual C#.NET etc.). De asemenea, oferă un set de obiecte și instrumente cu ajutorul cărora se
pot realiza cu ușurință interfețe cu utilizatorul pentru Windows, Web, servicii WE B etc. O
facilitate a editorului de cod din pachetul Microsoft Visual Studio, foarte utilă programatorilor,
este „IntelliSense ”. Aceasta implementează autocompletarea cod ului scris de programator (prin
combinația de taste CTRL+Spațiu, sau în diverse moment e ale scrierii codului sursă), servind
de asemenea ca documentație pentru numele variabilelor, funcțiilor , metodelor etc.
Ceea ce î n programarea Windows se numește o fereastră, î n programarea .NET se
numește form. Acest form este caracterizat de un titlu, conține bare de navigare, un meniu,
toolbars (toate acestea sunt opț ionale) iar ceea ce rămâ ne se numește zona client.
Pentru a crea un form creați de fapt un obiect de tipul unei clase care moștenește clasa
Form din spațiul de nume System.Windows.Forms . Clasa Form este derivata din
ContainerControl care este derivata la rândul ei din ScrollableControl. [32][33]
4.2 Instalarea programului RobotArm Control
Ca orice aplicație mai complexă și programul meu RobotArm Control
necesită câteva fișiere externe pent ru a rula fără probleme. Pentru aceasta am
făcut un instalator, care la rândul lui conține toate fișierele necesare rulării
aplicației și după executare va dezarchiva toate acestea în locația aleasă.
Cu d ublu click pe fișierul Setup.exe rulăm instalatorul . (figura 4.2.1)
Figura 4.2.1 Instalarea programului
53
Parcurgând etapele instalatorului putem modifica calea de instalare a soft ware -ului,
putem așeza o scurtătură pe Desktop (opțional) și după instalare putem rula direct aplicația. În
caz că am instalat, d ar nu vom mai folosi, aplicația se va poate găsi în lista „Add/Remove
programs ” de unde se poate dezinstala cu ușu rință, la fel se va putea găsi î n mapa de instalare
un fișier numit Uninstall.exe.
4.3 Programul de interfață RobotArm Control
Figura 4.3.1 F ereastra principală a programului de interfață
La prima vedere mi se pare că am reușit să fac o aplicație ușor de utilizat, o interfață
prietenoasă și colorată, ilustrată bine toate funcțiile ei. Limba programului este în limba engleză,
deoarece este o lim bă internațională, cunoscută oriunde în lume și este mai ușor de exprimat
unele termeni tehnice, deoarece sunt provenite din această limbă și pentru că așa va fi pe
înțelesul mai multor utilizatori . În figura 4.3.1 le -am numerotat toate componentele ferest rei
principale pe care voi prezenta în continuare, fiecare în parte.
1
2
3
4
5
6
7
8
9
10
11
12
13
3
14
15
16
17
18
19
54
Programul a fost scris în mediul de programare Visual Studio C#.Net Windows Form,
care ne ajută să creăm o astfel de interfață pentru orice sistem. Aplicația mea poate fi rulată pe
orice sistem de ope rare Windows, pe care este instalat .Net Framework 4 sau o versiune mai
nouă și poate fi utilizat doar sistemelor cu conexiune serială COM existent , deoarece
conexiunea cu robotul se face pe baza acestui protocol de comunicare.
Pe partea de su s al ferestrei principale apare o pictogramă despre robotul controlat,
numele programului și un buton de închidere aplicație.
Am notat cu numărul (1) butoanele care schimbă mediul de lucru, în ceea ce constă
modul de control al robotului. Astfel se găsește butoanele Move și Terminal.
Cum apare pe figura 4.3.1 în modul Move, avem 6 cursoare (2) ce se pot trasa vertical
(în sus sau în jos) modificând astfel poziția motoarelor robotului. În cazul în care știm exact
poziția dorită, în cutiuțele (9) putem să trecem exact valoarea noastră, care , după confirmarea
cu tasta <Enter> , se va mișca robotul conform valoarei tastată. Pe partea dreapta găsim 7
butoane, care sunt necesare pentru programarea robotului. Cu butonul (3) trimitem robotul în
poziția de start ( home) dar nu adaugă nici o comandă în program! Cu ajutorul butoanelor ce
urmează, scriem practic programul de comandă a robotului, astfel cu butonul (4) adăugăm
poziț ia robotului care este ilustrată cu ajutorul instrumentelor (2). După fiecare poziție adăug ată
este necesar așteptarea unui timp, până când robotul se efectuează mișcarea respectivă de la
poziția anterior programată. Butonul (5) adaugă un timp de așteptare setată în fereastra apărută.
Cu butoanele (6) deschidem și închidem gripperul robotului, c u (7) putem modifica viteza de
deplasare a robotului în procente și cu (8) putem modifica orice comandă adăugată până acuma.
Se modifică doar cel selectat recent!
Figura 4.3.2 Modul „T erminal ” al programului
20
21
22
23
24
55
În figura 4.3.2 este prezentat fereastra princip ală selectând modul Terminal, când avem
posibilitatea să trimitem comenzi direct către robot. În căsuța (20) putem introduce comenzi la
care ascultă robotul și apăsând tasta <Enter> sau cu un click pe butonul (21) putem trimite
comanda către robot. Comenzi le trimise vor apărea în căsuța 22, unde putem primi și un
feedback de la robot, primind mesaje de la el. Mai avem două butoane, una (23) pentru a șterge
textul din căsuța (22) sau al doilea buton (24) cu care putem salva textul comunicat între
utilizator și robot într -un fișier text.
Facem un pas înapoi referind la figura 4.3.1 unde le -am numărat restul
instrumentelor/obiectelor utilizabile . Apăsând butonul (10) va apărea o fereastră unde putem
seta caracteristicile conexiunii seriale. Salvând setările cu butonul (11) putem conecta la placa
de dezvoltare. Indicatorul (13) ne va indica modul conexiunii, daca comunicarea este realizată
între placă și program sau daca nu s -a conectat și a intrat în mod demo sau pur și simplu nu este
conectat. Cu un click buto nul (14) apare o fereastră unde vom avea posibilitatea de a modifica
parametri robotului cum sunt: unghiul de rotație minimă și maximă a motoarelor robotului și
conexiunile realizate pe placa de dezvoltare. Cu cursorul care se poate trage orizontal (15)
putem modifica viteza robotului, valoarea fiind exprimat în procente. Urmează cu numărul (16)
o listă, de unde putem selecta modul de rulare a programului robotului, astfel putem alege între
opțiunile „Step -by-step”; „Once” și „Loop” . Căsuța (17) cuprinde to ate instrucțiunile adăugate
cu instrumentele (3),(4),(5),(6),(7) și (8). Dedesubtul căsuței găsim două butoane (18) pentru
salvarea respectiv deschiderea programului scris sau salvat deja. Mai jos găsim încă două
butoane (19) „Start” și „Stop” cu care pute m porni programul respectiv îl putem opri.
4.3.1 Realizarea legăturilor și specificarea lor în programul de interfață
Pentru a utiliza programul astfel încât ca robotul să face același lucru ce dorim noi, este
necesar să legăm toate echipamentele utilizate la locul lor și să specificăm legăturile și în
programul de comandă. Pentru asta am realizat placa de dezvoltare să putem alege ce și unde
conectăm, respectiv ca în viitor să fie ușor extensibil.
Preferat este să facem conexiunile conform standardului rea lizat, dar cine își dorește,
poate să se modifice ele. Vom începe cu realizare conexiunilor pe placa de dezvoltare astfel, pe
partea din spate al plăcii sunt montați 3 șiruri de pini de tip tată, pentru conectarea motoarelor
robotului. În capitolul 2.4 est e explicat mufa de conectare al motoarelor servo, așa că uitând pe
placa de dezvoltare observăm că primul șir de pini din spate este masa, al doilea este alimentarea
și al treilea este semnalul de comandă și la asta trebuie să fie conectat firul galben al motorului.
56
După standardul meu conexiunea se face astfel încât baza robotului să fie conectat la prima
coloană de pini (pinul numărul 3) asta fiind primul motor al robotului și așa mai departe, fiecare
motor în ordine, pe coloana ce urmează, astfel ca grip perul (ultimul motor) să fie conectat la
ultima coloană (la pinul 11). Apropiind la parte de față a plăcii pe partea dreaptă, în spatele
microcontrolerului Attiny85 avem doi pini (EN și INT). Pinul EN trebuie con ectat la pinul D4
al microcontrolerului ATMe ga328 și INT la D2. Pinul PS_ON, este pinul care pornește și
oprește sursa de alimentare, asta trebuie conectat la pinul D12. Urmează să legăm adaptorul
USB -TTL la placă realizând conexiunile conform tabelului:
CP2102 ATMega328 / Placa de dezvoltare
GND GND
TX D0
RX D1
DTR DTR
4.3.2.1 Tabelul conexiuni între CP2102 și placa de dezvoltare
Tot ce a mai rămas este să introducem mufa ATX20, mufa sursei de alimentare, în mufa
de alimentare a plăcii.
După ce am terminat cu legarea firelor urmează să specifi căm conexiunile și în
programul de interfață. Pentru asta pornim aplicația RobotArm Control și apăsăm butonul
Settings (butonul (14) din figura 4.3.1). ne apare o fereastră (figura 4.3.2.2) unde să modificăm
Figura 4.3.2.2 Fereastra Settings
numărul conex iunilor după cum am realizat și să dăm click pe butonul Save pentru a salva.
57
4.3.2 Conectare la placa de dezvoltare
În conectarea plăcii de dezvoltare, joacă un rol important adaptorul USB – TTL CP2102
prezentat în capitolul 3.4.2. Aceasta va fi modulul c are creează în orice calcu lator / laptop o
portă de comunicare COM virtual ă, pe care în continuare vom folosi pentru comunicarea cu
robotul.
La început, dacă pe placă sunt realizate conexiunile și le-am specificat și în program,
trebuie să închidem progra mul dacă este rulat. Luăm un cablu microUSB – USB cu ajutorul
căruia conectăm placa la un calculator. Daca am citit capitolul 3.4.2, acolo am notat ca , pentru
a utiliza acest adaptor, trebuie să instalăm un driver pentru el, cu care va știe calculatorul că
acest echipament este defapt un port serial virtual. După conectare intrăm în Device Manager
și ne uităm la „ Ports (COM & Serial )” dacă îl găsim pe ” Silicon Labs CP210x USB to UART
Bridge” și dacă da, ne uităm să vedem care este acest port.
Pasul următor este să deschidem aplicația RobotArm Control, și cu butonul (10) din
figura 4.3.1 setăm poarta serială, să fi e aleasă poarta noastră virtuală. Ieșim cu butonul Save
astfel salvând setările porții seriale pe baza căruia programul de interfață va comunica c u
robotul.
Ultimul pas este să dăm click pe butonul Connect (butonul (11) din figura 4.3.1).
Apăsând butonul, programul va încerca să realizeze conexiunea cu robotul. Găsim jos un
indicator care va indica daca s -a conectat sau dacă intră in modul Demo, ce ea ce va însemna că
nu s-a conectat la robot și nu va comunica cu el astfel toate mișcările și modificările noastre în
program vor fi doar simulate.
În cazul în care intră doar in mod Demo și noi ne -am asigurat că am realizat toate
conexiunile corect, că P C-ul nostru a recunoscut adaptorul USB -TTL ca și poartă serială, toate
conexiunile în program sunt specificate conform legăturii noastre, să închidem programul, să
scoatem cablul USB din calculator, să apăsăm buton Reset și să îl ținem apăsat timp de 1 -2
secunde, după care să introducem din nou cablul USB la calculator și pornind programul să
încercăm să conectăm la robot.
După ce am conectat cu succes la robot putem să începem „jocul ” cu el mișcând cu
posibilitățile descrise în capitolul 4.3.3 și după ce n e-am avansat îl putem și programa , conform
capitolului 4.3.4.
58
4.3.3 Conducerea robotului
Conducerea robotului este posibil doar după ce am reușit să conectăm el. Pentru aceasta
găsim ajutor în descrierea capitolului anterior 4.3.2. Dacă am conectat cu suc ces și vedem
indicatorul verde, putem să începem controlarea robotului.
Cum este prezentat in figura 4.3.1 avem 6 cursori (2) care se folosește pentru mișcarea
articulațiilor robotului, fiecare separat, independentă una de celălalt , cu libertate limitat ă din
cauza motoarelor servo și pentru protejarea robotului.
Această metodă de conducere după modul de execuție a deplasării se numește comandă
secvențială, când se permite realizarea mișcărilor relative ale elementelor cuplelor cinematice
conducătoare în mo d succesiv, simultan existând mișcare doar într -o singură cuplă cinematică.
Comanda secvențială prezintă avantajul unei conduceri simplificate, pentru că la un moment
dat este controlată numeric doar o singură axă. Dezavantajul constă în faptul că deplasar ea până
la punctul țintă durează foarte mult, că în timpul deplasării unei cuple, celelalte stau, astfel
rezultând o productivitate scăzută. De regulă comanda secvențială este utilizată la roboți simplii
și la manipulatoare, iar punctele țintă sunt învățat e.
La punctele țintă se poate ajunge trasând cursorii respectivi (2) sau introducând valoarea
respectivă în căsuțele (9) de pe figura 4.3.1. O altă modalitate este să intrăm în mod terminal,
unde cu comenzile specifice de deplasare al axelor, introducem ma nual punctele țintă, valoare
fiind exprimat în grade de rotație al motorului din articulația respectivă. Astfel avem
următoarele comenzi:
• B<val> (base) pentru mișcarea primei articulații (baza robotului); val ɛ [0,180]
• S<val> (shoulder) pentru a doua art iculație
• E<val> (elbow) pentru al treilea articulație
• W<val> (vertical wrist – up/down) pentru a patra articulație
• H<val> (horizantal wrist – left/right) pentru a cincea articulație
• G<val> ( gipper ) pentru a gripperul robotului
Pentru gripper mai avem î ncă două comenzi GC și GO pentru închidere respectiv
deschidere.
Viteza de deplasare ale articulațiilor se poate regla în mod terminal/manual cu comanda
V<val> unde valoarea este exprimată în procent.
59
După cum am descris mai de sus comanda secvențială, ar e un mare dezavantaj, în ceea
ce privește productivitatea, care este foarte scăzută, dar este o conducere simplificată, și ușor
de urmărit. Fiind vorba de un robot, despre care știm toate
datele, l -am făcut să fie mai deștept, în sensul că l -am învățat
să fie posibil comandarea punct cu punct. La acest mod de
conducere singura condiție impusă este ca traiectoria să nu
fie una de coliziune. Ne interesează doar trecerea obligatori
a punctului caracteristic prin pozițiile 1 și 2 (figura 4.3.3.1).
Mișcările pe fiecare axă încep deodată și se termină deodată.
Astfel, mișcarea având loc simultan pe toate axele, se obține o
creștere a productivității, dar traiectoria obținută este una oarecare, imprevizibilă, greu
exprimabil matematic și cu un aspect absolut oareca re pentru operatorul uman. Comanda punct
cu punct de cele mai multe ori, este corelată cu programarea prin învățare când se execută odată
procesul tehnologic pentru învățare și se memorează direct în coordonate le cuplelor cinematice
conducătoare punctele o bligatorii, adică punctele țintă și via. La redare se culege câte o funcție
de conducere pentru fiecare coordonată a câte unei funcții c.c.c. și se reproduce trecerea prin
puncte, iar traiectoria va fi una arbitrară. Această metodă se folosește de exemplu la sudarea
caroseriilor de autoturisme. [34]
Această comandă se poate apela folosind butonul „ Add position ”, din modul Move,
după ce am mișcat cuplele cinematice la punctul de țintă dorit. Apăsând butonul programul va
salva poziția cuplelor cinematice con ducătoare și va folosi rulând programul robotului, ca din
orice poziție actuală să facă o deplasare către acest punct c.c.c. utilizând comanda punct cu
punct. În mod manual, din Terminal, se poate apela funcția de comandă punct cu punct cu
comanda MOVE <B>:<S>:<E>:<W>:<H>:<G> unde B,S,…,G se referă la cupla cinematica
1,2,3…6 exprimată în grade de rotație . Pentru utilizarea corectă a funcției, trebuie să specificăm
gradul de rotație a fiecărui cuplă cinematică conducătoare. Dând valori, de exemplu MOVE
90:170:150:70:90:0 robotul va deplasa în poziția inițială de start, din orice poziție , utilizând
funcția de conducere polinomială de gradul 3 care ajută la sincronizarea cuplelor cinematice,
ca să se pornească împreună și să ajungă la punctul țintă împreun ă, astfel realizând o comandă
punct cu punct. După executarea comenzii baza robotului, adică prima cuplă cinematică
conducătoare va sta rotind la 90 de grade, al doilea la 170 și așa mai departe ultimul, al șaselea,
fiind gripperul care la 0 grade este des chis.
4.3.4 Programarea robotului
Figura 4.3.3.1 Comanda
punct cu punct
60
Fiind vorba de un robot industrial, care la rândul lui este un manipulator mobil cu 5
grade de comparație, trebuie să fie programabil pentru a putea fi utilizat în mai multe locuri, în
cât mai multe aplicații.
Orice robot , fie de la cel mic cu o structură simplă, până la cel mai mare cu structura lui
complexă, dacă este programabil, atunci trebuie să aibă o interfață cu care el va comunica cu
operatorul uman, care îl va programa pentru a îndeplini cerințele producătorului. Această
interfață trebuie să fie cât mai clar se poate, astfel încât orice automatist, programator să se
descurce ușor, dând comenzi robotului. După ce un program este gata scris, trebuie să fie posibil
salvarea lui, ca pentru în viitor să poate fie utili zat și eventual modificat sau pur și simplu
redeschis . În programul meu, RobotArm Control, această operație se face cu butoanele (18) din
figura 4.3.1, astfel încât cu „Save” avem posibilitatea de a salva programul pe calculator.
Fișierul salvat va avea ex tensia *.rob și sub aceste butoane va fi afișat calea unde a fost salvat
programul. Apăsând butonul „Open” vom putea deschide fișierul de program, afișând doar
fișierele cu extensia *.rob ca să nu putem greși și să deschide m orice fișier , considerat că acesta
este programul nostru salvat.
Programul scris respectiv cel deschis va fi afișat în căsuța (17) afișată pe figura 4.3.1.
Ordinea comenzilor se poate modifica cu săgețile sus/jos din partea dreaptă a căsuței, sau poate
fi șterse apăsând butonul cu coșu l de gunoi.
Pentru adăugarea unei comenzi noi avem la dispoziție cele 5 butoane , (4)..(7) . Primul
buton „ Add position ” va adăuga în program o comandă de deplasare la punctul unde sunt reglate
cuplele cinematice conducătoare, adică la poziția actuală stabil ită cu cursorii (2) sau (9). După
ce am inserat va mai apărea încă o fereastră pentru configurarea timpului de așteptare. Acest
timp este exprimat astfel încât valoarea 100 va însemna un timp de așteptare de 1s. Trebuie să
fie atât de mult, încât sub acest timp s ă poate ajungă la punctul programat, astfel pot apărea
probleme la conducere. Folosind al doilea buton avem posibilitatea de a mai adăuga timp de
așteptare după folosință. Cu al treilea și cu al patrulea buton controlăm doar gripperul, astfel
folosi m „G open ” pentru a deschide gripperul respectiv „G close ” pentru închiderea lui. După
fiecare astfel de comandă necesită adăugarea unui timp de așteptare de 70. Ultimul buton afișat
pentru adăugarea comenzilor este butonul „ Set speed ”, buton ce folosim pe ntru reglarea vitezei
de deplas are a robotului, în timpul funcționării. La reglarea vitezei, programatorul trebuie să
țină cont că robotul necesită mai mult timp de așteptare până când se termină deplasarea de la
un punct la altul astfel programând timp de așteptare mai mare.
61
A mai rămas două butoane de prezentat și anume butonul (3) „ Go home ”, care este
folosit, ca să trimitem robotul din orice poziție aflată la poziția de start inițial, fără ca această
comandă să fie adăugat la programul actual. Celălalt buton este butonul „Modify” folosit pentru
modificarea comenzii adăugate și selectate în cadrul programului robotului.
Selectarea unui comenzi din programul scris către robot, aceasta va fi trimisă robotului,
deci dacă am dat click pe o comandă care indic ă o mișcare la un punct, robotul nostru se va
deplasa la acel punct, după care eventual vom putea modifica comanda respectivă.
4.3.5 Lansarea programul ui robotului
Lansarea programului se va face apăsând butonul „START” după ce am selectat regimul
de lucru . Aplicația mea poate lansa programul scris în 3 regimuri de lucru. Acestea sunt:
• Regim manual Step-by-step când trimitem comenzile pas cu pas, fiecare separat
fiecare cum urmează după apăsarea butonului. Acest regim este folosit pentru
depanarea programul ui.
• Regim semi -automatic Once când programul scris va rula de la poziția selectată
până la sfârșit, unde se va opri, afișând un mesaj că s -a terminat programul.
• Regim automatic Loop unde se ia programul de la început și se e xecută
comenzile până la sfârșit ul programului , aceasta repetând până la apăsarea
butonului de „STOP”.
Regimul de lucru se poate selecta cu ajutorul listei (16).
Apăsând butonul START aplicația de interfață va deschide încă un fir de program
(thread) forțând procesorul oricărei calculato r să lucrează multithreading. Aceasta însemnând
că un fir al programului se va ocupa cu fereastra utilizator, deci afișează cum se modifică
parametri robotului în timpul rulării programului și răspunde corect la apăsarea butoanelor , iar
celălalt fir se va ocupa cu comunicarea robotului, trimițând comenzile în timp real.
62
Bibliografie
[1] Mihaiela Iliescu , Istoria și Filosofia roboților industriali , 2016
[2] Needham, Joseph (1991). Science and Civilization in China: Volume 2, History of
Scientific Thought. Cambr idge University Press. ISBN 0 –521-05800 –7
[3] http://blog.salvius.org/2014/01/a -history -of-robotics -yan-shi-artificer.html
[4] https://en.wikipedia.org/wiki/Su_Song
[5] William Godwin (1876). „Lives of the Necromancers”
[6] http://kerrykirsch.com/History -Iron_Hand.html
[7] http://spectrum.ieee.org/automaton/robotics/industrial -robots/george -devol -a-life-
devoted -to-invention -and-robots
[8] https://www.used -robots.com/education/the -history -of-industrial -robots
[9] http://yamaho.eu/files/roboti.pdf
[10] https://cdn.sparkfun.com/assets/learn_tutorials/5/2/6/servo -guts_1.jpg
[11] https://cdn.sparkfun.com/assets/learn_tutorials/5/2/6/servo -samples.jpg
[12] http://img.dxcdn.com/productimages/sku_148051_4.jpg
[13] https://c2.staticflickr.com/6/5472/31084586086_90cf3e51e9_o.jpg
[14] https://arduino -info.wikispaces.com/Servos
[15] https://learn.sparkfun.com/tutorials/hobby -servo -tutorial
[16] https://ebldc.com/?p=48
[17] http://www.altium.com
[18] http://www.apcc.tk/diy -projects/diy -pcb
[19] http://www.robotshop.com/media/files/pdf/hs645mg.pdf
[20] http://www.swarthmore.edu/NatSci/ceverba1/Class/e5/E5Lab2/Servo%20Hite
c%20HS -475hb%20spec.pdf
[21] zeus.nyf.hu/~elat/Elir1/Szervomotorok.doc
[22] http://kecskemetircmodell.blog.hu/2011/03/22/hogyan_mukodnek_a_szervok
[23] http://www.scritub.com/stiinta/informatica/Notiunea -de-microcontroller –
De95575.php
63
[24] Liviu Kreindler, Răducu Giuclea, „Bazele Microprocesoarelor”, 1998
București, MATRIX ROM
[25] http://www.atmel.com/Images/Atmel -42735 -8-bit-AVR -Microcontroller –
ATmega328 -328P_Datasheet.pdf
[26] http://www.atmel.com/images/atmel -2586 -avr-8-bit-microcontroller -attiny25 –
attiny45 -attiny85_datasheet.pdf
[27] http://www.visualmicro.c om/page/User –
Guide.aspx?doc=what_is_visual_micro.html
[28] http://www.visualmicro.com/page/User -Guide.aspx?doc=How -The-Tools –
Play-Together.html
[29] http://www.visualmicro.com/page/User -Guide.aspx?doc=First -steps.html
[30] https://www.sparkfun.com/datasheets/IC/cp2102.pdf
[31] https://ro.wikipedia.org/wiki/Interfa%C8%9B%C4%83_grafic%C4%83
[32] http://www.math.uaic.ro/~cgales/csharp/Curs11.pdf
[33] http://www.aut.upt.ro/~rraul/MTP/2008 -2009/Laborator1_MTP.pdf
[34] Conf.Dr.Ing.Barab ás Tiberiu, Robotic ă, 2010, Universitatea din Oradea
[35] Conf.Dr.Ing.Barab ás Tiberiu, Conducerea robo ților, 2010, Universiatea din
Oradea
64
Anexa 1. Diagrama bloc pentru microcontrolerul ATmega328p -PU
65
Anexa 2. Diagrama pinilor pentru microcontrolerul ATmega328P -PU
66
Anexa 3. Diagrama bloc pentru microcontrolerul AT tiny85
67
Anexa 4 . Diagrama pinilor pentru microcontrolerul AT tiny85
68
Anexa 5 . Schema electrică a circuitului de control RobotArm
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 de diplomă [608424] (ID: 608424)
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.
