Roboti Mobili

1.Introducere

1.1 Roboți mobili. Istoric

2. Aplicații industriale

2.1 Generalități

2.2 Principalele domenii de utilizare a roboților

2.2.1 Interconexiuni

2.2.2 Procesarea suprafetelor

2.2.3 Tăiere

2.2.4 Transport

2.3 Domenii speciale de utilizare a roboților

2.4 Dispozitive adiționale pentru roboți

2.4.1 Sistemul senzorial

2.5 Elemente de bază ale limbajelor de programare a roboților industriali

2.5.1 Introducere în tematica limbajelor de programare a roboților industriali

2.5.2 Elemente caracteristice limbajelor de programare destinate structurilor de calcul

2.5.3 Conceptele specifice Limbajului Robot

3. Microcontrollere utilizate pentru comanda roboților mobili

3.1 Generalități

3.1 Aspecte legate de implementarea memoriei microcontrolerelor

3.1.1 Implementarea memoriei de program, programarea memoriei de program

3.1.2 Programarea "In System" (ISP-In System Programming)

3.1.3 Bootloader

3.1.4 Unitatea de memorie

3.2 Unitatea de procesare centrala

3.3 Bus-ul

3.4 Unitatea intrare-iesire

3.4.1 Comunicatia serială

3.4.2 Unitatea timer

3.4.3 Watchdog-ul

3.5 Convertorul Analog-Digital

3.6 Programul

3.7 Utilizarea microcontrollerelor

3.8 Arduino

3.8.1 Generalități

3.8.2 Specificații

3.8.3 Alimentarea Arduino

3.8.4 Intrări și ieșiri

3.8.5 Comunicația

3.9 Exemple de plăci Arduino

3.9.1 Arduino Uno

3.9.2 Arduino Mega

3.9.3 Arduino Mini

3.9.4 Arduino Nano

3.9.5 Arduino Duemilanove

3.9.6 Arduino LilyPad

3.9.7 Arduino Fio

3.9.8 Arduino Pro

3.9.9 Arduino Pro Mini

3.9.10 Arduino Serial

3.9.11 Arduino Serial Single Sided

4. Sistem de navigație cu evitarea obstacolelor pentru roboți mobili

4.1 Airat 2

4.2 Minirobotul RCX 1.0

4.3 Minirobotul Polulu 3pi

4.4 Robotul Inex Pop-Bot Standard

4.5 Robotul construit cu kit Arduino

4.5.1 Motorul de current continuu

4.5.2 Principiul de funcționare

4.5.2.1 Elemente constructive

4.5.2.2 Generalități

4.5.3 Senzorul ultrasonic

4.5.3.1 Modul de funcționare

4.5.4 Driverul de motoare

4.5.4.1 Specificații

4.5.4.2 Diagrama Hardware

4.5.4.3 Servomotor

4.5.5. Asamblarea robotului

5. Concluzii.

Introducere

1.1 Roboți mobili. Istoric.

Odată cu trecerea timpului, oamenii au evoluat și au fost nevoiți să iși construiască diferite unelte și obiecte cu scopul de a le fi ușor în viața de zi cu zi. În acest fel, de la construcția unei simple roți, ușor , ușor s-a ajuns, de-a lungul timpului, la mașinări mult mai complexe, mașinări care permit omului să își gestioneze mult mai bine timpul.

Astfel, în categoria mașinilor complexe avem roboții mecanici și virtuali, dar și sistemele artificiale care permit desfășurarea unor activități pe care omul le-ar fi facut zi de zi.

Cuvantul robot are origini slave și il putem traduce prin muncă, clacă. Acest cuvant a fost introdus de marele scenarist Karel Capek in anul 1921 , în una din scenetele sale pe nume Rossum’s Universal Robots.

Un robot este un sistem alcătuit din urmatoarele elemente: senzori, mecaniăa, actuatori, dar și un mecanism de directionare. Cu ajutorul mecanicii, putem alcătui fizic robotul, putându-i da ce infățișare dorim și toate mișcările posibile în timpul funcționării. Senzorii contribuie la interaciunea cu mediul inconjurator.Mecanismul de direcționare este esențial pentru ca robotul să iși îndeplinească misiunea cu success, procesând de exemplu, informațiile primite de la senzori.Pe baza acestor informații, mecanismul de direcționare reglează motoarele și planifică fiecare mișcare ce trebuie îndeplinită.

Primii roboți mobili au fost Elmer apărut în anul 1948 și Elsie, apărut in anul 1949. Acești roboți au fost construiți de Wiliam Grey Walter , ei fiind capabili să caute o sursă de lumină, dar și să evite obstacolele apărute în calea lor.

Odată cu evoluția tehnologiei, s-a născut robotul industrial pe nume Unimate. Acesta cântărea 2 tone , iar scopul său a fost inițial pentru montarea de iconoscoape pentru televizioare, dar , în cele din urmă, și-a găsit loc în industria automobile. Programele acestui robot sunt salvate drept forma unei comenzi direcționale pentru motoare pe un cilindru magnetic.De aici a pornit introducerea roboților Unimate în numeroase domenii ale producției, fiind în permanență dezvoltați și ajustați pentru a putea face față oricărei cereri complexe.

Robotii Unimate au fost dezvoltati de George Devol si Joe Engelberger.

Fig 1.1 Robotul Unimate

În fiecare an , domeniul roboticii se dezvoltă tot mai mult, oamenii făcând tot posibilul să construiască roboții asemenea oamenilor , reușind să facă ceea ce acum ceva ani părea imposibil , adică un robot capabil să gandească singur.

Roboții au contribuit și au în continuare un rol extrem de important în obținerea anumitor informații care sunt foarte greu de obținut, mai ales in medii neprielnice omului. Putem spune că roboții au contribuit la evoluția speciei noastre. De-a lungul timpului, toate domeniile au fost robotizate, astfel că în prezent, nu există vreun domeniu în care să nu fie folosiți roboți și nici nu mai există vreo persoana care să nu fi auzit vreodată termenul de robot.

Popularitatea roboților a crescut foarte mult datorită filmelor și literaturii. Acestea au prezentat lumii roboții într-o manieră unică. Acestea au schimbat percepția pentru acești roboți mobili și au pus în evidență avantajele și dezavantajele extinderii dezvoltării acestui domeniu.

În capitolul al II-lea este descris robotul mobil , din ce este format, prin ce metode poate evita obstacolele aparute dar și detalierea domeniilor de utilizare precum interconexiuni, procesarea suprafețelor , tăierea și transportul. Un subcapitol aparte sunt domeniile speciale unde sunt utilizați roboții. Acestea sunt unele foarte interesante precum spațiul extraterestru, laboratoare de cercetare dar și domeniul construcțiilor. Sistemul senzorial al roboților mobili este un alt subiect tratat în acest capitol datorită numeroaselor caracteristici pe care le deține. De asemenea sunt descrise cele mai cunoscute efecte fizice utilizate pentru construcția sensorilor activi precum, efectul termoelectric, piezoelectric, efectul de inducție electromagnetică, efectul Hall și efectul fotovoltaic. Toate acestea , puse laolalta, nu pot face nimic fără un limbaj de programare adecvat. Astfel, pentru funcționare, unui robot mobil ii trebuie un limbaj de programare pe care utilizatorul să îl poată introduce astfel robotul putând funcționa în parametri optimi.

În cel de-al III-lea capitol este prezentat un microcontroller cu toate componentele sale. El este format dintr-o unitat centrală , din memorie și o gamă largă de dispozitive periferice. Sunt prezentate cele 5 componente cheie de la un microprocesor , implementarea memoriei microcontrollerelor. Este prezentat și un scurt program care adună două locații de memorie și explicarea lui linie cu linie. Placa de dezvoltare Arduino este un subiect abordat pe larg, dat fiind construită cu ajutorul unui microcontroller ATMega. Este prezentată istoria Arduino încă de la începuturi, de unde provine numele de Arduino și până la cele mai avansate variante existente în ziua de azi.

În cel de-al IV-lea capitol sunt prezentate mai multe tipuri de roboți mobili, scopul lucrării fiind chiar construirea unuia având abilitatea de a evita obstacolele apărute în calea sa. Sunt prezentați roboți precum AIRAT2 , mini robotul RCX 1.0 , minirobotul Polulu 3pi, ROBOTUL Inex Pop-Bot Standard și robotul construit pe platforma Arduino. Tot în acest capitol sunt descrise toate componentele robotului precum motoarele de curent continuu , principiul de funcționare, elementele constructive ale unui motor, senzorul ultrasonic și funționarea sa, avantajele driverului de motoare și specifiicațiile sale. Construcția robotului , pas cu pas, este și ea prezentată moment cu moment, fiecare piesă montată având o scurtă explicație și chiar o poză pentru a întelege mai ușor cum se construiesște un astfel de robot mobil.

În capitolul V sunt prezentate scurte concluzii și probleme apărute la construcția acest robot mobil, precum și soluțiile lor.

2. Aplicații industriale

2.1 Generalități

Robotul mobil este un sistem complex care poate efectua activități diferite în multe situații specifice lumii în care trăim. El este format din dispozitive echipate cu servomotoare dar și senzori ce operează într-un spațiu real, marcat de o serie de proprietăți fizice și care trebuie să planifice mișcările astfel încât robotul să realizeze o sarcină în funcție de starea inițială a sistemului și în funcție de informația existentă, legată de mediul de lucru. Pentru îndeplinirea cu succes a acestor sarcini depind atât de cunoștințele pe care robotul le are asupra configurației inițiale a spațiului de lucru, cât și de cele obținute pe parcursul evoluției sale. Problemele care apar la roboții mobili sunt următoarele: evitarea impactului cu obiectele care apar pe traiectoria robotului, determinarea poziției și orientării robotului, planificarea celei mai bune unei traiectorii de mișcare.

La unui sistem robotic automat distribuit, pozițiile spațiale sunt de o extremă importanță iar de ele depinde îndeplinirea misiunilor dorite și funcționarea întregului sistem. Altfel spus, robotul trebuie să își calculeze mișcările pe care le are de făcut, să decidă automat ce mișcări să execute pentru a îndeplini o sarcină, în funcție de aranjamentul momentan al obiectelor din spațiul său de lucru. Planificarea mișcărilor nu face parte dintr-o singură problema, ci dintr-un ansamblu de probleme dintre care unele sunt mai mult sau mai puțin varianteale celorlalte.Evitare coliziunii cu obstacole fixe sau mobile (de exemplu alți roboți mobili) aflate în spațiul de lucru al robotului se poate face numeroase metode: realizarea unei apărători mecanice care prin deformare oprește robotul, folosireasenzorilor care măsoară distanța până la obstacolele de pe direcția de deplasare, folosirea senzorilor de proximitate, folosirea informațiilor corelate de la mai multe tipuri de senzori. Localizarea obiectelor se poate realiza și prin contact fizic, dar pentru acest lucru trebuie impuse anumite restricții asupra vitezei de mișcare a structurii manipulate. Contactul fizic dintre robot și obiectele din mediu generează forțe de reacțiune care modifică starea robotului. Vitezele mari de lucru fac ca efectele dinamice ale unui contact fizic cu obstacole sau obiecte manipulate să fie riscante și pot duce la deteriorarea obiectelor sau a robotului. Navigarea robotului este posibilă și fără o determinare a poziției și orientării fațăde un sistem de coordonate fix, dar această informație este utilă pentru sisteme de comandă a mișcării. Metodele de navigație mai des folosite sunt: măsurarea numărului de rotații făcute de roți, folosirea de acceleratoare și giroscoape, geamanduri electromagnetice instalate în teren, semnalizatoare pasive sau semipasive de tip optic sau magnetic.

Pentru utilizarea roboților in aplicații industriale trebuie să ținem seama de anumite aspecte , din alt punct de vedere decât al robotizării în sine. Componente foarte importante sunt dispozitivele periferice, precum senzorii și sistemele de transport. Comunicația este și ea foarte importantă pentru a putea integra roboții in sistemele de producție.

În ziua de azi, aplicațiile roboților sunt extrem de variate. Pentru anumite aplicații sunt roboți speciali, iar pentru altele există roboți cu o structură mecanică standard. Fiecare gen de aplicație are propriile nevoi, poate din această cauză, nu s-a construit încă un “robot universal”.

Principalele domenii de utilizare a roboților

Principalele domenii de utilizare a roboților sunt:

Interconexiuni

Procesarea suprafețelor

Tăiere

Transport

2.2.1 Interconexiuni

Tehnologia asamblărilor prin sudură și lipire inseamnă un domeniu cu un grad foarte mare de automatizare. Robotul preia muncile monotone și periculoase precum sudarea în punctese poate face numeroase metode: realizarea unei apărători mecanice care prin deformare oprește robotul, folosireasenzorilor care măsoară distanța până la obstacolele de pe direcția de deplasare, folosirea senzorilor de proximitate, folosirea informațiilor corelate de la mai multe tipuri de senzori. Localizarea obiectelor se poate realiza și prin contact fizic, dar pentru acest lucru trebuie impuse anumite restricții asupra vitezei de mișcare a structurii manipulate. Contactul fizic dintre robot și obiectele din mediu generează forțe de reacțiune care modifică starea robotului. Vitezele mari de lucru fac ca efectele dinamice ale unui contact fizic cu obstacole sau obiecte manipulate să fie riscante și pot duce la deteriorarea obiectelor sau a robotului. Navigarea robotului este posibilă și fără o determinare a poziției și orientării fațăde un sistem de coordonate fix, dar această informație este utilă pentru sisteme de comandă a mișcării. Metodele de navigație mai des folosite sunt: măsurarea numărului de rotații făcute de roți, folosirea de acceleratoare și giroscoape, geamanduri electromagnetice instalate în teren, semnalizatoare pasive sau semipasive de tip optic sau magnetic.

Pentru utilizarea roboților in aplicații industriale trebuie să ținem seama de anumite aspecte , din alt punct de vedere decât al robotizării în sine. Componente foarte importante sunt dispozitivele periferice, precum senzorii și sistemele de transport. Comunicația este și ea foarte importantă pentru a putea integra roboții in sistemele de producție.

În ziua de azi, aplicațiile roboților sunt extrem de variate. Pentru anumite aplicații sunt roboți speciali, iar pentru altele există roboți cu o structură mecanică standard. Fiecare gen de aplicație are propriile nevoi, poate din această cauză, nu s-a construit încă un “robot universal”.

Principalele domenii de utilizare a roboților

Principalele domenii de utilizare a roboților sunt:

Interconexiuni

Procesarea suprafețelor

Tăiere

Transport

2.2.1 Interconexiuni

Tehnologia asamblărilor prin sudură și lipire inseamnă un domeniu cu un grad foarte mare de automatizare. Robotul preia muncile monotone și periculoase precum sudarea în puncte și sudarea cu arc. În aplicațiile de lipire si cositorie sunt emisii de gaze toxice care afectează sănătatea angajaților.

Sudarea în puncte este una din principalele aplicații ale unui robot. În domeniul automobilelor, sudarea caroseriilor a fost preluată de roboți, astfel costurile au scazut foarte mult.

În cazul sudarii punct cu punct, avem nevoie de forțe de apăsare mari, pentru ca piesele metalice să creeze o zona de contact. După ce s-a realizat contactul , un transformator generează curent de amperaj mare, care va trece prin zona de contact între piesele metalice. Datorită curentului mare, se va produce topirea metalului în zona de contact , în acest fel realizandu-se sudarea.

Pentru sudarea în puncte, putem folosi și alte mașini speciale, însă tot utilizarea roboților este mai benefică, flexibilă, având un timp de pregatire mult mai scăzut în cazul în care suntem nevoiți să schimbăm producția. În această industrie a automobilelor, se folosesc roboți cu 6 grade de libertate, astfel mișcarea este limitată la poziționare între diverse puncte din spațiul său de lucru. Intre două puncte de sudură, pot exista și alte puncte de poziționare intermediară, pentru a nu se produce coliziuni. In medie, pentru caroseria unui automobil sunt necesare aproximativ 3000 de puncte de sudură.

Fig. 2.1 Exemplu de roboți care realizează sudare în puncte a unei caroserii de automobile.

Sudarea cu arc electric este și ea folosită în domeniul utilizării roboților. Această tehnologie utilizează mișcarea robotului pe o anumită traiectorie cu o viteză precizată. Pachetele de programe software permit analiza unor proiecte CAD și generarea de programe pentru roboți, astfel încât acesta să poată urmări traiectorii foarte complexe. Pentru urmarirea formei sudurii, ne sunt de ajutor senzorii tactili, optici si electrici. Roboții care sunt echipați cu senzori au posibilitatea de a corecta deviații ale poziției pieselor. Ei trebuie să aibe structura necesară rezistării la condțiile dure dintr-un atelier de sudură precum fum, variații de temperatura, scântei.

O altă cerința în sudarea cu arc este aceea de a avea alimentare continuă cu material de electrod, cu gaz inert si cu lichid de răcire. Sudarea cu arc nu necesită o vitează constantă, însă trebuie să aibe o mișcare exactă a electrodului. Pentru optimizarea mișcarilor este necesară o proiectare inteligentă a dispozitivelor de alimentare cu piese.

Sunt foarte multe aplicații în care dozarea și aplicarea cleiurilor de lipire pe suprafețe sunt facute cu ajutorul roboților. Particularitățile roboților folosiți pentru lipire sunt asemănătoare cu ale celor utilizați în sudarea cu arc, adică mișcare continuă pe o traiectorie precisă. Dozarea lichidului de lipire este sincronizată cu viteza de deplasare a diuzei deasupra materialului. In acest fel, la schimbări bruște de direcție în care viteza este scăzută, se limitează și debitul de soluție aplicată. In cazul aplicațiilor de lipire, putem atinge viteze mai mari de deplsare, decât in cazul aplicațiilor de sudare cu arc electric.

O altă aplicație cu rată mare de folosința a roboților este cositoria componentelor electronice pe plăci imprimate. Această tehnologie implică cositoria componentelor de același tip de celule de lucru diferite sau că același robot care va schimba aparatul de cositorit dupa aplicarea mai multor piese de același tip.

Pentru lipirea componentelor electronice se folosesc și alte tehnologii precum topirea prin inducție , prin lumină în infraroșu sau cu laser.

Fig. 2.2 Aplicație de cositorie cu robot.

2.2.2 Procesarea suprafetelor

Cele mai folosite utilizări in domeniul procesării suprafețelor sunt:

Vopsire

Polizare și slefuire

Debavurare

Roboții de vopsit sunt folosiți de zeci de ani in domeniul auto. Din moment ce robotul de vopsire este programat, vopseaua este aplicată fără a lăsa urme și fără scurgeri datorită aplicării cu precizie și în mod constant. Roboții pot fi instalați în diferite locații pentru a ne permite o flexibilitate mult mai mare. Ei au implementat un soft anti-coliziune care ne ajută să nu se producă ciocniri din care pot rezulta pagube foarte mari. Astfel , roboții pot lucra unul langă celălalt fără să apară probleme.

Particulele de vopsea care ies din pistol sunt electrizate, în acest fel ele aderând mult mai bine la suprafața metalului, iar pierderile de vopsea fiind foarte mici. Pentru o vopsire de calitate viteza mișcării pistolului trebuie sa fie constantă , la fel ca distanța dintre pistolul de vopsit și suprafața metalului.

Roboții au avantajul că pot memora pozițiile de miscare, firmele bazându-se mult pe acest aspect. Vaporii de solvent sau picăturile de vopsea nu vor patrunde in articulațiile roboților pentru că aceștia sunt protejați special pentru acest lucru. Folosirea roboților industriali de vopsire ne aduc numeroase beneficii precum:

– calitate de vopsire mult imbunătățită

– viteză superioară

-acuratețe

-pierderi de material extrem de mici

-eficacitate

2.2.3 Tăiere

Pentru tăierea tablelor în industrie, se folosesc mașinile de ștanțat, însa unele materiale și piese complexe nu permit utilizarea acestora. In cazul seriilor mici de fabricație, construirea unei matrițe de ștanțat, nu este deloc benefică din punct de vedere economic. În astfel de cazuri putem folosi roboți care trebuie sa mânuiască diverse unelte de tăiere. Procesele de debitare constituie un pericol pentru siguranța operatorului uman. Pericolele ce pot apărea sunt: emisiile de gaze , umiditate, zgomot, praf, lumină de laser. Principalele tehnologi de debitare utilizate cu roboți sunt: tăiere cu jet de apă, tăiere cu laser, tăiere prin mijloace convenționale.

Debitarea cu jet de apă este folosita pentru tăierea de materiale moi precum plasticul si materialele compozite. Tăierea se face folosind un jet de apă sub presiune de pana la o mie de bari, cu diametrul de 0,15 mm și este plimbat peste material. Debitul de apă este mic, de 0,5 litri pe minut, iar valvele speciale pot opri jetul în cateva milisecunde. Zonele de tăiere cu jet de apă sunt izolate in cabine de lucru, iar roboții trebuie să fie capabili sa reziste la uminidatea ridicată rezultată din zona de tăiere.

Tăierea cu laser se bazează pe separarea termică a materialului. Acesta este încălzit la temperaturi foarte ridicate, pana la topire sau evaporare. Cu tehnologia laser se pot tăia materiale metalice dar si nemetalice, precum plastic și ceramică. Sunt mai multe tehnici de tăiere cu laser care depind de tipul de gaz folosit pentru suflare:

Tăiere prin sublimare

Raza laserului vaporizează metalul, iar în locul de tăiere trebuie suflat un gaz inert care va îndepărta materialul vaporizat

Tăiere prin topire

Laserul va topi materialul, iar gazul inert v-a îndeparta topitura. Cu ajutorul acestei tehnologi, robotul poate tăia metalul în atmosfera controlată fără să producă oxidarea suprafețelor de separație.

Tăierea cu reație exotermă

Materialul este încălzit cu ajutorul unei raze laser până se ajunge la apropierea punctului de topire, apoi un gaz special de ardere precum oxigenul, este suflat deasupra zonei de tăiat. Va avea loc un proces exoterm care produce o încălzire suplimentară și topește materialul.

Roboții utilizează pentru tăiere două tehnologii convenționale:

Cu flacără autogen

Această metodă este cea mai veche și este folosită pentru procedee de tăiere termincă. Se poate folosi pentru taierea oțelului slab aliat cu grosime cuprinsa intr 3 mm si 200 mm. Pentru o tăiere de calitate, selecția gazului este foarte importantă.

Tăierea cu arc de plasmă

Tăierea cu plasmă, spre deosebire de tăierea cu flacără autogenă, nu conduce la aprinderea si arderea materialului, datorită plasmei care are destulă energie pentru a putea provoca topirea materialului. Această metodă este folosită pentru tăierea metalelor pentru care nu se poate folosi procedeul autogen și anume aliaje crom nichel , cupru, otel inox. La momentul actual această tehnologie se folosește si pentru tăierea oțelurior nealiate sau slab aliate cu grosimi de până la 40mm.

2.2.4 Transport

Numeroase procese tehnologice se realizează la diverse posturi de lucru, astfel încat apare necesitatea de a transporta o anumită piesă dintr-un anumit loc în altul. Un robot poate face astfel de aplicații, în special în domeniile unde munca este prea obositoare sau monotonă pentru un operator uman. Sunt trei timpuri de aplicații de transport și anume :

Mânuirea unor piese

Paletizare

Alimentarea cu piese a unor mașini-unelte

Roboții asigură fluxul tehnologic pentru stații și mașini de prelucrare cu timp de ciclu mic. Ei se folosesc in special pentru mânuirea unor piese foarte grele, voluminoase sau care au temperatură ridicată.

Un alt exemplu de mânuire ar fi sortarea. În acest tip de aplicație, robotul va aranja piese după anumite cerințe pentru asamblare ulterioară sau pentru alimentarea mai multor standuri de lucru.

Fig. 2.3 Mânuirea unor obiecte voluminoase .

Paletizarea este un proces care se folosește la începutul și la sfârșitul unei stații de procesare. Paletizarea automată se poate folosi cu ajutorul roboților cu brat îndoit. O soluție completă pentru paletizare ar conține un soft de împachetare , roboți pentru paletizare, dar si echipament pentru securizarea mărfii. Soft-ul de impachetare este programat în special pentru a asigura stabilitatea paletului, însa și pentru a obține un nivel maxim de umplere.Robotul este proiectat astfel încat prinderea cu ajutorul cleștilor să fie realizată din toate cele patru parți.

Fig. 2.4. Paletizare cu robot.

Domeniul militar este luat în considerare de către armată în perspectiva înlocuirii soldaților combatanți cu roboții mobili , pentru a reduce riscurile pierderilor umane. Roboții mobili de cele mai ingenioase și robuste configurații sunt aruncați în clădiri și incinte din zone de conflict , în scopuri de investigare și chiar anihilare a inamicului.

2.3 Domenii speciale de utilizare a roboților

În afară de producția industrială, există și alte domenii în care utilizarea roboților s-a impus sau a fost eficientă. În aceste domenii nu putem vorbi de raportul între costul robotului și un anumit număr de produse.

Spațiul extraterestru este unul din domeniile în care roboții sunt prezenți. Ei s-au impus în acest domeniu pentru că instalațiile pentru susținerea vieții si aprovizionarea astronauților sunt foarte scumpe din punctul de vedere al tehnologiei și din acest motiv in misiunile spațiale sunt preferate sistemele automatizate.

Curiosity este unul dintre roboții care au efectuat misiuni extraterestre. El cântarește 900 kilograme, dintre care 80 fiind numai cu echipamente știintifice, are lungimea de 2.9 metri, lățimea de 2.7 metri , iar înăltimea este de 2.2 m. Curiosity este alimentat de un generator de radioizotopi termoelectric.

Sistemele de alimentare cu radioizotopi sunt generatoare care produc electricitate din dezintegrarea izotopilor radioactivi, precum plutoniu-238, care este un izotop non-fisionabil de plutoniu. Căldura degajată prin descompunerea acestui izotop este transformată în energie electrică prin termocuple, oferind putere constantă în toate anotimpurile. Căldura reziduală poate fi utilizată prin conducte pentru a încălzi restul sistemelor. Curiosity este alimentat de 4.8 kg de plutoniu-238 dioxid furnizat de departamentul american de energie.

Generatorul robotului este de cea mai nouă generație, fiind construit de Boeing și Idaho National.

Temperaturile de la locul de aterizare pot varia între -127 si 40 ° C și prin urmare, sistemul termic va încălzi roverul pentru cea mai mare parte a anului. Sistemul termic va face acest pasiv, prin disiparea căldurii a componentelor interne. Robotul are două calculatoare identice configurația fiind alcătuită dintr-o memorie EEPROM de 256 kB , 256 MB Dram și 2 GB memorie flash. Curiosit este echipat cu un sistem de comunicații performant, acesta putând trimite informații direct celor de pe Pământ.

Robotul Curiosity, montat pe șase roți, posedă și un brat articulat lung de 2,1 metri, capabil să foreze pana la șase centimetri in interiorul rocilor -fiind o premieră pentru misiunile de pe Marte. Eșantioanele recoltate vor fi inmagazinate intr-unul dintre cele două laboratoare din interiorul robotului, unde vor fi analizate.

Alte instrumente vor monitoriza mediul inconjurator, pentru a detecta in special metanul, adeseori asociat cu prezența vieții pe Terra, dar care a fost deja găsit si pe Marte in anumite anotimpuri, de o sonda americană ce a fost plasată pe orbita marțiană.

Curiosity masoară și radiațiile care pot sa afecteze viitoarele misiuni spre Marte, ce vor avea echipaj uman la bord. Robotul dispune și de o stație meteo.

Un alt domeniu de utilizare al roboților este domeniul laboratoarelor de cercetare. Fabricarea unui produs medicamentos are nevoie de maximă igienă și o precizie ridicată. Toate produsele farmaceutice sunt produse în camere sterile, iar prezența omului în aceste locuri ar putea compromite producția. Unele procese de producție necesită un control strict de climatizare dar și un mediu foarte curat. Un exemplu ar putea fi producția de semiconductori, circuite integrate și de materiale magnetice pentru stocarea datelor. Aceste producții trebuie realizate în camere sterile, întrucât aici temperatura si umiditatea sunt menținute constante , iar aerul trebuie să fie cât mai curat, fără particule de praf, aerosoli, etc. Deseori roboții sunt folosiți pentru activități de manipulare. Mișcările trebuie să fie deseori extrem de precise.

Domeniul construcțiilor folosește destul de puțin roboții. Oamenii trebuie să lucreze in orice condiții de vreme, in aer liber , trebuie să manipuleze obiecte de mare tonaj in spații incomode, astfel apărând pericolul de accidente. Din această cauza, este de dorit ca anumite lucrări să fie automatizate. Roboții utilizați în construcții lucrează în domenii precum:

Lucrări de zidărie

Ramforsări în construcția prefabricatelor

Producția de elemente pentru tavan și pereți

Construcții de clădiri automatizate

Roboții trebuie să fie capabili să reziste la condițiile pe care le îndură și alte mașini din construcții

Să fie rezistenți la apă, noroi , mizerie

Să poata lucra în orice condiții, indiferent de vreme

Să poată fi mutați ori de câte ori este nevoie

Să fie capabili să reziste șocurilor care pot apărea din cauza drumurilor neamenajate

2.4 Dispozitive adiționale pentru roboți

Un robot , la fel ca un om, are nevoie de diverse piese, instrumente și dispozitive de măsură , pentru a putea îndeplini o muncă de calitate superioară într-un timp cât mai scurt. Din acest motiv, un robot are in spațiul său de lucru câteva dispozitive ajutătoare care îl ajută să îndeplinească anumite misiuni. Printre cele mai folosite dispozitive adiționale folosite de roboți sunt:

Sisteme de transport

Senzori

Stații de poziționare a pieselor

Mașini unelte

Depozite cu stocuri

Dispozitive de prindere

2.4.1 Sistemul senzorial

Senzorul este un dispozitiv conceput pentru a preleva o informație dintru-un proces mecatronic folosind o mărime fizică asociată unui fenomen fizic. Adesea, daca mărimea fizică primara generată de către senzor nu este de natură electrică, ea este apoi convertită într-o mărime fizică de natură electrică. În acest fel, informația captată din procesul mecatronic este inclusă în final într-un semnal electric pentru care există numeroase soluții convenabile de transmisie și prelucrare.

Principalele caracteristici ale senzorilor sunt:

Domeniul de masură este diferența dintre cel mai mic semnal detectat de senzor și cel mai mare semnal care poate fi captat fără ca senzorul să se deterioreze.

Sensibilitatea este cea mai mică variație a unei mărimi fizice care poate fi detectată de către sensor

Rapiditatea sau timpul de reație este intervalul de timp scurs între variația mărimii fizice măsurate și momentul în care informația furnizată este preluată de către partea de comandă

Precizia este capacitatea de a repeta o informație transmisă către partea de comandă a sistemului mecatronic atunci când valoarea mărimii fizice măsurate se repetă și ea.

Una din cele mai cunoscute clasificări a senzorilor se referă la tipul semnalului electric de ieșire. Din acest punct de vedere, senzorii pot fi analogici sau numerici. Dacă in principiu senzorii numerici pot furniza direct date către partea de conducere a unui sistem mecatronic, senzorii analogici necesită în prealabil o conversie analog-numerică a semnalului de ieșire.

Un alt criteriu de clasificare al senzorilor ia în considerare principiul constructiv al acestora, din acest punct de vedere distingând doua categorii: senzori activi și senzori pasivi.

Senzorul activ este senzorul care convertește în energie electrică forma de energie primară prelevată din procesul mecatronic. El furnizează direct o mărime variabilă de natura electrică și deci se comportă ca un mic generator electric. Cele mai cunoscute efecte fizice utilizate pentru construcția senzorilor activi sunt urmatoarele:

Efectul termoelectric: într-un circuit format din doi conductori de natură chimică diferită , ale caror joncțiuni sunt la temperaturi diferite apare o tensiune electromotoare care depinde de diferența de temperatură a joncțiunilor.

Efectul piezoelectric: prin aplicarea unei forțe de construcție pe doua suprafețe opuse ale unor materiale numite piezoelectrice se produce, pe lângă comprimarea mecanică, și apariția unor sarcini egale și de semne contrare.

Efectul de inducție electromagnetică: un flux magnetic inductor variabil în timp prin suprafața unui circuit electric indus produce o tensiune electrică.

Efectul fotoelectric: eliberarea sarcinilor electrice sub influența unei radiații luminoase, sau mai general, producerea unei unde electromagnetice cu o anumită lungime de undă.

Efectul Hall: un câmp de inducție creează într-un corp un câmp electric de intensitate pe o direcție perpendiculară.

Efectul fotovoltaic: electroni și goluri sunt eliberați în vecinătatea unei joncțiuni pn iluminate, deplasarea lor determinând modificări ale tensiunii de la bornerele joncțiunii.

Senzorul pasiv este senzorul care își modifică impedanța proprie sub efectul mărimii măsurate. El trebuie integrat într-un circuit electronic care exploatează variația impedanței sale și creează în final o mărime variabilă de natură electrică. Variația impedanței senzorului se poate obține prin două căi importante:

Prin variația unei dimensiuni fizice a senzorului , de exemplu lungimea sa. Acest principiu de funcționare este folosit de un număr foarte mare de senzori de poziție: potențiometre, inductanțe cu miez nobil, condensator cu armături mobile, etc.

Prin deformarea senzorului sub acțiunea unei forțe exterioare. Câteva exemple pot fi: armătura de condensator supusa unei deformații, jojă de preluare a unor forțe, etc

Principalele categorii de mărimi măsurate sunt:

poziția

poziția (proximitatea)

deplasarea

viteza (liniară , unghiulară)

accelerația

forța, cuplul sau momentul unei forțte

temperature

presiunea

Robotul mobil trebuie să fie capabil să efectueze acțiuni similare cu cele ale operatorului uman. Pentru acest lucru, este nevoie de existența unor dispozitive care sa preia informații din meciul de lucru, sa realizeze interacțiunea robot – mediu cu ajutorul unor caracterististici ale obiectelor din mediu și o unitate centrală care sa preia și sa prelucreze în timp real informația senzorială , după care să o transforme într-o formă utilă pentru sistemul de comandă. Sistemul senzorial asigură măsurarea mărimilor fizice, iar daca este cazul, perceperea unor modificări semnificative ale acestor mărimi. Datorită acestor aspecte, el mai poate fi numit si sistem de măsurare. Sistemul senzorial pune in evidență caracteristicile geometrice si chimice ale obiectelor din mediul de lucru. Senzorii, datorită caracteristicilor pe care le au, pot să exploreze zona de lucru, zona de contact cea mai apropiată sau cea mai indepartată. Informațiile primite de la sistemul senzorial ajută la construirea unui model al lumii în care robotul lucrează, model in funcție de care iși va genera planurile viitoare.

2.5 Elemente de bază ale limbajelor de programare a roboților industriali

2.5.1 Introducere în tematica limbajelor de programare a roboților industriali

Limbajele de programare prezintă o serie de particularități, care aplicate în cadrul structurilor robotice se concretizează în limbaje de sine statătoare care înglobează elementele definitorii ale ambelor domenii: limbajele de programare destinate structurilor de calcul, respectiv structurile mecatronice de tip roboți industriali.

Programarea roboților se poate realiza prin mai multe metode care să nu implice obligatoriu utilizarea unui limbaj de programare. Dintre acestea se amintesc:

1) programarea manuală – trebuie precizată succesiunea mișcărilor prin intermediul unor elemente senzoriale ce definesc momentul opririi deplasării

2) programarea prin instruire – robotul trebuie deplasat în punctele dorite de către programator fără acționarea motoarelor structurii robotice

3) programare secvențială – este o programare prin instruire realizată cu acționarea motoarelor structurii robotice.

4) programarea master-slave – este o programare prin instruire care utilizează un model ce este învățat cu traiectoria, pentru ca apoi programul să fie transferat master-ului

Singura procedură de programare care implică utilizarea unui limbaj de programare dedicat este procedura de programare prin învățare – teach in procedure. Avantajele acestei metode sunt:

– viteza de mișcare

– durata mișcării

– programarea întârzierilor

– bucle de program simple

– programe simple cu ramificații depinzând de întreruperi, semnale primate de la senzori

– funcții speciale

Un limbaj de programare trebuie să dispună de un univers natural propriu. Astfel pentru programarea teach-in va trebui să existe date de tip numeric precum și un set minimal de tip text. Fiecare funcție poate fi introdusă prin intermediul unei chei speciale, taste care pot fi reprezentate printr-un șir de caractere care alcătuiesc un simbol. Simbolurile utilizate de un limbaj de programare alcătuiesc vocabularul limbajului, regulile gramaticale care permit combinații între elementele vocabularului alcătuiesc sintacsa, iar semnificația simbolurilor și a combinașiei acestora alcătuiește semantic limbajului. Organizarea limbajului poartă numele de pragmatică.

2.5.2 Elemente caracteristice limbajelor de programare destinate structurilor de calcul

În cadrul limbajelor de programare se disting clar câteva categorii de elemente care intră în alcătuirea limbajului. Dintre acestea se pot aminti:

– simbolurile limbajului

– cuvintele simbol

– date de tip obiect

– structurile de date

– operațiile asupra datelor

– algoritmul.

Elementele unui limbaj clasic de programare din punct de vedere conceptual

Variabilele

Conceptul acesta s-a impus în robotică, datorită informațiilor care sunt preluate de senzori (astfel realizându-se achiziția informației de mediu, oferită de către senzori), și datorită informațiilor prelucrate de către arhitectura de comandă și control a robotului.

O variabilă este identificată prin nume și aparține unui anumit tip simplu, implicit limbajului de programare (logic, aritmetic, cuvânt) sau unui tip compus definit de programator. Ca orice dată folosită de un calculator, o variabilă dispune de o adresă a variabilei și de conținutul acesteia.

Adresarea relativă este preferată pentru rapiditatea de execuție a programului, generându-se astfel un tabel de simboluri în care intră numele variabilelor și adresele relative ale acestora. Contorizarea acestora se face pe baza unui numărător .El este incrementat la fiecare introducere a unei noi variabile cu numărul de biți necesari memorării variabilei de tipul respectiv.

Un alt tip de variabile este cel al variabilelor tabelare sau de tip bloc. Tipul acesta este folosit foarte des mai ales pentru limbajele de programare a roboților și oferă comprimarea programelor, dar și o economie de memorie.

O structură particulară de variabile este stiva. Aceasta este constituită dintr-un masiv de memorie în care datele sunt înscrise după procedura LIFO (Last in, first out). Dacă o dată este introdusă (push) în stivă, pointerul este decrementat și apoi data este introdusă. Extragerea se face prin citirea datei și incrementarea pointerului – pop. Un alt tip particular de variabilă este coada care este opusul stivei, ea fiind o colecție de date de tip FIFO.

Datorită programării structurate, care este utilizată și ín robotică se pune problema valabilității, vieții, variabilelor de-a lungul programului. Astfel un program poate conține variabile generale a căror definire are sens de-a lungul întregului program, cät și variabile locale care au sens numai între începutul (begin) și sfârșitul (end) unui bloc component al întregului program.

Un avantaj al programării structurate este datorat alocării dinamice de memorie prin separarea programului în blocuri componente. Astfel, dacă este apelat blocul 1, la terminarea operațiilor specifice, variabilele din acest bloc sunt șterse la nivel de memorie alocată și în același spațiu de memorie, vor fi inserate variabilele altui bloc. Aceasta face ca în cazul în care nu se utilizează algoritmi recursivi evaluarea memoriei utilizate să se poată face ușor.

Subrutine

Dacă un program prezintă anumite zone care se repetă, eventual cu alți parametrii, se poate utiliza o structură de tip subrutină. Aceasta poate fi chemată din orice punct al programului, urmând ca întoarcerea după execuția subrutinei să se facă la instrucțiunea imediat următoare apelului subrutinei. Adresa de întoarcere este salvată într-o structură de tip stivă, alocarea memoriei fiind de asemenea o alocare dinamică.

Proceduri și funcții

O procedură sau o funcție sunt o extensie a conceptului de subrutină, acestea fiind de fapt subrutine adăugându-se parametri de intrare și/sau de ieșire. Procedura dispune de un nume, de un parametru de intrare și/sau ieșire ce pot fi transmiși către programul principal și un corp al procedurii în care se efectuează operații aritmetico-logice. În corpul procedurii pot fi utilizate și alte variabile interne care la ieșirea din procedură vor fi piedute. O caracteristică importantă este dată de faptul că la definirea procedurii, parametrii de intrare/ieșire sunt parametri formali urmând ca la înlocuirea lor cu cei din apel să devină parametri efectivi. Apelul procedurilor și funcțiilor diferă de cel al subrutinelor în timp ce revenirea este identică.

În cazul procedurilor, modul în care sunt furnizați parametrii de ieșire trebuie să fie studiat cu atenție. Dacă însă operațiile asupra datelor de intrare nu sunt prea complexe, iar ieșirea se face pe o variabilă se apelează la conceptul de tip funcție.

Macroinstrucțiunile

Tipul acesta de pseudoprocedură definește substituirea unor texte sau tablouri. Structura standard cuprinde o definiție a macro-ului, mai exact alocarea unui nume setului care va fi substituit și un corp al macro-ului ce definește o secvență de caractere sau apelul la alte macro-uri. Apelul unei macroinstrucțiuni se poate face prin numele atașat care are ca efect înlocuirea acestuia cu corpul macroinstrucțiunii.

Recursivitate

Sunt două tipuri de recusivitate:

Recursivitate directă , atunci când are loc autoapelarea procedurii

Recursivitate indirect , atunci când o procedură apelează o alta procedură în timpul execuției sale, procedură care la rândul său o apelează pe prima.

În robotică nu prea se apelează la acest tip de algoritm, însă folosirea acestei metode duce la realizarea unor programe mult mai compacte.

Procese și corutine

În cadrul unui program pot fi controlate mai multe procese, între care poate există o anumită relație temporală sau interdependentă.

Astfel un proces poate fi:

– în stare inactivă , atunci când procesul poate fi declanșat fie de alt proces, fie de un eveniment extern. Acesta poate fi executat sau nu în paralel cu alt proces sau poate aștepta terminarea altui proces.

– în stare activă când este executat

– în stare ready – starea premergătoare stării active și post active

– în stare de așteptare a unui eveniment – waiting

Corutinele sunt imagini ale planificării proceselor la nivelul sistemului de operare. Acestea pot fi declanșate în serie sau în funcție de comenzile de întrerupere generate.

Datorită acestora, cât și a modului în care procesele trebuie să aibă loc apare termenul de sincronizare și implicit de variabile de sincronizare. Acestea, prin aprinderea lor sesizează unui alt proces faptul că procesul urmărit de respectiva variabilă s-a terminat sau a început, urmând ca alt proces să fie inițializat, pus în stare de așteptare sau terminat.

2.5.3 Conceptele specifice Limbajului Robot

Robotica s-a impus și se impune ca un domeniu aparte în știință acaparând mai multe discipline precum mecanică, electronică, automatică, programare. Această poziție implică revendicarea unor termeni specifici care să permită:

– o mai ușoară operare și programare pentru operator

– o apropiere cât mai strânsă cu programarea clasică;

– reducerea complexității în cazul dezvoltării sistemului.

Specificul limbajelor de programare al roboților este acela că obiectele cu care acesta operează se află într-o lume reală, în care distanțele, pozițiile și orientarea sunt elemente de bază. Aceste cerințe au implicat o serie de particularități și termeni specifici.

Sistem de referință – Frame

Orientarea și poziția end-effectorului dar și a întregii arhitecturi robotice este definită ca fiind poziția robotului, respectiv orientarea acestuia. Acestea sunt definite în funcție de un sistem referențial de bază. Cum robotul sau anumite elemente ale arhitecturii acestuia sunt în mișcare,putem atașa sisteme de referință fiecărui element, orientarea și poziția acestuia putând fi exprimată fie relativ la bază, fie la elementul inferior.

Din punctul de vedere al poziționării robotului, modul de definire al punctului țintă (dorit) nu are prea multă importanță, deoarece comanda robotului se face la nivel de articulație. Pentru astfel de comandă este necesară determinarea corelației care trebuie să existe între coordonatele robot ce trebuiesc alocate fiecărei articulații. Această corelație poartă numele de cinematică inversă.

Controlul mișcării robotului

Deplasarea robotului între două puncte se poate realiza fie direct, cu viteza maximă cum este cazul controlului punct cu punct, fie prin puncte intermediare care definesc fie o dreaptă sau o curbă continuă de diferite ordine.

Cazul acesta se rezolvă utilizând diverse metode de interpolare: liniară, circulară sau parabolică. La rândul ei interpolarea se poate realiza fie la nivelul articulațiilor robotului, fie la nivelul sistemului cartezian

3. Microcontrollere utilizate pentru comanda roboților mobili

3.1 Generalități

Un microcontroller (MC, MCU) este format dintr-o unitate centrală (CPU) căreia i s-a adăugat, pe acelasi microcircuit (on-chip), in primul rând memorie si apoi o gamă (largă si diversificata) de dispozitive periferice (specializate pe interfața cu mediul exterior). El poate constitui astfel un sistem de calcul de sine stătător, realizat la un raport preț/performanță optim, orientat pe controlul interacțiunii cu lumea exterioară (controler industrial). Un microcontroler este o arhitectură de calcul orientată pe control: el trebuie să "simtă" evenimentele externe si să le"răspundă" (în sensul de a controla) cât mai eficient, din punct de vedere al timpului de calcul si al resurselor folosite. Această interacțiune este, de cele mai multe ori, bazată pe utilizarea întreruperilor. Din acest motiv, toate microcontrolerele înglobează si un sistem de întreruperi performant si simplu de utilizat.

Resursele integrate la nivelul microcircuitului ar trebui să includă, tipic, următoarele componente:

– o unitate centrală (CPU), cu un oscilator intern pentru ceasul de sistem

– o memorie locală tip ROM/PROM/EPROM/FLASH si eventual una de tip RAM

– un sistem de întreruperi

– I/O – intrări/iesiri numerice (de tip port paralel)

– un port serial de tip asincron si/sau sincron, programabil

– un sistem de temporizatoare/numărătoare (timere) programabile

Un microcontroler tipic mai are, la nivelul unității centrale, si facilități de prelucrare a informației la nivel de bit, de acces direct si usor la intrări/iesiri si un mecanism de prelucrare a întreruperilor rapid si eficient.

Este posibil ca la acestea să fie adăugate, la un preț de cost avantajos, caracteristici specific sarcinii de control care trebuie îndeplinite:

– un sistem de conversie analog numerică (una sau mai multe intrări analogice)

– un sistem de conversie numeric analogic si/sau iesiri PWM (cu modulare în durată)

– un comparator analogic

– o memorie de date nevolatilă de tip EEPROM

– facilități suplimentare pentru sistemul de temporizare/numărare (captare si comparare)

– un ceas de gardă (timer de tip watchdog)

– facilități pentru optimizarea consumului propriu

Un procesor numeric de semnal (DSP- Digital Signal Processor) este caracterizat de existența unei unități central (CPU) specializată pe operații de calcul intensiv si foarte eficient, în virgulă fixă sau virgulă mobilă.

Arhitectura CPU este optimizată în acest caz pentru executarea într-un timp minim a operațiilor de calcul necesare implementării unor algoritmi de prelucrare numerică a semnalului.

Majoritatea procesoarelor numerice de semnal au o arhitectură de sistem de tip Harvard, cu spații de memorie separate pentru program si date. Se întâlnesc si aici, din ce în ce mai des, caracteristici specific microcontrolerelor: prezența memoriei on chip si a unor dispozitive periferice specializate.

La ora actuală, granița dintre anumite categorii de microcontrolere, microprocesoare si multe din procesoarele numerice de semnal este din ce în ce mai puțin distinctă.

Există cel puțin 5 componente cheie prezente la un CPU (microprocesor):

unitatea aritmetică si logică (ALU-Arithmetic Logic Unit) responsabilă cu tot ce înseamnă operații de calcul aritmetic si/sau logic

registrele (registers) utilizate pentru memorarea temporară a informației cu care lucrează ALU

unitatea de control (Control Unit) responsabilă cu controlul operațiilor efectuate de CPU pe baza decodificării instrucțiunilor

un sistem de magistrale, cai de date (buses) interne si externe, care interconectează componentele interne si realizează conectarea cu exteriorul

un ceas (clock) la baza căruia stă ceasul sistem (system clock) cel care realizează periodizarea tuturor operațiilor CPU

Alte resurse tipice prezente de obicei la un microprocesor sunt:

– un sistem de întreruperi(interrupts system) si

– un sistem de acces direct la memorie (DMA-Direct Memory Acces).

Orice sistem de calcul va avea nevoie, în afară de microprocesor (CPU), de memorie (memory) si de modalități de conectare la dispozitivele de intrare-iesire (I/O devices) prin intermediul cărora se face legătura cu lumea exterioară.

Utilizarea unui microcontroler constituie o soluție prin care se poate reduce dramatic numărul componentelor electronice precum și costul proiectării și al dezvoltării unui produs.

Un efect secundar dar de dorit este si creșterea fiabilității aplicației/sistemului (prin reducerea numărului de componente si interconexiuni, reducerea disipației termice, etc.)

Utilizarea unui microcontroler, oricât de evoluat, nu elimină unele componente ale interfeței cu mediul exterior (atunci când ele sunt chiar necesare): subsisteme de prelucrare analogică (amplificare, redresare, filtrare, protecție-limitare), elemente pentru realizarea izolării galvanice (optocuploare, transformatoare), elemente de comutație de putere (tranzistoare de putere, relee electromecanice sau statice).

3.1 Aspecte legate de implementarea memoriei microcontrolerelor

În afară de memoria locală de tip RAM, de dimensiuni relativ reduse (de la x10 octeți la x1k), implementată ca atare sau existentă sub forma unui set de registre și destinată memorării datelor (variabilelor), mai există o serie de aspecte specifice, marea majoritate a acestora fiind legată de implementarea fizică a memoriei de program (și eventual a unei părți a memoriei de date) cu ajutorul unor memorii nevolatile.

3.1.1 Implementarea memoriei de program, programarea memoriei de program

(NOR) FLASH EPROM – este o soluție mai bună decât EPROM-ul propriu-zis atunci când este necesar un volum mare de memorie program (nevolatilă); mai rapidă și cu un număr garantat suficient de mare ( cca. 100 000) de cicluri de programare (de ștergere/scriere), este caracterizată și prin modalități mai flexibile de programare; este utilizată numai ca memorie de program.

OTP – majoritatea producătorilor oferă si variante de microcontrolere la care memoria locală de program este de tip OTP (One Time Programmable), practic o memorie PROM identică intern cu varianta EPROM, dar fără fereastra de cuarț pentru ștergere (deci și mai ieftine); – aceste variante pot fi utilizate ca o alternativă pentru o producție limitată, până în momentul testării și validării finale a codului, moment în care pot fi comandate variantele (mask) ROM propriuzise, cele mai economice pentru o producție de masă.

EEPROM – multe microcontrolere au și o memorie de acest tip, de dimensiune limitată (de la x10 octeți la x K octeți), destinată memorării unui număr limitat de parametrii (memorie de date) care eventual trebuie modificați din timp în timp; este o memorie mai scumpă, relativ lentă (la scriere), dar cu un număr de cicluri de ștergere/scriere mai mare ca FLASH-ul (de la 100 000 la 1000000).

FRAM (RAM feroelectric, nevolatil) – practic fără limitări ca număr de cicluri de scriere dar scump, dimensiuni limitate de preț, deocamdată puțin răspândit

NOVRAM (RAM nevolatil) – realizat prin alimentarea locală (baterie, acumulator) a unui masiv RAM CMOS atunci când este necesar un volum mare de memorie de program și date nevolatilă; – Scumpă, dar mult mai rapidă decât toate celelalte tipuri și fără limitări ca număr de cicluri de scriere.

3.1.2 Programarea "In System" (ISP-In System Programming)

– folosirea unor memorii nevolatile de tip FLASH face posibilă și "programarea" unui astfel de microcontroler fără a-l scoate din sistemul în care este încorporat (programare on-line, In System Programming);

– programarea se face de regulă prin intermediul unei interfețe seriale

dedicate de tip ISP (poate avea nume diferite) sau a unei interfețe standard JTAG.

– Există microcontrolere la care această programare se poate face prin intermediul portului serial asincron sau al interfeței CAN (Controller Area Network) dar cu ajutorul unui program bootloader.

– Este posibilă astfel modificarea cu ușurință a codului program sau a unor constante de lucru (local sau de la distanță -remote update).

3.1.3 Bootloader

– multe din microcontrolerele recente la care memoria de program este de tip FLASH au și facilitatea (au de fapt instrucțiuni dedicate acestui scop) de a putea și scrie în această memorie de program fără a utilize un circuit de programare extern.

– astfel în microcontroler poate exista permanent (rezident) un cod de mici dimensiuni (denumit și bootloader) care pur și simplu va încărca prin intermediul portului serial (este doar un exemplu) codul utilizator sau constantele pe care acesta vrea eventual să le actualizeze.

– Bootloader-ul este și cel care lansează în execuție programul utilizator după încărcarea acestuia.

Un microcontroller diferă de un microprocesor în mai multe feluri. În primul rând si cel mai important este modalitatea de funcționare. Pentru a fi folosit, microprocesorului trebuie să i se adauge alte componente ca memorie, sau componente pentru primirea si trimiterea de date. Aceasta înseamnă că microprocesorul este inima calculatorului. Pe de alta parte, microcontrolerul este proiectat să fie toate acestea într-unul singur. Nu sunt necesare alte componente externe pentru aplicarea sa pentru că toate perifericele necesare sunt deja incluse în el. Astfel, economisim timpul si spatiul necesare pentru construirea de aparate.

3.1.4 Unitatea de memorie

Memoria este partea microcontrolerului a cărei funcție este de a culege și de a pastra datele. Pentru a întelege mai ușor, am putea spune că memoria este un dulap cu mai multe sertare. Dacă presupunem că am marcat sertarele într-un asemenea fel încât sa nu fie confundate, oricare din conținutul lor va fi atunci ușor accesibil. Este suficient să se știe desemnarea sertarului și astfel vom cunoaște conținutul său.

Fig. 3.1. Exemplu model simplificat de unitate de memorie.

Pentru o anumită intrare se va obține conținutul unei anumite locații de memorie adresate. Două noi concepte ne sunt aduse: adresarea și locația de memorie. Memoria este cuprinsă din toate locațiile de memorie, iar adresarea nu este altceva decât selectarea uneia din ele. Noi trebuie să selectăm locația de memorie la un capat, iar la celălalt capăt trebuie să așteptăm conținutul acelei locații.Memoria trebuie să permită și scrierea în ea nu doar citirea. Aceasta se face prin asigurarea unei linii adiționale numită linie de control. Vom desemna aceasta linie ca R/W (citeste /scrie). Linia de control este folosită felul: dacă r/w=1,atunci se face citirea, iar dacă opusul este adevărat atunci se va face scrierea în locația de memorie. Memoria este primul element, dar pentru funcționarea microcontrollerului mai avem nevoie și de altele.

3.2 Unitatea de procesare centrala

Adăugăm încă 3 locații de memorie pentru un bloc specific care va avea o capabilitate incorporată de înmulțire, împărțire, scădere și îi mutăm conținutul dintr-o locație de memorie în alta. Partea pe care am adăugat-o se numește "unitatea de procesare centrala" (CPU). Locațiile ei de memorie sunt numite registri.

Fig. 3.2. Unitate simplificată de procesare centrală cu trei regiștri

Prin urmare, regiștrii sunt locații de memorie al caror rol este de a ajuta prin executarea a diferite operații matematice sau a altor operații cu date oriunde vor fi găsite datele. Avem două entități independente (memoria si CPU) care sunt interconectate, și astfel orice schimb de informații este ascuns, ca ți functionalitatea sa. În cazul în care dorim să adăugăm conținutul a două locații de memorie și întoarcem rezultatul înapoi în memorie, vom avea nevoie de o conexiune între memorie si CPU. Pe scurt, trebuie să avem o anumită "cale" prin care datele circulă de la un bloc la altul.

3.3 Bus-ul

Calea este numită "bus"- magistrala. Din punct de vedere fizic el reprezintă un grup de 8, 16, sau mai multe fire. Există două tipuri de bus-uri: bus de adresă si bus de date. Busul de adresă constă în atâtea linii cât este cantitatea de memorie ce dorim să o adresăm, iar bus-ul de date este atât de lat cât sunt datele, în cazul de față 8 biți sau linia de conectare. Primul servește la transmiterea adreselor de la CPU la memorie, iar cel de al doilea la conectarea tuturor blocurilor din interiorul microcontrolerului.

Fig. 3.3. Conectarea memoriei și a unității central folosind bus-urile pentru a caștiga funcționalitate

În privința funcționalității, situatia s-a îmbunatățit, apărând o nouă: există o unitate ce este capabilă să lucreze independent, însă nu are nici un contact cu lumea de afară. Pentru a scăpa de această problemă, trebuie adăugat un bloc care conține câteva locații de memorie al caror singur capăt este conectat la bus-ul de date, iar celălalt are conexiune cu liniile de ieșire la microcontroler care pot fi vazute cu ochiul liber ca pini la componenta electronică.

3.4 Unitatea intrare-iesire

Locațiile adăugate sunt numite "porturi". Porturile sunt de tipuri diferite:porturi de intrare,porturi de ieșire sau porturi pe două-căi. Atunci când lucrăm cu porturile,trebuie sa îl alegem pe cel cu care vom lucra ,apoi să trimitem sau să luăm date de la el.

Fig. 3.4. Exemplul unei unități simplificate intrare-iesire ce permite comunicarea cu lumea externă

Când lucrăm cu el, portul se comportă precum o locație de memorie.

3.4.1 Comunicatia serială

Adăugând comunicația serială la unitatea deja existentă, avem posibilitatea să comunicăm cu lumea de afară, chiar dacă acest mod are neajunsurile sale. Unul din neajunsuri este numărul de linii pe care trebuie să le folosim pentru transferarea datelor. În cazul în care trebuie să transferăm date la distanță mare, de ordinul kilometrilor, numărul de linii ce trebuie înmulțit cu numărul de kilometri nu este benefic pentru costurile proiectului. În acest caz, trebuie să micșorăm numărul de linii, dar în același timp să nu scădem funcționalitatea.

Să presupunem că lucrăm cu 3 linii. O linie este folosită pentru recepția datelor, alta pentru trimiterea de date, iar cea de-a treia linie este folosită ca o linie de referință atât pentru partea de intrare, cât si pentur partea de iesire. Pentru funcționarea optimă, trebuie definit un protocol. El este definit înainte, pentru a nu exista neîntelegeri între părțile care comunică între ele. Putem da exemplu doi oameni, unul vorbește în limba franceză, iar celălalt în engleză. Șansele de a se întelege rapid și eficient sunt aproape nule.

Având urmatorul protocol: Unitatea logică "1" este setată pe linia de transmisie pâna când începe transferul. La începerea transferului, coborâm linia de transmisie la "0" logic pentru o perioadă de timp (T), astfel partea receptoare va ști că sunt date de primit, așa că va activa mecanismul ei de recepție. Să ne întoarcem acum la partea de transmisie și să începem să punem zero-uri si unu-uri pe linia de transmisie în ordinea celui mai puțin semnificativ bit, până la cel mai semnificativ bit. Lăsăm ca fiecare bit să ramâna pe linie pentru o perioada de timp egala cu T, iar la sfârsit, să aducem unitatea logica  "1" înapoi pe linie ce va marca  sfârsitul transmisiei unei date. Protocolul ce tocmai l-am descris este numit în literatura profesionala NRZ (Non-Return to Zero).

 Unitatea serială folosită pentru a trimite date, dar numai prin trei linii

Fig. 3.5. Comunicație serială

Având linii separate de recepție și de transmitere, cel mai probabil vom trimite și vom recepționa date în același timp. Blocul numit full-duplex mode ce permite acest mod de comunicare este numit blocul de comunicare serială. Față de transmisia paralelă, datele sunt mutate bit cu bit, sau într-o serie de biți, motiv pentru care avem numele de comunicație serială. După recepția datelor trebuie sa le citim din locația de transmisie apoi să le înmagazinăm în memorie în mod opus transmiterii unde procesul este invers. Datele circulă din memorie prin bus spre locația de trimitere, iar de acolo spre unitatea de recepție conform protocolului.

3.4.2 Unitatea timer

Având comunicația serială, putem să recepționăm,să trimitem și să procesam date.

Fig. 3.6 Unitatea de timer.

Pentru a putea să îl folosim în industrie mai sunt necesare câteva blocuri. Unul din ele este blocul timer deoarece ne dă informații despre timp, durată, protocol etc. Unitatea de bază a unui timer este un contor liber. El este de fapt un registru, valoarea numenică fiind in creștere cu unu la intervale egale, astfel încât luându-i valoarea dupa intervalele T1 si T2 și pe baza diferenței lor să determinăm cât timp a trecut.

3.4.3 Watchdog-ul

Un alt lucru important este funcționarea fără defecte a microcontrolerului în timpul funcționării. Presupunând că din cauza unei interferențe, microcontrolerul se oprește din executarea programului, sau mai rău, începe să funcționeze incorect.

Fig. 3.7 Watchdog

În cazul în care se întâmpla cu un calculator, soluția este resetarea , apoi va continua să lucreze. Microcontrolerul nu are buton de resetare pe care să il apăsăm. Pentru depășirea acestui obstacol, este necesar introducerea unui bloc numit watchdog.Blocul acesta este de fapt un contor liber în care programul nostru trebuie să scrie un zero de fiecare dată când se execută corect. Dacă programul se blocheaza, nu se va mai scrie zero, iar contorul se va reseta singur la atingerea valorii sale maxime. Aceasta va duce la rularea programului din nou, iar de această dată va fi cel corect. Acesta este un element extrem de important al oricărui program ce trebuie să fie fiabil fără supravegherea omului.

3.5 Convertorul Analog-Digital

Pentru că semnalele de la componentele periferice sunt diferite de semnalele pe care le poate întelege microcontrolerul, ele trebuie convertite astfel încât sa fie întelese de microcontroler. Această sarcină este îndeplinita de un bloc pentru conversia analog-digitala sau de un convertor AD. Acest bloc convertește informatiile despre o anumită valoare analogică într-un număr binar.

Fig 3.8 Bloc pentru convertirea unui semnal analogic

Având toate componentele microcontrolerul este acum terminat. El trebuie pus într-o componentă electornică de unde va accesa blocurile interioare prin pinii exteriori. I

Fig 3.9 Configurația fizică a interiorului unui microcontroler

Liniile subțiri care merg din interior către părțile laterale ale microcontrolerului sunt fire care conecteaza blocurile interioare cu pinii capsulei microcontrolerului.

3.6 Programul

Scrierea programului este un domeniu aparte al microcontolerului și anume programare. Un exemplu de program este prezentat mai jos.

START

REGISTER1=MEMORY LOCATION_A

REGISTER2=MEMORY LOCATION_B

PORTA=REGISTER1 + REGISTER2

END

Programul adună conținutul a două locații de memorie și vede suma lor la portul A.

În prima linie a programului se mută conținutul locației de memoria "A", într-un registrul al unității de procesare centrală. Având în vedere ca avem nevoie și de celelalte date , le vom muta în celălalt registru al unității de procesare centrală.

Instrucțiunea următoare spune unității de procesare centrală să adune contținutul celor doi regiștri ,să trimită rezultatul obținut la portul A, încât suma acestei adunări să fie vizibilă pentru toată lumea de afară. În cazul unei probleme complexe, program care duce la rezolvarea ei va fi mai mar.

Programarea poate fi facuta limbaje precum C, Basic și Assembler care sunt cele mai folosite. Assembler aparține limbajelor de nivel scăzut, care sunt programate lent, însă folosesc cel mai mic spațiu în memorie dând cele mai bune rezultate atunci când avem în vedere viteza de execuție a programului. Programele în limbajul C sunt mai ușor de scris, mai ușor de înțeles, dar sunt mai lente în executare decât programele în Assembler. Basic este foarte ușor de învățat, iar instrucțiunile sale sunt cele mai aproape de modul de gândire a omului. Dezavantajul este același ca cel al limbajului C, fiind mai lent decât Assembler-ul. Înainte de a alege unui din aceste limbaje, trebuie studiate cerințe precum viteza de execuție, marimea de memorie , dar și timpul disponibil pentru asamblarea sa. Dupa ce programul este scris,pasul următor este de a instala microcontrollerul într-un aparat lasându-l să lucreze. Pentru acest lucru mai trebuie adăugat câteva componente externe necesare pentru funcționarea sa. Primul lucru este conectarea microcontrollerului la o sursă. Bazat pe ceasul său microcontrollerul execută instrucțiunile programului. Îndată ce este alimentat microcontrollerul va executa un scurt control asupra sa, se va uita la începutul programului și va începe să îl execute. Funcționarea aparatului depinde cel mai mult de priceperea dezvoltatorului hardware , dar și de experiența programatorului.

3.7 Utilizarea microcontrollerelor

Toate aplicațiile în care se utilizează microcontrollere fac parte din categiria așa ziselor sisteme încapsulate-integrate ( embedded systems) , la care existanța unui sistem de calcul incorportat este aproape transparentă pentru utilizator. Pentru că utilizarea lor este de foarte ori sinonimă cu idea de control, mictrocontrollerele sunt utilizate masiv în robotică și mecatrinică. Conceptul de mecatronică este până la urma indisolubil legat de utilizarea microcontrollerelor.

Automatizarea procesului de fabricație-producție este un alt mare beneficiar. Indiferent de natura procesului automatizat, sarcinile specific pot fi eventual distribuite la un mare număr de mictrocontrollere integrate într-un sistem unic prin intemediul uneia sau mai multor magistrale. Printre multele domenii utilizarea lor este practic un standard industrial se pot menționa: industria de automobile (controlul aprinderii motorului, climatizare, diagnoză , sisteme de alarmă) , electronice de consum (sisteme audio, televizoare , camera video și videocasetofoane, telefonie mobilă, GPS-uri,jocuri electrinice), industria aerospațială.

Microcontrollerele sunt folosite și în mediile de dezvoltare, precum Arduino.

3.8 Arduino

Fig. 3.10 Arduino Uno

3.8.1 Generalități

Pentru a începe istoria placuței arduino, ar trebui să începem chiar de la numele de arduino, care este un nume destul de ciudat pentru un dispozitiv electronic. În anul 1002 , regele Arduin a condus Italia, dintr-un oraș situat în nord, pe nume Ivrea. El a fost detronat doi ani mai târziu de către regale Henric al II-lea al Germaniei. În memoria regelui Arduin, există un bar cu numele de “ Bar Di Re Arduino ”. Acest loc este începutul unei noi ere în domeniul electronicii. Barul este frecvent vizitat de Massimo Banzi, unul dintre fondatorii Arduino, care a predat la Ivrea. El a fost cel care a dat numele de Arduino acestui microcontroller low cost , în onoarea acelui loc. Membrii de bază ai echipei de dezvoltatori sunt: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, și David Mellis. Arduino este un răspuns la necesitatea de a invăța studenții să creeze circuite electronice rapid.

Banzi a fost recrutat în anul 2002, în calitate de professor de IDII, cu scopul de a promova noi modalități de a face design interactiv. La fel ca cei mai mulți colegi, Banzi a trebuit să se bazeze pe Basic Stamp, un microcontroller dezvoltat de Parallax , o companie având sediul in California. Inginerii s-au folosit de acest microcontroller timp de aproape 10 ani. Stamp a fost codificat folosind programarea de bază și arată ca o placă de circuite cu componente esențiale precum sursă de alimentare, de memorie, un microcontroller , porturi de intrare/ieșire. Au existat două probleme. O problemă a fost că nu aveau suficientă putere de calcul pentru proiectele necesare, iar cea de a doua problemă erau costurile mari, de pâna la 100$ pe o singură plăcuță. Mai mult decât atât, Banzi a cerut sa se poată rula pe computere Macintosh, computere care erau folosite de lucrătorii de la IDII.

Între timp, un alt limbaj de programare numit „Processing” a fost dezvoltat de un coleg de-al lui Banzi, de la MIT. „Processing” câștigă rapid popularitate deoarece permite chiar și unui programator amator să creeze programe complexe. Lui Banzi i-a plăcut acest concept și s-a întrebat dacă el și echipa sa ar putea crea softuri similare pentru a putea programa microcontrollerul.

Unul din elevii lui Banzi, Hernando Barragan, a făcut primul pas în crearea de instrumente software acesta dovedindu-se un proiect promițător . Cu toate acestea, Banzi avea vise mult mai mari, dorind să facă o platform și mai ieftină , simplă și ușor de folosit.

Banzi a reușit să creeze prima placă prototip în anul 2005, având un design simplu. El și colegii săi au crezut în softul open-source. Cu scopul de a dezvolta o platformă rapid și ușor, s-au gândit să deschidă proiectul la cât mai mulți oameni posibili, în loc de a-l menține închis. Un alt factor crucial care a contribuit la această importantă decizie a fost că după 5 ani de funționare, IDII au fost nevoiți să închidă ușile, dând faliment. Toți membrii facultății se temeau că proiectele la care au lucrat nu vor supraviețui sau vor fi preluate de alți oameni. Acesta a fost momentul crucial în care Banzi a decis să meargă mai departe și să il facă open source.

Destul de evident, modelul open source a fost întotdeauna folosit pentru a alimenta soluțiile software dar nu și hardware. După o mică investigație, Banzi și echipa, s-au uitat dintr-un unghi diferit și au decis să folosească o licență de la Creative Commons, un grup non-profit a căror acorduri au fost folosite în mod normal pentru lucrările culturale, cum ar fi scrierile și muzică. În conformitate cu Banzi, hardware-ul este o bucată de cultură care trebuie să fie partajată cu alte persoane.

Următorul pas a fost acela de a construi placa, prețul nedepașind 30 $ , astfel, Arduino putând fi accesibil pentru oricine. În timp ce alte plăci erau verzi, au vrut ca aceasta să fie albastră. In timp ce câtiva producători puneau câțiva pini pentru intrări si ieșiri, arduino avea o mulțime. Un lucru ciudat este că au adăugat pe spatele plăcii Arduino, o parte din harta Italiei.

Gianluca Martino, unul din inginerii din echipă, a considerat ca abordarea netradițională a fost destul de edificatoare. El a crezut că produsul creat a fost un rezultat al unui nou mod de gândire despre electronică; nu într-un mod de inginerie.

Produsul creat de echipă, este format din piese ieftine, care ar putea fi găsite cu ușurință în cazul în care utilizatorii doresc să iși creeze propriile plăci. Cu toate acestea, o decizie importantă a fost să se asigure că aceasta ar fi in esență plug and play, ceva care ar fi doar o piesă care conectată într-un sistem să fie folosită imediat. Pentru a programa Arduino, avem nevoie doar de un cablu USB conectat la plăcuță și calculator. Un inginer din echipa de telecomunicații, afirma că dacă cineva dorește să învețe electronic, trebuie să fie capabil de a învăța încă din prima zi. Tom Igoe, profesor de calcul de la universitatea din New York , a fost impresionat de accesibilitatea si conceptul Arduino.

Au fost date 300 plăci cu circuite imprimate pentru studenții de la IDII cu un singur scop: uitându-se la instrucțiunile de asamblare disponibile on-line, sa construiască propria placuta si să o utilizeze pentru a creea orice.

Proiectul a început sa funcționeze și un aspect important lipsea – un nume de invenție, iar într-o noapte , la un bar local, ideea numelui a fost găsită: Arduino, la fel ca numele barului și al regelui.

Primul produs popular Arduino a fost numit New Generation. Folosind un cip ATMEGA8 care rulează la 16 MHz și un cip FT232 pentru interfața USB. Bootloaderul ocupă 2KB spațiu de memorie și se execută la 19200 baud. Următoarea versiune a fost Diecimila. Diecimila a actualizat cipul de la ATMEGA8 la ATMEGA168. Marele avantaj față de varianta precedentă este dublarea memoriei (16K în loc de 8K), funcționând tot la 16MHz. Diecimila a adăugat 2 pini de alimentare de 3.3V și PIN-ul de resetare. Bootloaderul ocupă 2KB spațiu și se execută la 19200 baud. Auto-resetarea a fost deasemenea implementată.

În 2009, Duemilanove a fost lansat. Acestă nouă variantă modernizează cipul din nou, ajungând la Atmega328, dublând iar spațiul de memorie. Un alt upgrade este acum ca puterea este comutată automat între USB si DC-jack, eliminând puntea anterioară. Bootloaderul ocupă 2KB spațiu și se execută la 57600 baud.

În 2010, avem Arduino Uno!Uno folosește încă chip 328P și comutatorul de putere. Are un bootloader mai mic numit OptiBoot (mai mult spațiu pentru proiectele utilizatorilor) care ruleaza la 115K. Deci, chiar dacă cipul este la fel, veți obține un alt spațiu suplimentar de 1.5K de spațiu care a fost utilizat anterior de bootloader. Cipul FTDI a fost înlocuit cu atmega8u2 care permite diferite tipuri de interfețe USB. În cele din urmă, există un regulator de 3.3V suplimentar (LP2985) pentru o aprovizionare 3.3V mai bună

.

.Fig. 3.11. Arduino Atmega8u2

Acest cip, Atmega8u acționează identic cu chip-ul FTDI pe care îl înlocuiește, doar că este un port serial USB.

O îmbunătățire in actualizarea chip-ului este că anterior, utilizatorii de Mac erau nevoiți sa instaleze driverele pentru FTDI. 8u2 imită un dispozitiv serial CDC, așa că acum nu mai este nevoie de instalarea vreunui driver pentru Mac. Utilizatorii de Windows, sunt nevoiți să instaleze fișierul inf, dar nu și alte drivere. Acest lucru înseamna ca la apariția noilor versiuni de Windows, problemele cu compatibilitatea vor fi inexistente.

Cipul Atmega328p este procesorul de bază în Arduino are având un rezonator ceramic de 16MHz. Rezonatoare ceramice sunt mai puțin precise decât cristalele.

3.8.2 Specificații

Specificațiile plăcii Arduino Uno sunt urmatoarele:

Tensiune de funcționare: 5V
Tensiune recomandată de intrare: 7V – 12V (stabilizată la 5V cu NCP1117);
Tensiune maximă de intrare: 20V ;
Număr de pini de intrare/ieșire (I/O): 14, din care 6 pot fi programați să furnizeze la ieșire semnal PWM;
Număr pini de intrare analogică: 6 (A0…A5);
Curent recomandat absorbit din pinii I/O: 20 mA, în cazul în care sunt folosiți toți pinii I/O;
Curent maxim absorbit dintr-un pin I/O: 40 mA;
Memorie flash (spațiu unde este scris programul): 32 KB din care 0.5 KB este folosită de bootloader;
SRAM: 2 KB;
EEPROM: 1 KB (ATmega328);
Oscilator: 16 MHz;

3.8.3 Alimentarea Arduino

Arduino Uno poate fi alimentat prin intermediul conexiunii USB sau cu o sursă de alimentare externă. Sursa de alimentare este selectată automat. Sursele externe de alimentare pot fi, un adaptor AC-DC sau baterie. Adaptorul poate fi conectat printr-un conector de 2.1mm cu centru-pozitiv în mufa de alimentare de pe placă. Traseele de la baterie pot fi introduse în pinii GND și Vin ai conectorului de alimentare. Placa poate funcționa cu o sursa externa de 6-20volți. Dacă este alimentată cu mai putin de 7v, atunci pinul de 5V scoate o tensiune mai mica de 5v și placa poate deveni instabilă. Daca se utilizează mai mult de 12 v, regulatorul de tensiune se poate supraîncălzi și poate deteriora placa. Intervalul recomandat este de 7-12 volți.

În cazul în care alimentăm Arduino Uno prin conectorul USB din altă sursă înafară de PC, trebuie să avem grijă la tensiunea de alimentare deoarece alimentarea de la conectorul USB nu trece prin stabilizatorul de 5V al plăcii. În momentul când avem placa Arduino Uno la PC pentru programare sau comunicare prin intermediul monitorizării seriale este recomandat să deconectăm alimentarea externă din conector.

Buton de reset, resetează placa fără însă a se pierde programul scris în aceasta. Programul reîncepe de la funcția void setup().

3.8.4 Intrări și ieșiri

Fiecare din cei 14 pini pot fi utilizați ca intrare sau ieșire, folosind funcțiile pinMode(), digitalWrite() și digitalRead(). Aceștia funcționează la 5 volți. Fiecare pin poate oferi sau primi un maxim de 40mA și are un rezistor de siguranță de 20-50kOhms. Unii pini au funcții particulare precum:

Serial: 0 (RX) și 1 (TX). Este folosit penru a primi și transmite date seriale TTL. Acești pini sunt conectați la pinii corespunzători ai cipului ATMega8U2 USB-TTL.

Întreruperile externe: 2 și 3. Acești pini pot fi configurați pentru a declanșa o întrerupere pe o valoare scăyută, o limită crescătoare sau descrescătoare, sau o schimbare în valoare.

PWM: Pinii 5,6,9,10 și 11 oferă o ieșire PWM de 9 biți cu funcția analogWrite()

SPI:10 (SS), 11 (Mosi),12(MISO), 13(SCK). Acești pini suportă comunicația SPI folosind biblioteca SPI.

LED 13. Există un LED încorporat în placă, conectat la pinul 13. Atunci când valoarea pe pin este HIGH, LED-este aprins, iar când are valoare LOW, LED-ul este stins.

Placa Arduino are 6 intrări analogice, denumite de la A0 la A5, fiecare oferă o rezoluție de 10 biți. Implicit, ieșirile măsoară de la masă la 5v, deși este posibil ca limita superioară să fie schimbată cu ajutorul pinului AREF și funcției analogReference(). Unii pini, au funcționalități specializate:

AREF. Tensiune de referință (numai de la 0 la 5 V) pentru intrările analogice. Este folosit cu funcția analogReference()

Reset. Aduce linia la zero pentru a reseta microcontrollerul. De obicei este folosit pentru a adăuga un buton de reset Shield-urilor care blochează acțiunea celui de pe placă.

Harta pinilor – ATMega328

Fig. 3.12 Harta pinilor – ATMega328

3.8.5 Comunicația

Arduino Uno are câteva posibilități de comunicare cu un calculator, o alta placă Arduino sau un alt microcontroller. Microcontrollerul ATMega 328 furnizează comuncație serială UART TTL (5v) care este disponibilă pe pinii digitali 0(RX) și 1 (TX). Un microcontroller ATMega8U2 direcționează comunicația serială către USB și apare ca un port serial virtual în software-ul de pe calculator. Firmware-ul microcontrollerului folosește driverele standard ale portului USB al calculatorului și nu este nevoie de un driver din exterior. Software-ul Arduino este prevăzut cu o fereastră ce permite preluarea și transmiterea de date de tip text de la placa Arduino. LED-urile corespunzătoare semnalelor RX și TX de pe placă vor pâlpâi atunci când informația este trimisă prin portul USB către cipul serial prin intermediul unei conexiuni USB cu calculatorul. O bibliotecă a programului(SoftwareSerial) permite comunicația serială pentru oricare dintre pinii plăcii.

Microcontrollerul ATMega328 suportă comunicația I2C (DST) și SPI. Software-ul Arduino include o bibliotecă de conexiuni pentru a simplifica utilizarea portului I2C.

Arduino Uno poate fi programat cu software-ul Arduino. Selectăm “Arduino Uno” din meniul Tools – Board. Microcontrollerul ATMega 328 de pe placa Arduino Uno vine cu un program de butare (bootloader) care permite încărcarea unui program nou fără a utiliza un compilator extern. Acesta comunică folosind protocolul STK500 original. Se poate evita bootloaderul , iar microcontrollerul se poate programa prin ICSP (In-Circuit Serial Programming).

Codul sursa al Firmware-ul microcontrollerului ATMega8U2 este disponibil, el este încărcat cu un program de butare DFU care poate fi activat cu ajutorul unui jumper de pe spatele plăcii, ATMega8U2 fiind resetat. Apoi se pot folosi programele Atmel’s FLIP(windows) sau DFU(Mac sau Linux) pentru a încărca un nou firmware.

Resetarea automată (Software)

Pentru a nu fi nevoie de resetare manuală, înainte de încarcarea unui program,Arduino Uno este proiectat astfel încât îi permite sa fie resetat de către software, atunci când este conectată la calculator. Una din liniile de control a funcționării harware(DTR) a microcontrollerului ATMega8U2 este conectată la linia de reset al microcontrollerului ATMega328 printr-un condesator de 100 nanofarad.Atunci când această linie este activată, linia de reset este activă suficient de mult timp pentru a reseta microcontrollerul. Software-ul Arduino folosește această capacitate pentru a ne permite să incărcăm un cod prin simpla apăsare a butonului de încărcare din mediul de programare Arduino. Acest lucru înseamna că bootloader-ul are o perioada scurtă de pauză. Când uno este conectat fie la un computer pe care rulează un sistem de operare Mac OS X sau Linux , acesta se resetează de fiecare dată când o conexiune este realizată între ea și software (prin USB). Deși este pogramat să ignore date necorespunzătoare se vor intercepta primii biți din datele trimise către placă după ce conexiunea este deschisă. Uno conține un traseu care poate fi întrerupt pentru a dezactiva resetarea automată. Zonele de pe fiecare parte a traseului întrerupt pot fi lipite pentru a activa din nou resetarea automată. Traseul este denumit “ Reset_EN”. O altă modalitate de a dezactiva resetarea automată este prin conectarea un rezistor de 110 ohm între linia de 5V și linia de reset.

Arduino Uno are o siguranță resetabilă care protejează porturile USB ale computerului de scurtcircuit și suprasarcina. Deși majoritatea calculatoarelor au protecție internă proprie, siguranța oferă o protecție suplimentară. Dacă un curent mai mare de 500mA trece prin portul USB, siguranța va întrerupe în mod automat conexiunea până la îndepartarea suprasarcinii sau scurtcircuitului.

3.9 Exemple de plăci Arduino

3.9.1 Arduino Uno

Se conectează la computer prin intermediul cablului USB standard A-B și conține tot ceea ce ai nevoie pentru a programa și utiliza placa. I se pot adăuga o varietate de Shild-uri. Este similar cu Duemilanove, însă are un chip diferit USB-to-serial , ATMega8u2 și cu un design nou de etichetare pentru a identifica mai ușor intrările și ieșirile

Fig 3.13Arduino Uno

3.9.2 Arduino Mega

Este o versiune a modelului Mega lansat cu Uno. Această versiune dispune de Atmega2560 , care are de două ori mai mult spațiu pentru memorie și folosește 8U2 ATMega pentru comunicare USB-to-serial.

Fig 3.14 Arduino Mega 2560

3.9.3 Arduino Mini

Mini- este cea mai mică placă de dezvoltare de la Arduino. Aceasta funcționează bine într-un breadboard sau pentru aplicații în care spațiul este limitat. Se conectează la calculator prin intermediul unui cablu mini USB Adapter.

Fig. 3.15 Arduino Mini

3.9.4 Arduino Nano

Este o placă de dezvoltare compactă, proiectată pentru utilizarea pe un breadboard. Nano se conectează la computer utilizând un cablu Mini-B

Fig.3.16 Arduino Nano

3.9.5 Arduino Duemilanove

Arduino Duemilanove este o platformă de procesare bazată pe microcontrollerul ATMega169 sau ATMega328. Are 14 pini de intrări/ieșiri digitale. Există un led incorporat în placă, conectat la pinul 13. Atunci când valoarea pe pin este HIGH, LED-ul este aprins, iar atunci când valoarea este LOW, LED-ul este stins.

Placa Arduino UNO, are 6 intrări analogige, denumite de la A0 la A5, fiecare oferind o rezoluție pe 10 bițti. Ieșirile de la masă masoară 5v, deși este posibil ca limita superioară să fie schimbată cu ajutorul pinului AREF și functiei analogReference().

Fig. 3.17 Arduino Duomilanove

3.9.6 Arduino LilyPad

LilyPad este proiectat pentru aplicații ușor de implementat pe materiale textile. Acest microcontrolller poate fi cusut pe țesături și are culoarea mov.

Fig. 3.18 Arduino LilyPad

3.9.7 Arduino Fio

Fio- este proiectat pentru aplicații fără fit. Acesta are inclusă o priză dedicată pentru un modul radio Wi-Fi Xbee, un conector pentru o baterie Ly Polymer și circuite interate de încărcare a bateriei.

Fig. 3.19 Arduino Fio

3.9.8 Arduino Pro

Acestă placă de dezvoltare este concepută pentru utilizatorii mai avansați , pentru cei care doresc să încorporeze această placă într-un proiect. Este mai ieftin decât Diecemila și ușor de alimentat la o baterie, însă necesită componente suplimentare și asamblare.

Fig. 3.20 Arduino Pro

3.9.9 Arduino Pro Mini

Pro Mini – Placa Pro Mini este concepută pentru utilizatorii avansați, care au nevoie de un cost scăzut, plăci de dezvoltare mici și care sunt dispuși să facă ceva lucru suplimentar pentru a o putea utiliza în proiecte.

Fig. 3.21 Arduino Pro Mini

3.9.10 Arduino Serial

Serial – este o placă de dezvoltare , care utilizează ca interfață un RS232 la un calculator pentru programare sau de comunicare. Placa este ușor de asamblat , chiar ca un exercițiu de învățare.

Fig. 3.22 Arduino Serial

3.9.11 Arduino Serial Single Sided

Serial Single Sided – este o placă de dezvoltare concepută pentru a fi gravată și asamblată de mână. Este puțin mai mare decât Duemilanove, dar este compatibilă cu toate shield-urile Arduino.

Fig.3.23 Arduino Serial Single Sided

4 Sistem de navigație cu evitarea obstacolelor pentru roboți mobili

4.1 AIRAT2

AIRAT2 este un robot micromouse care folosește un procesor CPU 8051. Robotul emite o “lumină infraroșie” și folosește senzori pentru a primi lumina reflectată înapoi. CPU folosește o placă JS8051-A2 , ea fiind foarte bine construită. Folosește resurse externe cum ar fii LCD, ADC, doua ceasuri externe, dar si memorie Flash. Robotul are 6 senzori care îi permit să se deplaseze pe diagonală, un simulator care îi permite utilizatorului să ințeleagă mai ușsor algoritmul care este folosit. Codul sursă C este prevăzut, astfel încât programatorul poate dezvolta cu ușurință algoritmi, care pot fi testaȚi pe simulator și apoi să fie mutați pe robot.

Fig. 4.1.Robotul AIRAT 2

Caracteristici AIRAT 2:

Folosește 6 senzori dându-i posibilitatea de a se deplasa pe diagonală fiind capabil să își reia traseul în cazul în care este influențat de factori externi

Design elegant, de mici dimensiuni, ușor de asamblat/dezasamblat

Instrucțiuni de asamblare si manual de utilizare

Include un simulator PC pentru a accelera simularea si testarea

Port de reîncarcare convenabil, nefiind nevoie să fie scoase bateriile

Ușor de asamblat/dezasamblat

4.2 Minirobotul RCX 1.0

Fig. 4.2.Minirobotul RCX 1.0

Include două roți active în partea din spate, acționată fiecare de câte un motor de curent continuu montat într-o piesă LEGO și o roată pasivă în partea din față. În vârful construcției este amplasată unitatea de comandă, conectată la cele două motoare. Senzorul este construit dintr-un LED (diodă luminiscentă), care generează un fascicul de lumină roșie și un fotodetector care recepționeză lumina reflectată de podea și generează la ieșire o tensiune electrică, proporțională cu intensitatea luminii reflectate. Roțile active sunt acționate prin intermediul a două trepte de angrenaje cu roți dințate.Prima include un pinion cu 8 dinți, montat pe axul motorului și o roată dințată cu 24 de dinți, iar a doua, este realizată prin angrenarea roții intermediare de 24 de dinți cu o roată de 40 de dinți, care antrenează axul roții active. Raportul de transmitere poate fi calculat cu formula:i = (24/8) * (40/24) = 5.

Asigură o reducere de 5 la 1 a vitezei unghiulare a motorului și o amplificare de 1 la 5 a momentului dezvoltat de motor. Direcția de deplasare a robotului este controlată,fie prin mișcarea roților active în sensuri opuse, fie prin deplasarea acestora cu viteze unghiulare diferite.

4.3 Minirobotul Polulu 3pi

Fig. 4.3 Robotul Polulu 3pi

Robotul polulu 3pi este o platformă mobilă de înaltă performanță ce conține două motoare cu cutie de viteze, cinci senzori de reflexie, un LCD 8×2 , un buzzer și trei butoane, toate fiind conectate la microcontrollerul programabil Atmega328. Având viteze de până la 1m/s , 3pi este un excelent prim robot pentru începatorii curajoși dar si un perfect al doilea robot pentru cei care iși doresc să avanseze de la roboți neprogramabili.

Robotul 3pi este proiectat pentru a excela în competiții precum urmărirea liniei sau rezolvarea labirintelor. Dimensiunile sunt mici, diametrul fiind de numai 9,5cm, iar greutatea este de 83g , dar fără baterii. Pentru alimentarea sa, sunt necesare patru baterii de tip AAA , în timp ce un sistem de alimentare unic pune în funcțiune motoarele la o tensiune constantă de 9,25v, tensiune independentă de cea a nivelului de încărcare. În timp ce face viraje și întoarceri precize, 3pi poate ajunge la viteze de până la 1m/s datorită regulatorului de tensiune care nu variază cu tensiunea bateriei.

Robotul 3pi este excelent pentru persoanele care au experiență în programarea C care vor să învețe robotica , în același timp fiind și o distracție pentru cei care doresc să invețe programarea C. Robotul are un microcontroller Atmel Atmega328P, care ruleaza la o frecvență de 20MHz alături de un program de 32KB, 2KB de memorie RAM și 1KB de memorie EEPROM. Compilatorul GNU C/C++ și minirobotul 3pi, fac o echipă excelentă, funcționând ireproșabil. 3pi este compatibil cu plăcile de dezvoltare Arduino.

Fig. 4.4 Componente importante ale robotului

Fig. 4.5 Vedere de jos a robotului 3pi

4.4 Robotul Inex POP-Bot Standard

POP-BOT are un driver pentru doua motoare de curent continuu. Viteza și direcția motoarelor poate fi controlată din software-ul robotului, deoarece sunt controlate de către PWM. Robotul conține și un microcontroller POP-168 fiind o placă flexibilă care nu are componente ascunse și permite dezvolatarea completă a caracteristicilor cu ajutorul uneltelor standard AVR, precum IAR C/C++, MikroElektronikaMikro Basic / MikroPascal pentru AVR și bineînteles uneltele open-source WINAVR: AVRGCC pentru Windows.

Un dispaly LCD permite vizualizarea activității microcontrollerului. Modulul LCD are nevoie decât de un pin de intrare/ieșire, + 5v și masa pentru a funcționa. Pentru a comunica cu microcontrollerul, modulul LCD are nevoie decât de simple comenzi de ieșire.

Ale părți componente ale robotului sunt:

Placa de control a robotului cu suport de 4 baterii AA

Modul de butoane cu cablu JST

Senzor de distanță infraroșu GP2D120

Placa cu senzori de reflexie

Roți de cauciuc

Ball-caster

Placa de plastic de 80-60cm

Fig.4.6. Robotul Inex Pop-Bot Standard

4.5 Robotul construit cu kit arduino

Fig 4.7 Robot construit pe platforma Arduino

Robotul are abilitatea de a evita orice obstacol. În momentul în care sesizează un obstacol, acesta își va schimba direcția de deplasare spre o zonă liberă.

Componenta principal a robotului o constituie placa Arduino Uno pe care este in prezent microcontrollerul Atmel ATMEGA328, împreună cu diferite circuite auxiliare de interfață cu diferite medii printre care enumerăm circuitul integrat L298N cu rol de punte H care îndeplinește rolul de amplificare al semnalului de la pinii microcontrolerului și acționare de putere a motoarelor de current continuu. Pe langă acesta, mai avem patru motoare , placă extensie senzori, servomotor Sg90 9g și două plăci din plexiglas.

Robotul este conceput pe patru roți din plastic cu anvelopă de cauciuc Pentru a îmbunătății partea electrică, am dotat robotul cu un sensor ultrasonic care ocolește obstacole și care poate determina distanța până la un anumit obiect. Senzorul ultrasonic este așezat pe un mini breadboard, care la rândul său este montat pe un servomotor pentru a se putea mișca.

Am ales placa Arduino Uno pentru acest proiect în special datorită costurilor scăzute, pentru posibilitatea montării unei plăci de extensie a senzorilor, pentru ușurința utilizării și a programării, dar si pentru existența numeroșilor pini ce pot fi folosiți

4.5.1 Motorul de current continuu

Fig 4.8. Motor de curent continuu

Un motor electric este un dispozitiv care transformă energia electrică în energie mecanică. Transformarea inversă a energiei mecanice în energie electric este realizată de un generator electric. Nu există diferențe de principiu semnificativ între cele două tipuri de mașini electrice, același dispozitiv putând îndeplini ambele roluri în situații diferite.

4.5.2 Principiul de funcționare

Majoritatea motoarelor electrice funcționeaza pe baza forțelor electromagnetice care acționează asupra unui conductor parcurs de current electric aflat în camp magnetic. Sunt și motoare electrostatic construite pe baza forței Coulomb și motoare piezoelectrice. Motoarele electrice pot fi clasificate după tipul curentului electric ce le parcurge:

Motor de curent continuu

Morot de curent altenativ

Motor de inducție (asincron)

Motor sincron

4.5.2.1 Elemente constructive

Motorul este contruit din două părți componente: rotor și stator. Statorul este partea fixă motorului, ce include carcasa, bornele de alimentare, armătura feromagnetică statoric și înfașurarea statorică. Rotorul este partea mobilă a motorului, plasată de obicei în interior. Este format dintr-un ax și o armătură rotorică ce susține înfășurarea rotorică. Între stator și rotor există o porțiune de aer numită intrefier ce permite mișcarea rotorului față de stator. Grosimea intrefierului este un indicator important al performanțelor motorului.

Fig. 4.9 Elementele componente ale motorului de curent continuu

4.5.2.2 Generalități

Motorul de curent continuu a fost inventat în 1873 de Zenobe Gramme prin conectarea unui generator de curent continuu la un generator asemănător. În acest fel a putut observa ca mașina se rotește, realizând conversia energiei electrice absorbite de la generator. Motorul de current continuu are pe stator polii magnetic și bobinele polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situate un collector ce schimbă sensul curentului prin înfășurarea rotorică astfel încât câmpul magnetic de excitație să exercite în permanență o forță față de rotor. În funcție de modul de conectare a înfășurării de excitație, motoarele de curent continuu se clasifică în:

Motor cu excitație independentă , unde înfășurarea statorică și infășurarea rotorică sunt conectate la două surse separate de tensiune

Motor cu excitație paralelă , unde înfăsurarea statorică și înfășurarea rotorică sunt legate în paralel la aceeași sursă de tensiune

Motor cu excitație serie , unde înfășurarea statorică și înfășurarea rotorică sunt legate în serie

Motor cu excitație mixtă , unde înfășurarea statorică este divizată în două înfășurări, una conectată în paralel și alta conectată în serie

Înfășurarea rotorică parcursă de curent va avea una sau mai multe perechi de poli magnetici echivalenți. Rotorul se deplasează în câmpul magnetic de excitație până când polii rotorici se aliniază în dreptul polilor statorici opuși. În același moment , colectorul schimbă sensul curenților rotorici astfel încât polaritatea rotorului se inversează iar rotorul va continua deplasarea până la următoarea aliniere a polilor magnetici.

Pentru acționări electrice de puteri mici și medii, sau pentru acționări ce nu necesitp câmp magnetic de excitație variabil, în locul înfășurărilor statorice se folosesc magneți permanenți.

Turația motorului este proporțională cu tensiunea aplicată înfășurării rotorice și invers proporțională cu câmpul magnetic de excitație. Turația se reglează prin varierea tensiunii aplicată motorului până la valoarea nominal a tensiunii, iar turații mai mari se obțin prin slăbirea câmpului de excitație. Ambele metode vizează o tensiune variabilă ce poate fi obținută folosind un generator de curent continuu, prin înserierea unor rezistoare în circuit sau cu ajutorul electronicii de putere.

Cuplul dezvoltat de motor este direct proporțional cu curentul electric prin rotor și cu câmpul magnetic de excitație. Reglarea turației prin slabire de câmp se face cu diminuarea cuplului dezvoltat de motor. La motoarele serie, același curent străbate înfășurarea de excitație și înfășurarea rotorică. De aici putem deduce două caracteristici ale motoarelor serie: pentru încărcări reduse ale motorului, cuplul acestuia depinde de pătratul curentului electric absorbit. Motorul nu trebuie lăsat să funționeze în gol pentru că în acest caz , valoarea intensității curentului electric absorbit este foarte redusă și implicit câmpul de excitație este redus, ceea ce duce la ambalarea mașinii până la autodistrugere.

Motoarele de curent continuu cu excitație serie se folosesc în tranțiunea electrică urbană și feroviară.

Schimbarea sensului de rotație se face fie prin schimbarea polarității tensiunii de alimentare, fie prin schimbarea sensului câmpului magnetic de excitație. La motorul serie, prin schimbarea polarității tensiunii de alimentare se realizează schimbarea sensului ambelor mărimi și sensul de rotație rămâne neschimbat. Prin urmare, motorul poate fi folosit și la tensiune alternativă, unde polaritatea tensiunii se inversează o dată în decursul unei perioade. Un astfel de motor se numește motor universal și se folosește în aplicații casnice de puteri mici și viteze mari de rotație.

4.5.3 Senzorul ultrasonic

Fig 4.10 Senzorul ultrasonic HC-SR04

Sistemul de măsurare a distanței prin senzor ultrasonic este un tip particular de sistem de achiziție de date , iar aplicațiile sale pot fi găsite în domenii foarte variate, un exemplu fiind montarea unui senzor ultrasonic HC-SR04 pe un robot cu funția de a depista obstacole.

4.5.3.1 Modul de funcționare

Senzorul de ultrasunete HC-SR04 funcționează pe principiul sonarului pentru a aprecia distanța până la un obiect, oferind o mare precizie a distanței măsurate: de la 2 cm până la 400 cm, cu precizie de până la 3 mm. Modulul include atât Transmițătorul (T) care trimite semnalul cât și Receptorul (R) care îl recepționează.

Ultrasunetele au o frecvență ridicată (în principiu 40kHz). La început este trimis un semnal de 10μs, apoi o serie de 8 impulsuri de 40 kHz. Receptorul așteaptă ecoul: dacă răspunsul este între 150μs-25ms se detectează un obstacol; dacă timpul este peste 38ms nu se detectează nimic).

Distanța este calculată folosind formula L= C * T/2, unde L este lungimea, C este viteza sunetului în aer (344 m/s la temperatura ambiantă de 20 grade C), iar T este diferența de timp de la trasmitere până la recepționare; timpul este înjumătățit deoarece distanța este parcursă în ambele sensuri. Trebuie ținut cont că viteza sunetului este afectată de densitatea aerului (iar densitatea este afectată în principal de temperatură și altitudine).

Parametri ai senzorului ultrasonic HD-SR04:

Unghiul de măsurare: 15 grade

Frecvența de operare: 40kHz

Pini disponibili: VCC, Trig, Echo, GND

Distanța minimă de detectare a unui obstacol: 2cm

Distanța maximă de detectare a unui obstacol: 4m

Dimensiuni: 45*20*15 mm

4.5.4 Driverul de motoare

Driverul L298N este construit de firma ST. Avantajele acestui driver:

Caldură degajată mică

Putere de lucru la curent de 3 Amperi

Poate conduce un motor pas cu pas sau doua motoare de curent continuu

4.5.4.1 Specificații

Tensiunea de alimentare: 5v- 46v

Putere maximă: 25W

Temperatura de lucru: -25C – +130C

Dimensiuni: 60mm*54mm

4.5.4.2 Diagrama Hardware

Fig 4.11. Diagrama Hardware

4.5.4.3 Servomotor

Specificații:

Tensiunea de alimentare: 4.8V~6.0v

Viteza: 0.10sec/60 grade

Cuplu: 1.4kg/cm

Dimensiuni: 22.8 x 11.8 x 20.6mm

Greutate: 9g

-rotire: 180 grade

Fig 4.12 Servomotor SG90

5.5 Sensor shield

Folosind această placă ne va fi mult mai usor să conectăm dispozitivele de intrare și de ieșire la Arduino. Scopul ei este de a face conectarea cablurilor și dispozitivelor la pinii corecți ai plăcii Arduino. Servomoturul, senzorii infrarosii, senzorii ultrasonici, se pot conecta fără nicio problemă

Fig 4.13 Sensor shield

4.5.5 Asamblarea robotului

– Am folosit ca suport pentru piese două șasiuri din plexiglas pe unul din ele am montând suporții pentru motoare

Fig. 4.14 Suport piese

– după montarea suporților, am montat motoarele

Fig. 4.15 Montarea motoarelor

dupa montarea motoarelor și a roților a urmat plăcii de dezvoltare Arduino UNO

Fig 4.16 Montarea plăcii arduino

după montarea plăcii Arduino Uno, am conectat sensor shieldul pe Arduino și am legat motoarele la driverul de motoare.

Fig 4.17 Conectarea motoarelor

-a urmat conectarea la placa Arduino Uno a senzorului ultrasonic si a servomotorului prin intermediul sensor shield-ului, dar și conectarea bateriilor, cea de 9 V fiind conectata la alimentarea arduino, iar cele 6 x 1.5v la driverul de motoare.

5. Concluzii

La construcția robotului cu sistem automat de evitare a obstacolelor am folosit o placă de dezvoltare arduinofiind ușor de folosit și programat, un senzor ultrasonic așezat pe servomotor pentru a putea observa obstacolele ce pot apărea în timpul mișcării robotului, un shield pentru conectarea senzorului și a servomotorului și un driver pentru motoare.

Dupa construirea robotului și implementarea programului se pare că robotul nu mergea drept înainte, ci mergea spre stanga. Pentru rezolvarea problemei am încercat diferite solutii precum:

schimbarea motoarelor între ele, în cazul în care era vreunul defect

Înlocuirea driverului de motoare

Înlocuirea pinilor

În final, soluția „ câștigătoare” , s-a dovedit schimbarea din program a vitezei roților. Astfel, am modificat viteza ca roțile de pe partea stângă, să funționeze ( teoretic) mai rapid decât roțile de pe partea dreapta cu 10% . Astfel problema s-a rezolvat, iar robotul merge drept și evită fără probleme obstacolele.

Similar Posts