Capitolul 2. Roboti mobili autonomi 8 2.1. Istoric 8 2.2. Clasificarea robotilor mobili 12 2.3. Domenii de utilizare 14 2.4. Aspiratorul robotizat… [303659]

Cuprins 5

Capitolul 1. Introducere 7

Capitolul 2. Roboti mobili autonomi 8

2.1. Istoric 8

2.2. Clasificarea robotilor mobili 12

2.3. Domenii de utilizare 14

2.4. Aspiratorul robotizat autonom 17

Capitolul 3. Platforma Arduino 20

3.1. Istoric. 20

3.2. Hardware 21

3.3. Software. 24

3.4. Programarea Arduino 25

Capitolul 4. Elementele componente ale proiectului 27

4.1. Arduino Uno. 27

4.1.1. Generalitati 27

4.1.2. Alimentare 29

4.1.3. Memorie. 30

4.1.4. Intrari si iesiri. 30

4.1.5. Comunicatie 30

4.1.6. Programare 31

4.1.7. Functia de resetare automata. 31

4.1.8. Protectie suprasarcina 31

4.2. Driverul de motoare L298N 32

4.3. Senzorul infrarosu. 33

4.4. Senzorul ultrasonic 35

4.5. Modulul de comunicatie WiFi ESP8266. 36

4.6. Motoare de curent continuu cu raport 120:1 37

4.7. Motor DC de turatie inalta. 39

Capitolul 5. Proiectarea sistemului 40

5.1. Principiul de functionare 40

5.2. Asamblarea componentelor hardware. 41

5.3. Proiectarea si implementarea partii electronice 45

5.4. Implementarea software. 57

Concluzii 68

Bibliografie 70

Anexa 71

Capitolul 1.

[anonimizat]. De-a [anonimizat] a [anonimizat] “calitatea” [anonimizat] a [anonimizat]. Robotul are potentialul de a [anonimizat]. [anonimizat] a fost posibila aparitia si mai apoi evolutia robotilor. [anonimizat], [anonimizat].

Nevoia confortului sporit pe care fiecare persoana tinde sa il aiba acasa sau la service a impins industria aparatelor electrocasnice spre o continua dezvoltare. [anonimizat], [anonimizat], [anonimizat], inovarea a [anonimizat]. Pentru a [anonimizat]. [anonimizat]-și facă simțită prezența in viata noastra de zi cu zi. Noua tehnologie in domeniul aspiratoarelor de praf vine in sprijinul visului fiecaruia de a avea o [anonimizat]-[anonimizat].

Scopul lucrarii de fata este realizarea unui robot autonom cu costuri minime ce are rol de aspirator de praf. [anonimizat], acest robot se vrea a fi un ajutor in gospodaria omului modern.

Capitolul 2.

Roboti mobili autonomi

Un robot mobil este o masina automata capabila de locomotive. Robotii mobili au capacitatea de a se deplasa in mediul lor si nu sunt fixati intr-o singura locatie fizica. Robotii mobili pot fi "autonomi" (AMR – robot mobil autonom), [anonimizat] a [anonimizat]. [anonimizat]reasca o ruta de navigare predefinita intr-un spatiu relativ controlat (AGV – autovehicul ghidat autonom). Dimpotriva, robotii industriali sunt de obicei mai mult sau mai putin stationari, constand dintr-un brat articulat (manipulator multiplu) si un ansamblu de prindere (sau un efectiv de capat) atasat la o suprafata fixa.

Robotii mobili au devenit mai obisnuiti in mediile comerciale si industriale. Spitalele folosesc roboti mobili autonomi pentru a muta materiale timp de multi ani. Depozitele au instalat sisteme robotice mobile pentru a muta in mod eficient materialele de la rafturile de depozitare la zonele de realizare a comenzilor. Robotii mobili sunt, de asemenea, un punct central al cercetarii actuale si aproape fiecare universitate majora are unul sau mai multe laboratoare care se concentreaza pe cercetarea robotului mobil. [2] Robotii mobili se gasesc si in setarile industriale, militare si de securitate. Robotii autohtoni sunt produse de consum, inclusiv roboti de divertisment si cei care indeplinesc anumite sarcini de uz casnic, cum ar fi aspirarea sau gradinaritul.
Componentele unui robot mobil sunt un controler, software de control, senzori si dispozitive de actionare. Controlorul este, in general, un microprocesor, un microcontroler incorporat sau un computer personal (PC). Software-ul pentru controlul mobil poate fi fie un limbaj de nivel de asamblare, fie limbi de nivel inalt, cum ar fi C, C ++, Pascal, Fortran sau software special in timp real. Senzorii utilizati depind de cerintele robotului. Cerintele ar putea fi evaluarea mortilor, detectarea tactila si a proximitatii, triangulatia variind, evitarea coliziunilor, localizarea pozitiei si alte aplicatii specifice.

2.1. Istoric

Desi se pare ca fenomenul de roboti are radacini numai in constiinta moderna recenta, avand in vedere mecanismele complexe implicate in realizarea lor, de fapt, astfel de dispozitive au radacini inca din Grecia antica si din cele mai vechi dinastii chineze. Descrierile robotilor vechi dateaza din secolul al 1-lea. Aceste dispozitive sunt cunoscute ca automate, de la cuvantul grecesc sau "actionate de vointa proprie". In principiu, automatele sunt masini mobile non-electronice care imita actiuni umane sau animale.

Figura 1.1 Porumbel mecanic cu abur

In timpul dinastiei Han (200-300BC), istoria vorbeste despre o orchestra mecanica construita de mesteri chinezi. Pana in acel moment automatele similare ale dinastiei Sui (581-18AD) au proliferat in toata China. In Grecia, descrierea uno pasari automate au fost inregistrate in "Spiritalia" (150 i.Hr.) a lui Heron, iar inregistrarile spun despre matematicianul grec Arcyta de Taretum, un prieten al lui Plato, care a construit un porumbel mecanic(fig.1.0) cu aburi in secolul al IV-lea. In 1206, un inventator musulman numit Al-Jazari a construit mai multe masini automate, dintre care cea mai faimoasa a fost o barca care continea patru muzicieni care au avut ocazia de a distra oaspeti regali in timpul petrecerilor. Veti vedea acum ca istoria robotilor a inceput cu mult inainte ca cuvantul "robot" sa fi fost inventat chiar.

In 1495, Leonardo da Vinci s-a alaturat istoriei lungi si colorata a robotilor. El a proiectat un umanoid automat complex, care, asa cum se vede in schita sa din figura 1.2, ar putea sa faca miscari asemanatoare omului, cum ar fi sederea in sus, mutarea bratelor si rasucirea capului si gatului. Robotul pare a fi un razboinic sau cavaler, imbracat in armura medievala germano-italiana. Acesta a fost doar una din cateva sute de desene si desene tehnice redescoperite in paginile a doua manuscrise gasite in 1950.

Exista numeroase exemple de masini automate si de dezvoltare robotica in istoria antica si mai recenta, dar primul robot cu adevarat modern care a fost adaugat istoriei robotului a fost inventat de George C. Devol in 1954. Acest robot a fost numit Unimate. In 1961, Unimate a devenit primul robot industrial care lucreaza la linia de asamblare a unei fabrici New Jersey General Motors. Programata pentru a prelua piese turnate de la masini si a efectua sudarea pe corpuri auto, Unimate era in mod evident foarte departe de notiunea romantica de androizi sau de roboti umani.

Figura 1.2 Umanoidul schitat de Leonardo da Vinci

Mai aproape de conceptul de robot umanoid a fost Elektro(fig.1.3), construit de Westinghouse Electric Corporation intre 1937 si 1938. Elektro avea sapte metri inaltime si cantarea 265 de kilograme. Nu numai ca putea sa mearga prin comanda vocala, avea de asemenea un vocabular de aproape 700 de cuvinte si a vorbit folosind un player de 78- rpm. In timpul expozitiei la Targul Mondial din 1939, Elektro fuma tigari, a explodat baloane, distingand intre lumina rosie si verde si si-a mutat capul si bratele. La urmatorul targ mondial, in 1940, i sa alaturat "Sparko", un caine robot care putea sa stea, sa latre si sa cerseasca.

Figura 1.3 Robotul Elektro

Pana in anii 1970, termenul inteligenta artificiala (AI) era in faza incipienta. Robotii Android au fost apoi proiectati sa absoarba fiecare detaliu in mediul lor si sa efectueze calcule matematice pentru a analiza ceea ce „vad”. Multi dintre acesti" roboti retro "(fig.1.4) au fost „paralizati” dupa ce au mers inainte nici macar un metru, find coplesiti de inputurile primite. In anii 1980 si 1990, un punct de cotitura a avut loc in studiul AI. S-a sugerat ca aceasta nu avea nevoie de o reprezentare interna foarte precisa a lumii pentru a interactiona cu ea, o idee inspirata de miscarea naturii insasi. Aceasta noua perspectiva a fost revolutionara in avansarea studiului AI si al roboticii.

Figura 1.4 Robot retro din anii 1970

Multi roboti si androizi au incantat de atunci oamenii si au ajutat la usurarea vietii lor. Exista Robonaut(figura 1.5), un robot umanoid, operat de la Laboratorul de Robotica Dexterous de la Centrul Spatial Johnson al NASA din Houston, Texas. Construit in 2000, robotul remarcabil de dexter are maini care pot manipula unelte spatioase si pot lucra in medii similare potrivite astronautilor. NASA a anuntat, de asemenea, planurile de a lansa Robonaut 2 sau R2 in spatiu in cursul acestui an. Robonaut 2 va fi primul robot umanoid care va deveni rezident permanent al Statiei Spatiale Internationale.

Figura 1.5 Robotul NASA denumit Robonaut

Administratorul asociat al NASA pentru Directia de misiuni a sistemelor de explorare, Doug Cooke, a spus despre Robonaut: "Aceasta tehnologie de ultima ora ofera o mare promisiune nu numai pentru NASA, ci si pentru natiune. Sunt foarte entuziasmat de noile oportunitati pentru oameni si Explorarea robotica a acestor roboti versatila ofera o gama larga de aplicatii. "

Apoi, exista ASIMO, un robot umanoid de 51 cm (130 cm) creat la Centrul de cercetare si dezvoltare Honda din Japonia(fig.1.6). Prescurtare pentru "Pasul avansat in mobilitate inovatoare", ASIMO poate merge sau se poate deplasa la viteze de pana la 6 km / h. De asemenea, robotul poate detecta miscarile mai multor obiecte si poate evalua distanta si directia, permitand ASIMO sa salute atunci cand te apropii de el. Alti roboti umanoizi memorabili pentru a iesi din tehnologia japoneza sunt robotul Kawada Industries HRP-2, robotul care serveste ceaiul, care poate transporta si mese si aplica panouri pe perete, iar HRP-4C de la Yamaha, incredibilul fembot, folosind software-ul de voce Yamaha Vocaloid, care ii permite sa cante.

Figura 1.6 Robotul ASIMO

2.2. Clasificarea robotilor mobili

Robotii mobili pot fi clasificati dupa:

-Mediul in care calatoresc:

Robotii de teren(fig. 1.7.1) sau robotii de domiciliu sunt de obicei denumiti vehicule de sol lipsiti de prezenta oamenilor(UGV). Acestea sunt cel mai frecvent cu roti sau senile, dar includ si roboti cu doua sau mai multe picioare (umanoide sau asemanatoare animalelor sau insectelor).

Figura 1.7.1 Un vehicul de tip UGV

Robotii de livrare si transport pot muta materiale si consumabile printr-un mediu de lucru

Robotii aerieni sunt de obicei mentionati ca vehicule aeriene fara pilot UAV(fig.1.7.2)

Robotii subacvatici sunt denumiti in mod obisnuit vehicule subacvatice autonome (AUV)

Robotii polari, concepute pentru a naviga in medii inghetate, cu crevase

Figura 1.7.2 Un robot de tip UAV

-Dispozitivul pe care il utilizeaza pentru locomotie, in principal:

Robot cu membre: picioare asemanatoare omului (adica un android) sau picioare asemanatoare animalelor(fig.1.7.3)

Roboti cu roti.

Roboti cu senile.

Figura 1.7.3 Un robot hexapod

2.3. Domenii de utilizare

In prezent, exista doua tipuri principale de roboti, pe baza utilizarii lor: roboti autonomi cu scop general si roboti dedicati.

Robotii pot fi clasificati dupa specificul scopului lor. Un robot ar putea fi proiectat pentru a indeplini o sarcina deosebit de bine sau o serie de sarcini mai putin bine. Desigur, toti robotii prin natura lor pot fi reprogramati sa se comporte diferit, dar unii sunt limitati de forma lor fizica. De exemplu, un brat de robot de fabrica poate efectua lucrari, cum ar fi taierea, sudarea, lipirea sau actionarea ca un drum de echitatie, in timp ce un robot pick-and-place poate popula numai placile cu circuite imprimate.

Robotii autonomi cu scop general(fig.1.7.4) pot efectua independent o varietate de functii. Robotii autonomi de uz general se pot deplasa independent in spatii cunoscute, se pot ocupa de propriile nevoi de reincarcare, pot interfata cu usile electronice si elevatoarele si pot indeplini alte sarcini de baza. La fel ca calculatoarele, robotii de uz general se pot conecta cu retelele, software-ul si accesoriile care le mareresc utilitatea. Acestia pot sa recunoasca persoane sau obiecte, sa vorbeasca, sa asigure companiile, sa monitorizeze calitatea mediului, sa raspunda la alarme, sa ridice consumabile si sa indeplineasca alte sarcini utile.

Figura 1.7.4 Robot cu scop general folosit ziua ca si ghid si noaptea ca si paznic

Robotii cu scop general pot efectua simultan o varietate de functii sau pot lua roluri diferite in momente diferite ale zilei. Unii astfel de roboti incearca sa imite fiintele umane si pot chiar sa semene cu oamenii in aparenta. Acest tip de robot este numit robot umanoid. Uneori, robotii umanoizi sunt intr-o etapa foarte limitata, deoarece nici un robot umanoid nu poate naviga, de fapt, in jurul unei incaperi pe care nu a mai vizitat-o. Astfel, robotii umanoizi sunt intr-adevar destul de limitati, in ciuda comportamentelor lor inteligente in mediile lor bine cunoscute.

In ultimele trei decenii, fabricile de automobile au devenit dominate de roboti. O fabrica tipica contine sute de roboti industriali care lucreaza pe linii de productie complet automatizate, cu un robot pentru fiecare zece lucratori umani. Pe o linie automata de productie, un sasiu al vehiculului pe un transportor este sudat, lipit, vopsit si in cele din urma asamblat la o serie de statii de roboti.

Robotii industriali sunt, de asemenea, utilizati pe scara larga pentru paletizarea si ambalarea produselor industriale, de exemplu pentru preluarea rapida a cutiilor de carton de la capatul unei benzi transportoare si plasarea lor in cutii sau pentru incarcarea si descarcarea centrelor de prelucrare.

Placile de circuite imprimate (PCB) sunt fabricate aproape in exclusivitate de roboti pick-and place, in mod obisnuit cu manipulatori SCARA(fig.1.7.5), care indeparteaza componentele electronice mici din benzi sau tavi si le pun pe PCB cu mare precizie. Astfel de roboti pot plasa sute de mii de componente pe ora, depasind cu mult un om in viteza, acuratete si fiabilitate.

Figura 1.7.5 Robot de tip SCARA

Robotii mobili, dupa marcajele sau firele din podea sau cu viziune laser, sunt utilizati pentru a transporta marfuri in jurul unor instalatii mari, precum depozite, porturi de containere sau spitale.

Exista multe locuri de munca pe care oamenii ar prefera sa le lase robotilor. Locul de munca poate fi plictisitor, cum ar fi curatenia domestica sau periculoasa, cum ar fi explorarea in interiorul unui vulcan. Alte locuri de munca sunt inaccesibile din punct de vedere fizic, cum ar fi explorarea unei alte planete, curatarea interioara a unei tevi lungi sau efectuarea unei interventii chirurgicale laparoscopice.

Aproape fiecare sonda spatiala lansata vreodata a fost un robot. Unele au fost lansate in anii 1960 cu abilitati foarte limitate, dar capacitatea lor de a zbura si de ateriza (in cazul lui Luna 9 prezentat in figura 1.7.6) este o dovada a statutului lor de robot. Acestea includ sondele Voyager si sondele Galileo, printre altele.

Figura 1.7.6 Sonda spatiala Luna 9

Nanorobotics este domeniul tehnologic in curs de dezvoltare a masinilor sau a robotilor ale caror componente sunt la sau aproape de scala microscopica a unui nanometru. De asemenea, cunoscute sub numele de "nanobots" sau "nanites"(fig. 1.7.7), ar fi construite din masini moleculare. Pana in prezent, cercetatorii au produs in mare parte doar parti din aceste sisteme complexe, cum ar fi rulmentii, senzorii si motoarele moleculare sintetice, dar au fost de asemenea si roboti functionali, cum ar fi cei care au intrat in concursul Nanobot Robocup. Cercetatorii spera, de asemenea, sa creeze roboti intregi la fel de mici ca si virusii sau bacteriile, care ar putea efectua sarcini pe o scara mica. Aplicatiile posibile includ microchirurgie (la nivelul celulelor individuale), ceata de utilitate, productie armament si curatare.

Figura 1.7.7 Nanobot

2.4. Aspiratorul robotizat autonom

Un aspirator robotizat, adesea numit robovac, este un aspirator autonom robotic care are programare inteligenta si un sistem limitat de curatare cu vacuum. Unele modele utilizeaza perii rotative pentru a ajunge in colturi stranse. Altele combina o serie de caracteristici de curatare (stergere, sterilizare UV etc.) simultan cu aspirarea, ceea ce face ca masina sa devina mai mult decat un robot de curatare cu vid.

Primul dispozitiv de curatare robotizat care a fost pus in productie a fost Electrolux Trilobite(fig.1.7.9), al producatorului electrocasnic suedez Electrolux. In 1996, una dintre primele versiuni ale vacuumului Trilobite de la Electrolux a fost prezentata in programul de stiinta BBC, "Lumea de maine".

Figura 1.7.9 Robotul de curatenie Trilobite

In 2001, compania britanica de tehnologie Dyson a construit si a demonstrat un robot vid cunoscut sub numele de DC06. Cu toate acestea, datorita pretului sau ridicat, acesta nu a fost niciodata lansat pe piata.

In 2002, compania americana de tehnologie avansata, iRobot a lansat robotul de aspirat podeaua Roomba(fig.1.8). Initial, iRobot a decis sa produca 15.000 de unitati si 10.000 de unitati in functie de succesul lansarii. Roomba a devenit imediat o senzatie uriasa de consum. Pentru sezonul de Craciun, iRobot a produs 50.000 de unitati pentru a satisface cererea de sarbatori. Dupa acest succes, comerciantii cu amanuntul de specialitate, precum si mai mult de 4.000 de magazine, cum ar fi Target, Kohl's si Linens 'n Things, au inceput sa vanda Roomba.

Figura 1.8 Robotul de aspirat podeaua Roomba

Din 2002, au aparut noi variante de aspiratoare robotizate pe piata. De exemplu, robotul cu vaccum canadian bObsweep robotizat atat cu mopuri si aspiratoare, cat si cu vidul robotic Neato Robotics XV-11, care utilizeaza viziunea laser mai degraba decat modelele traditionale cu ultrasunete .

In 2014, Dyson a anuntat lansarea noului sau robot cu vacuum numit Dyson 360 Eye(fig.1.9), dotat cu o camera de 360 ​​de grade care este montata pe partea de sus a aspiratorului robot si ar trebui sa ofere o navigatie mai buna decat alte marci. Robotul a fost programat pentru lansarea doar in Japonia, in primavara anului 2015, cu lansari internationale care urmau sa se desfasoare ulterior in cursul anului. Mai mult, Dyson a anuntat ca Eye 360 ​​are de doua ori aspiratia oricarui alt robot cu vacuum. Cu toate acestea, precizia acestei afirmatii este indoielnica, deoarece Dyson a fost dat in judecata pentru revendicari similare cu mai multe ocazii inainte.

Figura 1.9 Robotul de curatenie Dyson 360 Eye

Cea mai importanta caracteristica a acestor roboti si caracteristica care o diferentiaza de un aspirator normal este asa-numita path-finding sau cunoscuta si ca sistem de auto-navigare, care se refera la instructiunile precise pe care robotul le va lua pentru a traversa complet camera presupusa a curata. Un robot trebuie sa fie atent pentru a nu distruge cum ar fi taierea cablurilor televizorului sau conducerea peste pisica pretioasa. De fapt, toate companiile sunt pe deplin constiente de toate tipurile diferite de posibile scenarii si circumstante intr-o casa tipica si si-au transformat aspiratoarele autonome intr-un dispozitiv foarte sensibil si atent. Mai ales in ultimii doi ani, algoritmii pentru determinarea rutei optime s-au imbunatatit foarte mult. Exista diferite abordari in functie de producator.

Capitolul 3.

Platforma Arduino

3.1 Istoric

In 2005, in Ivrea, Italia, a fost initiat un proiect pentru a crea un dispozitiv pentru controlul proiectelor de design interactiv construite de studenti, care erau mai putin costisitoare decat alte sisteme de prototipuri disponibile in acel moment. Unul dintre cofondatori, Massimo Banzi, a numit aceasta piesa hardware Arduino in cinstea lui Bar di Re Arduino (In 1002, regele Arduin a devenit conducatorul Italiei. Astazi, Bar di Re Arduino, un pub pe o strada cu pietris in oras, ii onoreaza memoria) si a inceput sa produca placi intr-o mica fabrica situata in aceeasi regiune ca si compania computerizata Olivetti.

Proiectul Arduino este o piatra de temelie a platformei de cablare de tip open source si este programat folosind un limbaj bazat pe cablare (sintaxa si biblioteci), similar cu C ++, cu unele simplificari si modificari usoare si un mediu de dezvoltare integrat bazat pe procesare IDE(Processing-based).

Arduino a fost construit in jurul proiectului „Wiring” al lui Hernando Barragan. Wiring a fost proiectul tezei lui Hernando la Institutul de Design al Interactiunii Ivrea. A fost intentionata sa fie o versiune electronica a Processing care foloseste mediul de programare si a fost modelata dupa sintaxa Processing. Arduino nu ar exista fara Wiring si Wiring nu ar exista fara Processing.

In prezent, exista peste 200 de distribuitori de produse Arduino din intreaga lume. Aproximativ 80% dintre persoanele care cumpara acest produs provin din Statele Unite si Europa. Interesul pentru acest produs este in crestere pe pietele din China, India si America de Sud. De-a lungul anilor au fost create noi modele de Arduino. Designul original este numit Arduino Uno. Unele dintre modelele Arduino sunt Arduino Mega, Arduino Nano, LilyPad Arduino si Arduino Ethernet. Recent, Arduino a castigat publicitate prin parteneriatul cu Google. Google a lansat versiunea Android ADK sau Kitul de dezvoltare a accesoriilor, care se bazeaza pe Anduino. O persoana poate construi o aplicatie Android care utilizeaza camera telefonului, senzori de miscare, ecran tactil si conexiune la internet. Se pare ca Arduino creeaza un nou mod de programare mai ieftin. Nu pare sa plece in curand, devine din ce in ce mai populara.

Prima placa de prototip, realizata in 2005, a fost un design simplu si nu a fost numita Arduino. Massimo Banzi i-ar fi impus numele in acel an.

3.2 Hardware

Arduino este un hardware open source. Design-urile de referinta hardware sunt distribuite sub licentele Creative Commons Attribution Share-Alike 2.5 si sunt disponibile pe website-ul Arduino. Sunt disponibile si fisiere de configurare si de productie pentru unele versiuni ale hardware-ului. Codul sursa pentru IDE este lansat sub GNU General Public License, versiunea 2. Cu toate acestea, o nota oficiala de materiale a consiliilor Arduino nu a fost eliberata niciodata de personalul Arduino.

Desi designul hardware si software-ul sunt disponibile in mod gratuit prin licente copyleft, dezvoltatorii au solicitat ca numele Arduino sa fie exclusiv pentru produsul oficial si sa nu fie utilizat pentru opere derivate fara permisiune. Documentul oficial privind utilizarea denumirii Arduino subliniaza faptul ca proiectul este deschis spre incorporarea muncii altora in produsul official. Mai multe produse compatibile cu Arduino, comercializate, au evitat numele proiectului prin folosirea numelor diferite care se termina in -duino.

O placa Arduino timpurie(fig.2.1) cu o interfata serial de tip RS-232 (in partea de stanga sus) si un microcontroller Atmel ATmega8 (partea dreapta jos); Cele 14 pinuri I / O digitale se afla in partea superioara, cele 6 coloane de intrare analogice din dreapta jos si conectorul de alimentare din stanga jos.

Figura 2.1 O placa Arduino timpurie

Majoritatea placilor Arduino constau dintr-un microcontroler AVR de 8 biti (ATmega8, ATmega168, ATmega328, ATmega1280, ATmega2560) cu diferite cantitati de memorie flash, pini si caracteristici. Arduino Due pe 32 de biti, bazat pe modelul Atmel SAM3X8E, a fost introdus in 2012. Placile folosesc pini pe unul sau doau randuri sau conectori de tip mama care faciliteaza conexiunile pentru programare si incorporare in alte circuite. Acestea se pot conecta cu module de adaugare numite shielduri(fig.2.2). Shieldurile multiple si eventual stivuite pot fi adresate individual printr-o magistrala de serie I2C. Majoritatea placilor Arduino includ un regulator liniar de 5 Volti si un oscilator de cristal de 16 MHz sau un rezonator ceramic. Unele modele, cum ar fi LilyPad, ruleaza la 8 MHz si se dispenseaza cu regulatorul de tensiune la bord datorita unor restrictii specifice form factor.

Figura 2.2 Shield Adafruit de motoare

Microcontrolerele Arduino sunt pre-programate cu un bootloader de incarcare care simplifica incarcarea programelor in memoria flash pe cip. Implicit bootloader de la Aduino UNO este bootloader optiboot. Placile sunt incarcate cu cod de program printr-o conexiune seriala la un alt computer. Unele placi de serie Arduino contin un circuit de schimbator de nivel pentru a converti intre nivele logice RS-232 si semnale de nivel logic tranzistor-tranzistor (TTL). Placile actuale Arduino sunt programate prin Universal Serial Bus (USB), implementate folosind chips-uri USB-to-serial, cum ar fi FTDI FT232. Unele placi, cum ar fi placile ulterioare model Uno, inlocuiesc chipul FTDI cu un cip separat AVR care contine firmware USB-to-serial, care este reprogramabil prin propriul antet ICSP. Alte variante, cum ar fi Arduino Mini si Boarduino neoficiale, utilizeaza o placa sau un cablu adaptor detasabil USB-to-serial, Bluetooth sau alte metode, atunci cand sunt utilizate cu instrumentele traditionale de microcontroler in loc de Arduino IDE, ISP).

Placa Arduino expune majoritatea pinilor I / O ai microcontrolerului pentru a fi folositi de alte circuite. Diecimila, Duemilanove, si curentul Uno furnizeaza 14 pini I / O digitali, dintre care sase pot produce semnale modulate cu puls(PWM) si sase intrari analogice. Acesti pini se afla pe partea superioara a placii, prin intermediul conectorilor de tip tata de 0,1 inch (2,54 mm). Sunt disponibile, de asemenea, cateva scuturi de aplicatie plug-in. Arduino Nano si placile Bare Bones Board si Boarduino compatibile cu Arduino pot furniza conectori de tip tata pe partea inferioara a placii, care se pot conecta la placile breadboard ce nu necesita lipire(figura 2.3)

Figura 2.3 Placa de tip breadboard

Exista multe placi Arduino-derivate si Arduino-compatibile. Unele sunt echivalente functional cu un Arduino si pot fi folosite interschimbabil. Multi sporesc Arduino de baza prin adaugarea de drivere de iesire, deseori folosite in invatamantul la nivel de scoala, pentru a simplifica fabricarea carucioarelor si a micilor roboti. Altele sunt echivalente electric, dar schimba factorul de forma, pastrand uneori compatibilitatea cu shieldurile, uneori nu. Unele variante utilizeaza procesoare diferite, cu o varietate de compatibilitate.

Hardware-ul original Arduino a fost produs de compania italiana Smart Projects. Unele placi cu marca Arduino au fost proiectate de companiile americane Adafruit Industries si SparkFun Electronics. Incepand din 2016, 17 versiuni ale hardware-ului Arduino au fost produse commercial(fig.2.4).

Figura 2.4 Versiunile hardware Arduino

Arduino si placile compatibile cu Arduino utilizeaza placi de expansiune cu circuite imprimate, numite shielduri, care se conecteaza la placile standard cu conectori de tip Arduino. Scuturile pot oferi comenzi motor pentru imprimarea 3D si alte aplicatii, Global Positioning System (GPS), Ethernet, afisaj cu cristale lichide (LCD) sau breadboarding (prototipuri). Mai multe scuturi pot fi facute in modul fa-l singur (DIY).

3.3 Software

Un program pentru Arduino poate fi scris in orice limbaj de programare pentru un compilator care produce codul masinii binare pentru procesorul tinta. Atmel pune la dispozitie un mediu de dezvoltare propiru pentru microcontrolerele lor, AVR Studio si cel mai nou Studio Atmel.(fig.2.5)

Figura 2.5 Mediul de dezvoltare Atmel Studio

Proiectul Arduino pune la dispozitie mediul de dezvoltare integrat Arduino (IDE), care este o aplicatie cross-platforma scrisa in limbaj de programare Java. Acesta a provenit din IDE pentru limbrajele Processing si Wiring. Acesta include un editor de coduri cu functii precum taierea si lipirea textului, cautarea si inlocuirea textului, indentarea automata, potrivirea bretelelor si evidentierea sintaxelor si ofera mecanisme simple cu un singur clic pentru a compila si incarca programe intr-o placa Arduino. De asemenea, contine o zona de mesaje, o consola de text, o bara de instrumente cu butoane pentru functii comune si o ierarhie a meniurilor de operare.

Un program scris cu IDE pentru Arduino este numit o schita sau sketch(fig.2.6). Schitele sunt salvate pe calculatorul de dezvoltare ca fisiere text cu extensia .ino. Arduino Software (IDE) pre-1.0 schite salvate cu extensia .pde.

Figura 2.6 Schita(sketch) Arduino

ID-ul Arduino suporta limbile C si C ++ folosind reguli speciale de structurare a codurilor. IDE-ul Arduino furnizeaza o librarie software din proiectul Wiring, care ofera numeroase proceduri comune de intrare si iesire. Codul scris de utilizator necesita doar doua functii de baza, pentru pornirea schitei si bucla principala de program, care sunt compilate si legate de un program principal de programare Main() intr-un program executiv ciclic executabil cu unelte GNU, inclusiv cu distributia IDE. ID-ul Arduino utilizeaza programul avrdude pentru a converti codul executabil intr-un fisier text in codificare hexazecimala care este incarcat in placa Arduino printr-un program de incarcator din firmware-ul placii.

3.4 Programarea Arduino

O schita minima de Arduino C / C ++, asa cum o vede si programatorul IDE Arduino, consta doar din doua functii:

setup(): Aceasta functie se numeste o data cand o schita incepe dupa pornire sau resetare. Se utilizeaza pentru a initializa variabilele, modurile de intrare si iesire a pinilor si alte biblioteci necesare in schita.

loop(): Dupa ce a fost apelata configurarea (), bucla de functii () este executata in mod repetat in programul principal. Controleaza placa pana cand placa este oprita sau resetata.

Figura 2.7 Functiile de baza

Codul de mai sus nu va face nimic, dar structura este utila pentru copiere si lipire pentru a va incepe pe orice schita proprie. De asemenea, ne arata cum sa facem comentarii in cod.

Orice linie care incepe cu doua taieturi (//) nu va fi citita de compilator, astfel incat sa putem scrie orice dorim dupa ea. Cele doua taieturi pot fi plasate dupa codul functional pentru a pastra comentariile pe aceeasi linie. Comentand codul acesta poate fi deosebit de util in explicarea, atat pentru noi, cat si pentru altii, a modului in care programul functioneaza pas cu pas.

Cele mai multe placi Arduino contin o dioda emitatoare de lumina (LED) si un rezistor de sarcina conectat intre pinul 13 si masa, care este o caracteristica convenabila pentru multe teste si functii ale programului. Un program tipic pentru un programator initial Arduino clipeste un LED in mod repetat(fig.2.8).

Figura 2.8 Program ce clipeste un LED

Acest program utilizeaza functiile pinMode (), digitalWrite () si delay (), care sunt furnizate de bibliotecile interne incluse in mediul IDE. Programul este de obicei incarcat in Arduino de catre producator.

Capitolul 4.

Elementele componente ale sistemului

In cadrul acestui capitol se vor prezenta elementele componente ale robotului autonom, generalitati si caracteristici ale acestora. Am ales sa folosesc Arduino Uno deoarece este ieftina,usor de folosit si detine suficiente intrari/iesiri digitale pentru realizarea proiectului. Pentru a pune in miscare robotul vom folosi doua motoare de curent continuu cu reductor controlate cu ajutorul unei punti H comandata prin controllerul Arduino.

Pentru ocolirea obstacolelor vom folosi doi senzori infrarosu montati pe lateralele robotului si un senzor ultrasonic montat frontal, care vor trimite datele catre Arduino Uno, facilitand astfel controlul robotului.

Programarea si urmarirea robotului se vor face cu ajutorul modulului WiFi ce comunica cu Uno prin standardul serial UART. Functia de aspirare va fi deservita de un motor de curent continuu de turatie inalta controlat prin intermediul unui releu.

4.1. Arduino Uno

4.1.1. Generalitati

Mediul de dezvoltare Arduino poate fi caracterizat ca o platforma de procesare de tip open-source care se bazeaza pe software si hardware flexibile si usor de folosit. Construit ca o platforma de mici dimensiuni, sistemul integreaza un procesor de semnal ce poate prelua date din mediul incojurator cu ajutorul senzorilor si efectueaza diverse actiuni prin intermediul servomotoarelor, luminilor, motoarelor si a altor tipuri de dispozitive electromecanice. Limbajul de programare folosit este similar cu limbajul C++.

Figura 3.8. Placa de dezvoltare Arduino Uno

Placa de dezvoltare Arduino Uno (prezentata in Fig.3.8)este bazata pe microcontrollerul ATmega328 pe 8 biti. Acesta este dezvoltat de catre ATMEL si este un circuit integrat de inalta performanta bazat pe un procesor tip RISC, alaturi de 14 intrari/iesiri digitale(din care 6 pot fi utilizate ca iesiri PWM), 6 intrari analogice, un oscilator quartz de 16MHz, o conexiune USB pentru programare, o mufa de alimentare de 2.1mm si un pushbuton pentru resetare. Arduino Uno se diferentiaza de seriile precedente de placi de dezvoltare prin folosirea microcontrollerului Atmega16U2 in schimbul chipului FTDI, acesta fiind folosit ca si convertor de la comunicatia USB la comunicatia de tip serial.

Specificatii :

Tip Microcontroller: ATmega328 8 biti

Tensiunea de lucru: 5V

Tensiunea de intrare recomandata: 7-12V

Numar Pini digitali: 14 (din care 6 PWM output)

Pini analogici: 6

Intensitate current de iesire: 40 mA

Intensitate current de iesire la 3.3V: 50 mA

Memoria Flash: 32 KB din care 0.5 KB pentru bootloader

Memoria SRAM: 2 KB

Memoria EEPROM: 1 KB

Viteza semnalului de tact (clock): 16 MHz

Figura 3.9 Schema electrica a lui Arduino Uno

4.1.2 Alimentare

Placa de dezvoltare poate fi alimentata atat prin intermediul USB, cat si prin intermediul unei surse externe de putere. Sursa de putere este selectata in mod automat. La randul ei, sursa externa de alimentare poate fi atat o sursa dotata cu o punte pentru a redresa curentul alternativ in curent continuu, cat si o baterie. Sistemul poate fi alimentat extern, la o tensiune cuprinsa intre 7 si 20 V. Nu se recomanda utilizarea unei tensiunii mai mici de 7V pentru sursa externa deoarece tensiunea la bornele pinilor microcontrolerului ar putea sa scada sub 5 V. Acest lucru se intampla din cauza electronici folosite pentru stabilizarea nivelului de tensiune.

4.1.3 Memorie

ATmega328 are 32 KB memorie, din care 0,5 KB utilizati pentru bootloader(bootarea sistemului). Mai are de asemenea, 2 KB SRAM si 1 KB memorie EEPROM.

4.1.4 Intrari si iesiri

Oricare dintre cei 14 pini digitali de pe Uno poate fi folosit ca intrare sau iesire, utilizand una dintre functiile pinMode (), digitalWrite () si digitalRead (). Acestia functioneaza la 5 volti si pot furniza sau primi un maxim de 40 mA, avand integrat intern un rezistor de tip pull-up (deconectat in mod implicit) de 20-50 kOhmi.

In plus, unii pini digitali au functii specializate:

– Comunicatie Serial: pinii 0 (RX) si 1 (TX), folositi pentru a primi (RX) si a transmite (TX) date TTL. Acestia sunt conectati la pinii corespunzatori ai cipului Atmega16U2 USB-to-TTL Serial;

– Intreruperi externe: pinii 2 si 3 sunt folositi pentru intreruperi externe. Acesti pini pot fi configurati pentru a declansa o intrerupere de exemplu cand se modificare o valoare,sau cand avem o panta descendenta a unui semnal, folosind functia attachInterrupt()

-Iesiri PWM: pinii 3, 5, 6, 9, 10 si 11 asigura iesire PWM pe 8 biti folosind functia analogWrite ();

-Comunicatie SPI: pinii 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) accepta comunicarea SPI utilizand libraria SPI;

-Pe langa acestia,mai exista un led incorporat conectat la pinul digital 13, care atunci cand pinul este in mod HIGH se aprinde,iar cand pinul este in mod LOW ramane stins.

Uno dispune de 6 intrari analogice denumite A0…A5. Fiecare dintre acestia ofera rezolutie pe 10 biti(1024 valori diferite). In mod prestabilit, domeniul de masurare e de la ground(0V) la 5V, fiind posibila modificarea valorii maxime folosind pinul AREF si functia analogReference (). Pe langa asta,unii pini analogici au si functii specializate:

-Comunicatie TWI: pinii A4(SDA) si A5(SCL) suporta comunicatia de tip TWI utilizand libraria Wire;

-Pinul AREF: acesta este tensiunea de referinta pentru intrarile analogice,si poate fi modificat folosind functia analogReference;

-Pinul de RESET: adus in LOW acest pin reseteaza microcontrollerul. Folosit de regula pentru a adauga un buton de reset shieldurilor, ocolind astfel butonul de pe placa.

4.1.5 Comunicatie

Arduino Uno dispune de o numeroase de facilitati pentru a comunica cu calculatorul,alte placi Arduino sau diverse microcontrollere. Controllerul Atmega328 ofera comunicatie de tip serial UART TTL pe pinii digitali 0 si 1. Un chipset de tip Atmega16U2 converteste comunicatia seriala la USB, astfel ca placa va fi vazuta de catre calculator ca si un port virtual. Firmware-ul lui Atmega16U2 utilizeaza driverele standard de comunicatie USB, nemaifiind astfel nevoie de drivere externe. Pentru monitorizarea comunicatie, software-ul Arduino detine un monitor serial ce permite trimiterea de date catre si de la Arduino Uno. Cand intre conexiunea USB a calculatorului si cipul convertor serial-USB se transmit date,cele doua led-uri Rx si Tx de pe placa vor clipi. Uno detine si o librarie SoftwareSerial ce permite comunicatia de tip serial pe oricare din pinii digitali ai placii. Deasemenea suporta si comunicatie de tip SPI sau I2C,pentru cea din urma avand o librarie speciala Wire pentru simplificarea utlizarii magistralei I2C.

4.1.6 Programare

Arduino Uno poate fi programat folosind software-ul Arduino. Controllerul ATmega328 de pe Arduino Uno vine preinstalat cu un bootloader care permite incarcarea unui nou cod pe el fara a utiliza un programator hardware extern. Acesta comunica utilizand protocolul STK500 original. De asemenea, se poate trece peste bootloader si prin antetul ICSP (In-Circuit Programming Serial) se poate programa controllerul.

4.1.7 Functia de resetare automata

Arduino Uno este proiectat astfel incat sa poata fi resetat prin software-ul care ruleaza pe un computer conectat, nemaifiind necesar o apasare fizica a butonului de resetare inainte de a face un upload. Unul dintre semnalele de control (DTR) ale ATmega16U2 este conectat la linia de resetare a lui ATmega328 printr-un condensator de 100 nanofarazi. Cand linia de resetare semnal este sustinuta (pull-down), linia de resetare scade suficient de mult pentru a reseta cipul.

Software-ul Arduino utilizeaza aceasta capacitate pentru a permite incarcarea codului prin simpla apasare a butonului de incarcare din mediul Arduino. Asta inseamna ca bootloader-ul poate avea un interval de timp mai scurt, deoarece scaderea DTR poate fi bine coordonata cu inceputul incarcarii.

Uno contine un traseu numit RESET-EN ce poate fi intrerupt pentru a dezactiva resetarea automata. Padurile de pe ambele parti ale traseului pot fi lipite impreuna pentru al reactiva. De asemenea, resetarea automata mai poate fi dezactivata prin conectarea unui rezistor de 110 ohmi de la 5 V la linia de resetare.

4.1.8 Protectie suprasarcina

Arduino Uno are o o siguranta de tip polyfuse resetabila care protejeaza porturile USB ale computerului de scurtcircuit si de supracurent. Desi majoritatea calculatoarelor ofera protectie proprie interna, aceasta siguranta ofera un strat suplimentar de protectie. Daca pe portul USB este aplicata o valoare mai mare de 500 mA, siguranta va rupe automat conexiunea pana cand scurtcircuitul sau suprasarcina vor fi eliminate.

4.2. Driverul de motoare L298N

Circuitul integrat L298 (prezentat in Fig. 4.0) este un driver de nivel mediu din punct de vedere al puterii conduse. Poate controla usor si independent motoare care necesita cel mult 2 Amperi, in ambele directii. Este un driver de motoare dual si bidirectional (punte H dubla).

Figura 4.0 Driverul L298

O punte H (H Bridge) este un circuit electronic care permite aplicarea unei tensiuni pe o sarcina in orice sens. Aceste circuite permit motoarelor de curent continuu sa ruleze inainte si inapoi, astfel ca sunt adesea folosite in robotica si alte aplicatii. Puntea H este disponibila fie ca circuit integrat sau poate fi construita din componente discrete, tranzistoare bipolare sau MOS. Numele puntii H este derivat din modul obisnuit de desenare a circuitului (Fig 4.1).

Figura 4.1 Schema de principiu a unei punti H

Driverul L298 vine asamblat sub forma unui shield Arduino(Fig. 4.2), care contine conectorii de alimentare, conectori pentru controlul motoarelor si un stabilizator de tensiune de tip 78M05 care permite functionarea la tensiuni mari.

Figura 4.2 Shield Arduino L298N

Specificatii:

Tensiune de operare – maxim 46V

Tensiune de alimentare – 4.5-7V

Curent maxim – 4A

Tensiune de saturatie scazuta

Protectie la supraincalzire

Intrarea logica „0” – maxim 1.5V

4.3. Senzorul infrarosu

Un sensor infrarosu este un sensor folosit de regula pentru detectarea obstacolelor. Acesta se bazeaza pe reflexia radiatiei infrarosu de catre obstacole. Radiatia IR este emisa de catre un LED si este receptionata de catre un fototranzistor(Fig.5.0).

Figura 5.0 Principiul de functionare a unui sensor IR

Senzorul IR vine asamblat sub forma unui shield Arduino(Fig.5.1). Modulul se alimenteaza la o tensiune de 3-5 V si are un unghi de observare a obstacolelor de 35 de grade. Cu ajutorul potentiometrului se poate modifica nivelul de referinta, astfel incat se ajusteaza sensibilitatea, deci, distanta la care modulul detecteaza obstacole. Comparatorul LM 293 furnizeaza la iesire 1 logic atunci cand nu detecteaza obstacole si 0 logic atunci cand intalneste un obstacol.

Figura 5.1 Modulul infrarosu

Caracteristici tehnice:

Tensiune de alimentare: 3V – 5V;

Distanta sesizare obstacol: 2cm – 30cm;

Unghi observare obstacol: 35o;

Output digital;

Comparator LM393;

Tensiune de referinta reglabila.

4.4. Senzorul ultrasonic

Pricipiul de functionare a senzorilor ultrasonici (Fig.5.2) consta in emiterea de impulsuri acustice scurte de inalta frecventa, la intervale de timp regulate. Aceste unde sonore se propaga in aer cu viteza sunetului. Daca in drumul lor intalnesc un obiect, ele sunt reflectate inapoi ca semnal de ecou catre senzor. Mai apoi senzorul calculeaza distanta pana la obiect facand diferenta de timp dintre semnalul emis si ecoul primit. Distanta pana la obiect se determina masurand timpul parcurs de unda sonora si nu de intensitatea sunetului .

Figura 5.2 Principiul de functionare a senzorului ultrasonic

Senzorul vine asamblat sub forma unui shield Arduino(fig.5.3), are o precizie de 3mm si masoara la un unghi de 15 grade. Este usor de folosit, consuma putina energie si are 4 pini: VCC si GND, care sunt folositi pentru alimentare si doi pini digitali, utilizati pentru unda emisa (trigger) si unda receptionata (echo).

Figura 5.3 Senzorul ultrasonic

Caracteristici tehnice:

Tensiunea de alimentare: 5V;

Curent consumat: 15mA;

Distanta de functionare: 2cm – 4m;

Unghiul de masurare: 15o;

Eroare de doar 3mm;

Durata semnalului de input: 10us.

4.4. Modulul de comunicatie WiFi ESP8266

Modulul WiFi ESP8266 (prezentat in figura 5.4) este un circuit integrat de tip SOC(system on chip) cu protocol TCP / IP integrat si faciliteaza accesul la reteaua WiFi oricarui microcontroller. Poate comunica cu dispozitive precum Arduino prin protocolul serial UART la o frecventa ridicata (baudrate 115200), are 1 MB de memorie flash si doi pini GPIO (General Purpose Input Output). Conexiunea la Arduino Uno se face prin intermediul pinilor Rx si Tx, protocolul de comunicatie fiind serial UART.

ESP8266 are capabilitati de hosting pentru o aplicatie si este capabil sa preia toate functiile de retea Wi-Fi de la un alt procesor de aplicatie. Modulul ESP8266 are o capacitate de procesare si stocare suficient de puternica, pentru a-i permite sa fie integrat cu senzori sau dispozitive specifice prin intermediul pinilor GPIO.

ESP8266 suporta APSD pentru aplicatii VoIP si interfete cu Bluetooth si contine un RF auto-calibrat astfel ca nu necesita piese RF externe pentru a functiona.

Figura 5.4 Modulul WiFi ESP8266

Caracteristici tehnice:

Tensiunea de alimentare: 3.3V;

Curent consumat: 70mA – 300mA;

Standard WiFi 802.11 b/g/n;

Protocol TCP/IP integrat;

Comunicatie UART la 115200 bps;

Curent consumat in modul sleep: <10uA;

Memorie Flash: 1000Kb;

Securitate WPA sau WPA2.

4.5. Motor DC cu raport 120:1

Motorul de curent continuu cu perii (Fig.5.5) are un consum mic de curent, este dotat cu un reductor 120:1 si este potrivit pentru utilizarea ca forta motrice la roboti de dimensiuni reduse.

Figura 5.5 Motorul DC cu reductor 120:1

Motorul functioneaza la tensiune de alimentare cuprinsa intre 3 si 7,5V, are un consum de curent in sarcina de 170mA , diametrul axului de iesire este de 3,7mm si are un offset de 21mm fata de axul motorului.

Specificatii:

Tensiune de lucru: 3 – 7,5 V

Reductor 120 : 1

Turatie in gol: 83 rpm @ 5 V

Curent in gol: 100 mA @ 3 V

Dimensiuni: 42 x 47 x 23 mm

Diametru ax: 3.7 mm

Masa: 31 grame

Figura 5.6 Dimensiuni motor de current continuu cu redactor 120:1

4.6. Motorul 385S DC de turatie mare

Acest tip de motor(prezentat in Fig.5.7) are ca principale caracteristici dimensiunile reduse, consumul de curent relativ redus si numarul de rotatii ridicat. Tensiunea nominal de lucru este de 12V, insa el poate opera intre 6-24VDC.

In sarcina acest motor consuma 870mA la o turatie de 8170RPM, avand un cuplu de 80.5gr-cm sau 7.8mN-m(Fig.5.8). Poate fi operat in ambele sensuri, inversand polaritatea la bornele sale.

Figura 5.7 Motor de current continuu si turatie mare

Figura 5.8 Performantele motorului 385S

Capitolul 5.

Proiectarea sistemului

Proiectarea robotului autonom porneste de la premisele deduse in capitolul anterior. Asa cum s-a stabilit la partea teoretica a lucrarii, modelul robotului este format din partea activa care se ocupa de deplasare si ocolire obstacole si partea secundara care se ocupa de interfata om-masina a sistemului.

Pentru realizarea modelului robotului autonom au fost respectate urmatoarele etape:

proiectarea si realizarea partii mecanice si de actionare electrica;

proiectarea si realizarea partii electronice, respectiv asamblarea intregului model;

proiectarea si implementarea partii software;

testarea sistemului.

In cele ce urmeaza se va face o prezentare detaliata a acestor etape urmarite pe durata proiectarii si realizarii sistemului.

5.1. Principiul de functionare

Robotul foloseste asa numita actionare diferentiala, care utilizeaza doua motoare de current continuu cu redactor 120:1 actionate independent montate in pozitii fixe pe partea stanga si dreapta a sasiului robotului. Astfel ca reducerea vitezei de rotatie a motorului din dreapta va face vehiculul sa se intoarca spre stanga, iar reducerea vitezei de rotatie a motorului din stanga va face robotul sa se intoarca spre acea directie. Rotirea ambelor motoare in acelasi timp cu aceeasi viteza de turatie va face robotul sa inainteze inainte sau inapoi,in functie de sensul curentilor aplicati la bornele motoarelor(fig.6.0). Rotirea motoarelor se realizeaza cu ajutorul puntii H care consta intr-un shield L298N. Sensul de trecere al curentului electric determina rotirea motorului intr-un sens sau altul.

Figura 6.0 Tipuri diferite de deplasare a robotului

5.2. Asamblarea componentelor hardware

Scopul de baza este sa dezvoltam un robot care este capabil sa ia singur decizii astfel incat sa ocoleasca obstacolele ce-i apar in cale, folosindu-se de senzorii IR si un senzor ultrasonic, acestia asigurandu-i autonomia.

Inainte de inceperea executiei s-a realizat o diagrama bloc a robotului mobil prezentat in aceasta lucrare(fig 6.0). S-a inceput cu un sasiu metalic , pe care s-a montat sistemul de locomotie format din motoarele de curent continuu , precum si elemente pentru fixarea acestora, urmand apoi atasarea platformei ARDUINO UNO, a shieldului L298N si a sistemului senzorial format din senzorii IR si senzorul ultrasonic.

Senzorii IR impreuna cu senzorul ultrasonic sunt montati pe carcasa suport a motorului de inalta turatie folosit la aspirare.Pentru alimentarea intregului ansamblu format din platforma Arduino Uno, shield driver motoare, motoare DC, senzori, shield Wi-Fi vom folosi o baterie Li-Ion de 12V si o capacitate de aproximativ 10000mAh. Pentru carcasa motorului cu rol de aspirare vom folosi parte dintr-un aspirator de mana, de la care vom prelua si un filtru ce are rol de a stopa particulele absorbite sa ajunga la paletele motorului.Pentru o mai buna eficienta in absorbtia particulelor vom incerca sa atasam fanta de absorbtie cat mai aproape de sol.

Figura 6.2 Diagrama bloc a ansamblului

Vom incepe cu asamblarea sasiului si a motoarelor DC cu raport 120:1. Sasiul folosit este din aluminiu(fig. 6.3). Am ales sa folosesc acest material pentru ca este usor si rezistent in acelasi timp, astfel ca pentru a pune in miscare ansamblul motoarele de current continuu nu vor depune un efort suplimentar ce se traduce printr-un consum de current scazut.

Figura 6.3 Sasiul robotului

Vom atasa motoarele de current continuu de partea inferioara a sasiului cu ajutorul unor suruburi de tip M4.(fig 6.4).

Figura 6.4 Partea inferioara a sasiului impreuna cu motoarele de current continuu

Urmatorul pas este atasarea rotilor de partea inferioara a sasiului. Rotile sunt construite din material plastic si au un diametru de aproximativ 70 mm.Tot de partea inferioara a sasiului se va fixa si roata de tip ball caster. Ball caster-ul este construit dintr-un metal dur si reprezinta un suport cu o bila metalica in interior ce se poate misca liber, la contactul cu solul. Acest tip de ansamblu este util pentru a-l folosi ca punct de sprijin pentru roboti similar cu cel construit in proiectul nostru, conferindu-le stabilitate. Terminam de asamblat partea inferioara a sasiului prin adaugarea suportului de baterii(fig.6.5).

Figura 6.5 Partea inferioara a sasiului asamblata.

Pentru a suprima eventualele varfuri de curent generate de invartirea motoarelor, vom lipi cu ajutorul unei statii de lipit cate un capacitor cu valoarea de 0.1microFarazi fiecarui motor(fig.6.6), evitand astfel ca aceste varfuri sa interfereze cu semnalele provenite de la platform Arduino.

Figura 6.6 Lipirea capacitorilor de terminalele motoarelor

De partea superioara a sasiului(fig.6.7) vom atasa platform Arduino, impreuna cu restul componentelor: senzorii, shieldurile, conectorul pentru incarcarea bateriilor si switchul de oprire a alimentarii. Platforma Arduino Uno o vom fixa de sasiu cu ajutorul unei benzi cu adeziv de tip velcro(scai).

Figura 6.7 Partea superioara a sasiului

5.3. Proiectarea si implementarea partii electronice

Asa cum s-a precizat la inceputul capitolului sistemul contine doua parti majore: partea activa si partea de interactiune om-masina(HMI). Deoarece aceste doua parti pot fi separate fizic, ele vor fi prezentate de asemenea separat.

Partea electronica are la baza o placa cu microcontroler denumita Arduino Uno. Acest model de placa de dezvoltare prezinta avantajul ca are mai multi pini digitali si analogici, nemaifiind necesar realizarea unei parti electronice de multiplexare a pinilor de date.

In aceste conditii, structura hardware a robotului autonom este prezenta in schema bloc din figura 6.8.

Figura 6.8 Structura partii electronice

Din Fig.6.8 rezulta ca din punct de vedere al structurii electronice, modelul realizat are trei componente:

unitatea centrala realizata cu o placa de dezvoltare Arduino UNO;

interfata cu procesul, formata din senzori pentru pozitiile extreme si comenzi pentru actionarea motoarelor.

interfata om-masina, formata dintr-o aplicatie de control WiFi;

In continuare se vor prezenta pe rand aceste parti.

Placa de dezvoltare Arduino Uno (prezentata in Fig.3.8)este bazata pe microcontrollerul ATmega328 pe 8 biti alaturi de 14 intrari/iesiri digitale(din care 6 pot fi utilizate ca iesiri PWM) si 6 intrari analogice. O parte dintre aceste intrari/iesiri le vom folosi pentru conectarea senzorilor si a driverului de motoare.

Pentru conectarea driverului de motoare L298N vom folosi pinii digitali D9,D10,D11 si D12,dupa cum este prezentat in figura 6.9.

Figura 6.9 Conectarea L298N

Driverul L298N este o punte H (H Bridge), adica un circuit electronic care permite aplicarea unei tensiuni pe o sarcina in orice sens, permitand astfel motoarelor de curent continuu sa ruleze inainte si inapoi. Urmatoarele diagrame vor explica cum functioneaza o punte H si ne vor ajuta sa cream functiile de control ale robotului.

Figura 7.0 este un desen schematic care arata cum functioneaza o punte H. Motorul este conectat la tensiunea de alimentare pozitiva si la masa prin intermediul a patru comutatoare (in puntea actuala H, comutarea se face cu tranzistori). Cand toate intrerupatoarele sunt deschise, nu curge curentul si motorul este oprit.

Figura 7.0 Punte H cu motorul nefunctionand

Figura 7.1 arata cele doua intrerupatoare care, atunci cand sunt inchise, vor provoca functionarea motorului inainte. Intrerupatorul marcat cu A conecteaza terminalul motor pozitiv la sursa de alimentare pozitiva. Comutatorul D conecteaza terminalul negativ al motorului la masa.

Figura 7.1 Punte H cu motor functionand inainte

Figura 7.2 arata ca intrerupatoarele opuse inchise au ca efect inversarea motorului. Comutatorul C conecteaza alimentarea pozitiva la borna negativa a motorului. Comutatorul B conecteaza terminalul motorului pozitiv la masa.

Figura 7.2 Punte H cu motor functionand inapoi

Figura 7.3 arata intrerupatoarele B si D inchise. Ambele borne ale motorului sunt conectate impreuna – nici un terminal nu este conectat la tensiunea de alimentare pozitiva. Acesta este un mod suportat de unele punti H pentru a opri motorul mai repede decat in ​​cazul precedent in care motorul este pur si simplu deconectat de la alimentare. Deoarece bornele motorului sunt scurtcircuitate, motorul va rezista rotirii. Daca motorul se roteste si apoi se fixeaza la acest mod, se va opri mai repede decat daca terminalele ar fi fost deconectate.

Figura 7.3 Punte H cu motor infranat

Pentru a testa functionalitatea puntii H vom rula un mic cod pentru a ne asigura ca motoarele vor functiona asa cum ne dorim(fig.7.4)

Figura 7.4 Testarea functionarii motoarelor

Trecem mai apoi la conectarea senzorilor IR. . Un sensor IR se bazeaza pe reflexia radiatiei infrarosu de catre obstacole. Radiatia IR este emisa de catre un LED si este receptionata de catre un fototranzistor(Fig.7.5).

Figura 7.5 Principiu functionare sensor IR

Pentru conectarea senzorilor IR vom folosi pinii digitali D6,D7,dupa cum este prezentat in figura 7.6. Senzorii se alimenteaza la tensiunea de 5V disponibila pe pinii platformei Arduino Uno.

Figura 7.6 Conectarea senzorilor IR

Pentru testarea senzorilor IR(figura 7.7) vom rula un mic cod pentru a ne asigura ca sunt bine calibrati. Calibrarea se face din potentiometrul disponibil pe modulul IR.

Figura 7.7 Testarea senzorilor IR

Urmatorul modul pe care il vom conecta la platform Arduino este senzorul ultrasonic HC-SR04.

Pricipiul de functionare a senzorilor ultrasonici (Fig.7.8) consta in emiterea de impulsuri acustice scurte de inalta frecventa, la intervale de timp regulate. Aceste unde sonore se propaga in aer cu viteza sunetului. Daca in drumul lor intalnesc un obiect, ele sunt reflectate inapoi ca semnal de ecou catre senzor. Mai apoi senzorul calculeaza distanta pana la obiect facand diferenta de timp dintre semnalul emis si ecoul primit.

Figura 7.8 Principiul de functionare al unui sensor ultrasonic

Modulul HC-SR04 are 4 pini: alimentare, trigger(initiere semnal), echo(raspuns semnal) si masa. Dupa trimiterea unui semnal de initiere pe pinul trigger cu durata de 10 microsecunde se asteapta raspunsul pe pinul echo, iar durata impulsului obtinut impartit la 58 va rezulta distanta pana la un obiect in cm; daca nu este nici un obstacol intalnit, timpul de raspuns este de 58ms.Pentru conectarea modulului la Arduino am ales pinii digitali D12 si D13(figura 7.9).

Figura 7.9 Conectarea modului ultrasonic la UNO

Figura 8.0 Testarea modulului ultrasonic.

Comandarea motorului de curent continuu si turatie inalta se face cu ajutorul unui releu. Amales sa folosesc un releu deoarece motorul de turatie functioneaza la 12V si Arduino Uno nu poate furniza aceasta tensiune.Conectarea in circuit a releului se face conform schemei de mai jos:

Figura 8.1 Conectarea in circuit a releului.

Pinul digital D2 va fi folosit pentru a comanda releul. Pe pinul D2 vom trimite un semnal low pentru a activa releul, implicit motorul de turatie inalta.

Controlul manual al robotului se face prin folosirea unui modul WiFi ESP8266. Am ales sa folosesc un modul WiFi in detrimental unuia Bluetooth deoarece timpii de raspuns sunt mult mai buni. Modulul WiFi se foloseste de protocolul TCP/IP pentru a conecta la o retea wireless si serial UART pentru a comunica cu platforma Arduino Uno. Conectarea cu Arduino se face conform schemei de mai jos(fig.8.3),unde am am conectat pinii Rx si Tx ai modului ESP8266 la pinii Rx si Tx ai lui Arduino.

Datorita faptului ca modulul ESP8266 suporta doar nivel logic de 3.3V pentru a comunica , va trebui sa construim un circuit de tip logic level shifter care in esenta este un divizor de tensiune(fig.8.2). Astfel ca ne vom folosi de un resistor cu valoarea de 5kOhmi si un resistor cu valoarea de 10kOhmi pentru a crea un divisor de tensiune ai carui valoare de iesire va fi de 3.3V. La acest ciscuit vom lega pinul Rx al modulului ESP8266, pinul Tx fiind legat direct deoarece Arduino este capabil sa comunice si pe nivel logic de 3.3V.

Figura 8.2 Divizor de tensiune

Figura 8.3 Conectarea modului ESP8266 cu Arduino Uno

Alimentarea modului ESP8266 se va face dintr-o sursa externa(fig.8.4), deoarece in urma testelor am constatat ca in anumite conditii modulul consuma 125mA, iar iesirea de 3.3V a lui Arduino Uno furnizeaza doar 50mA. Astfel ca de la bateria de 12v vom alimenta un regulator de tip 7803 ce furnizeaza la iesire 3.3V si un curent maxim de 800mA.

Figura 8.4 Alimentarea modulului ESP8266

Testarea modului ESP 8266 se face folosind libraria generica ESP8266WiFi.h. Programul de testare doar va cauta retele WiFi, fara a se conecta la ele(figura 8.5). Baudrate-ul pe care functioneaza modulul este 115200.

Figura 8.5 Testare modul ESP8266

In urma realizarii partii electronice s-a ajuns la urmatoarele concluzii:

Mobilitatea este asigurata de cele doua motoare de current continuu si se poate trece la implementarea functiei

Sistemul sensorial functioneaza in parametrii si se pot implementa functiile ce-i confera robotului autonomie

Motorul de turatie inalta poate fi comandat printr-un releu, facilitand astfel functia de aspirare

Functia de control manual poate fi implementata, testarea aratand ca modulul WiFi este

5.4. Implementarea software

Proiectarea software se refera la stabilirea arhitecturii software a sistemului. Aceasta se realizeaza conform principiilor prezentate in [5], [9], [10]. In acest sens, se porneste de la cerintele impuse de principiul de functionare autonoma si anume:

sistemul trebuie sa poata fi controlat atat manual cat si automat;

la control automat acesta trebuie sa aiba functie autonoma si sa ia singur decizii de orientare in spatiu;

sistemul trebuie sa detecteze pozitiile limita pe care le intalneste si sa ia decizii pentru rezolvarea acestor probleme.

Pornind de la aceste precizari s-a realizat arhitectura software din figura 8.6. Asa cum era de asteptat, exista un bloc principal denumit MAIN care va fi format dintr-o bucla infinita.

Figura 8.6 Arhitectura software a robotului

O librarie de interfata cu motor low level numita RobotMotor incapsuleaza functiile hardware ale motorului astfel incat codul sa poata fi utilizat de robotul nostru prin intermediul shieldului L298N. Un modul high level numit Move este de asemenea prevazut pentru a permite logicii schitei sa se ocupe de miscarile robotului in locul puterii motorului, de exemplu, modulul Move are comenzi pentru a misca robotul la stanga sau la dreapta, pentru a se deplasa inapoi sau roti 90 de grade.

Putem simplifica codul pentru a controla comportamentul robotului prin utilizarea functiilor de miscare de nivel superior furnizate in modulul Move. Aceste functii se refera la miscarea dorita din perspectiva robotului, mai degraba decat la controlul specific al motorului. De exemplu, pentru a roti robotul, in loc sa apelam functii pentru a rula un motor inainte si celalalt inapoi, puteti apela o singura functie care roteste robotul. Si prin calibrarea vitezei de rotatie, putem obtine cu usurinta robotul sa se roteasca in orice unghi dorit. Folosind functiile de nivel superior pentru a conduce robotul simplificam codul si izolam logica schitei de codul motor specific pentru hardware.

Lista cu functiile de baza ale miscarii:

Move Forward: ambele motoare sunt conduse inainte cu aceeasi viteza

Move Backward: ambele motoare sunt actionate in sens invers cu aceeasi viteza

Move Left: motorul stanga oprit, motorul din dreapta condus inainte

Move Right: motorul dreapta oprit, motorul stanga condus inainte

Move Stop: ambele motoare s-au oprit

Set Move Speed: folosit pentru a seta viteza pentru viitoarele miscari ale robotului

Figura 8.8 ne arata codul folosit care furnizeaza functia de miscare de baza a robotului. Codul ofera functii care combina comenzile individuale ale motorului. De exemplu, functia moveForward solicita functiile individuale pentru a roti motoarele stanga si dreapta in directia in care se misca robotul inainte. Viteza de miscare este setata de functia de deplasare SetSpeed. MoveSetSpeed ​​comanda motoarele sa ruleze la viteza dorita si stocheaza valoarea vitezei, astfel incat robotul sa poata relua functionarea la ultima viteza setata, urmand o actiune evaziva necesara pentru a evita obstacolele.

Figura 8.8 Miscarile de baza are robotului

Rotirea este o sarcina obisnuita pe masura ce robotul exploreaza si se misca pentru a evita obstacolele. Robotul nostru nu cunoaste unghiul cu care se confrunta sau cat de multe miscari reale rezulta din conducerea motoarelor. Comenzile de rotire a robotului la un anumit unghi sunt implementate prin temporizare,cat timp porneste motoarele pe baza datelor colectate in timpul calibrarii.

Lista functiilor de rotire:

Move Rotate: Un motor inainte, unul inversat pe durata rotirii robotului la unghiul dat

Rotation Angle to Time: Functie folosita pentru a calcula durata de rotire a robotului la un unghi dat la o anumita viteza

Calibrate Rotation Rate: Functia utilizata pentru calibrare – robotul va incerca sa se roteasca la un unghi dat la viteze de la viteza minima pana la 100% la intervale de 10%.

Figura 8.9 Functia de rotire a robotului

Functiile de miscare de nivel superior (fig.9.0) functioneaza impreuna pentru a oferi o modalitate simpla de a instrui robotul sa se indeparteze scurt de la un obstacol in timp ce verifica daca trebuie sa evite un alt obstacol intalnit in timpul unei actiuni evazive.

Timed Move: Muta ​​robotul intr-o directie specificata pentru o durata specificata.

Moving Delay: Verifica obstacole in timp ce intarzie o anumita perioada. Utilizeaza functia checkMovement() pentru a vedea daca un obstacol este detectat in directia actuala de miscare.

Figura 9.0 Functiile de miscare de nivel superior

Functiile timedMove si movingDelay functioneaza impreuna pentru a oferi o modalitate simpla de a instrui robotul sa se indeparteze scurt de la un obstacol. Pentru ca  movingDelay poate verifica obstacolele in timpul actiunii evazive, poate evita aparitia unor obstacole noi in timp ce se indeparteaza de altul.

Informatiile senzorilor pot fi folosite de robot pentru a naviga si a interactiona cu mediul sau. Senzorii raporteaza despre lumea din jurul lor. Masurarea luminii, distantei, sunetului, miscarii, directiei,temperaturii,presiunii sau locatiei. Senzorii de reflexie IR si senzorii de distanta ultrasonici sunt utilizati pentru a determina daca un obiect este aproape de robot. Senzorii detecteaza obiectele din apropiere si sunt utilizati pentru urmarirea liniei sau detectarea marginilor (determinand daca robotul este aproape de marginea suprafetei pe care se misca, cum ar fi marginea unei mese). Senzorii de distanta sunt utilizati pentru a determina distanta pana la obiecte pana la cativa centimetri distanta de robot.

Senzori IR folosesc lumina infrarosie reflectata pentru a detecta prezenta unei linii pentru urmarirea liniei sau absenta unei reflexii pentru detectarea marginii. Robotul utilizeaza o functie numita irSensorDetect(fig.9.1) pentru a returna valoarea true daca nivelul luminii a crescut suficient de sus fata de nivelul ambiental, indicand faptul ca un obiect din apropiere reflecta fasciculul IR.

Figura 9.1 Functia IR de detectare a unui obiect reflectant

Constantele senzorilor determina ce senzor sa utilizeze: SENSE_IR_LEFT pentru senzorul din stanga, SENSE_IR_RIGHT pentru dreapta (aceste constante sunt definite in robotDefines.h). Constanta pentru a prelua numarul de pin analogic stocat in matrice IR_SENSOR.Daca valoarea analogRead este mai mica decat pragul predeterminat, functia returneaza adevarul indicand faptul ca a fost detectata o reflexie .Aceste functii folosesc arrays in loc de variabile simple pentru a stoca pinii si pragurile deoarece acestea faciliteaza extinderea codului pentru a suporta si alti senzori.Pentru a adauga un senzor, marim constanta NBR_SENSORS si adaugam numarul PIN-ului senzorilor la lista de pini din matricea IR_SENSOR.

In timp ce irSensorDetect returneaza true atunci cand se detecteaza o reflexie, cand ne dorim cazul opus( sa returneze true daca detecteaza o margine) IrEdgeDetect ofera aceasta capacitate si poate fi folosit pentru a returna true atunci cand este detectata o margine(fig.9.2). Cu alte cuvinte, cand senzorul priveste in jos, nu se detecteaza nici o reflexie de la suprafata, deoarece un obiect intunecat blocheaza reflexia sau cea mai apropiata suprafata( probabil podeaua ) este la cativa centimetri distanta. Acest efect este folosit pentru a detecta cand ati plasat un obiect intunecat sub senzor.

Figura 9.2 Functia IR de detectare a unei margini

Senzorii trebuie sa fie calibrati pentru a lua in considerare lumina ambientala. Senzorii de reflexie raspund la lumina soarelui si la lumina artificiala, astfel incat un prag sa fie masurat fara obiect langa senzor. Nivelurile deasupra acestui prag inseamna ca nivelul luminii este mai mare decat ambianta, ceea ce indica faptul ca un obiect din apropiere reflecta lumina IR a senzorului. Etalonarea luminii ambientale se face folosind codul din figura 9.3.

Figura 9.3 Calibrare senzor IR

Acesta incarca nivelul luminii ambientale in variabila ambient, calculeaza nivelurile pentru detectarea reflexiei (stocate in matricea irSensorReflect) si nivelurile pentru Detectare margine (stocata in matricea iresensorEdge). Pragul constant irReflect este diferenta procentuala la lumina pentru a detecta un obstacol care reflecta. Constanta iredgeThreshold este diferenta procentuala pentru a detecta o margine. Valorile implicite pentru aceste praguri sunt 10% pentru reflectie si 90% pentru margini detectare.

Pulsurile sonore pot fi utilizate pentru masurarea distantei. Timpul necesar pentru ca un impuls sa sara de pe un obiect si sa se intoarca la senzor este proportional cu distanta. Viteza sunetului este de 340 de metri pe secunda, ceea ce inseamna ca este nevoie de 29 de microsecunde pentru ca un sunet sa calatoreasca 1 centimetru (reciproc de 340 de metri pe secunda). Pentru a extrage distanta in cm, durata este impartita la 29. Durata este timpul pentru suma de iesiri si impulsuri reflectate astfel incat distanta fata de obiect este microsecunde / 29/2. Durata pulsului este masurata utilizand functia Arduino pulsIn. Aceasta returneaza durata unui impuls in  microsecunde. Figura 9.4 arata codul care utilizeaza senzorul ultrasonic pentru a returna distanta in cm.

Figura 9.3 Functie sensor ultrasonic

Functia pingGetDistance returneaza distanta in cm masurata cu un senzor ultrasonic pe pinul digital (pingPin) trecut in functie. Pulsul sonor folosit pentru a masura distanta este declansat prin trimiterea unui impuls digital care este scazut timp de 2 microsecunde si inalt timp de 5 microsecunde. Modul pin este schimbat de la iesire la intrare, iar functia pulseIn este utilizata pentru a masura raspunsul de la senzor, care ajunge ca latimea impulsului de intrare. Formula mai sus amintita este folosita pentru a converti aceasta valoare la distanta.

Functia de control manual va fi implementata cu ajutorul modului WiFi ESP8266. Modulul WiFi se foloseste de protocolul TCP/IP pentru a conecta la o retea wireless si serial UART pentru a comunica cu platforma Arduino Uno. Conectarea cu Arduino se face conform schemei de mai jos(fig.8.3),unde am am conectat pinii Rx si Tx ai modului ESP8266 la pinii Rx si Tx ai lui Arduino. Logica de functionare este descrisa in figura de mai jos.

Figura 9.4 Functia manuala de control

Pentru demonstrarea Robotului controlat Wi-Fi, am folosit o aplicatie pentru Android mobil numit "Blynk". Blynk(fig.9.5) este o aplicatie foarte compatibila cu Arduino, poate fi descarcata din Magazin Google Play si poate fi usor de configurat. Din motive de securitate aplicatia necesita introducerea unui token de autorizare. Acest token este primit in momentul inregistrarii, ulterior el va fi inclus in codul schitat in Arduino IDE.

Figura 9.5 Programul Blynk

Aplicatia Blynk este intuitiva si usor de folosit. Dispune de butoane,widgeturi si alte icoane prestabilite. Aplicatia noastra va include un joystick de control manual, un switch pentru schimbare intre control automat sau control manual si un switch pentru activare/dezactivare functie aspirare(fig.9.6).

Figura 9.6 Functiile din aplicatia Blynk

Programul este disponibil ready-made in Arduino IDE. Trebuie doar sa descarcam libraria Blynk pentru Arduino. Mai intai am inclus toate librariile necesare pentru a rula acest cod in Arduino IDE si apoi a introdus tokenul de autorizare(fig.9.7), din aplicatia Blynk, in stringul auth. Aici conectam pini seriali(Rx si Tx) ai modulului Wi-Fi cu cei ai lui Arduino.

Figura 9.7 Configurare modul ESP8266

Apoi am definit pinii de iesire (8,9,10,11) pentru motoare si am scris cateva functii de directie pentru a misca robotul in directie particulara: void forward (), void invers (), void right () si void left ()

Dupa aceasta, in functie de configurare, initializam toate dispozitivele necesare, cum ar fi directionarea pinilor motoarelor, inceperea comunicatiei seriala, furnizand numele de utilizator si parola Wi-Fi.

Figura 9.8 Definire pini iesire,functii directie

Concluzii

Lucrarea de fata implementeaza un model functional al unui robot autonom de tip aspirator cu vacuum comandabil atat in mod manual in care operatorul are decizia totala in ceea ce inseamna comanda sa, cat si in mod automat in care robotul ia singur deciziile de orientare in spatiu si ocolire obstacole.

Lucrarea incepe cu un o prezentare teoretica a tehnologiei incorporate intr-un robot mobil. In cadrul acestei prezentari teoretice s-a determinat care sunt elementele pe care trebuie sa le contina modelul realizat, identificandu-se functiile de baza ale robotului.

Proiectarea modelului s-a executat in mai multi pasi. In primul rand s-a analizat posibilitatea de realizare mecanica a sistemului. In acest scop s-au analizat mai multe solutii de realizare a acestei parti, solutia finala aleasa fiind formata dintr-un sasiu de aluminiu rotund. Aceasta alegere a fost facuta datorita faptului ca acesta are o greutate redusa,astfel limitandu-se efortul de a pune in miscare robotul. Pentru partea de mobilitate s-au analizat mai multe solutii prin intermediul carora sa se poata controla cu cat mai multa precizie robotul. Solutia finala aleasa a fost doua motoare de curent continuu cu reductor. Partea mecanica a condus implicit la realizarea unei parti de automatizare. Solutia aleasa pentru aceasta parte este formata dintr-un sistem cu microcontroler si din electronica aferenta comenzii elementelor de executie. Datorita usurintei de utilizare s-a ales folosirea platformei Arduino. Comanda celor doua motoare care actioneaza partea mecanica a fost efectuata cu ajutorul unor drivere electronice specifice. Important este faptul ca sistemul a fost dezvoltat prin utilizarea unor senzori de pozitie care sa determine orientarea in spatiu a robotului.

Proiectarea software a sistemului a pornit de la proiectarea interfetei HMI. Prin utilizarea elementelor electronice avute la dispozitie s-a realizat un meniu cu ajutorul caruia sa se poate controla toate functiile pe care le are utilajul. Partea software s-a continuat cu implementarea celor trei functii stabilite pentru robotul luat in considerare, functii care au rolul de a comanda elementele de executie, de a urmarii senzorii de orientare si de a lua decizii in consecinta.

Analizand cele prezentate pana acum se poate spune ca proiectul si-a atins scopul. Au fost implementate toate functiile principale ale sistemului, iar acestea functioneaza in conditii corecte. In plus se poate spune ca pe durata realizarii sistemului s-au atins diverse notiuni de utilizarea a microcontrolerelor.

Astfel:

au fost utilizate toate functiile de comanda a pinilor: intrari si iesiri digitale, intrari analogice, respectiv iesiri analogice (care reprezinta de fapt generare de semnale de PWM);

s-au generat semnale PWM atat in mod direct cu functia de iesire analogica, cat si in mod indirect, acestea fiind implementate prin generarea de semnale dreptunghiulare cu periodicitate stabilita software;

s-au utilizat toate modurile de realizare a unei pauze: pauze software care impiedica rularea altor functii (delay),

Limitari si posibile implementari ulterioare

Modelul robotului de aspirare cu vacuum are mai multe limitari. In primul rand, modelul a pornit de la renuntarea la implementare a unei functii a acestuia si anume: functia de mop activ deoarece aceasta necesita un servomotor aditional. In al doilea rand, modelul a fost creat cu echipamente de foarte mica putere care a asigurat un cost de realizare scazut, ceea ce nu ii ofera posibilitatea de a fi foarte eficient in a executa functia de aspirare.

In aceste conditii modelul va putea fi dezvoltat in primul rand prin rezolvarea celor doua probleme prezentate anterior. Prima se rezolva prin utilizarea a unui motoar care sa comande un curatare a podelei, precum si a unui motor liniar care sa permita inclinarea intregii structuri. A doua problema poate fi rezolvata doar prin reproiectarea integrala a partii mecanice si de actionare electrica.

De asemenea si partea de interfata HMI poate fi imbunatatita. De exemplu se poate utiliza un afisaj grafic cu ajutorul caruia sa se poata urmari gradul de incarcare a bateriei.

Bibliografie

Jeri Freedman, Robots Through History, 2011

A.Currie, The History of Robotics 2006

T.Harris, How Robots Work, 2007

Roland Siegwart, Introduction to Autonomous Mobile Robots, 2004

Robin R. Murphy, Introduction to AI Robotics, 2000

Robert H. Bishop, Mechatronics an introduction, 2006

Arduino Uno, https://www.arduino.cc/en/Main/ArduinoBoardUno

Driver L298, http://www.st.com/en/motor-drivers/l298.html

Punte H, https://www.sparkfun.com/datasheets/Robotics/L298_H_Bridge.pdf

S.Sam Ge, Autonomous Mobile Robots Sensing, Control, Decision Making and Applications, The National University of Singapore 2006

Senzorul Ultrasonic HC-SR04, http://www.micropik.com/PDF/HCSR04.pdf

Modul WiFi ESP8266, http://download.arduino.org/products/UNOWIFI/0A-ESP8266-Datasheet-EN-v4.3.pdf

Motor DC cu reductor 120:1, https://www.pololu.com/product/1516

Motor de turatie mare 385S, http://descargas.cetronic.es/RS-385SH.pdf

M.Margolis, Make an Arduino Controlled Robot, 2013

Anexa

Codul sursa aferent întregului sistem este:

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

// 1. Librarii

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

#include <AFMotor.h> // librariemotor driver shield

#include "RobotMotor.h" //librarie motoare 2wd or 4wd motor library

#include "robotDefines.h" // definitii globale

#include <ESP8266_SoftSer.h> //librarie modul WiFi

#include <BlynkSimpleShieldEsp8266_SoftSer.h> // librarie aplicatie Android

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

// 2. Pini

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

//pini ultrasonic

#define trigPin 12
#define echoPin 13

//pini IR
#define ir1 7
#define ir2 6

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

//declara pinii motoarelor DC ca output

pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);

//=========================================

// LOOP

//=========================================

// functiile de miscare de baza

int moveState = MOV_STOP; // ce face robotul

int moveSpeed = 0; // viteza de miscare (0-100%)

int speedIncrement = 10; // procent crestere/descrestere

void moveBegin()

{

motorBegin(MOTOR_LEFT);

motorBegin(MOTOR_RIGHT);

moveStop();

}

void moveLeft()

{

motorForward(MOTOR_LEFT, 0);

motorForward(MOTOR_RIGHT, moveSpeed);

changeMoveState(MOV_LEFT);

}

void moveRight()

{

motorForward(MOTOR_LEFT, moveSpeed);

motorForward(MOTOR_RIGHT, 0);

changeMoveState(MOV_RIGHT);

}

void moveStop()

{

motorStop(MOTOR_LEFT);

motorStop(MOTOR_RIGHT);

changeMoveState(MOV_STOP);

}

void moveBrake()

{

motorBrake(MOTOR_LEFT);

motorBrake(MOTOR_RIGHT);

changeMoveState(MOV_STOP);

}

void moveBackward()

{

motorReverse(MOTOR_LEFT, moveSpeed);

motorReverse(MOTOR_RIGHT, moveSpeed);

changeMoveState(MOV_BACK);

}

void moveForward()

{

motorForward(MOTOR_LEFT, moveSpeed);

motorForward(MOTOR_RIGHT, moveSpeed);

changeMoveState(MOV_FORWARD);

}

void moveSetSpeed(int speed)

{

motorSetSpeed(MOTOR_LEFT, speed) ;

motorSetSpeed(MOTOR_RIGHT, speed) ;

moveSpeed = speed; // salveaza valoarea

}

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

//functie scanare obstacole

void lookBegin()

{

irSensorBegin(); // initializare sensori

}

// returneaza true daca obctacol este detectat

boolean lookForObstacle(int obstacle)

{

switch(obstacle) {

case OBST_FRONT_EDGE: return irEdgeDetect(SENSE_IR_LEFT) && irEdgeDetect(SENSE_IR_RIGHT);

case OBST_LEFT_EDGE: return irEdgeDetect(SENSE_IR_LEFT);

case OBST_RIGHT_EDGE: return irEdgeDetect(SENSE_IR_RIGHT);

}

return false;

}

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

// functie ce verifica daca robotul continua sa se miste in timp ce face miscari evazive

// returneaza true daca robotul nu e blocat

boolean checkMovement()

{

return true;

}

//functia de verificare miscare

boolean checkMovement()

{

boolean isClear = true; // daca nu detecteaza obstacole returneaza valoarea default

if(moveGetState() == MOV_FORWARD)

{

if(lookForObstacle(OBST_FRONT) == true)

{

isClear = false;

}

}

else if(moveGetState() == MOV_BACK)

{

if(lookForObstacle(OBST_REAR_EDGE) == true)

{

isClear = false;

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

// functia de rotire a robotului

int lookAt(int angle)

{

moveRotate(angle); // roteste robotul

int distance, samples;

long cume;

distance = samples = cume = 0;

for(int i =0; i < 4; i++)

{

distance = pingGetDistance(pingPin);

if(distance > 0)

{

samples++;

cume+= distance;

}

}

if(samples > 0)

distance = cume / samples;

else

distance = 0;

moveRotate(-angle); // roteste robotul in directia originala

return distance;

}

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

//functie initializare conexiune modul wifi

void setup()

{

// Consola baud rate

Serial.begin(9600);

delay(10);

// ESP8266 baud rate

EspSerial.begin(9600);

delay(10);

Blynk.begin(auth, wifi, "username", "password"); // wifi username and password

pinMode(m11, OUTPUT);

pinMode(m12, OUTPUT);

pinMode(m21, OUTPUT);

pinMode(m22, OUTPUT);

}

//=========================================

// Main

//=========================================

#include <AFMotor.h> // librarie motor driver shield

#include "RobotMotor.h" //librarie motoare 2wd or 4wd motor library

#include "robotDefines.h" // definitii globale

/// initializare variabile sistem

void setup()

{

Serial.begin(9600);

lookBegin(); /// adaugat Look tab

moveBegin(); /// adaugat Move tab

Serial.println("Ready");

}

void loop()

{

///codul pentru evitare obstacole

if( lookForObstacle(OBST_FRONT_EDGE) == true)

{

Serial.println("ambii senzori detecteaza muchii");

timedMove(MOV_BACK, 300);

moveRotate(120);

while(lookForObstacle(OBST_FRONT_EDGE) == true )

moveStop(); // opreste motoarele

}

else if(lookForObstacle(OBST_LEFT_EDGE) == true)

{

Serial.println("sensor stanga detecteaza margine");

timedMove(MOV_BACK, 100);

moveRotate(30);

}

else if(lookForObstacle(OBST_RIGHT_EDGE) == true)

{

Serial.println("sensor dreapta detecteaza margine ");

timedMove(MOV_BACK, 100);

moveRotate(-30);

}

else

{

moveSetSpeed(MIN_SPEED);

moveForward();

}

}

// functie indicare numar aprindere LED

void blinkNumber( byte number) {

pinMode(LED_PIN, OUTPUT); // enable LED pin pentru output

while(number–) {

digitalWrite(LED_PIN, HIGH); delay(100);

digitalWrite(LED_PIN, LOW); delay(400);

}

}

Similar Posts