Controlul Unui Robot Industrial cu Un Smartphone cu Android
CUPRINS
INTRODUCERE
CAPITOLUL 1. Roboți industriali
1.1. Clasificarea roboților industriali
1.2. Caracteristici ale roboților industriali
1.3. Aplicații ale roboților industriali în construcția de automobile
1.3.1. Roboții industriali utilizați în sectoarele de sudare
1.3.2. Roboții industriali utilizați în sectoare de turnare sub presiune
1.3.3. Roboții industriali utilizați în sectoarele de presare la rece și forjare
1.3.4. Roboții industriali utilizați în sectoarele de tratamente termice
1.3.5. Roboții industriali utilizați în sectoarele de vopsire
1.3.6. Roboții industriali utilizați în deservirea mașinilor-unelte și paletizare
1.4. Unitățile centrale de procesare
1.5. Sistemul de acționare al roboților industriali
1.5.1. Acționarea pneumatică
1.5.2. Acționarea hidraulică
1.5.3. Acționarea electrică
1.6. Sistemul de senzori ai roboților
1.7. Sistemele de comunicare ale roboților industriali
CAPITOLUL 2. Prezentarea robotul industrial “TOSHIBA” realizat
2.1. Structura robotului industrial “TOSHIBA”
2.2. Corpul robotului industrial “TOSHIBA”
2.3. Schema electrică a robotului industrial “TOSHIBA”
2.4. Modulul Bluetooth RN-42
2.5. Prezentarea smartphone-ului – SAMSUNG Galaxy SIII mini
CAPITOLUL 3. Software-ul Arduino Uno V3
3.1. Instalarea mediului de programare Arduino și încărcarea unui program
3.2. Mediul de programare Arduino
3.3. Lista instrucțiunilor Arduino utilizate pentru programarea robotului industrial
CAPITOLUL 4. Arduino Uno V3
4.1. Prezentarea platformei de dezvoltare Arduino Uno V3
4.2. Programarea platformei de dezvoltare Arduino Uno V3
4.3. Schema electrică a platformei de dezvoltare Arduino Uno V3
4.4. Arduino Uno – prezentare hardware
4.4.1. Descrierea pinilor
4.4.2. Modalități de alimentare a platformei Arduino Uno V3
CAPITOLUL 5. Microcontrolere
5.1. Arhitectura microcontrolerelor
5.2. Dispozitive I/O
5.3. Memoria microcontrolerelor
5.4. Microcontroler-ul ATmega328
CAPITOLUL 6. Implementarea programelor
6.1. Implementarea programului pentru smartphone
6.2. Implementarea programului pentru platforma Arduino Uno V3
CONCLUZIE
BIBLIOGRAFIE
INTRODUCERE
Visul de a crea oameni artificiali si ființe artificiale este la fel de vechi ca si umanitatea. Roboti au ajutat la evolutia fiintei umane simplificand munca fizica. Domeniile lor de aplicare se lărgesc mereu, ei putând fi utilizați în medicina, constructii, administratie locala, agricultura, hoteluri si restaurante, in gospodarie, industrie, transporturi, în sfera serviciilor, în cunoașterea oceanului și a spațiului cosmic, în cercetarea științifică etc. Termenul robot (din cehă robota) a fost utilizat de Josef Čapek și Karel Čapek în lucrările lor de science fiction la începutul secolului 20. Cuvântul robot dateaza de peste 4 mii si este de origine slavă și se poate traduce prin: muncă, clacă sau muncă silnică. Karel Čapek a descris în piesa sa R.U.R. din anul 1921 muncitori de asemănare umană, care sunt crescuți în rezervoare. Denumirea de astăzi a creaturilor lui Čapek este de android. Roboții sunt sisteme mecanice, comandate de sisteme de conducere ale acestora, fiind realizați cu scopul de a executa, operații asemănătoare acțiunilor omului și nu numai.
Robotul este in principiu un operator virtual sau mecanic insă companiile constructoare definesc in moduri diferite termenul de robot.Asfel Japan Industrial Robot Association spune că: „Robotul este un dispozitiv versatil și flexibil care oferă funcții de deplasare similare celor ale membrelor umane sau ale cărui funcții de deplasare sunt comandate de senzori și de mijloace proprii de recunoaștere.”. General Motors afirmă că: ”Robotul este un echipament fizic cu funcționare programabilă, capabil să efectueze anumite operații și secvențe de operații orientate spre manipularea de piese, scule, subansamble.” Cei de la Robot Institute of America și anume: „Robotul este un manipulator multifuncțional, reprogramabil, destinat deplasării materialelor, pieselor, sculelor, sau altor dispozitive specializate prin mișcări variabile, programate pentru a îndeplinii anumite sarcini”. Primele modele de mașini pot fi mai degrabă numite automate (provenind din grecescul automatos, care se mișcă singur). Acestea nu puteau executa decât câte un singur obiectiv, fiind constrânse de construcție.Matematicianul grec Archytas a construit, conform unor relatări, unul dintre aceste prime automate: un porumbel propulsat cu vapori, care putea zbura singur. Acest porumbel cavernos din lemn era umplut cu aer sub presiune. Acesta avea un ventil care permitea deschiderea și închiderea printr-o contragreutate. Au urmat multe modele dealungul secolelor. Unele înlesneau munca, iar altele deserveau la amuzamentul oamenilor.
Cu descoperirea ceasului mecanic din secolul XIV s-a deschis calea unor posibilități noi și complexe. Nu mult după aceea au apărut primele mașini, care semănau îndepărtat cu roboții de azi. Posibil era însă numai ca mișcările să urmeze una după alta, fără să fie nevoie de intervenția manuală în acel sistem.
Anul 1956 este considerat ca anul nașterii a robotului industrial. George Devol a depus candidatura în acest an în SUA pentru un patent pentru "transferul programat de articole". Câțiva ani după aceea a construit împreună cu Joseph Engelberger UNIMATE. Acest robot de cca. două tone a fost mai întâi introdus în montarea de iconoscoape pentru televizoare, găsindu-și apoi drumul în industria automobilă. Programele pentru acest robot au fost salvate sub formă de comenzi direcționate pentru motoare pe un cilindru magnetic. Din acest moment se introduc roboți industriali ca UNIMATE în multe domenii ale producției fiind permanent dezvoltați mai departe pentru a putea face față cererilor complexe care li se impun.
George Devol a înregistrat în anul 1954 primul patent pentru un robot industrial. Roboții industriali din prezent nu sunt de obicei mobili. După forma și funcția lor, domeniul lor operațional este restrâns. Ei au fost introduși pentru prima oară pe linia de producția a General Motors în1961. Roboții industriali au fost folosiți prima dată în Germania la lucrări de sudură începând din 1970.
Printre roboții industriali se numără și roboții de portale, care sunt introduși în producția de wafere, în instalații de turnat colofoniu sau la măsurări. În prezent roboții industriali execută și probleme de maniabilitate.
Apariția deasă a roboților în film și literatură a atras atenția științei asupra acestui tip de mașini. Domeniul științific, care se ocupă de construcția roboților se numeșterobotică. Termenul a fost folosit pentru prima dată în 1942 de Isaac Asimov în cartea sa, Runaround. Un domeniu general teoretic științific, care se ocupă de roboți, nu există. Acestea sunt mai ales subdomenii ale informaticii.
In situația folosirii in scopuri pașnice, robotii industriali pot influienta pozitiv calitatea vietii oamenilor prin inlocuirea lor in spatii: periculoase, cu conditii necunoscute de exploatare, conditii de mediu daunatoare omului etc.
Atunci cand vorbim despre roboti trebuie sa aducem in discutie si inteligența artificială care este un termen tehnic provenit din limba engleză: Artificial Intelligence, prescurtat AI, care desemnează un domeniu de cercetare în cadrul informaticii. În vorbirea curentă este un produs rezultat în urma desfășurării acestei activități.
Definiția cea mai acceptată a inteligenței artificiale a fost dată de John McCarthy în 1955: “o mașină care se comportă într-un mod care ar putea fi considerat inteligent, dacă ar fi vorba de un om”.
În informatică, în general, avem doua tipuri de inteligența artificială:
inteligență artificială puternică (strong AI): prin aceasta se înțelege o inteligență artificială, de obicei bazată pe un computer, care chiar poate "gândi" și este "conștientă de sine".
inteligență artificială slabă (weak AI): o inteligență artificială care nu pretinde că poate gândi, putând însă rezolva o anumită clasă de probleme într-un mod mai mult sau mai puțin "inteligent", de exemplu cu ajutorul unui set de reguli.
O trăsătură des întâlnită a inteligenței artificiale este aceea că sistemul respectiv este capabil să învețe, cu sau chiar fără ajutoare externe, cu scopul de a se îmbunătăți permanent.
Scopul acestei lucrări este acela de a descrie modul în care se realizează comanda unui robot industrial, echipat cu o platformă de dezvoltare Arduino Uno V3 și a unei interfețe Bluetooth, prin intermediul mediilor de programare Eclipse și Arduino.
CAPITOLUL 1. Roboți industriali
Robotul industrial – reprezintă un sistem electro-pneumo-hidro-mecanic care este dotat cu mai multe grade de libertate, capabil să execute automat și autonom operații de manipulare sub controlul unui sistem de comandă echipat cu memorie programabilă. [1]
Figura 1.1. Roboți industriali FANUC (Japonia) [2]
Clasificarea roboților industriali
Principalele criterii de clasificare și tipologia roboților industriali:
După forma mișcării, roboții industriali pot fi:
Figura 1.2. Robot cartezian [4]
1. Robot cartezian (fig.1.2.)-este robotul al cărui braț operează într-un spațiu definit de coordonate carteziene; optimizarea sistemelor flexibile de producție (SFP) prin robotizare;
2. Robot cilindric – este robotul al cărui braț operează într-un spațiu definit în coordonate cilindrice;
3. Robot sferic (sau polar) – este robotul al cărui braț operează într-un spațiu definit în
coordonate sferice sau polare;
4.”Prosthetic robot” – este un manipulator care are un braț articulat;
5. Roboți în alte tipuri de coordonate – care sunt definiți în mod corespunzător.
După informația de intrare și modul de învățare, criteriu după care roboții se clasifică în:
1. Manipulator manual – este actionat direct de catre om;
2. Robot secvențial – are anumiți pași ce „ascultă” de o procedură predeterminată. Acesta poate fi:
– Robot secvențial fix – la care informația predeterminată nu poate fi schimbată facil.
– Robot secvențial variabil – la care informația predeterminată poate fi modificată ușor.
3.Robot repetitor (robot playback) (fig. 1.3.). La început omul învață robotul o procedură de lucru, robotul memoreaza procedura, apoi o poate repeta de câte ori se cere;
4.Robot cu control numeric. Robotul execută operațiile cerute în conformitate cu informațiile numerice pe care le primește despre poziții, succesiuni de operații și condiții;
5.Robot inteligent – este cel care își decide comportamentul pe baza informațiilor primite prin senzorii pe care îi are la dispoziție și prin posibilitățile sale de recunoaștere.
După numărul gradelor de libertate ale mișcării robotului (2 – 7 grade de libertate plus unele mișcări suplimentare: orientarea dispozitivului de prehensiune, prinderea, desprinderea obiectului manipulat etc.) roboții industriali pot fi:
1.Roboți cu un numar mic (2-3) de grade de libertate;
2.Roboti cu un numar mediu (4-5) de grade de libertate;
3.Roboti cu un numar mare (6-7) de grade de libertate.
Dupa metoda de control roboții industriali pot fi:
1.Manipulatoare simple (manipulator manual si robot secvențial ):dispun in general de 2-3 grade de libertate, iar miscarile sunt controlate prin dispozitive si functioneaza dupa principiul „tot sau nimic”,capacitatea si supletea fiind limitate.
2.Roboti programabili (robot repetitor si robot cu control numeric):au un numar mai mare de grade de mobilitate decat 3.De obicei robotul este independent de mediu, fiind lipsit de capacitati senzoriale si lucrand in bucla inchisa;
3.Roboti „inteligenti”, sunt dotati cu capacitatii senzoriale , lucreaza in bucla inchisa, au sisteme de coordonare intreorganele de executie si „simturi”.
Dupa caracteristicile de comanda – exista patru tipuri de bază pentru roboți industriali:
1.Robot cu servocomandă si conturare;
2.Robot cu servocomanda punct cu punct;
3.Robot fara servocomanda, programabil;
4.Robot neprogramabil, cu dispozitiactionat direct de catre om;
2. Robot secvențial – are anumiți pași ce „ascultă” de o procedură predeterminată. Acesta poate fi:
– Robot secvențial fix – la care informația predeterminată nu poate fi schimbată facil.
– Robot secvențial variabil – la care informația predeterminată poate fi modificată ușor.
3.Robot repetitor (robot playback) (fig. 1.3.). La început omul învață robotul o procedură de lucru, robotul memoreaza procedura, apoi o poate repeta de câte ori se cere;
4.Robot cu control numeric. Robotul execută operațiile cerute în conformitate cu informațiile numerice pe care le primește despre poziții, succesiuni de operații și condiții;
5.Robot inteligent – este cel care își decide comportamentul pe baza informațiilor primite prin senzorii pe care îi are la dispoziție și prin posibilitățile sale de recunoaștere.
După numărul gradelor de libertate ale mișcării robotului (2 – 7 grade de libertate plus unele mișcări suplimentare: orientarea dispozitivului de prehensiune, prinderea, desprinderea obiectului manipulat etc.) roboții industriali pot fi:
1.Roboți cu un numar mic (2-3) de grade de libertate;
2.Roboti cu un numar mediu (4-5) de grade de libertate;
3.Roboti cu un numar mare (6-7) de grade de libertate.
Dupa metoda de control roboții industriali pot fi:
1.Manipulatoare simple (manipulator manual si robot secvențial ):dispun in general de 2-3 grade de libertate, iar miscarile sunt controlate prin dispozitive si functioneaza dupa principiul „tot sau nimic”,capacitatea si supletea fiind limitate.
2.Roboti programabili (robot repetitor si robot cu control numeric):au un numar mai mare de grade de mobilitate decat 3.De obicei robotul este independent de mediu, fiind lipsit de capacitati senzoriale si lucrand in bucla inchisa;
3.Roboti „inteligenti”, sunt dotati cu capacitatii senzoriale , lucreaza in bucla inchisa, au sisteme de coordonare intreorganele de executie si „simturi”.
Dupa caracteristicile de comanda – exista patru tipuri de bază pentru roboți industriali:
1.Robot cu servocomandă si conturare;
2.Robot cu servocomanda punct cu punct;
3.Robot fara servocomanda, programabil;
4.Robot neprogramabil, cu dispozitive de transfer „pick and place”.
Dupa tipul de comanda si performanta intelingentei artificiale, robotii industriali se clasifica in:
1.Roboții industriali de generația 1 – acționează pe baza unui program flexibil, dar prestabilit de programator și care nu se poate schimba in timpul executiei operatiilor;
2. Roboții industriali de generația a 2-a – se caracterizeaza prin faptul ca programul flexibil prestabilit de programator poate fi modificat in masura restransa, in urma unor reactii specifice ale mediului;
3. Roboții industriali de generația a 3-a – au insusirea de a-si adapta singuri folosindu-se de niste dispozitive logice, in masura restransa propriul program la conditiile concrete ale mediului ambiant, vederea optimizarii operatiilor pe care le executa. [1]
Dupa modul de construcție se clasifica în: [3]
1.Roboți de constructive standard neputându-se interveni pentru modificarea substantial a structurii lor; exemple: roboții japonezi ROBITUS RA și ROBITUS RB ,robotii din familia UNIMATE-S.U.A.
2.Roboți “articulți” în structura cărora intră elementele artificiale între ele de unde rezultă lanțuri cinematice spatiale deschise (Type 80 vertical – Franța) și lanțuri cinematice spațiale închise (TRALLFA – Norvegia-fig.1.4).
3.Roboți de construcție modulară, de obicei constituiți din module de rotație,module de orientare, module de transmisie, elemente de legatura etc. Exemple: robotii din familia KAUFELDT).
Caracteristici ale roboților industriali [3]
Caracteristicile tehnice ale roboților industriali cuprind: precizia, valorile deplasărilor realizabile, dimensiuni, numărul gradelor de libertate, timpul de acționare, spațiul de lucru, masa robotului, viteza, capacitatea sistemului de control și comandă,condițiile de lucru, sarcina transportabilă etc.
1.2.1. Capacitatea de ridicare
Este marimea masei maxime pe care o poate prinde si menține în orice poziție robotul industrial; cele mai uzuale modele de manipulatoare și roboti industriali au capacitatea de ridicare cuprinsă intre 10 – 160kg.
1.2.2. Gradul de mobilitate
Acesta se determină ca fiind capacitatea robotului de a executa deplasări regionale, globale și locale. Deplasarea regional a brațului se realizează în limitele pozitiei de lucru a robotului fiind determinate de raza maxiă de deservire. Deplasarea globală se realizează pe distanțe care depășesc raza maxima de deservire atunci când e necesară deplasarea robotului de la o mașină-unealtă la alta. Deplasarea locală este aceea prin care se realizează aducerea piesei manipulate în poziția necesară.
1.2.3. Zona de lucru
Zona de lucru – spatial în care în timpul funcționării se regăsesc mecanismele de execuție ale robotului, fiind caracterizată de:
-volumul de lucru, de fapt volumul maxim în care se poate găsi brațul robotului industrial în timpul funcționării;
-volumul de lucru util reprezentând volumul corespunzător spațiului în care brațul realizează lucru mecanic util în concordanță cu programul robotului;
-raza maxim[ de deservire, represent\nd distanța cea mai mare dintre axa de simetrie a corpului robotului până la axa brațului în poziția în care este încă posibilă prinderea și menținerea piesei de masă maximă.
1.2.4. Numărul gradelor de libertate
Reprezintă numărul posibilitaților de mișcare a brațului robotului industrial fără a lua în considerare gripperul. Acesta trabuie stabilit asfel încât să aibă minumul necesar pentu a corespunde destinației robotului.
1.2.5. Schema cinematică structurală
Aceasta determină posibilitățile funcționale și cinematice ale roboților industriali.
Cinematica manipulatoarelor și roboților industriali influiențează construcția și posibilitățile funcționale. Analiza cinematicii roboților industriali se face după tipul mișcarilor (rotație sau translație), numărul gradelor de libertatesi succesiunea acestora. Numărul gradelor de libertate ale unui robot determină o varietate mare de variante posibile de scheme cinematice structurale acest lucru îngreunând alegere schemei cinematice structurale optime.
Pentru a ușura analiza alegerii corecte a cinematicii, robotii se pot împărti după rolul funcțional: cinematica baitului, cinematica brațului, cinematica articulațiilor.
1.2.6. Cinematica baitului
Luând în considerare destinația funcțională și exemplele de construcții de roboți existenți, se consideră că este de ajuns dacă baitul are un singur grad de libertate caracteristic sistemului de deplasare sau zonei de lucru.
1.2.7. Cinematica brațului
Gradele de libertate ale mișcărilor care asigură deplasarea spațială a mâinii mecanice pentru un batiu nedeplasabil caracterizează cinematica brațului robotului. Dualitatea permite brațului robotului să se deplaseze în “zona umbrită” a obstacolelor și obiectelor, aceste proprietăți sunt prezente la laturile cinematice compuse din două cuple cinematice de rotație cu axe paralele sau cuple cinematice de translație și de rotație cu axe perpendiculare penrtu că cupla de transmisie o percede pe cea de rotație.
1.2.8. Cinematica articulației
Aceasta e caracterizată de gradele de libertate ale mișcărilor care asigură orientarea pieselor transportate, deplasarea piesei din articulație având un character local. Alegerea cinematicii articulației depinde de cinematica brațului adică de caracterul deplasărilor piesei din poziția finală. Articulația brațului trebuie să asigure menținerea orientării inițiale a piesei si deasemenea să permit realizarea unor rotiri ale piesei.
Aplicații ale roboților industriali în construcția de automobile
În prezent în lume, cu scopul de a contribuii la îmbunătățirea productivitații și a calității, reducerii costurilor, îmbunătății condițiilor de muncă se utilizează roboții industriali care au capacitatea de a se adapta mai bine în anumite condiții, chiar extreme, asfel avem:
Figura 1.5. Exemplu mod utilizare roboți în domeniul auto [8]
1.3.1 Roboții industriali utilizați în sectoarele de sudare
În ultima vreme una din principalele utilizării a roboților industriali pe plan mondial a fost în domeniul sudării prin puncte a caroseriilor de automobile. În prezent există o mare varietate de piese care se sudează. Piesele alcătuite din tablă subțire și semigroasă se pretează bine la sudarea robotizată. Sudarea prin puncte se aplică în multe domenii dar a câștigat un vast teren de aplicații și în domeniul auto la sudarea caroseriilor. Sudarea cu arc electric se utilizează de obicei la produsele realizate în serie mare, dar se regăsește și în aplicațiile la serii mici de fabricație. La ora actuală activitatea se concretizează prin linii și chiar fabrici de montaj complet robotizate care sunt coordonate de un calculator de proces central și câțiva operatori care au rolul de a supraveghea și de a intervenii atunci când e cazul.
În cazul sudării cu arc electric, este necesar ca roboții să asigure o deplasare continuă cu o viteză variabilă în limite largi și o precizie bună de poziționare a capului de sudare față de axa îmbinării. Există mai multe tipuri de asfel de roboți: robot de sudare în CO2, tip braț articulat care este deservit de un manipulator care are două posturi de lucru. Sistemul de avans al sârmei fiind fixat într-o consolă pe sursa de sudare; robot de sudare de tip coloană unde pistolul de sudare este fixat pe antebraț existând posibilitatea poziționării prin rotire; robot pentru sudare MIG – MAG este cel cu braț articulat, acesta este cuplat cu panoul de comandă, sursa de curent și butelia de gaz având și posibilitatea deplasării pe o cale de rulare protejată printr-un burduf; robotul de sudare tip turelă, acesta putând deservi un manipulator
cu două posturi de lucru, prin pivotare și rotație. Cele mai utilizate metode în instalațiile industriale de sudare utilizate pentru fabricație în cadrul liniilor de producție în prezent sunt tehnica Metalului cu Gaz Inert (MIG) sau sudura Metal cu Gaz Activ (MAG). Procedeul Metalului cu Gaz Inert (MIG) utilizează efectul de protecție al gazelor inerte care este combinat cu alimentarea continuă cu electrod metalic. [7]
Figura 1.6. Roboți industriali UNIMATE – SUA [9]
Deasemenea procesul de sudare electrică prin presiune în puncte este foarte răspândit în industria auto și nu numai în special la îmbinarea nedemontabilă a tablelor de grosimi reduse. Cei mai frecvent utilizați roboți utilizați în acest proces sunt roboții dezvoltați de firma UNIMATION INC. – S.U.A. din seria 4000 (fig. 1.6.). Aceștia având sistemul lor propriu de coordonate de tip sferic. Datorită capacității portante ridicate și a volumului de lucru util mare acești roboți au fost utilizați pe scară largă la automatizarea flexibilă utilizându-se seriile specializate UNIMATE 6000. Aceștia având posibilitatea de a fi montați și vertical efectul fiind necesitatea unui spațiu de instalare mult mai redus fiind dotați cu instalația de sudare prin presiune înglobată în braț, această soluție foarte eficientă fiind preluată și de alte firme inclusiv din România. Roboții cartezieni cuprind și mecanisme de orientare deosebit de eficiente și evoluate. Ei combind avantajul unui spațiu de lucru mare, furnizat de sistemul cartezian, cu cel al flexibilității ,accesibilității și vitezei ridicate care sunt specifice roboților în coordonate polare. O altă categorie de roboți frecvent întâlnită în acest tip tip de aplicații este reprezintă de roboții în coordonate polare.
1.3.2. Roboții industriali utilizați în sectoare de turnare sub presiune
În ceea ce privește introducerea utilizării roboților domeniul industrial al turnării sub presiune a fost un pionier. O dată cu trecerea timpului tot mai multe firme se ocupă cu turnarea în piese a metalelor, utilizeazând roboți atât pentru a scoate muncitorii din locurile de muncă periculoase dar și pentru a putea face față competiției pe piață prin introducerea procedeelor moderne de turnare, asfel numărul roboților Unimate aflați în lucru în domeniul turnării sub presiune este de departe superior numărului de roboți care lucrează cu alte procedee de turnare. O dată cu utilizarea roboților în acest domeniu industrial s-a înțeles și faptul că trebuiesc dezvoltate sisteme de turnare în forme mai durabile și mai fiabile, dacă se dorește ca robotul să fie utilizat la nivelul cel mai ridicat al performanțelor sale. Într-un atelier practica standard de turnare sub presiune constă din a urma următoarea succesiune de operații: turnare, evacuare, răcire, debavurare. [7]
1.3.3. Roboții industriali utilizați în sectoarele de presare la rece și forjare
Robotul își poate folosi capacitatea de a manipula metalul incandescent, trecerea de la un program de fabricație la altul realizându-se destul de ușor prin schimbarea dispozitivului de prehensiune și a programului. De obicei se utilizeaz[ robo’i industriali simpli cei cu 3 – 4 grade de libertate cunoscându-se că manipularea se poate executa, frecvent, într-un plan. Datorită specificului operației de forjare se impun condiții speciale dispozitivului de prehensiune al robotului, acesta trebuie executat din materiale speciale, având în vedere faptul că manipulează obiecte la temperaturi mari, ce pot ajunge până la 1 200 OC, uneori este neaparată răcirea dispozitivelor de prehensiune și, de mare importanță, izolarea lor eficientă de restul structurii robotului, deoarece de cele mai multe ori, dimensiunea piesei forjate diferă mult de dimensiunea inițială a piesei fiind recomandă utilizarea de dispozitive de prehensiune duble. [7]
1.3.4. Roboții industriali utilizați în sectoarele de tratamente termice
După cum s-a prezentat în pararafele anterioare la turnarea sub presiune, forjare, presare robotul a demonstrat că își poate plasa “mâna mecanică” într-un cuptor, într-o matriță sau în spațiul de lucru al oricărei alte mașini, cu o precizie înaltă pentru a apuca/depune o piesă, acestea sunt mișcările utilizate și în cazul tratamentelor termice, fiind evident faptul că roboții nu simt căldura materialului pe care îl apucă pentru a-l transfera din cuptor sau baia de
tratament termic într-o baie de răcire sau într-o nișă.
1.3.5. Roboții industriali utilizați în sectoarele de vopsire
Dacă suprafețele de vopsit sunt simple, atunci se utilizează manipulatoare industriale secvențiale cu 2 sau 3 grade de libertate, dar pentru forme mai complexe și de serie mare, se impune adesea soluția robotizării. Chiar și în cazul folosirii roboților, locul de muncă se plasează în cabină de protecție care este dotată cu instalație de aspirare pentru a împiedică răspândirea gazelor nocive. Roboții și-au găsit
aplicația în diverse domenii ale protejării suprafețelor din care se menționează: aplicarea peliculei de vopsea pe elementele caroseriei, în special pe partea de jos a caroseriei automobilelor; aplicarea vopselei pe diferite componente (ale automobilelor, aparatelor electronice etc.) înaintea asamblării;aplicarea de email lichid pe căzi de baie;aplicarea peliculei de glazură pe instalații sanitare;înmuierea pieselor în email lichid;aplicarea materialului fotosensibil pe peretele ecranului de televizor.
1.3.6. Roboții industriali utilizați în deservirea mașinilor-unelte și paletizare
Manipulatoarele secvențiale sunt utilizate de mult timp pentru acest tip de operație și în special atunci când mișcările de efectuat sunt simple și seriile de fabricație importante, datorită reducerii semnificative a timpilor ajutători. Un braț motorizat folosit pentru încărcarea/descărcarea cu semifabricate/piese prelucrate sau pentru schimbarea sculelor așchietoare este în multe cazuri integrat construcției mașinilor unelte cu comandă numerică, mișcările brațului fiind programate în același timp cu operațiile mașinii. Mașinile-unelte combinate în procesele de producție cu roboți industriali formează sisteme flexibile de producție. Principalul avantaj al utilizării robotului este micșorarea timpului necesar pentru
înlocuirea piesei sau sculei.Roboții pot realiza și alte funcțiuni, asociate posturilor de prelucrare prin așchiere, cum ar fi: scoaterea pieselor defecte cu ajutorul senzorilor vizuali, așezarea pe palete de transport, așezarea pieselor în dispozitive de control, încărcarea și descărcarea de mici mașini. [7]
Unitățile centrale de procesare
Un robot industrial poate avea de îndeplinit sarcini variate, începând cu cele mai ușoare și terminând cu cele mai complexe. În funcție de tipul de sarcini atribuite unui robot industrial, descompunerea și procesarea sarcinilor în acțiuni simple pe care robotul le poate executa necesită prezența unei unități centrale de procesare, care se poate afla pe robot (engl. onboard) sau la distanță conectată de acesta prin diverse metode (engl. offboard). Un dezavantaj major, în cazul în care necesitățile computaționale ar fi mari, s-ar putea ca o unitate centrală de procesare să nu existe astfel încât să se încadreze în limitele fizice și geometrice dorite ale robotului, caz în care aceasta nu poate fi instalată. Bineînțeles că o unitate de procesare onboard are și aventaje printre care: în cazul unor probleme de comunicare, robotul poate acționa în continuare autonom; dispar întârzierile asociate comunicației între o unitate de procesare off-board și componentele electronice ale robotului; unitățile de procesare onboard au acces direct la hardware-ul robotului, în timp ce unitățile offboard trebuie să apeleze la un anumit protocol care să interfațeze între componente și unitate.
Desigur că soluția cea mai bună este ca robotul să poate funcționa atât în regim de comunicare cu alte unități de procesare mai performante, care pot asigura necesitățile computaționale pentru sarcini mai complexe cât și autonom prin intermediul unei unități de procesare onboard.
În practică unitățile de comunicare onboard se aleg în așa fel încât să aibă suficientă putere de calcul pentru a îndeplini majoritatea sarcinilor simple. Unitățile offboard sunt de obicei reprezentate de calculatoare personale (PC). [11]
Sistemul de acționare al roboților industriali
În sistemul de acționare al unui robot industrial sunt cuprinse totalitatea surselor energetice ale robotului și deasemenea elementele de control direct ale acestora. Asfel prin sistem de acționare se înțelege ansamblul motoarelor și convertoarelor prin care se obține energia mecanică necesară deplasării robotului și dispozitivele suplimentare ce controlează acest transfer energetic.
Sistemul de acționare e alcătuit din:
*sursă primară de energie;
*sistem de conversie al energiei primare în energie mechanică;
*sistem pentru transmisia energiei mecanice la articulația corespunzătoare;
*control al parametrilor caracteristici ale acestor sisteme.
Structura generală a unui sistem de acționare (fig. 1.8.).
Figura 1.8. Structura uniu sistem de acționare
Cele mai uzuale sisteme de acționare folosesc următoarele surse primare de energie:
*energie pneumatică;
*energie hidraulică;
*energie electrică;
1.5.1. Acționarea pneumatică
Principala caracteristică la aceste dispozitive este utilizarea aerului ca fluid compresibil al sistemului de acționare.
Avantajele utilizării sistemelor pneumatice:
*simplitatea echipamentului de acționare;
*robustețea dispozitivelor utilizate;
*raportul putere/greutate relative ridicat;
*rezistența la suprasarcini de valori mari;
*nepoluarea mediului de lucru;
*sisteme de control simple.
Compresibilitatea aerului face ca aceste sisteme de control să fie utilizate de obicei la elementele care lucrează pe principiul “binar” fără a fi neaparat un reglaj intermediar.
Pentru controlul poziției unui element mecanic aceste sisteme pneumatice sunt rar utilizate datorită performanțelor slabe rezultate în comparație cu cele electrice sau hidraulice, aceste rezultate slabesunt datorate compresibilității aerului care introduce un timp de propagare, de întârziere, în dinamica dispozitivului.O deficiența ete constituită și de faptul că acest tip de sisteme folosește controlul după debit, acest parametru nefiind indicat întotdeana pentru controlul pneumatic al unei mișcări, de aceea, este recomandată utilizarea unui control al presiunii care duce la o îmbunătățire importantă a performanțelor dar este mult mai costisitor și complex.
Motoarele pneumatice sunt: liniare și rotative (cu membrană sau cu piston). Motoarele liniare (cilindrii) au o gamă largă de aplicații și se construiesc într-o gamă tipo-dimensională extrem de diversificată.
Clasificare generală a cilindrilor după tipul constructiv:
*cilindri cu simplă acțiune (simplu efect):
* cu revenire cu arc;
*cu revenire sub acțiunea unei forte rezistente.
*cilindri cu dublă acțiune (dublu efect):
*cu tijă unilaterală;
*cu tijă bilaterală.
*cilindri în tandem:
*cu amplificare de forță;
*având cursa în două trepte.
Figura 1.9. Cilindru cu simplă acțiune [12]
Cilindrii cu simplă acțiune (cilindrii cu simplu efect) (fig.1.9.) aceștia se utilizează doar acolo unde pe cursa de avans (sau cea de retragere) este necesară dezvoltarea forței motoare: dispozitive de fixare și de prindere, împingerea pieselor, opritoare, ștanțe, etc.În acest mod, doar o cameră a cilindrului este alimentată cu aer comprimat, revenirea în poziția inițială se realiză sub acțiunea resortului. Forța teoretică de avans (neglijând frecările interne) este dată de presiunea ce acționează pe suprafața pistonului din care se substrage forța de reacțiune a arcului. Forța arcului este calibrată în așa fel încât aduce înapoi pistonul fără sarcină până la poziția sa inițială. De regulă se utilizează de pentru curse de pana la 100 mm.
Figura 1.10. Cilindru cu dublă acțiune [12]
Cilindrii cu dublă acțiune (cilindrii cu dublu efect) (fig. 1.10.) aceștia se utilizează cu precădere acolo unde ambele curse trebuie să dezvolte forță motoare. Din punct de vedere constructiv prezintă două orificii pentru aer comprimat, prevăzute în capacele cilindrului.
Cilindrii în tandem (fig. 1.11.) alcătuiesc un ansamblu (tandem) compus din doi cilindri cu dublă acțiune într-o singură unitate cu scopul amplificării forței exercitate de cilindru (până la dublu). Acest cilindru este utilizat acolo unde este nevoie de putere mărită și gabarit diametral relative redus impus de condițiile de instalare. [12]
Figura 1.11. Cilindru în tandem [12]
1.5.2.Acționarea hidraulică
Acest tip de acționare se poate utiliza la acționări simple pentru roboți industriali mijlocii și greii, utilizați manipulării sarcinilor în sectoare calde, în minerit, în turnătorii etc.
Motoarele hidraulice sunt utilizate pe post de elemente de execuție în cadrul sistemelor electrohidraulice și hidraulice de acționare formând partea finală, de putere cu rol dublu, informațional și de vehicule a unor puteri importante de la sursa de energie hidraulică la sarcină.
Acționarea hidraulică se bazează pe transformarea energiei potențiale a fluidului aflat sub presiune în energie mecanică de deplasare rectilinie alternativă sau de mișcare de rotație a elementului acționat.
Caracteristici de bază în cadrul sistemelor automate electro-hidraulice:
*să aibă o amplificare în presiune ridicată;
*să asigure un raport putere-greutate foarte mare;
*să aibă caracterisitci de accelerare și decelerare cât mai apropiate și constante pe tot domeniul de funcționare;
*să dezvolte forțe sau cupluri și viteze de acționare, compatibile cu cerințele sarcinii.
Elementele de execuție rotative asigură o mare stabilitate a mișcării, într-un larg domeniu de varietate a mărimilor de ieșire (0.1 rot/min – 3000 rot/min) deasemenea un raport cuplu activ-moment de inerție, superior acționărilor electrice de aceeași putere. Elementele de execuție hidraulice funcționează pentru presiuni cuprinse între 210 – 800bar, debite până la 800 l/min și puteri până la 3500 kW și asigură cupluri active până la 8000 – 9000 Nm. Elementele de execuție se numesc motoare volumice liniare și asigură o mișcare de translație cu o viteză constantă a sarcinii. În (fig. 1.12.) apare o reprezentare axonometrică a acestor motoare.
Figura 1.12. Secțiunea unui cilindru hidraulic (motor volumic liniar) [12]
Acestea transformă energia de presiune a lichidului, furnizat de o pompă volumică, în energie mecanică care este asociată unei mișcari de translație necesară pentru acționarea sarcinii. Frânarea cilindrilor la capăt de cursă apare atunci când viteza pistoanelor este mai mare de 20 mm/sec și la acționarea unor sarcini mari, aceasta ducând la uzură prin lovirea repetată a capacelor. Pentru a evita asfel de procese se folosește frânarea pistoanelor la cap de cursă prin mijloace hidraulice sau mecanice.
Performanțe dinamice și statice a motoarelor hidraulice rotative:
*gabarit mic pe unitatea de putere (cuplu motor ridicat la un gabarit mic);
*rigiditate hidraulică superioară motoarelor liniare;
*randament hidraulic ridicat, datorită pierderilor volumice foarte mici.
Figura 1.13. Secțiune printr-un motor hidraulic rotativ cu pistoane [12]
Clasificarea motoarelor rotative după mecanismul care creează camerele de volum variabil:
*motoare rotative cu pistoane radiale;
*motoare rotative cu pistoane axiale;
*motoare rotative cu palate culisante;
*motoare orbitale;
*motoare rotative cu roți dințate.
Cele mai răspândite elemente de execuție hidraulice cu mișcare de rotație sunt motoarele hidraulice cu pistoane axiale, prezentând performanțe energetice și dinamice superioare în comparatie cu alte variante constructive datorită distribuției simetrice a elementelor mobile față de axa de rotație. Schema de principiu a unui motor hidraulic rotativ cu pistoane axiale și bloc înclinat este reprezentată în (fig. 1.13.). [13]
1.5.3. Acționarea electrică
Principalele avantaje ale acționărilor electrice:
*sistemele de control sunt precise, sigure și relativ ușor de conectat la o conducere numerică de nivel înalt;
*sursa de energie electrică primară este ușor de găsit;
*pote fi asigurată funcționarea cu baterii;
*nu poluează.
Motoare de curent continuu
Avantajul important al acționării cu motoare de curent continuu este că momentul creat este practic independent de viteza și poziția motorului el depinzând doar de câmpul înfășurărilor și curentul din armături. Atunci când înfășurările de câmp sunt înlocuite de un magnet permanent, momentul dezvoltat va fi proporțional cu valoarea curentului din armături și deasemenea cu tensiunea aplicată.
Pentru mișorarea greutații motoarelor s-au folosit procedee cum ar fi: eliminarea înfășurărilor de excitație prin utilizarea motoarelor cu magnet sau mișorarea greutății rotorului prin motoarele disc. Utilizarea prepoderentă a motoarelor de curent continuu este datorată existenței sistemelor performante de control timp în care motoarele pas cu pas oferă beneficii în controlul în buclă deschisă în cadrul operațiilor de poziționare.
Principalul dezavantaj al acestor acționări este reprezentat de greutatea componentelor, raportul putere – greutatesau moment – greutate fiind mai mic decât în cazul acționărilor hidraulice.
Pentru utilizarea motoarelor de curent continuu în acționarea roboților trebuie ‚inut cont de următoarele aspecte:
*un sistem mecanic care să realizeze conversia mișcării de rotație în mișcare de translație;
*un sistem mecanic pentru blocarea sistemului
*un sistem de control utilizând tahogeneratoare de poziție.
Motoarele de current continuu sunt alcătuite din două părți: sistem de excitație și înfășurare dispusă într-o armature rotorică.
În (fig. 1.14.) este reprezentată schema echivalentă simplificată a motorului de curent continuu cu excitație separată.
Figura 1.14. Schema echivalentă simplificată a motorului de curent continuu cu excitație separată [14]
În acționarea roboților controlul în tensiune al turației se poate realiza prin două metode: redresoare comandate și convertoare cc – cc. Ambele metode sunt utilizate frecvent în controlul roboților deoarece au o literature foarte bogată care abordează această problematică.
Redresoare monofazate în punte, se utilizează de obicei la tensiuni și puteri mici, controlul redresării este obținut printr-o punte aflată în circuitul exterior al redersorului fiind montat motorul de cc.
Convertoarele de tensiune continua, asigură o tensiune continuă care este aplicată la intrare, în impulsuri dreptunghiulare de tensiune și la ieșire în așa fel încât valoarea medie a tensiunii de ieșire se poate modifica în funcție de factorul de umplere al impulsurilor.
Motoare pas cu pas
Aceste motoare sunt sisteme sincrone care realizează o corelație directă între mărimea comandată și poziția obținută, ele asigură conversia directă a semnalului de intrare care este dat sub formă numerică într-o mișcare de poziționare unghiulară prin cumulări incrementale, datorită acestei proprietăți motoarele pas cu pas au o largă utilizare în toate sistemele de poziționare în buclă deschisă. Printre dezavantajele motoarelor pas cu pas se numără: variția cuplului cu poziția rotorului, randament scăzut, accelerații și decelerații discontinue, puteri mici etc.
Principiul de funcționare al unui motor pas cu pas (fig. 1.15.)
Statorul este alcătuit din patru poli, iar rotorul este alcătuit dintr-un magnet bipolar. Atunci când se alimentează înfășurările 1 – 3, rotorul se va deplasa într-o poziție în care fluxul magnetic prin aceste înfășurări este maxim, asfel acesta se va alini pe axa înfășurărilor 1 – 3. Atunci când se alimentează înfășurările 2 – 4, rotorul se va roti cu ±90, iar sensul de rotație va depinde de polaritatea aplicată, până se va alinia cu noua înfășurare. În cazul în care nu avem niciun semnal de alimentare a înfășurărilor, rotorul va ocupa o poziție bine determinată și se va alinia cu unii din polii statorului fără să mai conteze polaritatea.
Cuplul dezvoltat în acest tip de motor va de- Figura 1.15. Principiul de funcționare
pinde bineînțeles de poziția rotorului, iar valorile de al unui motor pas cu pas [14]
cuplu obținute sunt relativ mici.
Motoarele pas cu pas cu reluctanță variabilă constituie o soluție tehnologică superioară.
Aceste motoare se împart, după soluțiile constructive utilizate în:
*motoare cu structură monostatorică (o singură unitate stator – rotor);
*motoare cu structură polistatorică.
Structura monostatorică reprezintă o soluție mai avantajoasă datorită simplității construcției, acest tip de motoare pot fi realizate în două moduri: cu număr de dinți în rotor mai mare decât în stator și cu număr de dinți egal pe stator și rotor.
Motoarele pas cu pas polistatorice sunt realizate sub forma unor structuri statoric – rotorice sunt fixate mecanic în aceeași carcasă dar sunt independente din punct de vedere magnetic și electri, la acest tip rotorul și statorul au același număr de dinți. Pentru realizarea rotației este necesară decalarea subsistemelor statorice sau rotorice, radial unele față de celelalte. Subsistemele rotorice sunt montate pe același ax, dar separate din punct de vedere magnetic. [14]
Sistemul de senzori ai roboților
Sistemul senzorial al unui robot reprezintă ansamblul tuturor senzorilor amplasați pe structura mecanică și ale căror semnale fuzionate servesc controlului adaptiv al robotului.
Senzorul este un dispozitiv ce convertește o mărime fizică într-o mărime electrică (semnal electric). Conversia marimi fizice cu ajutorul senzorilor se realizează cu scopul de a obține informații despre mărimea aplicată la intrare reprezentată sub formă electrică, acești senzori, din punct de vedere constructiv, au la bază componentele sistemelor de achiziții și distribuții a datelor.
Structura de principiu a unui sistem de achiziții de date pentru utilizări generale este reprezentată în (fig. 1.16.).
Figura 1.16. Structura de principiu a unui sistem de achiziții de date [14]
Sistemul este organizat pe două niveluri: unul pentru achiziția datelor și unul pentru distribuția datelor. Semnalele care urmează să fie achiziționate sunt furnizate de către mai mulți senzori (S1,S2,S3), care interacționează cu procesul deservit. Prima oară semnalele sunt condiționate și apoi convertite sub formă numerică, condiționarea cuprinde operații cum ar fi: filtrare, amplificare, modificarea nivelului componentei continue etc, în așa fel încât semnalul condiționat să corespundă domeniului de intrare al convrtorului analog numeric (A/N).Conversia A/N presupune întâi eșantionarea semnalului urmată de conversia A/N propriu-zisă, aceste operații fiind efectuate de circuitele cuprinse în blocul Convertor A/N.
Filtrul antialias, așezat înaintea convertorului A/N are un comportament de filtru trece-jos, având rolul de a limita spectrul semnalului aplicat la intrarea convertorului A/N.
Nivelul inferior din această arhitectură are rolul de a furniza la ieșire semnalele necesare pentru comanda actuatorilor (A1, A2, A3) pornindu-se de la informații numerice furnizate de blocul procesor, cu acest scop se utilizează un bloc convertor numeric analogic (N/A), apoi un filtru de reconstituire și circuite de condiționare. O serie de intrări/ieșiri digitale completează funcționalitatea sistemului.
Funcțiile multiple pe care le asigură blocul procesor: guvernează funcționarea întregului sistem, realizează o preprocesare locală a datelor achiziționate, asigură interfațarea cu calculatorul central de pe nivelul ierarhic superior.
Prin dezvoltarea sistemului senzorial al robotului se urmărește modelarea mediului de lucru, acesta fiind un aspect foarte important în interacțiunea dintr robot și mediu.
Clasificarea senzorilor după criteriul naturii informațiilor
*senzori vizuali; de regulă sistemul de vedere artificială este alcătuit dintr-un echipament de sine stătător analiză și prelucrare a imaginii;
*senzori de gabarit;
*senzori de proximitate;
* senzori tactili;
*senzori forță-moment;
*senzori de rost, etc.
Pentru utilizarea industrială, senzorii utilizați în roboticătrebuie să cuprindă următoarele caracteristici:
*histerezis redus pentru caracteristica de transfer;
*să fie robust, fiabil șicompact;
*liniaritate caracteristicii de transfer suficient de bună;
*preț redus de cost.
Informațiile de la sistemul senzorial al robotului se obțin prin: monitorizare, adică urmărirea stărilor senzorilor prin bucle de program rulate în permanent într-un mod invizibil pentru programul principal, fiind incluse instrucțiuni specifice de acțiune în funcție de o anumită valoare sau stare al unei mărimi furnizate de către un senzor și prin metoda întreruperilor care oferă posibilitatea unei utilizări mult mai eficiente a resurselor de calcul.
Senzorii de gabarit – oferă informații despre ordinal de mărime al obiectelor din mediu și în funcție de acestea se vor putea lua decizii cu privire la modalitățile de apucare și la evitarea coliziunilor.
Senzorii de proximitate – furnizează informații cu privire la pozițiile relative ale obiectelor, asfel se poate verifica dacă o operație a fost sau nu executată corect, dacă o poziție este sau nu corectă, se poate evita coliziunile cu alte obiecte.
Senzorii tactili – aceste dispositive transformă acțiunea fizică de contact în semnale electrice care conțin informații cum ar fi: existența și poziția obiectului în dispozitivul de prehensiune, mărimea forței de strângere, unii senzori tactili scot în evidență tendința de alunecare a obiectului.
Senzorii forță-moment, informațiile furnizate de acest tip de senzori pot ajuta la comanda acțiunii robotului prin dezvoltarea unei anumită forțe după o anumită direcție, sau pot fi luate decizii de efectuarea unor anumite acțiuni în funcție de o valoare de prag a unei forțe monitorizate de un senzor cu scopul de a lua decizii de efectuare a unor anumite acțiuni în funcție de o valoare de prag sau de a limita această stare de solicitare. [14]
1.7. Sistemele de comunicare ale roboților industriali
Roboții industriali trebuie să aibe abilități de comunicare fie cu alți roboți din mediu fie cu un operator uman, pentru a raporta dacă o anumită sarcină dată a fost îndeplinită sau nu cu succes.
Sistemele de comunicare ale roboților industriali pot fi de 2 tipuri: cu fir și fără fir.
Comunicația cu fir este modalitatea cea mai simplă de transfer de date între robot și operator. Prin această metodă dispar o serie de probleme asociate transmisiei fără fir, cu dezavantajul îngrădirii mobilității robotului. Avantajul principal al sistemelor de comunicare cu fir este acela că, pe lângă datele transmise între robot și operatorul uman, se mai poate transmite și curent electric, eliminând astfel necesitatea unei baterii onboard pe robot și mărind asfel autonomia robotului.
Un dezavantaj major al folosirii unui sistem de comunicare cu fir, ar fi faptul că spațiul de lucru al robotului va fi limitat de lungimea maximă admisibilă a cablului, mai mult cablul ar putea interfera cu senzorii, aceștia putând raporta valori eronate. Din aceste motive, nu se recomandă folosirea sistemelor de comunicare cu fir decât în cazurile în care folosirea tehnologiilor fără fir ar fi o problemă (de exemplu pentru vehicule robot din mediul acvatic).
Sistemele de comunicare fără fir se folosesc de o serie de tehnologii de transmitere a datelor prin aer (engl. wireless), printre care se regăsesc: transmisia prin unde în spectrul bluetooth, infraroșu, WiFi, NFC etc.
Mecanismele de transmitere a datelor prin unde infraroșu se pot utiliza doar la distanțe relativ mici și funcționează doar în linie dreaptă în câmp deschis, orice obstacol aflat între dispozitivele de transmisie-recepție obturând semnalul. Un alt factor dăunător al tehnologiilor de transmitere în infraroșu este lumina solară.
Tehnologiile WiFi sunt deja răspândite în domeniul calculatoarelor personale (PC), și oferă un suport complet de integrare al roboților în rețele de calculatoare. Un dezavantaj al acestor tehnologii ar fi faptul că sunt consumatoare de energie.
Tehnologiile Bluetooth oferă servicii similare cu dispozitivele WiFi doar că distanța maximă admisibilă între emițător – receptor este mult mai mică decât în cazul WiFi. La ora actuală, tehnologiile Bluetooth se folosesc, de obicei, în interiorul clădirilor, unde distanța maximă fără repetor este de maxim 20m. [15]
CAPITOLUL 2. Prezentarea robotul industrial
“TOSHIBA” realizat
2.1. Structura robotului industrial “TOSHIBA”
Scopul acestei lucrari după cum reiese din titul și după s-a mentionat în introducere este acela de a realiza controlul unui robot industrial prin intermediul smartphone-ului cu Android dotat cu tehnologia bluetooth.
Datorită faptului că motoarele robotului sunt alimentate cu baterii “TOSHIBA” am ales ca și robotul să poarte același nume.
Figura 2.1. Robotul industrial ”TOSHIBA”
Robotul industrial “TOSHIBA” (fig. 2.1.) are patru cuple de mișcare și un gripper, aceste patru cuple sunt de rotație. Brațele robotului sunt acționate de cinci motoare, care sunt alimentate de patru baterii (TOSHIBA LR20C) de 1.5 V (toatal 6 V). Robotul are o greutate de 660g el putând ridica o greutate maximă de 100g la înălțimea maximă de 38cm, dintre specificațiile acestuia mai amintim: deschiderea maxima a gripper-ului (4.50cm), unghiul maxim de rotație stânga/dreapta (270o), unghiul maxim de rotație din încheietura de jos (180o), unghiul maxim de rotație din încheietura de mijloc (300o), unghiul maxim de rotație din încheietura de sus (120o). Controlul, din punct de vedere software, se realizeaza după cum am mai amintit, prin intermediul unui smartphone cu Android (SAMSUNG Galaxy SIII mini) sau cu orice alt dispozitiv Android dotat cu bluetooth. Pentru a evita eventuale pagube, când se ating limitele fizice, am utilizat patru limite bazate, în program pe “0 logic-microaționat”, asfel înainte de a se atinge o anumită limită fizică va avea loc un contact pe brațul respectiv al robotului care nu va mai permite mișcarea în aceea directive.
Robotul este format dintr-un braț robotic KSR10 (fig. 2.3.) fără consola manuală cu joistick, o placă de bază (fig. 2.2.) pe care se gasește partea de acționare (fig. 2.4.) a robotului care funcționează pe post de driver, acesta avand rolul de a comanda cele cinci motoare de curent continuu situate în corpul robotului, o parte de comandă și control (fig. 2.5.), construită în totalitate de către mine, pe care se găsesc platforma de dezvoltare open-source Arduino Uno V3 (fig. 4.1.) și un modul bluetoooth RN-42 (fig. 2.8.).
Figura 2.2. Placa de bază a robotului industrial ”TOSHIBA”
După cum se observă în (fig. 2.1.) conexiunea fizică între brațul robotic și placa de bază se realizează prin fire, tot pe placa de baza (fig. 2.2.) observăm, lipită prin bandă dubul-adezivă placuța Arduino Uno V3 care este conectată la partea de acționare (fig. 2.4.) a robotului, modulul bluetooth RN-42 care este conectat la placuța Arduino Uno V3 și un întrerupător care oprește alimentarea plăcii de bază atunci când robotul nu este utilizat.
2.2 Corpul robotului industrial ”TOSHIBA”
În realizarea proiectului am plecat de la un braț robotic KSR10 (fig. 2.3.) căruia i-a fost eliminată consola manuală cu joistick.
Figura 2.3. Braț robotic KSR10 [16]
Având în vedere faptul că telefoanele cu Android sunt în trend la ora actuala și sunt aproape la îndemâna orcui m-am gândit să folosesc un smartphone pe post de “telecomandă” care să comunice cu robotul propriu-zis prin bluetooth, eliminînd asfel firul și consola manuală cu joistick pe care robotul le avea din fabrică, în acest mod am obținut o serie de avantaje dintre care cele mai importante ar fi: mărirea distanței de operare (până la 10m), libertatea de mișcare a operatorului, controlul realizându-se bineînțeles prin intermediul interfeței bluetooth nemaifiind incomodat de fire. Un alt avantaj notabil ar fi faptul că aplicația concepută de mine pentru Android, functionează de la cea mai veche și pâna la cea mai noua versiune de Android asfel avem posibilitatea de a o instala pe orice dispozitiv cu Android.
La o privire asupra robotului (fig. 2.3.) se observă cele patru cuple de rotație ale acestuia și gripperul toate fiind acționate de cinci motoare de curent continuu fiecare având două sensuri de rotație asfel, unul este responsabil de mișcarea de rotație stanga/dreapta de la baza robotului, trei motoare responsabile cu ridicarea/coborârea brațelor din trei încheieturi și unul care închide/deschide gripper-ul.
Robotul a avut, de la o lucrare anterioară, o placa de bază pe care se regăsea doar partea de acționare (fig. 2.4.) a motoarelor de current continuu, cu relee, tranzistorare cu rezistențe care sunt legate la ieșirile Arduino Uno V3 și microîntrerupătoare pentru încercarea manuală a funcționării robotului.
releu tranzistor
microîntrerupător rezistență
Figura 2.4. Partea de acționare a robotului industrial ”TOSHIBA”
Pentru a reuși să realizez proiectul pe care mi-am propus am utilizat partea de acționare (fig. 2.4.), a motoarelor de current continuu, provenită după cum am mai specificat de la o altă lucrare la care am adăugat pe placa de bază și o partea de comandă și control (fig. 2.5.), compusă din platform de dezvoltare Arduino Uno V3 și modulul bluetooth RN-42.
Figura 2.5. Partea de comandă și control a robotului
2.3. Schema electrică a robotului industrial ”TOSHIBA”
Figura 2.6. Schema electrică a robotului industrial ”TOSHIBA”
Arduino Uno V3 este “creierul” acestui robot și reprezintă partea de commandă și control al sistemului electric.
Conexiuni:
Arduino Pin GND – masa motoarelor M1, M2, M3, M4, M5 ( GND)
Arduino Pin GND – Pin GND al modulului bluetooth
Arduino Pin 5V – Pin 5V al molulului bluetooth
Arduino Pin 0 RX – Pin TX al molulului bluetooth
Arduino Pin 1 TX – Pin RX al molulului bluetooth
Arduino Pin 2 – Motor M5+ (pentru rotire la stânga)
Arduino Pin 3 – Motor M5- (pentru rotire la dreapta)
Arduino Pin 4 – Motor M2+ (pentru ridicare din articulația de sus)
Arduino Pin 5 – Motor M2- (pentru coborâre din articulația de sus)
Arduino Pin 6 – Motor M3+ (pentru ridicare din articulația de mijloc)
Arduino Pin 7 – Motor M3- (pentru coborâre din articulația de mijloc)
Arduino Pin 8 – Motor M4- (pentru ridicare din articulația de jos)
Arduino Pin 9 – Motor M4+ (pentru coborâre din articulația de jos)
Arduino Pin 10 – Motor M1+ (pentru închidere gripper)
Arduino Pin 11 – Motor M1- (pentru deschidere gripper)
Deoarece mi-au mai rămas doar doi pini (Pin 12 și Pin 13) digitali liberi și eu aveam nevoie de patru pentru cele patru limite (S2, S3, S4, S5) am ales să utilizez patru intrări analogice (ANALOG IN) ale Arduino și anume: A0, A1, A2, A3, asfel:
Arduino A0 – Limită S5
Arduino A1 – Limită S4
Arduino A2 – Limită S3
Arduino A3 – Limită S2
Logica de programare a limitelor (S2, S3, S4, S5):
0V(0)……………………….0.8V(200) – 0 logic – microacționat
3.2V(800)……………………5V(1024) – 1 logic
Aceste limite utilizează valori ale curenților cuprinse între 0 și respectiv 5V în programul “Arduino” 0-1024, asfel pentru o valoare mai mare de 0.8V sau 200 în programul “Arduino” se va permite mișcarea în caz contrar nu se va permite mișcarea.
După cum observăm în (fig. 2.6.) pe placa de bază avem și 4 leduri care au roulul de a ne informa atunci când o anumită limită este atinsă, asfel, de exemplu, atunci când este atinsă limita S2 se va aprinde ledul corespunzător acesteia.
2.4. Modulul Bluetooth RN-42
Modulul Bluetooth achiziționat de mine era la fel ca cel din (fig. 2.7.) fără pini, iar eu i-am lipit pini (cu ajutorul pistolului de lipit) pentru a-l face “plug and play” (fig. 2.8.) asfel fiind mult mai facil și fiabil.
Figura 2.7. Modul Bluetooth Figura 2.8. Modul Bluetooth
fără pini [17] “plug and play”
Exemplu de cod program:
Acest program trimite un mesaj la calculator!
int cnt=0; //counter
void setup() {
serial.begin(9600); //initializare
}
void loop() {
cnt++;
serial.print(“Arduino te salute!”); //printare mesaj
serial.println(cnt); //printare counter
delay(1000); //asteapta o secunda
}
Pentru acest modul Bluetooth avem două posibilitați de configurare și anume:
Metoda folosită de mine
1.Auto-configurare “Baud Rate”-folosind conexiunea serial clasică:
Modulul Bluetooth vine din fabrică cu rata de transfer configurată la 115 200. În acest caz dacă dorim să-l folosim la un baud mai scazut folosim codul de mai jos, acesta utilizează o conexiune serială clasică între Arduino și Bluetooth. Un avantaj al acestei conexiuni fată de cea Software Serial este acela că în acest mod comunicarea dispune de un buffer hardware, iar un dezavantaj ar fi faptul că placa Arduino nu poate fi programată atunci când Bluetooth-ul este conectat. [17]
void setup() {
Serial.begin(115200);
Serial.print("$$$");
delay(100);
Serial.println("U,9600,N");
Serial.begin(9600);
}
void loop() {
}
Conexiuni Hardware
Bluetooth CTS-I – nu se conectează
Bluetooth VCC – Arduino 5V
Bluetooth GND – Arduino GND
Bluetooth TX-O – Arduino RX
Bluetooth RX-I – Arduino TX
Bluetooth RTS-O – nu se conectează
2. Auto-configurare “Baud Rate” – folosind Software Serial
La fel ca și în cazul precedent vine configurat din fabrică la rata de transfer 115 200.Dacă dorim sa îl utilizăm la un baud rate mai scăzut putem folosi codul următor:
#include "SoftwareSerial.h";
int bluetoothTx = 2;
int bluetoothRx = 3;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
Serial.begin(9600);
bluetooth.begin(115200);
bluetooth.print("$$$");
delay(100);
bluetooth.println("U,9600,N");
bluetooth.begin(9600);
}
void loop()
{
if(bluetooth.available()) {
char toSend = (char)bluetooth.read();
Serial.print(toSend);
}
if(Serial.available()) {
char toSend = (char)Serial.read();
bluetooth.print(toSend);
}
}
Conexiuni Hardware
Bluetooth CTS-I – nu se conectează
Bluetooth VCC – Arduino 5V
Bluetooth GND – Arduino GND
Bluetooth TX-O – Arduino Digital 2
Bluetooth RX-I – Arduino Digital 3
Bluetooth RTS-O – nu se conectează
Specificatii ale modulului Bluetooth:
– modem Bluetooth clasa 2
– atinge 10 metri ca distantă de transmisie
– consumă în medie 25 mA
– conexiune criptată
– frecvența 2.4~2.524 GHz
– tensiune de alimentare 3.3 – 6 V
– capabil de rate de transfer între 2400-115200 bps (configurată la 115200 bps)
– temperatura de operare – 40 ~ + 70 C
– antena inclusă pe placă.
Figura 2.9. Structura modulului Bluetooth RN-42
2.5. Prezentarea smartphone-ului – SAMSUNG Galaxy SIII mini
Smartphone-ul utilizat de mine și anume SAMSUNG Galaxy SIII mini (fig. 2.10.) este practic telecomanda robotului industrial “TOSHIBA” comunicând cu acesta prin intermediul interfeței Bluetooth.
Acesta mai este cunoscut sub numele de SAMSUNG I8190.
Figura 2.10. SAMSUNG Galaxy SIII mini [18]
Specificații tehnice importante: [19]
*bluetooth – v4.0 cu A2DP, LE, EDR;
*Java emulator MIDP;
*baterie: Li-Ion 1500 mAh;
*versiune soft: Android OS v4.1.2. (Jelly Bean);
*tip display: Super AMOLED, 16M culori;
*dimensiune display: 480×800 pixeli, 4.0 inchi (~233 ppi densitatea pixelilor);
*GPRS, EDGE, HSDPA 14.4 Mb/sec, HSUPA 5.76 Mb/sec, GPS, NFC, USB v2.0, Wi-Fi;
*senzori: de proximitate, giro, accelerometru, compas;
*browser – HTML5;
CAPITOLUL 3. Software-ul Arduino Uno V3
3.1. Instalarea mediului de programare Arduino și încărcarea unui program
Etape care tebuiesc urmate pentru instalarea programului pe un calculator și conexiunea acestuia cu o placă Arduino Uno:
*achiziționarea unei platforme Arduino și a unui cablu USB;
*descărcarea mediului de dezoltare Arduino;
*conectarea platformei Arduino la calculator;
*instalarea driverelor;
*lansarea programului Arduino;
*deschiderea exemplului de program blink;
*selectarea modelului de placă utilizat;
*selectarea portului serial;
*verificarea erorilor (opțional);
*încărcarea programului.
Descrierea etapelor care trebuiesc urmate.
Dacă avem o placă Arduino Uno V3 și un cablu USB prin care se realizează conexiunea unei imprimante cu un calculator, descărcăm software-ul Arduino de pe Internet de pe siteul oficial Arduino, după care dezarhivăm fișierele descărcate și păstrăm structura folderelor. La fel ca și modelele Mega, Duemilanove și modelul de placă Arduino Uno se alimentează automat prin conexiunea USB, sursa de alimentare fiind selectată printr-un jumper, o piesă de plastic mică care este potrivită pe doi din cei trei pini ai portului USB și a mufei de alimentare jack. Trebuie să facem o verificare pentru acest jumper pentru a ne asigura că acesta este potrivit pe cei pini apropiați de portul USB.
Conectăm placa Arduino la calculator prin cablul USB, moment din care led-ul verde de pe placă (denumit PWR) ar trebui să se aprindă intermitent și așteaptăm ca Windows să înceapă procesul de instalare și să il finalizeze.
Intrăm în programul Arduino, iar pentru exemplu deschidem un sketch cu denumirea blink prin accesarea meniului File – Examples – 1.Basics – Blink, program ce comandă aprinderea intermitentă a led-urilor Rx și Tx de pe placă, în condițiile stabilite de acesta. Pentru a selecta modelul de placă pe care îl utilizăm trebuie să accesăm meniul Tools – Board așa cum apare în (fig. 3.1.). Aici vedem mai multe modele de placă Arduino din care alegem doar una, în cazul nostru – Arduino Uno.
Figura 3.1. Selectarea modelului de placă Arduino utilizat
Următorul pas pe care trebuie să îl urmăm constă în alegerea portului serial al calculatorului la care este conectată placa Arduino. Accesăm opțiunea Serial Port din meniul Tools (instrumente) selectând portul corespunzător. De obicei selectăm portul COM3 pentru că, COM1 și COM2 sunt utilizate de obicei pentru alte aplicații hardware.[20] Pentru a afla care port corespunde plăcii deconectăm placa de la PC, accesăm locația menționată în rândurile de mai sus pentru selectarea portului și observăm că portul care corespunde plăcii respective nu mai figurează printre celelalte porturi care erau afișate când placa era conectată. Conectăm din nou placa la calculator și portul corespunzător acestuia va fi afișat, astfel se poate determina portul potrivit.
Atunci când suntem în acest punct verificăm existența erorilor din fereastra cu butoane pentru a nu stopa etapa următoare și anume cea de „Upload” (încărcare) care se realizează tot din fereastra cu butoane, pentru a încărca programul Blink. Atunci când totul este în regulă se va afișa în fereastra de mesaje „Done uploading”, iar după câteva secunde led-urile Rx și Tx se vor aprinde intermitent și deasemenea led-ul portocaliu de la pinul 13 de pe placă se va aprinde o dată.
3.2. Mediul de programare Arduino
Mediul de programare Arduino, poate rula cu sisteme de operare cum ar fi Windows, Mac OS X și Linux fiind construit în mediul Java bazat pe procesarea avr-gcc și pe alte software-e open-source (disponibile orcărui utilizator gratuite), acest mediu de programare facilitează scrierea programului și încărcarea acestuia prin interfața I/O.
Figura 3.2 Interfața mediului de dezvoltare Arduino
Platforma Arduino necesită, pentru a fi utilizată, implementarea unui program în memoria sa, program care să-i comunice exact ce anume să facă și cum să facă. Implementarea programului se realizează prin intermediul mediului de programare Arduino, în cazul plăcii utilizate pentru robotul industrial varianta este Arduino 1.0.5 .
Interfața mediului de dezvoltare Arduino (fig. 3.2.) conține un editor de texte pentru scrierea programelor (cod), o consolă de text, o zonă pentru mesaje, o bară de instrumente cu butoane pentru funcții comune și o serie de meniuri. [20]
Programele create în mediul de dezvoltare Arduino se numesc „sketch-uri” acestea fiind scrise în editorul de texte și salvate ca fișiere cu extensia „ .ino” . În acest editor de texte sunt valabile funcțiile binecunoscute copy/paste/cut și funcțiile de căutare și înlocuire a textelor.
Utilizatroul primește un feed-back în zona de mesaje în timp ce acesta utilizează funcții ca și save, export și deasemenea afișează și erorile care pot să apară în timpul încărcării programelor, iar consola de text afișează texte caracteristice plăcii Arduino, care pot include erori complete și alte informații. De exemplu în partea dreaptă jos a ferestrei este afișat la ce model de placă este conectat la momentul respectiv și prin care port serial, în cazul nostru așa cum se vede și în fig. 3.2. fiind vorba de placa Arduino Uno conectat prin portul COM8. Butoanele din bara de instrumente permit încărcarea și verificarea programelor, crearea, deschiderea și salvarea programelor (sketch-urilor).
3.3. Lista instrucțiunilor Arduino utilizate pentru programarea robotului industrial
Programele Arduino se pot împărți după tipul instrucțiunilor în trei grupe: instrucțiuni de structură, de valori (constante sau variabile) și instrucțiuni pentru funcții. Există numeroase instrucțiuni destinate mediului de programare Arduino, datorită acestui fapt în continuare se vor prezenta doar câteva dintre acestea și mai ales cele utilizate în programul creat pentru funcționarea robotului industrial.
Instrucțiuea „void” face parte din categoria instrucțiunilor de valori și este utilizat numai în declarații de funcții. Indică faptul că funcția nu așteaptă nici o returnare de informație de la funcția care s-a făcut apelarea. [21]
Exemplu 1. sintaxă (pin, mode) echivalent cu (2, input).
În acest exemplu s-a configurat pinul 2 care se va comporta ca o ieșire. Instrucțiunea „while” determină ca secvența de program să se repete la nesfârșit atâta timp cât valoarea dintre paranteze o să fie true (adevărată). „DigitalWrite” este o instrucțiune care atribuie unui pin configurat ca intrare sau ieșire starea de HIGH sau LOW. De exemplu dacă pinul este configurat ca ieșire (output), pentru starea HIGH va avea tensiune de 5V sau 3.3V pe placă, iar pentru starea LOW 0V (masă). „if” (condiționare) este în conjuncție cu un operator de comparație, adică testează dacă o anumită condiție a fost atinsă. [21]
Exemplu 2. if ( variabilă > 15)
{
// execută comandă
}
În exemplul de mai sus programul verifică dacă variabila are o valoare mai mare de 15, dacă răspunsul este „true” atunci programul îndeplinește sarcina aflată între cele două acolade.
Instrucțiunea „analogWrite” atribuie o valoare analogică (semnal PWM) unui pin și poate fi utilizat pentru a controla viteza unui motor. După o apelare a instrucțiunii „analogWrite” pinul respectiv va genera constant un semnal dreptunghiular specificat, până în momentul în care se face o altă apelare a instrucțiunii. Frecvența semnalului PWM este de aproximitv 490 Hz.
„delay” este instrucțiunea care stopează programul pentru perioada de timp care este specificată de programator în milisecunde.
Sintaxa: delay (ms)
„attachInterrupt” , așa cum și numele acestei instrucțiuni sugerează, apelează o funcție specificată atunci când apare o întrerupere externă, și înlocuiește fucția anterioară care a fost atașată la întrerupere.
„detachInterrupt” dezactivează întreruperea specificată.
Exemplu 3: // acțiunile sunt efectuate în cadrul funcțiilor „setup” și „loop” (buclă)
// nici o informație nu o să fie raportată la programul principal
void setup ()
{
//…
}
void loop
{
//…
}
O altă instrucțiune comună este „setup” care este apelată la începutul unui sketch (program) și se utilizează pentru a inițializa variabile, configura pini, etc. Funcția „setup” rulează o singură dată după fiecare pornire sau resetare a plăcii Arduino. După ce se realizează o configurație care stabilește valorile inițiale prin intermediul funcției „setup” , instrucțiunea „loop()” (buclă) face exact cea a ce se poate deduce și din numele acesteia, și anume bucle consecutive permițând programului să facă schimbări sau să răspundă dacă e cazul.
Instrucțiunea „boolean” face parte tot din categoria instrucțiunilor de valori, aceasta poate avea două valori: true (adevărat) sau false (fals). Fiecare variabilă boolean ocupă memorie de 1 octet. Instrucțiunea „PinMode” configurează un pin oarecare astfel încât acesta să se comporte ca o ieșire sau ca o intrare.
CAPITOLUL 4. Arduino Uno V3
Figura 4.1. Platforma de dezvoltare Arduino Uno V3 [22]
4.1. Prezentarea platformei de dezvoltare Arduino Uno V3
Specificațiile tehnice ale platformei sunt:
*microcontroler Atmega328;
*tensiune de lucru 5V;
* tensiune de intrare (recomandat) 7-12V;
*tensiune de intrare (limită) 6-20V;
*pini digitali: 14 (6 PWM output);
*pini analogici: 6;
*intensitate per pin de intrare/ieșire: 40mA;
*intensitate de ieșire pentru pinul 3.3V: 50mA;
*Flash Memory: 32KB (Atmega328) din care 0.5 KB utilizează bootloader-ul;
*SRAM: 2KB (Atmega328);
*EEPROM: 1KB (Atmega328);
*frecvența: 16MHz.
Arduino Uno este una dintre componentele principale ale robotului industrial, aceasta fiind o platforma de dezvoltare open-source și este ușor de folosit atât din punct de vedere hardware cât și software. Dimensiunile acestei platforme sunt mici (6.8cm / 5.3cm) ea fiind construită în jurul unui procesor de semnal și este capabilă să preia date din mediul înconjurător printr-o serie de senzori și să efectueze anumite acțiuni asupra mediului cu ajutorul mai multor tipuri de dispozitive mecanice cum ar fi: motoare, servomotoare, luminilor etc.
Mediul de programare în care rulează procesorul, cod scris, se aseamănă foarte mult cu limbajul C++. [23]
Arduino Uno V3 este destinat persoanelor interesate de crearea unor obiectelor sau a unor medii interactive, acesta interceptând semnale de intrare de la o varietate de senzori sau swich-uri apoi controlând diverse motoare,lumini și alte ieșiri fizice.
Există proiecte Arduino care pot comunica cu software-ul care se execută pe calculatorul utilizat (de exemplu Flash, MaxMSP, Processing) sau pot fi de sine-stătătoare, iar plăcile Arduino pot fi achiziționate preasamblate sau pot fi realizate manual, mediul de programare poatându-se descărca gratuit de pe Internet.
Limbajul de programare Arduino este o platformă de calcul fizic, deasemenea o implementare de cablaj, care se bazează pe mediul de programare de procesare multimedia. Microprocesoare și microcontrolere disponibile pentru platforme de calcul fizic care oferă o funcționalitate similară sunt: Parallax Basic Stamp, Netmedia BX-24, Phidgets, HandyBoardMit etc, toate aceste instrumente iau detaliile dezordonate de programare și le încadrează într-un pachet ușor de folosit.
4.2. Programarea platformei de dezvoltare Arduino Uno V3
Platforma poate fi programată utilizând un software Arduino, destinat special pentru această placă și pentru celelalte modele de plăci din familia Arduino. Pentru ca mediul de programare să fie compatibil cu modelul de placă conectat la calculator (în cazul de acesta Arduino Uno), din meniul Tools (instrucțiuni) se accesează Board, iar apoi Arduino Uno.
Microcontrolerul Atmega328 care comunică utilizând un protocol original STK500, are prestabilit prin fabricație în memoria sa un bootloader (încarcă un program la pornire), fapt care permite încărcarea unor secvențe noi de program, fără să fie nevoie de un programator hardware extern. Se poate ignora bootloader-ul programând microcontrolerul printr-un protocol numit ICSP (In-Circuit Serial Programming), în cazul programării cu un programator extern, caz în care se poate utiliza spațiul întreg pentru programare de pe memoria microcontroler-ului.
Codul sursă al circuitului de interfațare cu USB-ul, ATmega16U2 (sau 8U2 ale modelelor precedente de plăci) rev1 și rev2 este valabil și se încarcă prin modul DFU, care poate fi activat în felul următor: conectând un jumper pe spatele plăcii și resetând circuitul de interfațare 8U2, aceasta în cazul plăcilor rev1, iar în cazul plăcilor mai noi rev2 printr-o rezistență care leagă magistrala 8U2/16U2 HWB, favorizând punerea în modul DFU (Device Firmware Update).
Se mai poate utiliza un soft Atmel’s Flip software (pentru Windows) sau programarea cu modul DFU (pentru sistemul de operare Linux) pentru a încărca un program rezident nou, sau o altă variantă fiind folosirea protocolului ISP printr-un programator extern (transcriind programul de încărcare DFU).
Această platformă de programare este proiectată în așa fel încât acesta să se poată reseta înainte de o încărcare a unui program nou, mai repede prin software-ul care rulează pe calculatorul la care este conectat decât prin apăsarea fizică a butonului de resetare. Unul dintre firele de conexiune hardware (DTR) ale circuitului de interfațare cu USB-ul ATmega16U2 este conectat la linia de resetare a microcontrolerului ATmega328, printr-un condensator cu o capacitate de 100 de nanofarazi. Când acest fir de conexiune are nivel de tensiune low, pe linia de resetare tensiunea scade destul de mult, astfel să poată reseta microcontrolerul. [25]
Software-ul Arduino folosește această aptitudine pentru a permite încărcarea unui program prin simpla apăsare a iconiței upload din meniul mediului de dezvoltare Arduino. Când Arduino este conectat la un calculator care operează în Linux, aceasta se resetează de fiecare dată când se face o conexiune prin USB la software-ul instalat pe calculatorul respectiv, iar în următoarea secundă bootloader-ul rulează pe placă.
Trebuie să ne asigurăm că software-ul cu care comunică placa, așteaptă o secundă după ce a început conexiunea, dar încă nu a transmis date, în cazul în care se rulează o aplicație pentru prima dată și necesită un timp de configurare sau alte tipuri de date.
Arduino are o magistrală care poate fi întreruptă (tăiată) pentru a dezactiva opțiunea de auto-resetare, dar poate fi reconectată (prin lipire) pentru a reactiva această opțiune, operația poartă numele de „RESET-EN”, mai există o metodă de dezactivare a opțiunii auto-reset, și anume prin conectarea unei rezistențe de 110 ohmi la 5V și la linia de resetare.
4.3. Schema electrică a platformei de dezvoltare Arduino Uno V3
Figura 4.2. Schema electrică a platformei de dezvoltare Arduino Uno V3 [24]
Arduino Uno face parte din familia largită Arduino, majoritatea plăcilor (Uno, Leonardo, Mega2560 etc) sunt fabricate de SmartProjects în Italia, iar modelele Pro, Pro Mini și LyliPad de compania americană SparkFun Electronics.
Figura 4.2. ne prezintă schema electrică a platformei Arduino Uno V3, aici observăm principalele componente: microcontroler-ul Atmega328 ce comunică cu conectorul USB prin intermediul circuitului de interfațare Atmega16U2-MU, conectorul pentru mufa jack, circuitul stabilizator de tensiune U1 la 5V și circuitul stabilizator de tensiune U2 la 3,3V. Pentru protecția portului USB al calculatorului în cazul apariției unui supracurent sau scurtcircuit, pe placă se găsește o siguranță resetabilă, aceasta oferind o doză suplimentară de protecție, unele calculatoare având protecție proprie internă. Atunci când la portul USB este aplicată o intensitate mai mare de 500mA, această siguranță va întrerupe în mod automat conexiunea pâna când scurcircuitul sau supracurentul este eliminat.
4.4. Arduino Uno – prezentare hardware
Arduino provine din interconectarea mai multor componente simple, elementul de bază al plăcii fiind microcontrolerul Atmega328, a cărui funcționare se realizează cu ajutorul celorlalte componente existente.
Microcontrolerul Atmega328 este programat cu ajutorul limbajului de programare Arduino (bazat pe cablaj) și a mediului de dezvoltare Arduino (bazat pe procesare). Plăcuța Arduino prezintă 14 intrări/ieșiri digitale (dintre care 6 pot fi utilizate ca ieșiri PWM), 6 intrări analogice (fig.4.1.), un oscilator cu cristal de 16 MHz, circuit de interfațare cu USB, alimentare jack, un conector ICSP și un buton de resetare.
Arduino Uno diferă de predecesorii săi datorită faptului că nu utilizează driver-ul FTDI USB-serial, dar dispune de circuitul Atmega16U2, programat ca un convertor USB-serial.
Îmbunătățiri ale plăcii (față de predecesori):
– deține un circuit de resetare mai puternic;
– s-au adăugat pinii SDA și SCL situați lângă pinul AREF, și alți doi pini noi localizați lângă pinul RESET, unul fiind denumit IOREF care permite circuitelor atașate plăcuței Arduino (în cazul de față driver-ului de motoare) să se adapteze la tensiunea furnizată de aceasta; al doilea pin neconectat este rezervat pentru alte scopuri ce pot apărea pe parcursul utilizării plăcii;
– rezistorul care leagă linia 8U2 HWB de masă, fapt ce ușurează punerea în modul DFU (Device Firmware Update), acest modul fiind un protocol cu ajutorul căruia se face update-ul programului instalat în memoria microcontrolerului [25]
4.4.1 Descrierea pinilor
Platforma de dezvolatare Arduino oferă o serie de facilități pentru comunicarea cu o altă placă, cu un calculator sau alte microcontrolere. Microcontroler-ul Atmega328 oferă comunicare serială UART TTL (5V), care este disponibilă pe pinii digitali 0 (RX) și 1. UART (Universal Asynchronous Receiver/Transmitter) este o componentă a plăcii Arduino fiind un emițător/receptor asincron care decodifică date de tip paralel sau serie, utilizat de obicei pentru comunicarea serială cu un calculator sau portul serial al unui dispozitiv periferic. Există librării software care permit comunicarea serială pe oricare dintre pinii digitali ai platformei.
Prin intermediul funcțiilor pinMode(), digitalWrite() și digitalRead(), fiecare pin ale celor 14 intrări/ieșiri digitale poate fi utilizat ca intrare sau ieșire, funcționând la o tensiune de 5V. Fiecare pin poate furniza sau recepționa un maxim de 40 mA având o rezistență internă de 20-50 kOhmi.
Platforma Arduino Uno are 6 intrări analogice corespunzătoare pinilor A0, A1, A2, A3, A4, A5, fiecare dintre ele asigurând o rezoluție de 10 biți. Prin setările prestabilite, pinilor le corespund valori ale tensiunii începând de la masa până la 5V, dar se poate inversa valorile tensiunii folosind pinul AREF și funcția analogReference(). La fel ca și la pinii digitali, unii pini analogici au funcții speciale, cum ar fi funcția de comunicare TWI care o au pinii A4 (SDA) și A5 (SCL). Dintr-o altă grupă de pini fac parte AREF și RESET. Pinul AREF configurează tensiunea de referință utilizată pentru intrările analogice prin intermediul funcției analogReference(), iar pinul RESET este folosit de obicei pentru butonul de resetare, care poate reseta microcontrolerul dacă este necesar.
Pini cu funcții speciale:
*external interrupts: acestei funcții corespund pinii 2 și 3 care pot fi configurați să declanșeze întreruperea unei execuții când are loc trecerea dintr-un nivel logic de tensiune în altul.
*serial: 0 (Rx) și 1 (Tx) acești pini sunt utilizați pentru a recepționa (Rx) și transmite (Tx) date seriale TTL, fiind conectați la pinii corespunzători ai Atmega USB-TTL.
*SPI (interfață serială periferică) corespunde pinilor 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK); acești pini suportă comunicare SPI folosind biblioteca Serial Peripheral Interface; SPI este un protocol utilizat de microcontroler în comunicarea cu un alt dispozitiv periferic sau cu un alt microcontroler; într-o conexiune de tip SPI întotdeauna există un dispozitiv master (de obicei un microcontroler) care controlează celelalte dispozitive periferice.
*funcția PWM (modulația în lățime a impulsului) este atribuită pinilor 3, 5, 6, 9, 10 și 11 și generează 8 biți de ieșire PWM împreună cu funcția analogWrite(), este utilizată, de obicei, la modificarea intensității de luminozitate a unui led sau modificarea valorii vitezei unui motor.
*prin intermediul pinului 13 se controlează un led integrat pe placa Arduino; când pinul recepționează un semnal de nivel logic 1 atunci led-ul se aprinde, iar când trece în nivel logic 0 led-ul se stinge.[25]
4.4.2. Modalități de alimentare a platformei Arduino Uno V3
Platforma Arduino poate fi alimentată prin mai multe moduri:
*printr-o sursă de alimentare externă sau cu baterii;
*conexiune USB (cablu USB A-B) (fig. 4.3.).
Figura 4.3. Cablu USB A-B
Dacă dorim să alimentăm de la o sursă de alimentare externă (de la priză) avem nevoie de un adaptor AC-DC a cărui ieșire o conectăm la mufa jack a plăcii iar atunci când dorim alimentarea cu tensiune de la baterii, firele care vin de la acestea le conectăm la pinii GND și VIN ai conectorului de pe placa de bază. În cazul în care folosim conexiunea USB avem nevoie de un cablu USB A-B (fig. 4.3.) (utilizat și la imprimante) pe care îl conectăm la portul USB al calculatorului.
Pentru siguranță, ar fi de aminitit că placa Arduino poate suporta valori de tensiuni cuprinse între 6 și 20 de volți, dar pentru buna funcționare a plăcii se recomandă o tensiune între 7 și 12 volți. Dacă placa se alimentează cu mai puțin de 7 volți pinul 5V s-ar putea să furnizeze o tensiune mai mică de 5 volți în acest caz placa are șanse mari să devină instabilă, iar dacă se alimentează cu mai mult de 12 volți, regulatorul de tensiune se poate supraîncălzi deteriorând placa.
Dintre pinii de alimentare amintim următorii: VIN, 3V3, 5V, și pinul GND (masa). Pinul 3V3 are o tensiune de 3,3V generată de regulatorul de tensiune de pe placă, având o intensitate maximă de 50 mA. Atunci când alimentarea se face printr-o sursă de alimentare externă (diferită de cea de 5V prin conexiunea USB sau alte surse de tensiune reglate) prin pinul VIN placa Arduino este aprovizionată cu tensiune de intrare sau dacă alimentarea se face prin mufa jack acest pin permite accesul tensiunii în placă. Pinul 5V furnizează plăcii o tensiune de ieșire care este reglată la 5 volți, în urma alimentării fie prin intermediul adaptorului AC-DC la mufa jack (7-12 V), fie prin intermediul pinului VIN (7-12V) sau prin conexiune USB (5V). Nu este recomandată furnizarea tensiunii prin pinii 5V și 3V3 deoarece astfel tensiunea nu trece prin regulator existând riscul ca placa Arduino să se defecteze.
CAPITOLUL 5. Microcontrolere
Figura 5.1. Microcontroler ATmega328 PU [26]
5.1. Arhitectura microcontrolerelor
Atributele sistemului așa cum sunt văzute ele de către un programator în limbaj de asamblare sunt definite de către arhitectura unui microcontroler. Un microcontroler este un caz particular de calculator (calculator sepcializat în operații I/O, realizat pe un singur chip) și este alcătuit din cinci elemente de bază: unitate de intrare, unitate arithmetică și logică, unitate de memorie, unitate de ieșire și unitate de control.
În figura 5.2. este reprezentată schema bloc generală a unui microcontroler.
Unitatea de control la un loc cu unitatea aritmetică și cea logică compun împreună unitatea centrală de prelucrare. Blocurile componente ale microcontrolerului sunt legate între ele prin intermediul unei magistrale internă (bus), aceasta vehiculează semnale de date, de adresă și semnale de control, iar mărimea acestor magistrale constituind una dintre cele mai importante caracteristici ale unui microcontroler. Unitatea centrală de prelucrare (UCL) selectează, prin magistrala de adrese, o locație de memorie sau un dispozitiv I/O, iar pe magistrala de date se face schimbul de informație între UCP și memorie sau dispozitivele I/O. Intre unitatea centrală de prelucrare și memorie se transferă atât instrucțiuni cât și date, acestea se pot transfera pe magistrale de date diferite sau pe o singură magistrală.
Figura 5.2. Schema bloc a unui microcontroler [27]
Arhitectura Harvard necesită un bus separat pentru date și instrucțiuni, atunci când codul instrucțiunii se găsește pe bus-ul de instrucțiuni, pe bus-ul de date se găsește datele instrucțiunii anterioare. Performanțele de viteză sunt bune, dar structura microcontrolerului este complexă.
Arhitectura von Neumann necesită prezența unui singur bus utilizat pentru circulația instrucțiunilor și a datelor atunci când un controler cu acest tip de arhitectură adresează memoria, bus-ul de date este utilizat pentru a transfera prima oară codul instrucțiunii, iar apoi pentru a transfera date. Accesul este destul de lent și se realizează în doi pași.
Magistralele interne, după cum le spune și numele nu sunt accesibile în exterior la nivel de pin, acastă stare caracterizează regimul normal de funcționare. La anumite tipuri de microcontrolere, semnalele magistralelor de adrese și de date sunt accesibile la nivel de pinfiind sacrificate funcțiile inițiale ale pin-ilor respectivi. O altă condiție este aceea de a fi necesar să fie livrate în exterior și semnalele de comandă (ce puțin comandă de scriere – WR și comandă de citire – RD). Această caracteristică este folositoare pentru a atașa sistemului interfețe suplimentare sau extensii de memorie.
Magistralele de date și de adrese pot fi aduse la pin multiplexat sau nemultiplexat. Spre exemplu, familia MCS-51 are acces multiplexat la magistrale. Accesul se realizează în doi pași, în primul se conectează liniile de adresă la pinii portului “sacrificat”, iar în al doilea pas se conectează datele la aceiași pini. Microcontrolerele mai puțin performante (MC ieftine) nu posedă magistralele interne accesibile la nivel de pin.
Performanța unui microcontroller din punct de vedere al magistralei interne poate fi apreciată după următoarele criterii:
*dimensiunea magistralei de adrese;
*dimensiunea magistralei de date;
*magistrale accesibile multiplexat sau nemultiplexat;
*accesibilitatea în exterior la magistrale. [27]
5.2. Dispozitive I/O [27]
În subcapitolul anterior (Arhitectura microcontrolerelor) s-a amintit de aceste dispozitive I/O, ele reprezintă un aspect important atunci când este vorba de microcontrolere, aspect rezultat din particularitatea unui microcontroler; aceea de a interacționa cu mediul în procesul de control pe care-l conduce. Dispozitivele I/O implementează funcții speciale degrevând unitatea centrală de toate aspectele specifice de control și de comandă în funcția respectivă.
Există o mare varietate de dispozitive I/O, acestea conduc operații generale de comunicație (transfer paralel sau serial de date), funcții generale de timp (generare de impulsuri, numărare de evenimente), operații de conversie analog/numerică, funcții speciale de comandă. O parte din resurse acoperă funcțiile de control propriu-zise, iar o altă parte asigură funcțiile necesare aplicațiilor în timp real (timer, sistem de întreruperi). O parte din aceste dispozitive se găsesc în configurația tuturor microcontrolerelor sau sunt întâlnite foarte des, iar o altă parte de dispozitive o regăsim doar în microcontrolerele construite pentru a optimiza aplicații cu un grad mare de particularitate.
Dispozitivele I/O sunt “văzute” de către unitatea central ca porturi. Există două moduri de alocare a adreselor (mapare) pentru apelarea porturilor de către unitatea centrală. Porturile sunt mapate fie într-un spațiu propriu, fie în spatial de memorie. De exemplu, microcontrolerele de la Intel utilizează un semnal ce indică dacă la adresa curentă se apelează o locație de memories au un dispozitiv I/O.
Avantajele mapării separate:
*dispozitivele I/O nu ocupă spațiu de memorie;
*metoda nu este succesibilă de a provoca erori soft deoarece se utilizează instrucțiuni diferite pentru a accesa memoria și dispozitivele I/O;
*decodificatorul de adrese pentru dispozitivele I/O este mai simplu deoarece spațiul de adresare al dispozitivelor I/O este mai mic.
Dezavantajele mapării în spații separate:
*instrucțiunile I/O nu permit utilizarea modurilor de adresare folosite în lucrul cu memoria;
*instrucțiunile I/O sunt mai puțin flexibile în comparație cu instrucțiunile de lucru cu memoria.
Avantajul mapării în spațiu comun:
*toate instrucțiunile de lucru cu memoria și toate modurile de adresare sunt utilizate și în tratarea dispozitivelor I/O.
Dezavantajele mapării în același spațiu:
*spațiul de adresare disponibil pentru memorie este mai mic;
*este predispus la erori software.
Avantajul mapării într-un spațiu comun este acela că se poate opera cu porturile la fel ca și în cazul unei locații de memorie, multe operații logice și aritmetice utilizează operanzi direct de la port, datele pot fi mutate între porturi cu o singură instrucțiune, conținutul unui port poate fi citit, incrementat, iar rezultatul scris din nou la port de asemenea cu o singură instrucțiune.
Se conturează trei direcții de evoluție a microcontrolerelor din punct de vedere a resurelor pe chip. Una dintre aceste direcții este dezvoltarea de microcontrolere de uz general care sunt puse la dispoziția utilizatorului pentru a realiza aplicații de tot felul (“de la A la Z”). O a doua direcție o reprezintă dezvoltarea de microcontrolere specializate care dispun de resurse specifice unui anume gen de aplicații (telecomunicații, automobile, acționări electrice, Internet etc).
Pentru microcontrolerele specializate, atât structura hardware cât și instrucțiunile sunt specifice și sunt axate pe un gen particular de aplicații
A treia tendință de dezvoltare de microcontrolere care dispun de resurse hardware configurabile la utilizator. Între resursele configurabile se găsește memoria, elemente de logică programată, module specializate, gen convertoare A/D și convertoare D/A, dar și module de procesare avansată a datelor. [27]
5.3. Memoria microcontrolerelor
Microcontrolerele utilizează diferite tipuri de informații, stocate în diferite tipuri de memorii. Instrucțiunile ce controlează funcționarea microcontrolerelor trebie stocate într-o memorie nevolatilă, asfel informațiile păstrându-se și după oprirea și repornirea sursei de alimentare. Rezultatele intermediare și variabile pot fi înscrise într-o memorie volatile, la acestea fiind important să se poată face scrierea / citirea rapid și în timpul funcționării.
Memoria RAM (engl. Random Access Memory) este o memorie volatilă și poate fi scrisă sau citită de către unitatea central. Pe chip această memorie ocupă mult loc și costurile de implementare sunt mari, acesta fiind motivul pentru care, de obicei, un microcontroller include puțini RAM. Memoria RAM static alimentată de la baterie este folosită pentru stocarea nevolatilă a cantităților mari de date, la o viteză de acces mare și cu un număr nelimitat de reînscrieri și ștergeri.
Memoria ROM (engl. Read Only Memory) este cea mai simplă și ieftină memorie și este utilizată la stocarea programelor în faza de fabricație. Unitatea central poate citi infrmațiile, dar nu le poate modifica.
Memoria PROM (engl. Programmable Read Only Memory) este similară cu memoria ROM, dar aceasta poate fi programată de utilizator.
Memoria PROM poate fi, după posibilitățile de ștergere, de mai multe feluri:
Memoria EPROM (Erasable PROM) se poate șterge prin expunere la ultraviolet. Microcontrolerele cu EPROM dețin un mic geam de cuarț ce permite ca chip-ul să fie expus la radiația ultravioletă. Se poate șterge doar întreaga informație și nu numai fragmente deci ștergerea este neselectivă. Memoria poate fi ștearsă și reînscrisă de un număr finit de ori. Pentru programarea EPROM-ului este necesară o procedură specială, iar microcontrolerele cu EPROM au nevoie de regulă pentru înscrierea EPROM-ului de o tensiune auxiliară, de exemplu de 12V. În timpul programării memoria EPROM nu este conectată la magistrala de adrese și de date. La unele microcontrolere există un mod special de lucru, în care sunt văzute din exterior ca niște memorii EPROM obișnuite și pot fi asfel programate cu orice programator.
OTP (One Time Programmable PROM) este utilizat pentru multe serii de microcontrolere, de fapt memoria OTP este o memorie EPROM, dar chip-ul a fost capsulat întro capsulă de material plastic fără fereastră, care este mai ieftină. Memoria nu se poate reprograma sau șterge, viteza unui asfel de microcontroller este bună, prețul mic, dar aplicațiile sunt lipsite de flexibilitate.
Memoria EEPROM (engl. Electrically Erasable Programmable Read Only Memory) poate fi ștearsă electric de către unitatea central chiar în timpul funcționării, ștergerea este selective, iar pentru reînscriere trebuie parcurși mai mulți pași. Acest tip de memorie se utilizează la multe microcontrolere, fiind ieftină, pee a memorându-se un număr mic de parametrii care se schimbă din timp în timp. Numărul de ștergeri / scrieri la acestă memorie este limitat la 10 000 și este lentă. [27]
Memoria FLASH este o memorie asemănătoare cu EPROM și EEPROM în sensul că poate să fie ștearsă și reprogramată în sistemul în care este utilizată, fără a fi nevoie de un sistem dedicate. Deasemenea are capacitatea unui EPROM, dar nu are nevoiepentru ștergere de fereastră, la fel ca și memoria EEPROM și aceasta poate fi programată și ștearsă electric, dar nu permite ștergerea individuală de locații, utilizatorul putând să șteargă doar întregul conținut.
Din punct de vedere al locului și modului de programare a memariilor de tip PROM există două concept:
*ICP (engl. In Circuit Programming) reprezintă programarea memoriei când microcontrolerul se găsește pe placa de cablaj imprimat al aplicației;
*ISP (engl. In System Programming) presupune posibilitatea de reprogramare în timpul funcționării sistemului.
În funcție de numărul de aplicații în care urmează să fie folosit microcontrolerul se recomandă folosirea microcontrolerului cu ROM pentru volum mare de producție, OTP pentru volum mic de producție, iar EPROM pentru prototipuri. Capacitatea memoriei și tipul de memorie din echiparea unuim microcontroller sunt caracteristici particulare fiecărui tip de circuit, acești parametric, printre alte diferențe sunt diferiți pentru membrii unei aceleași familii de microcontrolere.
Atunci când dorim să apreciem un microcontroler sub aspectul componentei memorie este necesar să ținem cont de următoarele caracteristici:
*capacitatea memoriei găsită pe chip;
*ușurința cu care se poate programa;
*varietatea tipurilor de memorie pe chip: RAM, ROM / OTP / EPROM / EEPROM / FLASH.
5.4. Microcontroler-ul ATmega328
Acest tip de microcontroler este în dotarea platformei de dezvoltare Arduino Uno V3 și apare prezentat în figura 5.1., iar diagrama bloc a acestuia este prezentată în figura 5.3.
Figura 5.3. Diagrama bloc a microcontrolerului ATmega328 [28]
Microcontroler-ul ATmega328 face parte din familia CMOS, lucrează cu 8 biți bazat pe arhitectura AVR (concepută de corporația Atmel în anul 1996) RISC, la fel ca și modelele ATmega48PA/88PA/168PA. AVR a fost una dintre familiile de microcontrolere care uiliza pe cip, memorie flash pentru stocarea programelor spre deosebire de alte familii de microcontrolere care dețineau memorii ce puteau fi programate doar o singura dată, la fabricație cum ar fi memorii ROM, EPROM sau EEPROM, despre care s-a vorbit în subcapitolele anterioare.
AVR este o modificare a arhitecturii Harvard în care datele și programele sunt stocate pe memorii separate, acestea figurând în spații de adrese diferite, dar 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.
Microcontrolerul ATmega328P are următoarele caracteristici: 4K/8/K bytes de memorie In-System-Programmable Flash având capacități Read-While-Write, 1K memorie EEPROM, 2K 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 selectare a consumului economic de energie. Funcționarea unității centrale de prelucrare poate 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ță” (stopează) oscilatorul dezactivând toate celelalte funcții ale cip-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.
ATmega328 este fabricat prin tehnologia de memorie non-volatilă Atmel de nivel ridicat. On-chip ISP Flash ne permite ca să reprogramăm memoria In-System cu ajutorul interfeței seriale SPI de memorie non-volatilă (reprogramabilă) sau cu ajutorul unui program de „boot” on-chip rulat pe unitatea centrală de procesare (CPU), acesta putând folosi orice interfață pentru a descărca aplicația-program în Application Flash Memory.
RISC este un cuvânt pe care-l întâlnim des în literaratura 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 von-Neuwmann și să aibă în general, instrucțiuni executate într-un ciclu. Microcontrolerele cu arhitectură Harvard sunt numite și microcontrolere RISC (Reduced Instruction Set Computer).
ATmega328 este un microcontroler RISC asfel 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.
Dacă combinăm o unitate centrală de procesare (CPU) RISC pe 8 biți cu un In-System autoprogramabil Flash, ATmega328 acesta poate fi descris ca un microcontroler 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.
Modul de reducere ADC al zgomotului stopează unitatea centrală de procesare (CPU) ș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. [29]
CAPITOLUL 6. Implementarea programelor
6.1. Implementarea programului pentru smartphone
Figura 6.1. “Telecomanda” robotului industrial “TOSHIBA”
După cum am mai specificat, în această lucrare, pentru controlul robotului industrial “TOSHIBA” am utilizat pe post de “telecomandă” (fig. 6.1.) un smartphone SAMSUNG Galaxy SIII mini cu sistem de operare Android, această platformă fiind bazată pe nucleul Linux.
Programul utilizat pentru realizarea aplicației se numește Eclipse (fig. 6.2.) împreună cu plug-in-ul ADT (engl. Android Development Tools). Asfel, în acest program am scris liniile de cod în limbajul Java, controlul robotului fiind posibil datorită bibliotecilor Java dezvoltate de Google.
Figura 6.2. Interfața Eclipse
Codul sursă al aplicației:
// librăriile importate utilizate
package android.RobotIndustrial;
import android.bluetoothtest.R;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
import android.content.Intent;
public class RobotIndustrial extends Activity
{
TextView myLabel;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
String msg;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
int counter;
volatile boolean stopWorker;
boolean touched=false; //butonul este apasat
boolean M5S=false;
boolean M5D=false;
boolean M4S=false;
boolean M4J=false;
boolean M3S=false;
boolean M3J=false;
boolean M2S=false;
boolean M2J=false;
boolean M1D=false;
boolean M1I=false;
int time=30; //durata intre doua caractere transmise ( exprimată in milisecunde)
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myLabel = (TextView)findViewById(R.id.myLabel);
Button connectButton = (Button)findViewById(R.id.connectBT);
Button disconnectButton = (Button)findViewById(R.id.disconnectBT);
// definirea butoanelor robotului industrial
Button M5SButton = (Button)findViewById(R.id.M5S);
Button M5DButton = (Button)findViewById(R.id.M5D);
Button M4SButton = (Button)findViewById(R.id.M4S);
Button M4JButton = (Button)findViewById(R.id.M4J);
Button M3SButton = (Button)findViewById(R.id.M3S);
Button M3JButton = (Button)findViewById(R.id.M3J);
Button M2SButton = (Button)findViewById(R.id.M2S);
Button M2JButton = (Button)findViewById(R.id.M2J);
Button M1DButton = (Button)findViewById(R.id.M1D);
Button M1IButton = (Button)findViewById(R.id.M1I);
// butonul de detectare și conectare prin intermediul Bluetooth la robotul industrial
findBTdevice();
connectButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if(!mBluetoothAdapter.isEnabled())
{
myLabel.setText("Bluetooth-ul nu este activat!");
}
else
{
try
{
conectBT();
}
catch (IOException ex) { }
}
}});
// butonul de deconectare de la robotul industrial
disconnectButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
if(mmOutputStream==null){
myLabel.setText("Robotul ne este conectat!");
return;
}
try
{
disconectBT();
}
catch (IOException ex) { }
}
});
// butonul de rotire stânga
M5SButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M5S=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M5S=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M5S=false;
break;
}
return false;
}
});
// butonul de rotire dreapta
M5DButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M5D=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M5D=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M5D=false;
break;
}
return false;
}
});
// butonul de ridicare 1
M4SButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M4S=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M4S=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M4S=false;
break;
}
return false;
}
});
// butonul de coborâre 1
M4JButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M4J=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M4J=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M4J=false;
break;
}
return false;
}
});
// butonul de ridicare 2
M3SButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M3S=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M3S=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M3S=false;
break;
}
return false;
}
});
// butonul de coborâre 2
M3JButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M3J=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M3J=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M3J=false;
break;
}
return false;
}
});
// butonul de ridicare 3
M2SButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M2S=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M2S=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M2S=false;
break;
}
return false;
}
});
// butonul de coborâre 3
M2JButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M2J=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M2J=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M2J=false;
break;
}
return false;
}
});
// butonul de deschidere gripper
M1DButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M1D=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M1D=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M1D=false;
break;
}
return false;
}
});
// butonul de închidere gripper
M1IButton.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
int action=event.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:
touched=true;
M1I=true;
break;
case MotionEvent.ACTION_MOVE:
touched=true;
M1I=true;
break;
case MotionEvent.ACTION_UP:
touched=false;
M1I=false;
break;
}
return false;
}
});
// trimiterile către programul “Arduino”
final Handler handler = new Handler();
Runnable runnable = new Runnable()
{
public void run()
{
if (touched==true )
{
if(mmOutputStream!=null)
{
if (M5S==true)
{
msg ="l";
}
if (M5D==true)
{
msg =";";
}
if (M4S==true)
{
msg ="a";
}
if (M4J==true)
{
msg ="q";
}
if (M3S==true)
{
msg ="s";
}
if (M3J==true)
{
msg ="w";
}
if (M2S==true)
{
msg ="d";
}
if (M2J==true)
{
msg ="e";
}
if (M1D==true)
{
msg ="o";
}
if (M1I==true)
{
msg ="p";
}
try
{
mmOutputStream.write(msg.getBytes());
}
catch (IOException ex) { }
}
}
handler.postDelayed(this, time);
}
};
runnable.run();
}
// funcția de conectare prin intermediu Bluetooth la robotul industrial
void conectBT() throws IOException
{
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
// initierea modului de ascultare
myLabel.setText("Bluetooth Conectat");
}
// funcția de deconectare de la robotul industrial
void disconectBT() throws IOException
{
mmOutputStream.close();
mmInputStream.close();
mmSocket.close();
myLabel.setText("Bluetooth Deconectat");
}
// funcția de detectare prin intermediul Bluetooth a robotului industrial
void findBTdevice()
{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(mBluetoothAdapter==null)
{
myLabel.setText("Adaptorul bluetooth nu e disponibil");
}
if(!mBluetoothAdapter.isEnabled())
{
Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetooth, 0);
}
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
if(pairedDevices.size() > 0)
{
for(BluetoothDevice device : pairedDevices)
{
// if(device.getName().equals("RN42-575E"))
// RN42-575E este modulul bluetooth al platformei Arduino
// {
mmDevice = device;
break;
// }
}
}
myLabel.setText("Conectati telefonul la Robot!");
}
}
6.2. Implementarea programului pentru platforma Arduino Uno V3
Figura 6.3. Interfața Arduino
Programul pentru platform de dezvoltare Arduino este realizat în mediul de programare Arduino (fig. 6.3.), apoi este încărcat în memoria platformei Arduino, care se găsește pe placa de bază a robotului industrial “TOSHIBA”.
După cum am mai specificat în această lucrare, telefonul este “telecomanda” robotului industrial “TOSHIBA”, iar platforma Arduino este creierul acestuia.
Codul sursă al programului:
// Initializarea pinilor
int stanga = 2; // Pin 2 – se roteste spre stanga (M5+)
int dreapta = 3; // Pin 3 – se roteste spre dreapta (M5-)
int sus = 4; // Pin 4 – urca din incheietura de sus (M2+)
int jos = 5; // Pin 5 – coboara din incheietura de sus (M2-)
int sus2 = 6; // Pin 6 – urca din incheietura de mijloc (M3+)
int jos2 = 7; // Pin 7 – coboara din incheietura de mijloc (M3-)
int sus3 = 8; // Pin 8 – urca din incheietura de jos (M4-)
int jos3 = 9; // Pin 9 – coboara din incheietura de jos (M4+)
int inchide = 10; // Pin 10 – inchide gripper-ul (M1+)
int deschide = 11; // Pin 11 – deschide gripper-ul (M1-)
int limita1= 0; // A0 – intrare analogica, opreste rotirea spre dreapta – DREAPTA (S5)
int vallimita1= 0; // initializarea variabilei limita1 cu zero
int limita2= 1; // A1 – intrare analogica, opreste coborarea din incheietura de sus – JOS1 (S4)
int vallimita2= 0; // initializarea variabilei limita2 cu zero
int limita3= 2; // A2 – intrare analogica, opreste coborarea din incheietura de mijloc – JOS2 (S3)
int vallimita3= 0; // initializarea variabilei limita3 cu zero
int limita4= 3; // A3 – intrare analogica, opreste urcarea din incheietura de jos – SUS3 (S2)
int vallimita4= 0; // initializarea variabilei limita4 cu zero
int semnal = 0; // initializarea variabilei unde se stocheaza semnalul primit
// Specificarea intrarilor și iesirilor
void setup() {
pinMode(stanga, OUTPUT); // configureaza pinul stanga ca iesire
pinMode(dreapta, OUTPUT); // configureaza pinul dreapta ca iesire
pinMode(sus, OUTPUT); // configureaza pinul sus ca iesire
pinMode(jos, OUTPUT); // configureaza pinul jos ca iesire
pinMode(sus2, OUTPUT); // configureaza pinul sus2 ca iesire
pinMode(jos2, OUTPUT); // configureaza pinul jos2 ca iesire
pinMode(sus3, OUTPUT); // configureaza pinul sus3 ca iesire
pinMode(jos3, OUTPUT); // configureaza pinul jos3 ca iesire
pinMode(inchide, OUTPUT); // configureaza pinul inchide ca iesire
pinMode(deschide , OUTPUT) ; // configureaza pinul deschide ca iesire
Serial.begin(9600); // Porneste comunicarea prin intermediul portului serial la 9600bps
}
void loop(){
if (Serial.available() > 0) { // Verifică dacă se primeste semnal
semnal = Serial.read(); // Introducerea semnalului primit în variabila "semnal"
delay(10); // temporizare de 10 milisecunde care permite reimprospatarea semnalelor primite
// Verificarea semnalului primit
if (semnal == 'l'){ // dacă semnalul primit este "l" – invarte stanga
invartire_stanga();
}
else if (semnal == ';'){ // dacă semnalul primit este "punct si virgula" -invarte dreapta
invartire_dreapta();
}
else if (semnal == 'a'){ // dacă semnalul primit este "a" – ridica din incheietura de jos
ridicare_1();
}
else if (semnal == 'q'){ // dacă semnalul primit este "q" – coboara din incheietura de jos
coborare_1();
}
else if (semnal == 's'){ // dacă semnalul primit este "s" – ridica din incheietura de mijloc
ridicare_2();
}
else if (semnal == 'w'){ // dacă semnalul primit este "w" – coboara din incheietura de mijloc
coborare_2();
}
else if (semnal == 'd'){ // dacă semnalul primit este "d" – ridica din incheietura de sus
ridicare_3();
}
else if (semnal == 'e'){ // dacă semnalul primit este "e" – coboara din incheietura de sus
coborare_3();
}
else if (semnal == 'o'){ // dacă semnalul primit este "o" – deschide gripper-ul
deschidere_gripper();
}
else if (semnal == 'p'){ // dacă semnalul primit este "p" – inchide gripper-ul
inchidere_gripper();
}
}
else {
asteapta_semnal(); // Asteaptă semnal
}
}
// Invartire stanga
void invartire_stanga() {
digitalWrite(stanga, HIGH);
delay(25);
}
// Invartire dreapta
void invartire_dreapta() {
vallimita1=analogRead (limita1);
if(vallimita1>200){
digitalWrite(dreapta, HIGH);
delay(25);
}
}
// Ridicare 1
void ridicare_1() {
digitalWrite(sus, HIGH);
delay(25);
}
// Coborare 1
void coborare_1() {
vallimita4=analogRead (limita4);
if(vallimita4>200){
digitalWrite(jos, HIGH);
delay(25);
}
}
// Ridicare 2
void ridicare_2() {
digitalWrite(sus2, HIGH);
delay(25);
}
// Coborare 2
void coborare_2() {
vallimita3=analogRead (limita3);
if(vallimita3>200){
digitalWrite(jos2, HIGH);
delay(25);
}
}
// Ridicare 3
void ridicare_3() {
vallimita2=analogRead (limita2);
if(vallimita2>200){
digitalWrite(sus3, HIGH);
delay(25);
}
}
// Coborare 3
void coborare_3() {
digitalWrite(jos3, HIGH);
delay(25);
}
// Deschidere gripper
void deschidere_gripper() {
digitalWrite(deschide, HIGH);
delay(25);
}
// Inchidere gripper
void inchidere_gripper() {
digitalWrite(inchide, HIGH);
delay(25);
}
// Asteapta semnal
void asteapta_semnal() {
digitalWrite(dreapta, LOW);
digitalWrite(stanga, LOW);
digitalWrite(sus, LOW);
digitalWrite(jos, LOW);
digitalWrite(sus2, LOW);
digitalWrite(jos2, LOW);
digitalWrite(sus3, LOW);
digitalWrite(jos3, LOW);
digitalWrite(inchide, LOW);
digitalWrite(deschide, LOW);
}
CONCLUZIE
Ideea de a realiza acest proiect mi-a venit atunci când fiind prezent la un concurs de roboți care aveau în dotare o platformă de dezvoltare Arduino, dar care nu erau controlați de la distanță. Asfel “văzând” această platformă de dezvoltare Arduino mi s-a părut foarte interesantă și am început să caut cât mai multe informații despre ea, timp în care am găsit pe același site de unde putea fi achiziționată platforma și modulul Bluetooth RN-42.
Faptul că acest modul putea fi atașat la Arduino, putea comunica cu un dispozitiv cu Bluetooth și având în vedere că eram posesorul unui smatrphone cu Android care bineînțeles avea tehnologia Bluetooth m-a făcut să iau decizia de a folosi acest smartphone pe post de “telecomandă” pentru a putea realiza controlul de la distanță al unui robot industrial. După prezentarea acestei ideii profesorului coordonator am trecut la realizarea practică a proiectului. Din fabricație acest robot era conrtrolat cu o consolă manuală cu joystick-uri și purta denumirea de “Braț robotic KSR10” însă la o lucrare anterioară consola i-a fost îndepărtată, fiindu-i atașată o placă de bază pe care se găsea doar partea de acționare a robotului după care eu am adăugat partea de comandă și control a robotului compusă din: platforma de dezvoltare Arduino Uno V3, modulul Bluetooth RN-42 și bineînțeles conexiunile fizice realizate tot de către mine. Țin să menționez faptul că platforma de dezvoltare Arduino Uno V3 și robotul de la care am pornit (cel care avea doar partea de acționare) mi-au fost puse la dispoziție de către facultate.
O dată ce am terminat de realizat robotul din punct de vedere fizic am trecut la realizarea programelor pentru acesta, asfel în mediul de dezvoltare Arduino am realizat programul pentru programarea platformei, iar in programul Eclipse am realizat aplicația pentru smartphone.
Una dintre dorințele mele era aceea, după cum reiese din titlul proiectului, de a controla robotul de la distanță, iar această distanță maximă garantată de producătorul modulului Bluetooth era de 10m, deși în spații deschise (fără obstacole) am sesizat că acesta funcționează fără a pierde date până la aproximativ 50m.
În final, mă declar foare mulțumit de rezultatele obținute, acestea ambiționându-mă să mă gândesc și la realizarea altor proiecte cu această platformă de dezvoltare Arduino, fiind foarte performantă.
BIBLIOGRAFIE:
[1]http://www.robotics.ucv.ro/flexform/aplicatii_ser2/Mecatronica%20II/MANAC%20VERGIL-Utilizarea%20robotilor%20industriali/p21.html
[2] http://www.mindeplc.com/robots
[3] http://www.rasfoiesc.com/inginerie/tehnica-mecanica/STUDIU-DOCUMENTAR-PRIVIND-CONS86.php
[4] http://www.fisnar.fr/robots_f9600n
[5] http://robotec11.tripod.com/id4.html
[6] http://www.maalausrobotti.fi/
[7] http://www.infomate.ro/revista/imt71011122013.pdf
[8] http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Goia_Daniela/site/lectia2.html
[9] http://www.infuture.ru/article/73
[10] http://www.robomatic.ru/robots/promyshlennye-roboty-po-zadacham/okraska-nanesenie-pokrytii-i-lakov
[11] http://www.scribd.com/doc/77272759/adi-pr
[12] http://www.robotics.ucv.ro/flexform/aplicatii/m2/Marcu%20Alexandra%20-%20ACTIONARI%20PNEUMATICE%20IN%20MECATRONICA/
[13] http://www.scrigroup.com/tehnologie/tehnica-mecanica/Elementele-sistemelor-de-actio51755.php
[14] Bazele Roboticii, Gacsadi Alexandru, Universitatea din Oradea 2008.
[15] http://files.rbrusu.com/publications/RusuDissertationThesis.pdf
[16] http://www.tu.ro/cadou-brat-robotic.html
[17] http://www.robofun.ro/bluetooth_arduino
[18] http://www.itproportal.com/reviews/mobile-phones/samsung-galaxy-s3-mini-review/
[19] http://www.gsmarena.com/samsung_i8190_galaxy_s_iii_mini-5033.php
[20] http://www.arduino.cc/en/Guide/Environment
[21] www.arduino.cc/en/Reference/HomePage
[22] http://www.roroid.ro/prima-lectie/
[23] http://www.robofun.ro/arduino/arduino_uno_v3
[24] http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
[25] http://www.arduino.cc/en/Main/ArduinoBoardUno
[26] http://www.freetronics.com/products/microcontroller-labels-arduino-pinout#.U6RC4JR_s-E
[27] http://www.unitbv.ro/faculties/biblio/interfete_specializate/curs.pdf
[28] http://eastech.en.seekic.com/product/integrated_circuits_ics/ATMEGA328P-PU.html
[29] www.atmel.com/Images/doc8161.pdf
BIBLIOGRAFIE:
[1]http://www.robotics.ucv.ro/flexform/aplicatii_ser2/Mecatronica%20II/MANAC%20VERGIL-Utilizarea%20robotilor%20industriali/p21.html
[2] http://www.mindeplc.com/robots
[3] http://www.rasfoiesc.com/inginerie/tehnica-mecanica/STUDIU-DOCUMENTAR-PRIVIND-CONS86.php
[4] http://www.fisnar.fr/robots_f9600n
[5] http://robotec11.tripod.com/id4.html
[6] http://www.maalausrobotti.fi/
[7] http://www.infomate.ro/revista/imt71011122013.pdf
[8] http://cursuri.flexform.ro/courses/L2/document/Cluj-Napoca/grupa1/Goia_Daniela/site/lectia2.html
[9] http://www.infuture.ru/article/73
[10] http://www.robomatic.ru/robots/promyshlennye-roboty-po-zadacham/okraska-nanesenie-pokrytii-i-lakov
[11] http://www.scribd.com/doc/77272759/adi-pr
[12] http://www.robotics.ucv.ro/flexform/aplicatii/m2/Marcu%20Alexandra%20-%20ACTIONARI%20PNEUMATICE%20IN%20MECATRONICA/
[13] http://www.scrigroup.com/tehnologie/tehnica-mecanica/Elementele-sistemelor-de-actio51755.php
[14] Bazele Roboticii, Gacsadi Alexandru, Universitatea din Oradea 2008.
[15] http://files.rbrusu.com/publications/RusuDissertationThesis.pdf
[16] http://www.tu.ro/cadou-brat-robotic.html
[17] http://www.robofun.ro/bluetooth_arduino
[18] http://www.itproportal.com/reviews/mobile-phones/samsung-galaxy-s3-mini-review/
[19] http://www.gsmarena.com/samsung_i8190_galaxy_s_iii_mini-5033.php
[20] http://www.arduino.cc/en/Guide/Environment
[21] www.arduino.cc/en/Reference/HomePage
[22] http://www.roroid.ro/prima-lectie/
[23] http://www.robofun.ro/arduino/arduino_uno_v3
[24] http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
[25] http://www.arduino.cc/en/Main/ArduinoBoardUno
[26] http://www.freetronics.com/products/microcontroller-labels-arduino-pinout#.U6RC4JR_s-E
[27] http://www.unitbv.ro/faculties/biblio/interfete_specializate/curs.pdf
[28] http://eastech.en.seekic.com/product/integrated_circuits_ics/ATMEGA328P-PU.html
[29] www.atmel.com/Images/doc8161.pdf
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Controlul Unui Robot Industrial cu Un Smartphone cu Android (ID: 162249)
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.
