Robot Mobil Pentru Deplasari In Medii Industriale

PROIECT DE DIPLOMĂ

Robot mobil pentru deplasǎri ȋn medii industriale

CUPRINS

INTRODUCERE

CAPITOLUL I. NOȚIUNI GENERALE DESPRE ROBOȚI

1.1 Generalitǎți

1.2 Tipuri de roboți

CAPITOLUL II COMPONENTELE UNUI ROBOT MOBIL ȊN MEDII INDUSTRIALE

2.1 Placa de dezvoltare Arduino

2.2 Anatomia unui program Arduino

2.3 Driver motoare de current continuu

2.4 Cutia de viteze Tamiya

2.5 Motorul de curent continuu

2.6 Senzori utilizați în controlul robotului

CAPITOULUL III. MACHETA EXPERIMENTALǍ

3.1 Enumerarea componentelor machetei experimentale

3.2 Descrierea componentelor machetei experimentale

3.2.1 Senzorul ultrasonic Maxbotix LV EZ3 (Sonar)

3.2.2 Senzor ultrasonic HY-SRF05

3.2.3 Senzor de luminǎ Brick

3.2.4. Placa de dezvoltare Arduino UNO R3

3.2.5. Shield LCD 16X2

3.2.6. Alegerea radiatorului

3.2.7. Driver motoare de curent continuu L298

3.2.8. Cutia de vitezǎ Tamiya

3.2.9. Kit, șenile și roți

3.3 Rolul și funcționarea machetei experimentale

CAPITOLUL IV. VARIANTA INDUSTRIALǍ

4.1 Caracteristicile variantei industriale

4.2 Descrierea motorului pas cu pas a variantei industriale

CAPITOUL V. PROIECTARE SOFTWARE

5.1 Implementarea programului de control

5.2 Realizarea programului și testarea senzorului ultrasonic din față

5.3 Realizarea programului și testarea senzorilor ultrasonici laterali

5.4 Realizarea programului și testarea senzorului de luminǎ Brick

5.6 Realizarea programului pentru LCD

CAPITOLUL VI CONCLUZII ȘI CONTRIBUȚII PERSONALE

BIBLIOGRAFIE

INTRODUCERE

Realizarea proiectului de diplomǎ s-a desfǎșurat sub ȋndrumarea domnului Robert Beloiu, cǎruia vreau sǎ ȋi mulțumesc pentru ajutorul acordat pe tot parcursul efectuǎri acestuia.

Având în vedere importanța și necesitatea tot mai mare a unor operatori virtuali sau mecanici, am decis să înclin spre ideea realizării unui robot mobil care se poate deplasa ȋn medii industriale.

Implementarea și proiectarea unui robot, al cărui sistem de acționare să fie independent, astfel ȋncȃt omul sǎ nu intervinǎ, el putȃnd sǎ se deplaseze singur pe o anumită traiectorie, în mod automat. Acest lucru va reprezenta un pas important în dezvoltarea ulterioară a unei platforme de cercetare și explorare.

Acest sistem se poate utiliza și în industria auto, astfel senzorii ultrasonici folosiți în proiect, pentru detecția obtacolelor, pot fi utilizați în imbunătățirea siguranței și în eliminarea erorilor umane care pot să apară în conducerea automobilului.

De asemenea, sistemul are o flexibilitate imensǎ, iar platforma poate fi adaptată la diverse operații, explorare în medii ostile omului, deplasarea sa pe un perimetru stabilit, și efectuarea de măsurători la intervale și puncte în spațiu dinainte stabilite. El mai poate reprezenta și o platformǎ pentru dezvoltări ulterioare ale sistemelor de control auto .

Acest proiect are precum obiectiv proiectarea unui sistem automat de control al unui robot mobil utilizând un ansamblu format din

microcontroler (placa de dezvoltare);

senzori de tip ultrasonici;

senzor de luminǎ;

LCD .

Senzorii ultrasonici și senzorul de luminǎ vor furniza parametrii dependenți de distanța reală, în urma prelucrăriilor și a operațiilor se pot controla motoarele electrice de curent continuu ce asigură mișcarea. LCD-ul, la rȃndul lui, va afișa parametrii furnizați de senzorii ultrasonici și senzorul de luminǎ.

Funcționarea va fi condiționată doar de capacitatea acumulatoriilor care alimentează întreg anasamblul, eventual se poate proiecta un sistem de alimentare cu panouri solare care ar oferii mai multă autonomie. Ceea ce ar putea conduce la reducerea consumului de energie este:

utilizarea unor motoare mai economice;

utilizarea unui sistem de încărcare a acumulatoriilor folosind panouri solare;

utilizarea unor acumulatori mai ușori și cu caracteristici superioare, fațǎ de acumulatorii folosiți în situația inițială.

Ȋn cea ce privește structura lucrǎrii aceasta este structutatǎ pe 5 capitole.

CAPITOLUL I. NOȚIUNI GENERALE DESPRE ROBOȚI

1.1 Generalitǎți

Robotul este o mașinǎ automatǎ flexibilǎ, care ȋndeplinește o funcție tipic umanǎ. El se poate adapta la schimbǎrile apǎrute ȋn mediu și posedǎ douǎ proprietǎți caracteristice: versatilitatea și autoadaptabilitatea la mediu.

Versatilitatea este capacitatea robotului industrial de a executa lucrǎri diverse și/sau de a executa aceeași lucrare ȋn moduri diferite.

Autoadaptabilitatea la mediul ȋnconjurǎtor este proprietatea robotului de a-și atinge obiectivul – executarea lucrǎrii, chiar dacǎ apar perturbații neprevǎzute ale mediului ȋn timpul executǎrii acesteia.

Domeniile de aplicație ale roboticii se pot restrȃnge ȋn trei mari grupe:

Domeniul producției;

Domeniul explorǎrii;

Domeniul asistenței individuale.

Utilizarea roboților ȋn industrie determinǎ:

Creșterea nomenclaturii pieselor realizate;

Reducerea cotei relative a producției de masǎ și de serie mare ȋn comparație cu cea de serie micǎ și de unicate;

Restrȃngerea mȃinii de lucru;

Reducerea cheltuielilor pentru manoperǎ și a celor destinate ȋmbunǎtǎțirii calitǎții mediului de lucru (toxicitate, zgomot, temperature etc.)

Acesta este compus din urmǎtoarele elemente:

mecanică care stabilește înfățișarea robotului și mișcările posibile pe timp de funcționare;

senzori;

actori;

Senzorii și actorii sunt întrebuințați la interacția cu mediul sistemului.

mecanism de direcționare are grijă ca robotul să-și îndeplinească obiectivul cu succes, evaluând de exemplu informațiile senzorilor. Acest mecanism reglează motoarele și planifică mișcările care trebuiesc efectuate (Dragoș Gabriel Zisopol, 2006).

Primele modele de mașini apǎrute, pot fi mai degrabă numite automate (provenind din grecescul automatos, care se mișcă singur). Acestea nu puteau executa decât câte un singur obiectiv, fiind constrânse de construcție.

Matematicianul grec Archytas a construit, conform unor relatări, unul dintre aceste prime automate: un porumbel propulsat cu vapori, care putea zbura singur. Acest porumbel cavernos din lemn era umplut cu aer sub presiune. Acesta avea un ventil care permitea deschiderea și închiderea printr-o contragreutate. Au urmat multe modele dealungul secolelor. Unele înlesneau munca iar altele deserveau la amuzamentul oamenilor.

Cu descoperirea ceasului mecanic din secolul XIV s-a deschis calea unor posibilități noi și complexe. Nu mult după aceea au apărut primele mașini, care semănau îndepărtat cu roboții de azi. Posibil era însă numai ca mișcările să urmeze una după alta, fără să fie nevoie de intervenția manuală în acel sistem (http://ro.wikipedia.org/wiki/Robot).

Dezvoltarea electrotehnicii din secolul XX a adus cu sine și o dezvoltare a roboticii. Printre primii roboți mobili se numără sistemul Elmer și Elsie construit de William Grey Walter în anul 1948. Aceste triciclete se puteau îndrepta spre o sursă de lumină și puteau să recunoască coliziuni în împrejurimi.

Anul 1956 este considerat ca anul nașterii a robotului industrial. George Devol a depus candidatura în acest an în SUA pentru un patent pentru "transferul programat de articole". Câțiva ani după aceea a construit împreună cu Joseph Engelberger robotul UNIMATE. Acest robot de aproximativ două tone a fost mai întâi introdus în montarea de iconoscoape pentru televizoare, găsindu-și apoi drumul în industria automobilă. Programele pentru acest robot au fost salvate sub formă de comenzi direcționate pentru motoare pe un cilindru magnetic. Din acest moment se introduc roboți industriali ca UNIMATE în multe domenii ale producției fiind permanent dezvoltați mai departe pentru a putea face față cererilor complexe care li se impun.

Roboții exploratori sunt roboți care operează în locații greu accesibile și periculoase teleghidați sau parțial autonom. Aceștia pot lucra de exemplu într-o regiune aflată în conflict militar, pe Lună sau Marte. O navigare teleghidată de pe pământ în ultimele două cazuri este imposibilă din cauza distanței. Semnalele de comunicație ajung la destinație în câteva ore, iar recepționarea lor durează la fel de mult. În astfel de situații roboții trebuie să fie programați cu mai multe tipuri de comportare, din care ei să aleagă pe cel mai adecvat și să-l execute.

Acest tip de robot dotat cu senzori a fost folosit și la cercetarea puțurilor din piramide. Mai mulți cryoboți au fost deja testați de NASA în Antarctica. Acest tip de robot poate pătrunde până la 3.600 de m prin gheață. Cryoboți pot fi astfel folosiți în cercetarea capelor polare pe Marte în speranța descoperirii de viață extraterestră.

1.2 Tipuri de roboți

 Roboții sunt ȋmpǎrțiți în mai multe categorii, avȃnd in vedere domeniul lor de utilizare:

Robot industrial

Robot autonom mobil;

Robot umanoid;

Robot de servicii;

Robot jucărie;

Robot explorator;

Robot militar.

Robotul industrial se definește ca fiind o mașinǎ automatǎ programabilǎ, folositǎ ȋn procesul de producție pentru realizarea unor funcții de acționare analoage cu cele realizate de mȃna omului, pentru deplasarea unor piese sau scule din procesle tehnologice. Robotul industrial este un manipulator universal cu un program flexibil (D. Drimer și alții, 1985)

Fig.1.1 Reprezentarea schematizatǎ a unui robot industrial prin componentele sale

În funcție de operațiunea pentru care au fost creați, roboții industriali se împart în:

roboți SCARA – specifici pentru operații de ridicare și așezare a diferitelor obiecte;

roboți cartezieni – aceștia permit ridicarea și plasarea obiectelor ce nu necesită orientare, sau pot fi preorientate;

roboți cu șase grade de libertate.

Astfel, robotul industrial este un produs mecatronic reprezentȃnd intersecția rezultatelor de vȃrf ale principalelor domenii tehnice ca (Ilie Popa, 2001):

mecanica;

electronica;

automatica și calculatoarele;

informatica;

sisteme de acționare, sistemele de senzori și traductoare.

Sistemul robot este format din asamblul elementelor unui proces ȋn care este integrat robotul.

Componentele sistemului robot, prezentate ȋn figura 1.2, sunt:

spațiul de operare;

sursa de energie;

sursa de informație;

robotul propriu-zis.

Fig.1.2 Schema structuralǎ generalǎ a unui robot

CAPITOLUL II COMPONENTELE UNUI ROBOT MOBIL ȊN MEDII INDUSTRIALE

2.1 Placa de dezvoltare Arduino

Complexitatea structurilor mecanice ȋntr-o serie de roboți industriali, a sistemelor senzoriale precum și gradul ridicat de dificultate al operațiilor tehnologice conexe necesitǎ sisteme de conducere cu rezerve hardware și software suficiente, care sǎ acopere cerințele impuse de regimurile specifice ȋn care opereazǎ aceste sisteme. O soluție ar fi implementarea sistemului de conducere pe o structurǎ bazatǎ pe microprocesoare.

Microprocesorul acoperǎ relativ ușor cerințele specificate mai devreme și asigurǎ ȋn același timp o flexibilitate deosebitǎ a domeniului de utilizare, o fiabilitate ridicatǎ și o soluție economicǎ ȋn general unanim acceptabilǎ.

Soluțiile hardware implicate ȋn orice sistem de conducere cu microprocesor pot fi grupate ȋn douǎ clase mari:

arhitecturi monoprocesor;

arhitecturi multiprocesor.

Ȋntr-o structurǎ multiprocesor, fiecǎrei axe i se asociazǎ cȃte un procesor ȋmpreunǎ cu modulele de interfațǎ auxiliare cǎtre dispozitivul de acționare și cǎtre sistemul de traductoare de deplasare.

Indiferent de structura de conducere adoptatǎ, una din funcțiile de bazǎ ale microprocesorului va consta ȋn acoperirea controlerului numeric ce asigurǎ performanțele de regim staționar și dinamic ale elementelor mecanice (Mircea Ivǎnescu, 1994)

Structura generalǎ a sistemului de conducere are forma din figura urmǎtoare:

Fig. 2.1 Structura generalǎ a sistemului de conducere

Ȋn ceea ce privește Arduino, aceasta este o platformă de procesare open-source, bazată pe software și hardware flexibil și simplu de folosit. Constă într-o pațiilor tehnologice conexe necesitǎ sisteme de conducere cu rezerve hardware și software suficiente, care sǎ acopere cerințele impuse de regimurile specifice ȋn care opereazǎ aceste sisteme. O soluție ar fi implementarea sistemului de conducere pe o structurǎ bazatǎ pe microprocesoare.

Microprocesorul acoperǎ relativ ușor cerințele specificate mai devreme și asigurǎ ȋn același timp o flexibilitate deosebitǎ a domeniului de utilizare, o fiabilitate ridicatǎ și o soluție economicǎ ȋn general unanim acceptabilǎ.

Soluțiile hardware implicate ȋn orice sistem de conducere cu microprocesor pot fi grupate ȋn douǎ clase mari:

arhitecturi monoprocesor;

arhitecturi multiprocesor.

Ȋntr-o structurǎ multiprocesor, fiecǎrei axe i se asociazǎ cȃte un procesor ȋmpreunǎ cu modulele de interfațǎ auxiliare cǎtre dispozitivul de acționare și cǎtre sistemul de traductoare de deplasare.

Indiferent de structura de conducere adoptatǎ, una din funcțiile de bazǎ ale microprocesorului va consta ȋn acoperirea controlerului numeric ce asigurǎ performanțele de regim staționar și dinamic ale elementelor mecanice (Mircea Ivǎnescu, 1994)

Structura generalǎ a sistemului de conducere are forma din figura urmǎtoare:

Fig. 2.1 Structura generalǎ a sistemului de conducere

Ȋn ceea ce privește Arduino, aceasta este o platformă de procesare open-source, bazată pe software și hardware flexibil și simplu de folosit. Constă într-o platformă de mici dimensiuni (6.8 cm / 5.3 cm – în cea mai des întalnită variantă) construită în jurul unui procesor de semnal și este capabilă de a prelua date din mediul înconjurător printr-o serie de senzori și de a efectua acțiuni asupra mediului prin intermediul luminilor, motoarelor, servomotoare, și alte tipuri de dispozitive mecanice. Procesorul este capabil să ruleze cod scris într-un limbaj de programare care este foarte similar cu limbajul C.

Placa de dezvoltare creată este compatibilă cu platforma arduino și este bazată pe un microcontroler ATMega328. Aceasta are 14 intrari digitale/pini de ieșire (dintre care 6 pot fi utilizate ca ieșiri PWM), 6 intrări analogice, un oscilator cu quarț de 16 MHz, o conexiune USB, o mufă de alimentare, un antet ICSP și un buton de resetare. (Curs Roboticǎ și Arduino http://www.robofun.ro).

Arduino este una dintre cele mai simplu de utilizat platforme cu microcontroler. Te poți gȃndi la el ca la un minicalculator (are puterea de calcul a unui calculator obișnuit de acum 15 ani), fiind capabil sǎ culeagǎ informații din mediu și sǎ reacționeze la acestea. Ȋn jurul lui existǎ un ecosistem de dispozitive extrem de bine dezvoltat. Orice fel de informație ți-ai dori sǎ culegi din mediu, orice fel de conexiuni cu alte sisteme ai avea nevoie, existǎ o șansǎ foarte mare sǎ gǎsești un dispozitiv pentru Arduino capabil sǎ ȋți ofere ceea ce ai nevoie.

Astfel, dacǎ discutǎm despre preluarea de informații din mediu, mai jos sunt doar cȃteva exemple de senzori: senzori ce determinǎ nivelul de alcool ȋn aerul respirat, senzor de incediu, gaz GPL, monoxid de carbon, accelerații ale dispozitivelor ȋn mișcare, curent consumat de diverse dispozitive casnice, forța de apǎsare, gradul de rotire, cartele, distanțe, nivel de iluminare, direcția nordului, prezența umanǎ, sunet, temperatura, umiditate, presiune atmosfericǎ sau video.

Dacǎ ne referim la posibilitatea de a ne conecta cu alte sisteme, existǎ plǎci de rețea Ethernet pentru Arduino capabile sǎ comunice informații prin Internet, dispozitive capabile sǎ transmitǎ date prin conexiune radio, plǎci de rețea WIFI, dispozitive GSM pentru Arduino (capabile sǎ trimitǎ/recepționeze SMS-uri, sǎ inițieze apeluri de voce sau sǎ trimitǎ date prin rețeaua 3G) sau conectori Bluetooth pentru conectarea Arduino cu telefonul mobil sau laptop.

Ȋn zona mecanicǎ, existǎ motoare de curent continuu (utilizate pentru roboticǎ), motoare pas cu pas (utilizate de obicei ȋn zona industrialǎ) sau servomotoare, controlate foarte exact. Pentru afișarea informațiilor preluate, existǎ ecrane LCD pentru Arduino, ȋncepȃnd cu cele mai simple (LCD text cu 16 caractere) pȃnǎ la ecran LCD grafice (Curs Roboticǎ și Arduino http://www.robofun.ro).

2.2 Anatomia unui program Arduino

Orice program Arduino are douǎ secțiuni. Secțiunea "setup", care este rulatǎ doar o singurǎ datǎ, atunci cȃnd placa este alimentatǎ (sau este apǎsat butonul "Reset"), și secțiunea "loop", care este rulatǎ ȋn ciclu, atȃt timp cȃt este alimentatǎ placa.

Un exemplu ar fi:

void setup() {

//codul scris aici ruleazǎ o singurǎ datǎ

}

void loop() {

//codul scris aici ruleazǎ tot timpul

}

Astfel, ȋn rutina "setup" vom pune de obicei cod de inițializare, iar ȋn rutina "loop" vom scrie partea principalǎ a programului nostru.

2.3 Driver motoare de current continuu

Pentru controlul motoarelor de curent continuu necesare deplasării robotului, vom avea nevoie de un driver de putere ce are incorporată o punte tip H. O punte H este un circuit electronic care permite o tensiune care urmează să fie aplicată într-o sarcină să circule și în direcție opusă (figura 2.1).

Aceste circuite sunt adesea folosite în robotică și alte aplicații pentru a permite motoarelor de curent continuu să ruleze înainte și înapoi.

Fig. 2.2 Schema de principiu punte H

Pentru sens de rotație spre stânga motorul se va alimenta închizând contactele S1 și S4. Pentru sens de rotație spre dreapta motorul se va alimenta închizând contactele S3 și S2.

Analizând datele tehnice ale motoarelor de curent continuu am ales un driver tip L298 (figura 2.2, Curs Roboticǎ și Arduino http://www.robofun.ro), un driver capabil să controleze două motoare de curent continuu, asigurand un amperaj maxim pe fiecare ieșire de 2 A. În anexe am atașat datasheet-ul producǎtorului ce ne oferă toate specificațiile acestui integrat.

Fig. 2.2 Driver L298

2.4 Cutia de viteze Tamiya

Pentru sistemul de deplasare am folosit o cutie de viteze tip Tamiya, așa cum se poate observa ȋn figura 2.3.

Fig.2.4 Cutie de viteze Tamiya

Cutia de viteze are incluse două motoare și angrenajele necesare pentru două roți motoare. Roțile sunt rotite independent una de alta, atât în fața cât și în spate. Cutia de viteze poate fi deasemenea configurată pentru două viteze diferite.

Produsul include tot ceea ce este necesar:

roțile dințate;

carcasă;

motoare;

vaselină;

cheie pentru montaj.

Oferă 58:1 și 203:1 ca rapoarte de tranfer. Motoarele funcționeazǎ la o tensiune de alimentare între 3 și 6 V (Curs Roboticǎ și Arduino http://www.robofun.ro).

2.5 Motorul de curent continuu

Motorul de curent continuu a fost inventat în 1873 de Zénobe Gramme, prin conectarea unui generator de curent continuu la un generator asemănător. Astfel, a putut observa că mașina se rotește, realizând conversia energiei electrice absorbite de la generator. Astfel el a constatat, că generatorul "inițial" era de fapt o mașină electrică reversibilă, care putea lucra ca un convertizor de energie bidirecțional (http://ro.math.wikia.com/wiki/Motor_de_curent_continuu).

Acționarea cu motoare de curent continuu are avantajul important cǎ momentul creat este practic independent de poziția și viteza motorului, depinzȃnd numai de cȃmpul ȋnfǎșurǎrilor și curentul din armǎturi. Dacǎ ȋnfǎșurǎrile de cȃmp sunt ȋnlocuite cu un magnet permanent atunci momentul dezvoltat este proporțional cu valoarea curentului din armǎturi și deci cu tensiunea aplicatǎ.

Deși teoretic, orice motor electric este susceptibil de utilizare, pentru acționarea roboților, se utilizeazǎ numai motoare de curent continuu și pas cu pas, primul datoritǎ sistemelor performante de control, iar al doilea datoritǎ facilitǎților pe care le oferǎ ȋn controlul ȋn bucla deschisǎ la operațiile de poziționare.

Utilizarea motorului de curent continuu ȋn acționarea roboților necesitǎ:

Un sistem de control utilizȃnd tahogeneratoare de mǎsurǎ și senzori auxiliari de poziție;

Un sistem mecanic care sǎ realizeze conversia mișcǎrii de rotație ȋn mișcare de translație;

Un sistem mecanic pentru blocarea motorului (dacǎ alimentarea permanentǎ a motorului este nepracticǎ datoritǎ problemelor de supraȋncǎlzire).

Motoarele de curent continuu sunt formate din douǎ pǎrți: un sistem de excitație, format din ȋnfǎșurǎri de excitație parcurse de curent sau dintr-un magnet pemanent, ce asigurǎ cȃmpul magnetic ȋn ȋntrefierul mașinii și o ȋnfǎșurare dispusǎ ȋntr-o armǎturǎ rotoricǎ (Mircea Ivǎnescu, 1994)

Dacă un rotor se învârte între doi poli magnetici staționari, curentul din rotor circulă într-o direcție pe parcursul unei jumătăți de rotație și în cealaltă pe parcursul celeilalte jumătăți. Pentru a produce o trecere constantă, într-o singură direcție a curentului dintr-un astfel de dispozitiv, este necesară furnizarea unui mijloc prin care curentul rezultat să aibă același sens pe parcursul întregii rotații.

La mașinile mai vechi aceasta este realizată cu ajutorul unor plăcuțe colectoare, un inel de metal împărțit în două, montat pe axul rotorului. Cele două jumătăți sunt izolate și sunt bornele bobinei. Perii fixe de metal sau carbon sunt ținute pe plăcuțele colectoare în timp ce acestea se rotesc, conectând electric bobina la fire exterioare. În timp ce rotorul se învârte, fiecare perie intră în contact alternativ cu plăcuțele colectoare, schimbându-și poziția în momentul când curentul din bobină își schimbă sensul. Astfel circuitul exterior la care generatorul este conectat este alimentat cu un curent continuu.

Câmpurile de la generatoarele moderne sunt de obicei din patru sau mai mulți poli, pentru a crește mărimea și puterea câmpului magnetic. Câteodată poli mai mici sunt adăugați pentru a compensa distorsiunile din fluxul magnetic cauzat de efectul magnetic al rotorului.

În general, sunt similare în construcție cu generatoarele de curent continuu. Ele pot, de fapt să fie descrise ca generatoare care „funcționează invers”. Când curentul trece prin rotorul unui motor, este generat un câmp magnetic care generează o forță electromagnetică, și ca rezultat rotorul se rotește. Acțiunea periilor colectoare și a plăcuțelor colectoare este exact aceiași ca la generator (http://ro.math.wikia.com/wiki/Motor_de_curent_continuu).

Fig.2.5 Motor de curent continuu

Rotația rotorului induce un voltaj în bobinajul rotorului. Acest voltaj indus are sens opus voltajului exterior aplicat rotorului. În timp ce motorul se rotește mai rapid, voltajul rezultat este aproape egal cu cel indus. Curentul este mic, și viteza motorului va rămâne constantă atât timp cât asupra motorului nu acționează nici o sarcină, sau motorul nu efectuează alt lucru mecanic decât cel efectuat pentru învârtirea rotorului. Când asupra rotorului se aplică o sarcină, voltajul va fi redus și un curent mai mare va putea să treacă prin rotor. Astfel, motorul este capabil să primească mai mult curent de la sursa care îl alimentează, și astfel să efectueze mai mult lucru mecanic.

Deoarece viteza rotației controlează trecerea curentului prin rotor, mecanisme speciale trebuie folosite pentru pornirea motoarelor cu curent continuu. Când rotorul se află în repaus, el, efectiv, nu are nici o rezistență, și dacă voltajul normal este aplicat, va trece un curent mare, ceea ce ar putea avaria periile colectoare sau motorul. Mijloacele obișnuite pentru prevenirea acestor accidente este folosirea în serie a unei rezistențe, la început, împreună cu rotorul, pentru a limita curentul până când motorul începe să dezvolte un curent suficient. Pe parcurs ce motorul prinde viteză, rezistența este redusă treptat, fie manual ori automat.

Viteza cu care un motor cu curent continuu funcționează, depinde de puterea câmpului magnetic care acționează asupra rotorului, cât și de curentul rotorului. Cu cât este mai puternic câmpul magnetic, cu atât este mai mică rata rotației necesare să creeze un curent secundar necesar pentru a contracara curentul aplicat. Din acest motiv viteza motoarelor cu curent continuu poate fi controlată prin variația câmpului curentului.

Motorul de curent continuu are pe stator polii magnetici și bobinele polare concentrate care creează câmpul magnetic de excitație. Pe axul motorului este situat un colector 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 pot fi clasificate în:

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

motor cu excitație paralelă – unde înfășurarea statorică și înfășurarea rotorică sunt legate în paralel la aceaș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 una 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ă și 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 necesită 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.

Motoarele de curent continuu au o turație foarte mare, lucru care nu este benefic pentru deplasarea unui robot de cercetare, acesta din urmă ,are nevoie de un cuplu cât mai mare, necesar pentru a asigura funcționarea pe diferite tipuri de teren precum și de o viteză scazută pentru a asigura senzorilor un interval de timp în vederea interpretǎrii datelor.

În consecință motoarele de curent continuu au nevoie de un reductor cu roți dințate care să reducă turația și care să asigure la ax un cuplu mai mare.

2.6 Senzori utilizați în controlul robotului

Un robot trebuie sǎ execute un numǎr mare de mișcǎri ȋn concordanțǎ cu sarcinile tehnologice impuse ȋn diverse condiții determinate de specificul mediului sǎu de operare și sǎ-și modifice corespunzǎtor caracteristicile funcționale odatǎ cu modificǎrile survenite ȋn factori interni sau externi ȋn spațiul cǎrora activeazǎ.

Pentru realizarea acestui lucru trebuiesc introduse ȋn orice sistem de conducere a roboților a unor dispozitive speciale, senzori, care sǎ asigure informațiile primare privind caracteristicile și parametrii mediului de operare. Ansamblul acestor dispozitive și echipamente, ce oferǎ robotului o imagine a lumii externe ȋn care evolueazǎ și care permite acestuia sǎ realizeze o comportare adaptivǎ fațǎ de orice modificǎri interne sau externe, formeazǎ sistemul senzorial al robotului (Mircea Ivǎnescu, 1994)

Astfel, senzorii de distanțǎ sunt capabili sǎ spunǎ cȃte de departe este obiectul din fața lor. Ȋn funcție de principiul constructiv, existǎ mai multe categorii de senzori. Avem astfel senzorii care se bazeazǎ pe emiterea de ultrasunete și mǎsurarea timpului necesar ca sǎ se ȋntoarcǎ ecoul (Curs Roboticǎ și Arduino http://www.robofun.ro).

Aceștia sunt senzori destul de preciși, foarte ușor de folosit și a caror ieșire variazǎ direct proporțional cu distanța masuratǎ (un obiect situat la 2 metri va da un semnal de ieșire de douǎ ori mai mare decȃt un obiect situat la 1 metru). Din cauza faptului cǎ sunetul se deplaseazǎ cu o vitezǎ fixǎ, aceastǎ categorie de senzori este relativ lentǎ (ȋn sensul cǎ dacǎ vrem sǎ facem 100 de determinǎri ȋntr-o secundǎ, acești senzori nu vor fi capabili sǎ facǎ asta.

A doua categorie de senzori sunt cei bazați pe reflexia unei raze de luminǎ infrarosie. Acești senzori au douǎ zone active, o zonǎ care emite luminǎ si o zona care recepționeazǎ raza reflectatǎ de obiectul pȃnǎ la care dorim sǎ mǎsurǎm distanța. Ȋn funcție de unghiul sub care se reflectǎ raza de luminǎ se poate determina distanța pȃnǎ la obiect. Acești senzori sunt mult mai rapizi decȃt cei ultrasonici, ȋnsǎ funcționeazǎ corect doar ȋntr-o gamǎ mai strictǎ de distanțe. Astfel avem un tip de senzor infrarosu ȋn gama 3 – 40 cm, un alt tip ȋn gama 10 – 80 cm și un alt tip ȋn gama 15 – 150 cm. Mai existaǎsi douǎ tipuri de senzori digitali, unul de 5 cm și unul de 10 cm. Senzorii digitali determinǎ dacǎ existǎ un obiect la o distanțǎ mai micǎ de 5, respectiv 10 cm ȋn fața senzorului. Pentru senzorul de tip 10-80 cm, valoarea cititǎ de Arduino pe portul analogic la care este conectat senzorul va fi aproape de zero atunci cȃnd nu existǎ nici un obiect ȋn fața senzorului și aproximativ 630 atunci cȃnd obiectul este la 10 cm ȋn fața senzorului. Dacǎ senzorul se apropie și mai mult de obiect (astfel ca distanța devine mai micǎ de 10 cm), valoarea cititǎ scade iarǎși, ajungȃnd sǎ fie ȋn jur de 430 cȃnd senzorul este la cȃțiva milimetri de obiect. Din acest motiv, dacǎ avem nevoie de o determinare exactǎ ȋntr-o gamǎ mai largǎ de distanțe, o solutie bunǎ este sǎ utilizezi o combinație de doi sau mai mulți senzori, ȋn funcție de ce ai nevoie. Spre exemplu, ca sǎ faci un robot care ocolește obstacole, un singur senzor 10-80 cm este suficient (cȃnd obiectul ajunge la mai puțin de 15 cm, faci robotul sǎ-și schimbe direcția și sǎ-l ocoleascǎ. Pentru un robot de sumo ȋnsa, unde este important sǎ știi cȃnd adversarul a ajuns la 2 cm de tine, trebuie sǎ combini un senzor de 10-80 cm cu un senzor digital de 10 cm. Astfel vei folosi senzorul digital de 10 cm ca sǎ ȋți spunǎ dacǎ adversarul este la mai puțin de 10 cm de tine, și senzorul de 10-80 ca sǎ determini exact distanța.

Senzorii Sharp sunt unii dintre cei mai des folosiți senzori, ȋntrucȃt sunt o combinație echilibratǎ ȋntre preț și performanțǎ. Acești trei senzori sunt extrem de similari, diferǎ doar gama distanțelor ȋn care sunt utili (Curs Roboticǎ și Arduino http://www.robofun.ro).

Cȃnd senzorul a fost conectat, urmatorul pas va fi afișarea valorilor date de senzor, fǎrǎ a mai aplica nici o procesare suplimentarǎ. Pentru aceasta, trebuie ȋncǎrcat pe placa Arduino un program care afișeazǎ valorile senzorului, ca mai jos.

void setup() {

Serial.begin(9600);

}

void loop() {

int valoareSenzor = analogRead(0);

Serial.print("Valoare Senzor: ");

Serial.println(valoareSenzor,DEC);}

Pentru marea majoritate a proiectelor, acest cod este suficient. Cea mai simplǎ variantǎ ar fi sǎ etalonezi cȃteva valori (spre exemplu, mǎsori experimental cǎ la distanța de 25 de cm ai o valoare cititǎ de 432). O variantǎ ceva mai complicatǎ este sǎ analizezi graficul valorilor din datasheet-urile senzorilor și sǎ faci o determinare matematicǎ prin calcule, alegȃnd puncte de referințǎ din grafic (folosind de exemplu metoda celor mai mici pǎtrate).

De remarcat cǎ pentru fiecare dintre senzori caracteristica (modul cum variazǎ valoarea cititǎ de Arduino cu distanța pȃnǎ la obiect) este diferitǎ. Pentru senzorul 10-80 cm spre exemplu, funcția matematicǎ de mai jos (determinatǎ matematic plecȃnd de la caracteristica din datasheet) aproximeazǎ distanța ȋn centimetri ȋn funcție de valoarea cititǎ de Arduino (este valabilǎ doar pentru senzorul 10-80 cm) (Curs Roboticǎ și Arduino http://www.robofun.ro).

int readDistance() {

float volts = analogRead(0)* ((float) 5 / 1024);

float distance = 65*pow(volts, -1.10);

return distance;

}

Datoritǎ faptului cǎ emit luminǎ inflaroșie foarte des, ȋn mod automat senzorii Sharp sunt destul de mari consumatori de curent și sunt afectați de perturbații ȋn sursa de alimentare (cum ar fi, de exemplu, situația unui robot alimentat cu o baterie mai puțin capabilǎ sǎ spunem o baterie dreptunghiularǎ de 9V și la care atȃt motoarele cȃt și senzorii merg pe aceeași baterie). Ȋntr-o situație de acest gen, valorile indicate de senzori pot fi mai mult sau mai puțin eronate. Pentru a evita acest lucru, este bine ca intotdeauna senzorii sǎ fie alimentați separat (dintr-o altǎ baterie sau sursǎ de energie) decȃt motoarele sau alți mari consumatori de energie. Altǎ abordare este sǎ faci medierea valorilor citite de la senzor, ca mai jos.

int readDistanceMediata() {

int sum = 0;

for (int i=0; i<10;i++){

float volts = analogRead(0)* ((float) 5 / 1024);

float distance = 65*pow(volts, -1.10);

sum = sum + distance;

delay(5);}

return (int)(sum / 10);}

Ȋn acest exemplu am ales sǎ mediez 10 valori ale senzorului, lucru care ajutǎ foarte mult pentru situațiile cȃnd valorile citite de la senzor nu sunt stabile. Evident, poți alege sǎ mediezi un alt numǎr de valori. Cu cȃt mediezi mai multe valori, cu atȃt senzorul este mai stabil, dar mai lent. Cu cȃt mediezi mai puține, cu atȃt senzorul este mai rapid. Alte abordǎri pentru a face ca citirile senzorilor sǎ fie cȃt mai exacte (abordǎri la nivel electric, de data aceasta) sunt sǎ adaugi ȋn circuit unul sau doi condensatori, cu rolul de a netezi fluctuațiile tensiunii de alimentare (Curs Roboticǎ și Arduino http://www.robofun.ro).

Senzorul de linie este capabil sǎ detecteze gradul de reflectivitate pentru suprafața din fața senzorului. Ca aplicație imediatǎ, ținȃnd cont de faptul cǎ o zona de culoare neagra reflectǎ foarte puțin, iar o zona de culoare albǎ reflectǎ foarte puternic, acest senzor este utilizat ȋn mod deosebit ȋn roboticǎ, pentru a permite unui robot sǎ facǎ distincția ȋntre suprafețe de culoare neagrǎ si suprafețe de culoare albǎ. Acest lucru este util, spre exemplu, ȋn cadrul concursurilor de sumo robotic, unde ringul de culoare neagra este mǎrginit de o bandǎ de culoare albǎ, sau pentru a face ca un robot sǎ urmareascǎ o linie de culoare neagrǎ, pe fundal alb.Ca principiu constructiv, senzorul constǎ ȋntr-un led infraroșu și un receptor infraroșu, montați unul lȃngǎ celǎlalt. Periodic (ȋn mod automat, fǎrǎ a fi controlat de tine ȋn vreun fel) led-ul infraroșu emite luminǎ care este reflectatǎ de suprafața din fața senzorului. Receptorul infraroșu culege lumina infrarosie reflectatǎ de suprafața, și oferǎ pe pinul OUT o tensiune proporționalǎ cu nivelul de luminǎ reflectatǎ. Astfel, conectarea la Arduino este foarte simplǎ. Senzorul trebuie alimentat (pinul VCC la pinul 5V al Arduino, pinul GND la pinul GND al Arduino, si pinul OUT la unul dintre pinii analogici Arduino).

CAPITOULUL III. MACHETA EXPERIMENTALǍ

Proiectul de diplomǎ presupune realizarea unei pǎrți practice, și anume realizarea unei machete experimentale, ȋn cazul de fațǎ un robot mobil ce se poate deplasa ȋn medii industriale, conform figurii 3.1.

Fig. 3.1. Macheta experimentalǎ

3.1 Enumerarea componentelor machetei experimentale

Macheta experimentalǎ din figura 3.1 este alcǎtuitǎ din urmǎtoarele componente:

Un senzor ultrasonic Mazbotix LV EZ3 (Sonar), montat ȋn partea din fațǎ-sus a machetei experimentale;

Doi senzori ultrasonici HY-SRF05, montați pe pǎrțile laterale ale machetei experimentale;

Senzor de luminǎ brick, montat ȋn partea din fațǎ-jos a machetei experimentale;

O placǎ de dezvoltare Arduino UNO R3, montatǎ ȋn partea din spate-sus a machetei experimentale;

Un LCD cu dimensiunile de 16X2, montat deasupra plǎci de dezvoltare Arduino;

Un radiator de rǎcire, montat ȋn partea din fațǎ-sus a machetei experimentale;

Un driver de motoare de curent continuu L298, montat ȋn partea de mijloc-sus a machetei experimentale;

O cutie de vitezǎ Tamiya, montatǎ ȋn partea de spate-jos a machetei experimentale;

Kit, șenile și roți;

Un set de patru baterii de tip AA cu o tensiune fiecare de 1.5 V și , montate ȋn partea din mijloc-jos al machetei experimentale;

O baterie cu o tensiune de 9V, pentru alimentare a plǎci de dezvoltare Arduino, montatǎ ȋn partea de spate-sus a machetei experimentale;

3.2 Descrierea componentelor machetei experimentale

3.2.1 Senzorul ultrasonic Maxbotix LV EZ3 (Sonar)

Ȋn figura urmǎtoare este prezentat senzorul ultrasonic Mazbotix LV EZ3 (Sonar),care este montat ȋn partea din fațǎ-sus a machetei experimentale;

Fig.3.2 Senzor ultrasonic Maxbotix LV EZ3

Acest senzor utilizează o tehnologie bazată pe ultrasunete și este capabil să măsoare distanțe între 0 și 6.45 metri. Pentru simplitatea utilizării, senzorul oferă mai multe modalitați de conectare. Astfel, unul dintre cele mai simple modalitați de conectare este citirea tensiunii de ieșire, direct dependentă de distanță. Altă modalitate de conectare bazată pe un semnal PWM, lungimea frontului semnalului fiind dependentă de distanța citită, senzorul dispune și de conexiune serială RS232.

Ȋn figura 3.3 este prezentatǎ raza de citire a senzorului ultrasonic Maxbotix LV EZ3.

Fig.3.3 Raza de citire a senzorului ultrasonic Maxbotix LV EZ3

Ȋn tabelul 3.1 sunt prezentate datele tehnice ale senzorului ultrasonic maxbotix LV EZ3.

Tabelul 3.1 Datele tehnice ale senzorului ultrasonic Maxbotix LV EZ3

Circuitul electric al senzorului ultrasonic Maxbotix LV EZ3 este prezentat ȋn urmǎtoarea figurǎ:

Fig.3.4 Circuitul electric al senzorului ultrasonic Maxbotix LV EZ3

3.2.2 Senzor ultrasonic HY-SRF05

Ȋn figura 3.5 sunt prezentați senzori ultrasonici HY-SRF05, care sunt montați pe pǎrțile laterale ale machetei experimentale.

Fig.3.5 Senzor ultrasonic HY-SRF05

Acest senzor utilizează o tehnologie bazată pe ultrasunete și este capabil să măsoare distanțe între 2 cm și 4,5 metri. Funcționarea este simplă se declanșează un semnal de tip ultrasunet și se măsoară timpul până la întoarcerea unui ecou, în acest mod se determină exact distanța necesară până la obiectul detectat.

Ȋn tabelul 3.2 sunt prezentate datele tehnice ale senzorului ultrasonic HY-SRF05.

Tabelul 3.2 Datele tehnice ale senzorului ultrasonic HY-SRF05

Circuitul electric al senzorului ultrasonic HY-SRF05 este prezentat ȋn urmǎtoarea figurǎ:

Fig.3.6 Circuitul electric al senzorului ultrasonic HY-SRF05

Ȋn figura 3.7 este prezentatǎ raza de citire a senzorului ultrasonic HY-SRF05.

Fig.3.7 Raza de citire a senzorului ultrasonic HY-SRF05

3.2.3 Senzor de luminǎ Brick

Ȋn figura 3.8 este prezentat senzorul de luminǎ brick, care este montat ȋn partea din fațǎ-jos a machetei experimentale.

Fig.3.8 Senzor lumina brick

Senzorul de luminǎ este o componentǎ care sesizeazǎ nivelul de iluminare al mediului. Valoarea iluminǎrii variazǎ liniar ȋntre 0 și 1024. Acest senzor nu este calibrat (ȋn sensul cǎ nu obțineți direct o valoare a iluminǎrii exprimatǎ ȋn lucsi, ci doar o valoare numericǎ direct proporționalǎ cu nivelul de iluminare, fǎrǎ o unitate de masurǎ).

Ȋn figura urmǎtoare este prezentatǎ schema senzorului de luminǎ brick:

Fig.3.9 Schema senzorului de luminǎ brick

Caracteristicile senzorului de luminǎ brick sunt prezentate ȋn figura 3.10.

Fig.3.10 Caracteristicile senzorului de lumina brick

3.2.4. Placa de dezvoltare Arduino UNO R3

Ȋn figura 3.11 este prezentatǎ placa de dezvoltare Arduino UNO R3, care este montatǎ ȋn partea din spate-sus a machetei experimentale.

Fig.3.11 Placa de dezvoltare Arduino UNO R3

Arduino este o platformă de procesare open-source, bazată pe software și hardware flexibil și simplu de folosit. Constă într-o platformă de mici dimensiuni (6.8 cm / 5.3 cm – în cea mai des întalnită variantă) construită în jurul unui procesor de semnal și este capabilă de a prelua date din mediul înconjurător printr-o serie de senzori și de a efectua acțiuni asupra mediului prin intermediul luminilor, motoarelor, servomotoare, și alte tipuri de dispozitive mecanice.

Ȋn tabelul 3.3 sunt prezentate datele tehnice ale plǎci de dezvoltare Arduino UNO R3

Tabelul 3.2 Datele tehnice ale plǎci de dezvoltare Arduino UNO R3

Microcontroler ATMega328 al plǎcii de dezvoltare Arduino UNO R3 este prezentat sub formǎ schematicǎ ȋn figura 3.12.

Fig.3.12 Microcontroler ATMega328

Secțiunile electrice a plǎci de dezvoltare

Placa de dezvoltare a fost concepută de producător ca o platformă flexibilă care să permită adăugarea de funcționalități fizice diverse prin înlocuirea unor module care se atașează plăcii de dezvoltare prin sistemul de pini care fac accesul la porturile I/O ale microcontrolerului.

Schema electrică este compusă din trei secțiuni fiecare cu rolul său predefinit și anume:

Secțiunea 1 ce asigură tensiunea de alimentare necesară microcontrolului și modulelor atașate;

Secțiunea 2 ce asigură comunicația prin protocol serial cu calculatorul;

Secțiunea 3 ce asigură componentele necesare microcontrolerului: oscilatorul cu quart ce determină frecvența de lucru a microcontrolerului, butonul ce asigură resetarea și circuitul ce asigură legătură între pini și porturile microcontrolerului.

Secțiunea 1 ce asigură tensiunea de alimentare necesară microcontrolului și modulelor atașate

Aceasta secțiune este formatǎ din următoarele componente:

mufă alimentare 2.1 mm;

regulator de tensiune 7850 5V;

condensatori electrolitici ;

diodă 1N4004;

diodă luminiscentă;

rezistență 1Kohm ;

Fig.3.13 Secțiunea 1 schema electrică oferită de producător

Funcționarea schemei este următoarea:

Prin intermediul mufei de alimentare se asigură o tensiune de 9V de la o sursă externă (acumulator, sursă stabilizată reglabilă etc.);

Dioda 1N4004 are rolul de a asigura trecerea curentului într-un singur sens eliminând posibilitatea alimentării greșite prin inversarea cablurilor de alimentare;

Condensatorii au rolul de a filtra tensiunea de intrare și de ieșire din regulatorul de tensiune 7850 ce asigură tensiunea de 5V necesară microcontrolerului;

Prezența tensiunii de alimentare este semnalizată prin intermediul diodei luminiscente LED14, rolul rezistenței R4 este de a limita curentul ce va trece prin dioda LED14.

Secțiunea 2 ce asigură comunicația prin protocol serial cu calculatorul

Schema asigură transmiterea sau primirea datelor prin intermediul cablului USB.

Funcționarea schemei este următoarea:

Dacă există conexiune între pini 2 și 3 ai jumperul JPO atunci când se activează comanda de transmisie a datelor din PC tranzistorul NPN T1 asigurǎ traseul până la portul RX al microcontrolerului, acest tranzistor este polarizat prin intermediul tranzistorului PNP T2, odată transferat programul pe microcontroler acesta activează portul TX care transmite un semnal, acest semnal determină blocarea tranzistorului T2, lucru care determină și blocarea tranzistorului T1.Transmiterea și primirea datelor este semnalizată prin diode luminiscente.

Jumperul JP4 asigură autoresetarea necesară în cazul programării micocontrolerului.

Fig 3.14 Secțiunea 2 schema electrică oferită de producător

Secțiunea 3 ce asigură componentele necesare microcontrolerului

Prin intermediul acestei secțiuni se asigură următoarele :

Alimentarea cu tensiune a microcontrolerului;

Legătura cu oscilatorul cu quartz ce asigură frecvența de lucru a microcontrolerului;

Legătura cu butonul de reset;

Legătura cu pini ICSP ce asigură programarea microcontrolerului;

Legătura între pini și porturile microcontrolerului;

Fig.3.15 Secțiunea 3 schema electrică oferită de producător

Condensatorii C6 și C3 au rol de filtraj al tensiunii de alimentare. Bobina L1 are rolul de filtrare a curentului. Butonul S1 asigură funcția de reset. J1,J2 și J3 sunt pini ce asigură legatura cu porturile microcontrolerului.

3.2.5. Shield LCD 16X2

Ȋn figura 3.13 este prezentat un shield LCD cu dimensiunile de 16X2, care este montat deasupra plǎci de dezvoltare Arduino.

Fig.3.13 Shield LCD 16X2

Acest shield conține un ecran LCD 16 X 2 cu iluminare cu led, precum și un shield cu toate componentele necesare pentru conectarea la Arduino, gata lipitǎ. Este complet asamblat și are pinii pentru Arduino deja lipiți. Acest lucru face extrem de simplǎ utilizarea lui (codul integral este disponibil mai jos). Produsul include LCD-ul 16 X 2 cu iluminare, shield-ul si pinii pentru Arduino (deja lipiți). Astfel, LCD-ul 16 X 2 permite 16 coloane și douǎ linii de caractere (adicǎ ȋn total 32 de caractere).

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {

Serial.begin(9600);

lcd.begin(16, 2);

}

void loop() {

lcd.setCursor(0, 0);

lcd.print("Hello World,");

lcd.setCursor(0, 1);

lcd.print("ROBOFUN is cool!");

}

Codul sursǎ de mai sus utilizeazǎ librǎria LiquidCrystal (inclusǎ ȋn mod standard ȋn mediul de dezvoltare Arduino). Singura modificare pe care va trebui fǎcutǎ este cȃnd folosești un alt tip de LCD, este sǎ schimbi parametrii din rutina de inițializare.

Ȋn tabelul 3.4 sunt prezentate datele tehnice ale LCD-ului

Tabelul 3.4 Datele tehnice ale LCD-ului

3.2.6. Alegerea radiatorului

Radiatoarele se aleg în funcție de rezistența termală exprimată în . De exemplu înseamnă că temperatura radiatorul va fi cu mai mare decât temperatura ambientală pentru fiecare Watt de caldură pe care îl disipă.

În vederea alegerii radiatorului pentru tranzistorii utilizați se determină puterea care trebuie disipată de radiator pentru un singur tranzistor :

(1)

Temperatura maximă de funcționare a tranzistorului este specificată de producător ca fiind de =150. Temperatura maximă ambientală se consideră în mod arbitrar ca fiind de 40 . În funcție de acești parametri avem următoarea formulă pentru calculul rezistenței termale a radiatorului:

(2)

Se alege un radiator cu o rezistență termală mai mică decât valoarea calculată, cu cât rezistența termală a radiatorului este mai mică cu atât el va fi mai eficient în preluarea puterii disipate prin căldură a tranzistorului.

S-a ales următorul radiator având în vedere că tipul tranzistorului este SOT32.

Fig 3.14 Radiator SK 129 63,5 Fischer Electronik =5,3

3.2.7. Driver motoare de curent continuu L298

Am ales un driver tip L298 (figura 3.15, Curs Roboticǎ și Arduino http://www.robofun.ro), un driver capabil să controleze două motoare de curent continuu, asigurȃnd un amperaj maxim pe fiecare ieșire de 2 A. În anexe am atașat datasheet-ul producǎtorului ce ne oferă toate specificațiile acestui integrat.

Fig. 3.15 Driver L298

Pentru controlul motoarelor de curent continuu necesare deplasării robotului, vom avea nevoie de un driver de putere ce are incorporată o punte tip H. Acestea sunt adesea folosite în robotică și alte aplicații pentru a permite motoarelor de curent continuu să ruleze înainte și înapoi. Ȋn figura 3.16 sunt prezentați pinii de conectare ai unui driver L298.

.

Fig.3.16 Pini de conectare ai unui driver L298

De asemenea, este prezentatǎ tensiunea de saturație ȋn funcție de curentul de ieșire al unui driver de motoare de curent continuu L298, ȋn figura 3.17.

Fig.3.17 Tensiunea de saturație ȋn funcție de curentul de ieșire al unui driver L298

Schema electricǎ al unui driver de motoare de curent continuu L298 este prezentatǎ ȋn figura 3.18

Fig. 3.18 Schema electricǎ al unui driver L298

3.2.8. Cutia de vitezǎ Tamiya

Cutia de viteze dublu Tamiya este o unitate compactă, cu două motoare independente și diferite trenuri de viteze. Arborii de ieșire sunt de 3 mm, cu axe hexagonale, care sunt de 10 cm de la vârf la vârf. Axele de lucru cu roțile Tamiya oferǎ mai multe opțiuni pentru viteza de deplasare. Motoarele de joasă tensiune ruleazǎ pe 3-6 volți, ceea ce le face candidații perfecți pentru joasă tensiune dublu control cu motor pentru transport. Supraîncălzirea motorului poate fi cauzatǎ de stagnare excesivă, chiar și la tensiuni foarte mici. Se recomandă să folosim senzori de detectare, sau sǎ urmărim robotul, pentru a asigura că nu ȋi ia mai mult de câteva secunde la plecare. Ȋn figura 3.19 este prezentatǎ cutia de vitezǎ Tamiya, montatǎ ȋn partea de spate-jos a machetei experimentale.

Fig.3.19 Cutie de viteze Tamiya

Dimensiunile cutiei de vitezǎ Tamiya sunt prezentate ȋn figura 3.20

Fig.3.20 Dimensiunile cutiei de vitezǎ Tamiya

Caracteristicile motoarelor de curent continuu pentru macheta experimentalǎ

Motoarele de aționare a robotului mobil la sarcinǎ ȋn gol.

Tensiunea nominalǎ [V]

Un = 1.5 [V] cc

Curentul nominal [A]

In = 0.2 [A]

Viteza de rotație [rpm]

n1 = 9100 [rpm]

Puterea nominală [W]

P = Un ∙ In = 1.5 ∙ 0.2 = 0.3 [W]

Ȋn figura 3.21 sunt prezentate dimensiunile motorului de curent continuu.

Fig.3.21 Dimensiunile motorului de curent continuu

Motoarele de aționare a robotului mobil ȋn momentul funcționǎri.

Tensiunea nominalǎ [V]

Un = 1.5 [V] cc

Curentul nominal [A]

In = 0.66 [A]

Viteza de rotație [rpm]

n1 = 6990 [rpm]

Puterea nominală [W]

P = 0.43 [W]

Cuplul de pornire [Nm]

C=0.66 [mNm]

Motoarele de aționare a robotului mobil ȋn momentul opriri.

Tensiunea nominalǎ [V]

Un = 1.5 [V] cc

Curentul nominal [A]

In = 2.2 [A]

Puterea nominală [W]

P = Un ∙ In = 1.5 ∙ 2.2= 3.3 [W]

Cuplul maxim [Nm]

C=2.55 [mNm]

Ȋn figura 3.22 sunt prezentate caracteristicile motorului de curent continuu.

Fig.3.22 Caracteristicile motorului de curent continuu.

Aceste motoare se folosesc pentru urmatoarele date inițiale ale machetei experimentale. Se impun anumite dimensiuni de gabarit în cazul sistemului proiectat, astfel caracteristicile vehiculului ce se va deplasa autonom sunt următoarele:

Lungime maximă a șasiului: 30 cm;

Lățime maximă a șasiului: 20 cm ;

Înălțime maximă a șasiului: 15 cm ;

Caracteristicile de gabarit au rolul de a impune anumite condiții având în vedere scopul de testare și concepere a ansamblului, ulterior sistemul se poate realiza la scară mai mare pentru deplasarea unor piese in medii industriale, deplasȃndu-se pe o linie de vopsea cu ajutorul senzorului de luminǎ brick, ocolind obstacolele cu ajutorul senzorilor ultrasonici HY-SRF05 care sunt poziționați pe lateral si pot observa un obstacol de la 4.5 m, și senzorului ultrasonic Maxbotix LV EZ3 poziționat ȋn fațǎ și poate observa un obstacol de la 6 m.

Deplasarea pe o anumită traiectorie va fi asigurată de sistemul de tracțiune propus format din ansamblul cutie de viteze Tamiya, care la bază este un reductor care asigură cuplul și turația necesară punerii în mișcare a roții conducătoare. Roata conducătoare va transmite energia mecanică șenilelor care la rândul lor asigură aderența și transpunerea energiei mecanice într-o deplasare liniară.

3.2.9. Kit, șenile și roți

Acest set de șenile oferǎ tot ceea ce este necesar pentru a crea un vehicul tip tanc. Setul conține atȃt șenilele din cauciuc, cȃt și roțile și axele pentru montaj. Funcționeazǎ excelent cu cutia dublǎ de vitezǎ Tamiya.

Un set conține :

– 2 șenile de dimensiunea 15 X 320 mm ;

– 2 roți mari motoare cu dimensiunile de 3 X 100 mm;

– 2 roți mari de ghidaj cu dimensiunile de 3 X 100 mm;

– 6 roți mici de ghidaj cu dimensiunile de 3 X 21 mm;

– 10 roți mici de ghidaj cu dimensiunile de 3 X 21 mm;

– axe din metal pentru montaj cu dimensiunile 1 X 60 mm;

3.3 Rolul și funcționarea machetei experimentale

Rolul esențial al machetei este de:

identificarea poziției optime pentru plasarea senzoriilor;

identificarea autonomiei obținute și posibilități de îmbunătățire;

identificarea punctelor moarte rezultate în urma plasării senzoriilor și posibilități de contracarare a acestora;

dezvoltare și implementare a unui sistem de deplasare pe o anumită traiectorie în mod autonom;

testarea și îmbunătățirea sistemului de control

asigurarea unei posibilități de diagnoză în timp real al sistemului

creșterea felexibilitatii prin proiectarea unor anumite componente detașabile cu rolul de a impune sistemului un scop anume dar păstrând în acelas timp sistemul deschis unor noi orizonturi.

Functionarea machetei este urmǎtoarea:

Macheta se deplaseazǎ pe o linie de vopsea neagrǎ, la ȋntȃlnirea unui obstacol ȋn fațǎ va lua singur decizia de a se deplasa ȋn stȃnga sau in dreapta dacǎ este posibil, dacǎ nu va merge ȋnapoi 20 cm și dacǎ nu va gǎsi un traseu alternativ se va opri, la ȋntȃlnirea unui obstacol ȋn partea stȃngǎ va vira dreapta dacǎ are un traseu alternativ dacǎ nu se va opri, la ȋntȃlnirea unui obstacol ȋn partea dreaptǎ va vira stȃngǎ dacǎ are un traseu alternativ dacǎ nu se va opri.

CAPITOLUL IV. VARIANTA INDUSTRIALǍ

4.1 Caracteristicile variantei industriale

Ȋn varianta industrialǎ se vor folosi același tip de senzori, placǎ de dezvoltare dar se vor schimba dimensiunile robotului mobil și motoarele de curent continuu, astfel caracteristicile vehiculului ce se va deplasa autonom sunt următoarele:

Lungime maximă a șasiului: 1 m;

Lățime maximă a șasiului: 1 m ;

Înălțime maximă a șasiului: 50 cm ;

Datoritǎ acestor dimensiuni sa ales un motor pas cu pas.

  Motorul electric pas cu pas (MPP) este un convertor electromecanic care realizeazǎ conversia impulsurilor de comandǎ aplicate fazelor motorului într-o mișcare de rotație ce constǎ din deplasari unghiulare discrete, de mǎrime egalǎ care reprezintǎ pașii motorului. Numǎrul pașilor efectuați trebuie sǎ corespundǎ, în cazul unei funcționǎri corecte, cu numǎrul impulsurilor de comandǎ aplicate fazelor motorului.

Caracteristicile motorului pas cu pas (MPP)  sunt urmǎtoarele :

Unghi de pas: 1.8°

Precizia unghiularǎ de pas [%]: 5

Curent nominal pe fazǎ [A]: 1.3

Rezistența pe fazǎ [V]: 4.6

Inductanța pe fazǎ [mH]: 16

Cuplu de regim [N*cm]: 120

Cuplu de pornire [N*cm]: 10

Inerența rotorului [gr*cm2]: 640

Masa [Kg]: 1.35

Ȋn figura 5.1 este prezentat modul cum se poate conecta un motor pas cu pas la un microcontroler. (http://cs.curs.pub.ro/).

Fig.4.1 Schema motorului pas cu pas conectatǎ la un microcontroler

4.2 Descrierea motorului pas cu pas a variantei industriale

         Majoritatea MPP sunt bidirecționale și permit o accelerare, oprire și inversare rapidǎ fǎrǎ pierderi de pași, dacǎ sunt comandate cu o frecvențǎ inferioarǎ frecvenței limitǎ corespunzatoare regimului respectiv de funcționare. Pentru extinderea funcționǎrii motoarelor pas cu pas la viteze mai mari decât viteza corespunzǎtoare frecvenței limitǎ, este necesarǎ o accelerare prin creșterea treptatǎ a frecvenței impulsurilor de comandǎ.

         MPP sunt utilizate ȋn special în aplicațiile unde se dorește realizarea unei mișcǎri incrementale, folosind sisteme de comandǎ numericǎ.

Avantajele utilizǎrii MPP sunt urmǎtoarele.

asigurǎ univocitatea conversiei impuls-deplasare și pot fi utilizate în circuit deschis;

gama largǎ de frecvențe de comandǎ;

precizie și rezoluție (numar de pași pe rotație) mari, ceea ce simplificǎ lanțul cinematic motor-sarcinǎ;

permit porniri, opriri, inversǎri, fǎrǎ pierderi de pași;

memoreazǎ poziția;

sunt compatibile cu tehnica numericǎ.

Dezavantajele utilizǎrii MPP sunt:

unghi de pas, deci increment de rotație, de valoare fixǎ pentru un motor dat;

randament scǎzut;

capacitate limitatǎ în ceea ce privește acționarea unor sarcini cu inerție mare;

viteza de rotație relativ scǎzutǎ;

necesitǎ o schemǎ de comandǎ adaptatǎ la tipul constructiv respectiv și relativ complexǎ, pentru asigurarea unei funcționǎri la viteze mari.

Dezvoltarea relativ recentǎ a MPP, precum și interesul manifestat fațǎ de aceste motoare au determinat dezvoltarea unei game largi de tipuri de MPP.

Clasificarea constructivǎ a motoarelor pas cu pas:

MPP de tip solenoidal, constǎ într-un electromagnet care pune în mișcare o armaturǎ mobilǎ, ce este legatǎ cinematic cu un cuplaj de sens unic. Cuplajul de sens unic poate fi cu bile sau cu mecanism cu clichet.

MPP cu reluctanțǎ variabilǎ, aceastǎ categorie existǎ douǎ tipuri de bazǎ : MPP cu o singurǎ unitate stator-rotor si MPP cu mai multe unitați stator-rotor .

MPP cu magneți permanenți în stator, aceste motoare se obțin prin înlocuirea înfǎsurǎrilor de excitație cu magneți permanenți.

MPP cu magneți permanenți în rotor, aceste motoare au în rotor un magnet permanent care magnetizeazǎ rotorul radial. Fazele pot fi dispuse pe rotor.

MPP hibrid cu magnet permanent și reluctanța variabila, acest motor are douǎ pachete stator-rotor. Cele douǎ pachete statorice sunt fixate în aceeași carcasa, iar rotoarele sunt solidare pe acelasi arbore. Între cele douǎ rotoare este plasat un magnet permanent cilindric magnetizat axial.

Alte tipuri de MPP, Existǎ MPP cunoscute sub numele de MPP electromecanic si MPP electrohidraulic. Primul are construcție unitarǎ, compactǎ, ce constǎ dintr-un circuit electromagnetic și un sistem de transmisie armonicǎ, ce mǎreste cuplul de ieșire și reduce pasul motorului la valori foarte mici (http://www.scritub.com/tehnica-mecanica).

Clasificarea funcționalǎ a MPP este urmǎtoarea:

MPP inductoare, acestea pot fi cu autoexcitație și cu excitatie independenta prin bobina sau magneți permanenți.

MPP inductor-reactiv, acest tip au un rotor pasiv dințat, la care înfǎșurarile fazelor statorice sunt legate astfel încât sǎ se elimine cuplajul magnetic dintre faze.

MPP reactive, ȋn aceastǎ categorie intrǎ MPP cu rotor pasiv dințat și stator cu o fazǎ dispusǎ pe poli cu tǎlpi dințate.

CAPITOUL V. PROIECTARE SOFTWARE

5.1 Implementarea programului de control

Schema bloc, din figura 5.1, prezintă structura sistemului de acționare al robotului. Microcontrolerul primește informații de la senzorii cu ultrasunete, în funcție de aceste informații sunt transmise semnale de activare/dezactivare spre driverul L298, care este o punte de tip H, aceste semnale determină mișcarea robotului. În acest mod se obține o deplasare în mod autonom a robotului pe o anumită traiectorie, deplasarea independentă va fi determinată și de capacitatea acumulatorilor.

Fig.5.1 Schemă Bloc Sistem de acționare robot

Funcționarea schemei este următoarea: senzorul de luminǎ brick plasat ȋn fațǎ-jos depisteazǎ ce culoare este jos, senzorul ultrasonic plasat în partea din față a robotului depistează un obiect la o anumită distanță, din specificațiile tehnice distanța până la obiectul în cauză se determinǎ în funcție de tipul de semnal furnizat, în cazul de față se determină distanța în funcție de lungimea semnalului PWM, în cazul de față 147 uS pentru fiecare 2.54 cm.

Se testează distanțele furnizate de senzorii montați pe lateralele robotului, se determină care distanță este mai mare, astfel încât se stabilește prin ce parte se va ocoli obstacolul. În funcție de rezultat se virează în stânga sau în dreapta corespunzător schemei.

LCD-ul va afișa tot timpul parametri citiți de senzori ultrasoni și senzorul de luminǎ, pentru a afla la ce distanțǎ și pe ce culoare se deplaseazǎ robotul.

Din punct de vedere mecanic ținând cont de faptul că tracțiunea este asigurată de un anasamblu de șenile, virarea la stânga sau la dreapta se face în modul următor: se blochează șenila opusă părții cu distanța cea mai mică, se menține activă șenila de pe partea cu distanța laterală cea mai mică și în acest mod se virează în partea opusă.

Blocarea șenilei se obține prin controlul asigurat de puntea H tip L298, prin semnale de control care constă în tensiunii de 5V se controlează motoarele și sensul de turație al acestora, motoarele fiind cele ce asigură mișcarea prin ansamblul motor-reductor-șenile.

Fig.5.2. Organigramă Sistem de acționare robot

Anasamblul prezintă avantaje ca tracțiune sporită, posibilitate de mobilitate pe teren accidentat precum și un control relativ ușor al sistemului de virare. Cele mai mari dejavantaje sunt pierderile mecanice mari prin frecare care determină de asemenea și pierderi mari din punct de vedere electric prin consumul de energie mărit.

Scopul urmărit este deplasarea într-un mediu oarecum ostil și probabilitatea de a întâmpina anumite obstacole au motivat utilizarea ansamblului mecanic menționat ȋn figura 5.2.

S-a stabilit anterior modul de funcționare al sistemului electric, astfel se poate dezvolta schema electrică a anasamblului micocontroler-senzori-punte H control motoare. S-a optat pe un sistem de cablare care permite înlocuirea ușoarǎ a componentelor defecte legăturile între componente și microcontroler se asigură prin cabluri care pot fi înlocuite sau verificate ușor.

Fig.5.3 Schemă Electrică sistem de acționare robot

Prin sistemul prezentat se dorește funcționarea în mod autonom a robotului format din cutia de viteze tip Tamiya,șenile și șasiu. Programul ce va fi prezentat ulterior are ca scop interpretarea datelor furnizate de senzori, prin semnalele electrice transmise, și modificarea traiectoriei robotului în conformitate cu datele.

Organigrama programului ne prezintă în mod grafic modul de funcționare al sistemului, astfel: se testează valoarea în distanță până la un obstacol utilizând parametrii obtinuți de la senzorul ultrasonic din față, se stabilește dacă valoarea este mai mică decât pragul impus.

Dacă valoarea este mai mică decât valoarea impusă, se testează distanța până la un obstacol pe lateralele robotului, și se fac modificări ale traiectoriei în funcție de rezultate, în acest fel obstacolul se va ocoli pe partea cu distanța cea mai mare față de un obstacol lateral.

5.2 Realizarea programului și testarea senzorului ultrasonic din față

Senzorul ultrasonic utilizat în partea din față este capabil să furnizeze diferite semnale dependente de distanța până la un obiect dat, acesta dispunând de mai multe tipuri de conexiuni și semnale corespunzǎtoare lor. În cazul curent am utilizat o conexiune la un pin PWM al plăcii de dezvoltare. Senzorul furnizează un semnal PWM proporțional cu distanța până la obiect. Funcția Pulse In permite măsurarea duratei unui astfel de semnal, returnând o valoare în microsecunde.

Determinarea distanței se face având în vedere specificațiile producătorului care spun că 2,54 cm este echivalent cu o durată a semnalului PWM de 147us.În urma prelucrăriilor necesare se va determina distanța exactă până la un obiect.

int fata_pin = 6; // Declararea pinului utilizat pentru citirea datelor de la senzorul ultrasonic

Variabilele de tip întreg sunt principalele utilizate în stocarea datelor de tip număr pe 2 byți. Domeniul pentru date de acest tip este cuprins între -32,768 și 32,767 corespunzător unor valori pe 16 biți. Bitul cel mai semnificativ fiind bitul de semn.

Sintaxa:

int var = val;

var – numele variabilei de tip int

val – valoarea care îi este atribuită variabilei var

long puls;

unsigned long distanta = 0;

Descriere

Variabilele de tip unsigned long sunt variabile extinse pentru stocarea numerelor, capabile să stocheze până la 32 de biți (4 byți). Dezavantajul față de alte variabilele îl reprezintă inabilitatea de a stoca valori negative. Domeniul pentru date de acest tip este cuprins între 0 și 4,294,967,295.

Sintaxa:

unsigned long var = val;

var – numele variabilei de tip unsigned long

val – valoarea care îi este atribuită variabilei var

int enableA = 0;

int enableB= 1;

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5

int

Descriere

Variabilele de tip întreg sunt principalele utilizate în stocarea datelor de tip număr pe 2 byți. Domeniul pentru date de acest tip este cuprins între -32,768 și 32,767 corespunzător unor valori pe 16 biți.Bitul cel mai semnificativ fiind bitul de semn.

Sintaxa:

int var = val;

var – numele variabilei de tip int

val – valoarea care îi este atribuită variabilei var

void setup()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

setup()

Descriere

Funcția setup() este apelată atunci când un nou program începe.Este utilizată în inițializarea variabilelor,setarea pinilor ca intrare sau ieșire,inițializarea utilizării librăriilor etc. Funcția setup() va rula o singură dată după fiecare pornire sau resetare a plăcii de dezvoltare.

{ pinMode(fata_pin, INPUT);

pinMode(enableA, OUTPUT);

pinMode(enableB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

}

pinMode()

Descriere

Configurează pinul specificat să se comporte fie ca intrare fie ca ieșire.

Sintaxă

pinMode(pin, mode)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

mode: INPUT(intrare) sau OUTPUT(ieșire)

void loop()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

loop()

Descriere

După crearea unei funcții setup(),care inițializează și setează valorile inițiale,funcția loop() face exact ceea ce spune numele,repetă la nesfârșit, permițând programului să schimbe valori și să răspundă în conformitate cu schimbările.

{int a=random(10);

Variabilele de tip întreg sunt principalele utilizate în stocarea datelor de tip număr pe 2 byți. Domeniul pentru date de acest tip este cuprins între -32,768 și 32,767 corespunzător unor valori pe 16 biți.Bitul cel mai semnificativ fiind bitul de semn.

Sintaxa:

int var = val;

var – numele variabilei de tip int

val – valoarea care îi este atribuită variabilei var

puls= pulseIn(fata_pin, HIGH); //Funcție ce returnează durata în microsecunde a unui semnal

distanta= (puls/147)* 2.54; //Transformare în distanța în funcție de durata semnalului

pulseIn()

Descriere

Citește un semnal cu front crescător sau descrescător (HIGH sauLOW) pe un pin predefinit.De exemplu dacă valoarea este HIGH funcția pulseIn() așteaptă ca valoarea citită pe pin să fie HIGH ,începe contorizarea și așteaptă că valoarea citită pe pin să fie LOW și oprește contorizarea.Rezultatul returnat este lungimea semnalului citit pe pinul digital în microsecunde.

Rezultatul returant va fi 0 dacă într-o perioadă specificată în care s-a realizat citirea nu a existat nici o schimbare de HIGH în LOW sau din LOW în HIGH.Funcția este capabilă să înregistreze lungimea semnalelor cu o durată de la zece uS la trei minute.

Sintaxă

pulseIn(pin, value)

pulseIn(pin, value, timeout)

Parametri

pin: numărul pinului pentru care se dorește citirea semnalului;

value: tipul semanlului care se dorește a fi citit: HIGH sau LOW,se atribuie exact tipul semnalului dorit pentru analiza un semnal cu front descrescător sau cu fron crescător;

timeout (opțional): se predefinește timpul de așteptare până la declanșarea citirii;

if(distanta>=22) Inainte();

else {

if (a>5){ Stanga();

if / else

Descriere

Structura if/else asigură un control sporit față de structura if prin faptul că acceptă ca o multitudine de teste să fie grupate împreună.De exemplu o intrare analogică poate fi testată și în funcție de valorile citite să fie executați un anumit număr de pași.Astfel dacă valoarea citită este sub 500 să se execute o secvență iar dacă valoarea citită este peste 500 să se execute altă secvență.

delay(1000);}

else {Dreapta();

delay(1000);}

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

}

void Stop(){

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB,LOW);//Motor A merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

delay(1000);

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

void Inapoi(){ delay(1000);

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH);

digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);

digitalWrite(in3, LOW);

digitalWrite(in4,HIGH);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Inainte()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată

{

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH)

digitalWrite(in1,LOW);

digitalWrite(in2,HIGH);

digitalWrite(in3, HIGH);

digitalWrite(in4,LOW);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Stanga()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor .El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată

{

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB, HIGH); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Dreapta()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată

{

digitalWrite(enableA, HIGH); //enable activ pt motor A

digitalWrite(enableB, LOW); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}Program test senzor ultrasonic față

Fig.5.4 Rezultate teste senzor ultrasonic față

În teste s-a introdus o întârziere a ciclului de citire a senzorului de 400 ms pentru ca rezultatele furnizate de senzor sa poată fi analizate și interpretate.

5.3 Realizarea programului și testarea senzorilor ultrasonici laterali

Senzorii plasați pe lateralele robotului au un principiu de funcționare diferit față de cel amplasat în fața robotului,dacă cel din față furnizează semnale continuu,în cazul celor plasați pe laterale declanșarea unui semnal de tip ultrasunet se face manual utilizând pinii digitali ai microcontrolerului.

Astfel se declanșează un semnal de tip ultrasonic furnizând un semnal digital tip de 15 milisecunde senzorului ultrasonic.

Se citește durata semnalului de tip PWM furnizat de senzor după efectuarea pasului precedent.

În cazul senzorului curent un smenal PWM a carui durată în uS este de 58 corespunde unei distanțe de un 1 cm.

Dezavantajul acestui tip de senzor este durata necesară activării timp în care senzorul nu poate furniza o valoare corespunzătoare distanței,în rest funcționarea este identică ca și în cazul senzorului amplasat în fața robotului.

Program test senzori ultrasonici laterali

#define ECHOPINSTG 7 // Pin to receive echo pulse

#define TRIGPINSTG 9 // Pin to send trigger pulse

#define ECHOPINDRT 8 // Pin to receive echo pulse

#define TRIGPINDRT 10 // Pin to send trigger pulse

int enableA = 0;

int enableB= 1;

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

Int

Variabilele de tip întreg sunt principalele utilizate în stocarea datelor de tip număr pe 2 byți. Domeniul pentru date de acest tip este cuprins între -32,768 și 32,767 corespunzător unor valori pe 16 biți.Bitul cel mai semnificativ fiind bitul de semn.

Sintaxa:

int var = val;

var – numele variabilei de tip int

val – valoarea care îi este atribuită variabilei var

void setup()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

setup()

Descriere

Funcția setup() este apelată atunci când un nou program începe.Este utilizată în inițializarea variabilelor,setarea pinilor ca intrare sau ieșire,inițializarea utilizării librăriilor etc. Funcția setup() va rula o singură dată după fiecare pornire sau resetare a plăcii de dezvoltare.

{

pinMode(enableA, OUTPUT);

pinMode(enableB, OUTPUT);

pinMode(ECHOPINSTG, INPUT);

pinMode(TRIGPINSTG, OUTPUT);

pinMode(ECHOPINDRT, INPUT);

pinMode(TRIGPINDRT, OUTPUT);

pinMode(enableA, OUTPUT);

pinMode(enableB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

pinMode()

Descriere

Configurează pinul specificat să se comporte fie ca intrare fie ca ieșire.

Sintaxă

pinMode(pin, mode)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

mode: INPUT(intrare) sau OUTPUT(ieșire)

}

void loop()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

loop()

Descriere

După crearea unei funcții setup(),care inițializează și setează valorile inițiale,funcția loop() face exact ceea ce spune numele,repetă la nesfârșit, permițând programului să schimbe valori și să răspundă în conformitate cu schimbările

{

digitalWrite(TRIGPINSTG, LOW);

delayMicroseconds(2);

digitalWrite(TRIGPINSTG, HIGH);

delayMicroseconds(10);

digitalWrite(TRIGPINSTG, LOW);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

// Compute distance

float distanceSTG = pulseIn(ECHOPINSTG, HIGH);

distanceSTG= distanceSTG/58;

float

Descriere

Reprezintǎ variabile de tip real. Ȋn general, numerele duble (tipul float) sunt stocate folosindu-se formatul standard IEEE-64, care furnizeazǎ 64 de biți. Acest format va permite sǎ stocǎm valori care pot merge pȃnǎ la 1.8 x 10 la puterea 308 sub formǎ de numere duble și furnizezǎ aproximativ 14 cifre dupǎ punctul zecimal de precizie.

if(distanceSTG<25) Stanga();

if / else

Descriere

Structura if/else asigură un control sporit față de structura if prin faptul că acceptă ca o multitudine de teste să fie grupate împreună.De exemplu o intrare analogică poate fi testată și în funcție de valorile citite să fie executați un anumit număr de pași.Astfel dacă valoarea citită este sub 500 să se execute o secvență iar dacă valoarea citită este peste 500 să se execute altă secvență.

digitalWrite(TRIGPINDRT, LOW);

delayMicroseconds(2);

digitalWrite(TRIGPINDRT, HIGH);

delayMicroseconds(10);

digitalWrite(TRIGPINDRT, LOW);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

// Compute distance

float distanceDRT = pulseIn(ECHOPINDRT, HIGH);

distanceDRT= distanceDRT/58;

float

Descriere

Reprezintǎ variabile de tip real. Ȋn general, numerele duble (tipul float) sunt stocate folosindu-se formatul standard IEEE-64, care furnizeazǎ 64 de biți. Acest format va permite sǎ stocǎm valori care pot merge pȃnǎ la 1.8 x 10 la puterea 308 sub formǎ de numere duble și furnizezǎ aproximativ 14 cifre dupǎ punctul zecimal de precizie.

if(distanceDRT<25) Dreapta();

if((distanceSTG<25)&&(distanceDRT<25)) Stop();

if((distanceSTG>25)&&(distanceDRT>25)) Inainte();

if / else

Descriere

Structura if/else asigură un control sporit față de structura if prin faptul că acceptă ca o multitudine de teste să fie grupate împreună.De exemplu o intrare analogică poate fi testată și în funcție de valorile citite să fie executați un anumit număr de pași.Astfel dacă valoarea citită este sub 500 să se execute o secvență iar dacă valoarea citită este peste 500 să se execute altă secvență.

}

void Stop(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB,LOW);//Motor A merge in fata

delay(1000);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

// Compute distance

}

void Inapoi(){ delay(1000);

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH);

digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);

digitalWrite(in3, LOW);

digitalWrite(in4,HIGH);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Inainte(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH);

digitalWrite(in1,LOW);

digitalWrite(in2,HIGH);

digitalWrite(in3, HIGH);

digitalWrite(in4,LOW);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

void Stanga(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB, HIGH); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Dreapta(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH); //enable activ pt motor A

digitalWrite(enableB, LOW); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

Fig.5.5 Rezultate teste senzori ultrasonici laterali

5.4 Realizarea programului și testarea senzorului de luminǎ Brick

Senzorul de luminǎ este o componentǎ care sesizeazǎ nivelul de iluminare al mediului. Valoarea iluminari variazǎ liniar ȋntre 0 și 1024. Acest senzor nu este calibrat (ȋn sensul cǎ nu obtineți direct o valoare a iluminarii exprimatǎ ȋn lux, ci doar o valoare numericǎ direct proporționalǎ cu nivelul de iluminare, farǎ o unitate de masurǎ).

Program test senzor lumina Brick

#define senz_cul 11

int enableA = 0;

int enableB= 1;

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

Int

Variabilele de tip întreg sunt principalele utilizate în stocarea datelor de tip număr pe 2 byți. Domeniul pentru date de acest tip este cuprins între -32,768 și 32,767 corespunzător unor valori pe 16 biți.Bitul cel mai semnificativ fiind bitul de semn.

Sintaxa:

int var = val;

var – numele variabilei de tip int

val – valoarea care îi este atribuită variabilei var

void setup()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

setup()

Descriere

Funcția setup() este apelată atunci când un nou program începe. Este utilizată în inițializarea variabilelor, setarea pinilor ca intrare sau ieșire,inițializarea utilizării librăriilor etc. Funcția setup() va rula o singură dată după fiecare pornire sau resetare a plăcii de dezvoltare.

{

pinMode (senz_cul, INPUT);

pinMode(enableA, OUTPUT);

pinMode(enableB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

pinMode()

Descriere

Configurează pinul specificat să se comporte fie ca intrare fie ca ieșire.

Sintaxă

pinMode(pin, mode)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

mode: INPUT(intrare) sau OUTPUT(ieșire)

Serial.begin(9600);

}

void loop()

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelat

loop()

Descriere

După crearea unei funcții setup(),care inițializează și setează valorile inițiale,funcția loop() face exact ceea ce spune numele,repetă la nesfârșit, permițând programului să schimbe valori și să răspundă în conformitate cu schimbările.

{

double culoare = digitalRead(senz_cul);

if (culoare==1) Inainte();

if (culoare<1) Stop();

if / else

Descriere

Structura if/else asigură un control sporit față de structura if prin faptul că acceptă ca o multitudine de teste să fie grupate împreună.De exemplu o intrare analogică poate fi testată și în funcție de valorile citite să fie executați un anumit număr de pași.Astfel dacă valoarea citită este sub 500 să se execute o secvență iar dacă valoarea citită este peste 500 să se execute altă secvență.

Serial.println(culoare);

}

void Stop(){

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB,LOW);//Motor A merge in fata

delay(1000);

DelayMicroseconds()

Descriere

Oprește executarea programului pentru o perioadă determinată de timp(microsecunde) care este specificat ca parametru.Funcția poate fi utilizată până la un parametru specificat de maxim 16383 pentru valori mai mari este indicată utilizarea funcției delay() care permite întârzierea programului cu un timp predefinit în milisecunde.

Sintaxă

delayMicroseconds(uS)

Parametri

uS: valoarea în uS pentru timpul de pauză

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

void Inapoi(){ delay(1000);

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH);

digitalWrite(in1,HIGH);

digitalWrite(in2,LOW);

digitalWrite(in3, LOW);

digitalWrite(in4,HIGH);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Inainte(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH);

digitalWrite(enableB, HIGH);

digitalWrite(in1,LOW);

digitalWrite(in2,HIGH);

digitalWrite(in3, HIGH);

digitalWrite(in4,LOW);

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Stanga(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, LOW); //enable activ pt motor A

digitalWrite(enableB, HIGH); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

}

void Dreapta(){

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor.El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

digitalWrite(enableA, HIGH); //enable activ pt motor A

digitalWrite(enableB, LOW); //enable activ pt motor B

digitalWrite(in1,LOW);//Motor A merge in fata

digitalWrite(in2,HIGH);//Motor B merge in fata

digitalWrite(in3, HIGH); //enable activ pt motor B

digitalWrite(in4,LOW);//Motor B merge in fata

digitalWrite()

Descriere

Scrie pinul digital cu o valoare HIGH sau LOW.Dacă pinul este configurat ca OUTPUT(ieșire) cu funcția pinMode(),voltajul pe pinul respectiv în cazul HIGH va fi de 5 V iar în cazul LOW voltajul corespunzător va fi de 0V.

Sintaxă

digitalWrite(pin, value)

Parametri

pin: numărul pinului sau numele atribuit pinului respectiv

valoare: HIGH sau LOW

5.6 Realizarea programului pentru LCD

Pentru LCD s-a realizat urmǎtorul program, care ne va afișa ceea ce senzorii au indicat:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

LiquidCrystal lcd

Descriere

Creazǎ o variabilǎ de tip LiquidCrystal. Display-ul poate fi controlat utilizând 4 sau 8 linii de date.

void setup() {

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelată.

setup()

Descriere

Funcția setup() este apelată atunci când un nou program începe.Este utilizată în inițializarea variabilelor,setarea pinilor ca intrare sau ieșire,inițializarea utilizării librăriilor etc. Funcția setup() va rula o singură dată după fiecare pornire sau resetare a plăcii de dezvoltare.

Serial.begin(9600);

lcd.begin(16, 2);

}

void loop() {

void

Descriere

Acest cuvânt este folosit în declararea funcțiilor. El indică faptul că funcția nu returnează nici un rezultat atunci când este apelat

loop()

Descriere

După crearea unei funcții setup(), care inițializează și setează valorile inițiale, funcția loop() face exact ceea ce spune numele, repetă la nesfârșit, permițând programului să schimbe valori și să răspundă în conformitate cu schimbările.

lcd.setCursor(0, 0);

lcd.setCursor

Descriere

Poziționezǎ cursorul LCD pentru a seta locația ȋn care sǎ fie scris textul pe ecranul LCD-ului.

lcd.print("senzor fațǎ)

lcd.setCursor(0, 1);

lcd.setCursor

Descriere

Poziționeazǎ cursorul LCD pentru a seta locația ȋn care sǎ fie scris textul pe ecranul LCD-ului.

lcd.print("senzor stȃnga)

lcd.print

Descriere

Afiseazǎ pe ecranul LCD-ului.

lcd.setCursor(0, 2);

lcd.setCursor

Descriere

Poziționeazǎ cursorul LCD pentru a seta locația ȋn care sǎ fie scris textul pe ecranul LCD-ului.

lcd.print("senzor dreapta)

lcd.print

Descriere

Afiseazǎ pe ecranul LCD-ului.

lcd.setCursor(0, 3);

lcd.setCursor

Descriere

Poziționeazǎ cursorul LCD pentru a seta locația ȋn care sǎ fie scris textul pe ecranul LCD-ului.

lcd.print("senzor luminǎ)

lcd.print

Descriere

Afiseazǎ pe ecranul LCD-ului.

lcd.setCursor(0, 4);

lcd.setCursor

Descriere

Poziționeazǎ cursorul LCD pentru a seta locația ȋn care sǎ fie scris textul pe ecranul LCD-ului.

CAPITOLUL VI CONCLUZII ȘI CONTRIBUȚII PERSONALE

BIBLIOGRAFIE

Dragoș Gabriel Zisopol., Roboți Industriali. Editura Universitǎții Petrol-Gaze din Ploiești. 2006.

D. Drimer, A. Oprean, Al. Dorin, N. Alexandrescu, A. Paris, H. Panaitopel, C. Udrea, I. Crișan., Roboți industriali și manipulatoare. Editura Tehnicǎ. București – 1985.

Eugen Diaconescu – Introducere în microcontrolerele PIC16 , Editura Universitatii din Pitesti, 2008

http://ro.wikipedia.org/wiki/Robot

http://www.robofun.ro, Curs Roboticǎ și Arduino

http://ro.math.wikia.com/wiki/Motor_de_curent_continuu

http://www.arduino.cc

Ilie Popa., Roboți și manipulatoare sisteme de conducere. Editura Romȃnia Liberǎ. București – 2001.

Mircea Ivǎnescu., Roboți industriali Algoritmi și sisteme de conducere. Editura Universitaria. Craiova – 1994.

R.Beloiu – Curs Roboti Industriali.

R. Beloiu – Actionari electrice. Sisteme de actionare electrica cu comanda clasica, ISBN 973-97212-7-3, Ed. Tip Naste, Pitesti, 2003

R. Beloiu, A. Ene – Proiectarea asistata de calculator a schemelor electronice, Editura Universitatii din Pitesti, Pitesti, 1998

R. Beloiu, A. Ene – Tehnici de programare, Editura Universitatii din Pitesti, Pitesti, 1998

BIBLIOGRAFIE

Dragoș Gabriel Zisopol., Roboți Industriali. Editura Universitǎții Petrol-Gaze din Ploiești. 2006.

D. Drimer, A. Oprean, Al. Dorin, N. Alexandrescu, A. Paris, H. Panaitopel, C. Udrea, I. Crișan., Roboți industriali și manipulatoare. Editura Tehnicǎ. București – 1985.

Eugen Diaconescu – Introducere în microcontrolerele PIC16 , Editura Universitatii din Pitesti, 2008

http://ro.wikipedia.org/wiki/Robot

http://www.robofun.ro, Curs Roboticǎ și Arduino

http://ro.math.wikia.com/wiki/Motor_de_curent_continuu

http://www.arduino.cc

Ilie Popa., Roboți și manipulatoare sisteme de conducere. Editura Romȃnia Liberǎ. București – 2001.

Mircea Ivǎnescu., Roboți industriali Algoritmi și sisteme de conducere. Editura Universitaria. Craiova – 1994.

R.Beloiu – Curs Roboti Industriali.

R. Beloiu – Actionari electrice. Sisteme de actionare electrica cu comanda clasica, ISBN 973-97212-7-3, Ed. Tip Naste, Pitesti, 2003

R. Beloiu, A. Ene – Proiectarea asistata de calculator a schemelor electronice, Editura Universitatii din Pitesti, Pitesti, 1998

R. Beloiu, A. Ene – Tehnici de programare, Editura Universitatii din Pitesti, Pitesti, 1998

Similar Posts