proiect scr

39
Proiect SCR ROBOT COMANDAT RC Studenti : Alexandru-Daniel Ghidan Alexandru Dinca 1

Upload: alex-ghidan

Post on 22-Oct-2015

59 views

Category:

Documents


5 download

DESCRIPTION

Proiect SCR

TRANSCRIPT

Page 1: Proiect SCR

Proiect SCR

ROBOT COMANDAT RC

Studenti :

Alexandru-Daniel Ghidan

Alexandru Dinca

Marius-Stefan Moisa

Coordonator:

Conf. Dr. Ing.  Adrian Popovici

1

Page 2: Proiect SCR

Cuprins

1. Introducere

2. Scurt istoric despre roboti

3. Descrierea structurala

3.1 Descrierea Hardware

3.1.1 Arduino Uno

3.1.2 Arduino Pro Mini

3.1.3 Receptorul si transmitatorul radio

3.1.4 Driverul de motoare

3.1.5 Kit pentru robot

3.1.6 Joystick

3.2 Descrierea Software

3.2.1 Mediul de programare

3.2.2 Biblioteca VirtualWire

3.2.3 Programul de la receiver

3.2.4 Programul de la transmitter

4.Implementare practica

5. Concluzii

2

Page 3: Proiect SCR

1. Introducere .

Prezentul proiect are ca scop utilizarea a doua platforme de dezvoltare Arduino,

pentru transmiterea si receptionarea unor grupuri de octeti, si in functie de octetii primiti

vom actiona doua motoare de current continuu carora sunt atasate roti pentru mobilitatea

unui robot.

Pentru a comanda cele doua motoare si pentru protectia microcontrolerului se

foloseste un driver de motoare bazat pe circuitul L298N. Pentru programarea celor doua

motoare dar si a ledurilor prezente pe robot se foloseste placuta de dezvoltare Arduino

Uno impreuna cu un modul de receptie radio ce functioneaza la frecventa uzuala de 434

Mhz, iar pentru generarea si transmisia octetilor se foloseste un joystick, care este

compus defapt din doua potensiometre, un modul de transmitere radio si placuta de

dezvoltare Arduino ProMini.

Programarea celor doua platforme de dezvoltare se realizeaza intr-un limbaj

asemanator cu C-ul, Arduino Software. In urmatoarele capitole se va detalia structura

robotului, dar si a programelor folosite.

3

Page 4: Proiect SCR

2. Scurt istoric despre roboti

Un robot este este un operator mecanic sau virtual, artificial. Robotul este un

sistem compus din mai multe elemente: mecanică, senzori și actori precum și un

mecanism de direcționare. Mecanica stabilește înfățișarea robotului și mișcările posibile

pe timp de funcționare. Senzorii și actorii sunt întrebuințați la interacția cu mediul

sistemului. Mecanismul 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.

Tot „robot”, prescurtat „bot”, pot fi numite programe (software) de calculator care

îndeplinesc automat anumite funcții sau operațiuni. Astfel de roboți sunt virtuali, și nu

mecanici.

Terminologie

Sensul cuvântului s-a schimbat de-alungul timpului. Termenul robot

(din cehă robot) a fost utilizat de Josef Čapek și Karel Čapek în lucrările lor de science

fiction la începutul secolului 20. Cuvântul robot este de origine slavă și se poate traduce

prin: muncă, clacă sau muncă silnică. Karel Čapek a descris în piesa sa R.U.R. din

anul 1921 muncitori de asemănare umană, care sunt crescuți în rezervoare. Čapek

folosește în lucrarea sa motivele clasice de golem. Denumirea de astăzi a creaturilor lui

Čapek este de android. Înaintea apariției termenului de robot s-au utilizat de expemplu în

uzinele lui Stanisław Lemtermenii automat și semiautomat.

Robotică

Apariția deasă a roboților în film și literatură a atras atenția științei asupra acestui

tip de mașini. Domeniul științific, care se ocupă de construcția roboților se

numește robotică. Termenul a fost folosit pentru prima dată în 1942 de Isaac Asimov în

cartea sa, Runaround. Un domeniu general teoretic științific, care se ocupă de roboți, nu

există. Acestea sunt mai ales subdomenii ale informaticii.

4

Page 5: Proiect SCR

Tehnica de bază

Roboții sunt realizați mai ales prin combinația

disciplinelor: mecanică, electrotehnică și informatică. Între timp s-a creat din legătura

acestora mecatronica. Pentru realizarea de sisteme autonome (care să găsească singure

soluții) este necesară legătura a cât mai multor discipline de robotică. Aici se pune accent

pe legătura conceptelor de inteligență artificială sau neuroinformatică (parte a

informaticii) precum și idealul lor biologic biocibernetică (parte a biologiei). Din legătura

între biologie și tehnică s-a dezvoltat bionica.

Cele mai importante componente ale roboților sunt senzorii, care permit

mobilitatea acestora în mediu și o dirijare cât mai precisă. Un robot nu trebuie neapărat să

poată să acționeze autonom, fapt pentru care se distinge între roboții autonomi și cei

teleghidați.

1801 Joseph Jacquard inventeaza o masina de produs textile

operata de cartele perforate.

1920 Termenul de Robot a fost introdus pentru prima data de

Karel Capek in piesa “R.U.R." or "Rossum's Universal Robots".

1938 Willard Pollard si Harold Roselund realizeaza o masina de

vopsit programabila.

1939 Primul robot construit a fost Electro si era insotit de un

ciine robot: Sparko. Ei au fost prezentati la Expozitia Mondiala

din New York din 1939. Electro spunea 77 de cuvinte si se putea

misca inainte si inapoi.

1941 Isaac Asimov a inceput sa scrie despre roboti.

1946 George Devol patenteaza "a playback device for controlling machines "

1948 Norbert Wiener, profesor la M.I.T., publica Cybernetics

1951 Un brat dirijat de la distanta este facut de Raymond Goertz pentru Atomic Energy

Commission.

5

Page 6: Proiect SCR

1954 Primul robot programabil este construit de George Devol. Unimation, devine prima

companie de produs roboti.

1959 Planet Corporation devine prima companie ce produce roboti pentru productie.

1962 General Motors instaleaza primul robot pe o linie de asamblare a automobilelor.

1967 Japonia importa primul robot.

1973 Primul robot controlat de un minicomputer este realizat de Richard Hohn for

Cincinnati Milacron Corporation. Robotul este denumit T3, The Tomorrow Tool.

1976 Brate atriculate robotice sint folosite de probele spatiale Viking 1 si Viking 2. 

1980 Incepe practic explozia industriala robotica. Practic in fiecare luna apare cite un nou

robot.

1997 P3 – robot humanoid realizat de Honda Motor Co.

cumparat pe internet pentru numai..2500 de $

2000 ASIMO – robot humanoid realizat de Honda.

Tipuri de roboți

Termenul de robot descrie un domeniu destul de vast, cauză din care roboții sunt sortați

în multe categorii. Iată câteva din acestea:

Robot autonom mobil

Robot umanoid

Robot industrial

Robot de servicii

Robot jucărie

Robot explorator

Robot pășitor

BEAM

Robot militar

Roboţi hibrizi

Global Hawk

6

Page 7: Proiect SCR

A fost botezat "Southern Cross II" in cinstea avionului Southern Cross, primul avion care

a zburat intre Australia si SUA in 1928. Numele real este insa Global Hawk si are o

anvergura a aripilor mai mare decit cea a unui Boeing 737. Global Hawk a costat 750 de

milioane de $ (pretul unui avion de pasageri gen Boeing 737 este de aprox. 100 de

milioane de $). Acest avion nu are nici un om la bord. Avionul este telecomandat de la

sol, fiind un hibrid intre un robot si o masina telecomandata. Pe 24 Aprilie 2001 Global

Hawk a zburat singur, traversind Pacificul fiind primul avion telecomandat care a realizat

o asemenea performanta. A zburat la aproape 20 de km inaltime (cursele de pasageri

zboara la aprox. 10 km altitudine) pe o distanta de peste 13.000 de km. Si a juns in USA

cu 14 minute mai devreme, decit a fost planificat. Punctul de decolare a fost in Adelaide,

Australia.

Avionul a fost construit de Northrop Grumman Corporation.

Roboţi în spaţiu

DART (Dexterous Anthropomorphic Robotic

Testbed)

DART a fost prima încercare de dezvoltare a roboţilor

pentru a ajuta oamenii în efectuarea activităţilor

spaţiale.

Deşi, Robonautul a înlocuit DART-ul, totuşi DART-

ul este încă utilizat pentru testarea componentelor.

Robonaut

NASA  a realizat urmatoarea generatie de roboti, pentru lucrul in Spatiul Cosmic.

Denumit Robonaut, este telecomandat de la

distanta de un tehnician, avind ca terminal o

sofisticata pereche de ochelari ce-i dau o viziune

7

Page 8: Proiect SCR

panoramica. Fiecare brat are 150 de senzori si sistemul de computer centralizat aranjeaza

o coordonare stinga, dreapta. De asemenea are o putere autonoma de a invata si

perfectiona diferite sarcini.

In Mai si Iunie 2003 NASA a declarat ca va lansa doua misiuni spre Marte.

Navele vor " amartiza" la suprafata planetei Rosii utilizind acelasi sistem de saci cu aer ca

in cazul misiunii Pathfinder din 1997.

Ajunsi pe Marte cei doi roboti vor strabate aproximativ 100 de m pe zi.

Pe 4 Iunie 2003 NASA va lansa un alt robot care va

cauta urme de apa la suprafata planetei.

Robotul Water-Sniffing Rover Lansat de o racheta tip

Delta 2, robotul va intra in atmosfera martiana pe 20 Ianuarie

2004. Robotul numit "Water-Sniffing Rover" va fi activ aproximativ 90 de zile.

Robot pentru care gheata nu e o piedica

[2002-01-15]

Robotul numit Cryobot, este cea mai noua descoperire a lui NASA, si ar putea fi,

folosit la explorarea partilor inghetate de pe Marte sau a cavitatii dintre crusta de gheata

si satelitul lui Jupiter numit Europa. El culege date si informatii despre subsuprafetele

oceanelor, primul sau test avand un adevarat succes. Acest test, a insemnat, coborarea la

23 de metri a robotului intr-un ghetar de pe Insula Spitsbergen, unul dintre Insulele

Svalbard din cercul Arctic, acest test constand in explorarea la adancime in gheata prin

forare, extragandu-se o mostra din miezul suprafetei. Robotul Cryobot foloseste apa

fierbinte si forta gravitatiei pentru a patrunde in aceasta gheata. Robotul, masoara un

metru si 12 centimetri, este conectata la un echipament ce se afla la suprafata si care o

alimenteaza cu energie electrica.

PINO, prietenul electronic

Japonezii lanseaza robotul personal PINO. Robotul PINO are urechi cenusii, un

nas lung metalic, merge cu dificultate si nu poate vorbi, insa a fost deja popularizat intr-

un videoclip, marcind nasterea unei noi generatii de roboti de companie. Compania

8

Page 9: Proiect SCR

japoneza ZMP Inc l-a prezentat publicului pe simpaticul robot umanoid, sperind ca PINO

sa devina in scurt timp o prezenta obisnuita in casele oamenilor. Numele si nasul

robotului a fost inspirat din celebra poveste pentru copii Pinocchio. Predecesorii sai sint

robotul umanoid ASIMO, creat de compania japoneza Honda Motor Co, si AIBO, al

companiei Sony Corp's. Desi PINO, care are o inaltime de 70 cm si e activat de un cip

Pentium III 733 Mhz, nu poate face deocamdata prea multe lucruri, specialistii companiei

ZMT spera ca aspectul sau prietenos sa creeze o premisa pentru dezvoltarea viitoarei

generatii de roboti care pot interactiona cu oamenii. Compania estimeaza ca PINO va

produce vinzari de circa 50 de milioane de yeni (400.000 de dolari) in primul an, robotul

fiind lansat pe piata la pretul de 8 milioane de yeni (64.350 de dolari).

Neuroelectronica     

„Totul are un aer de science-fiction!” – sunt cuvintele folosite chiar de

cercetatorii care au facut posibila aceasta senzationala realizare a stiintei si tehnicii

începutului de secol XXI. Se poate spune ca neuroelectronica s-a nascut cu adevarat în

momentul în care Peter Fromherz si Günther Zeck, de la Institutul de Biochimie „Max

Planck” din München, au plasat o serie de celule nervoase de melc pe un cip de siliciu,

fixându-le cu un fel de „cuie” de plastic. Rezultatul a fost ca, drept consecinta, celulele

din vecinatate au început sa stabileasca conexiuni între ele si cu cipul însusi.

      Aceasta combinatie de celule nervoase si cipuri este fara îndoiala revolutionara,

întrucât poate duce în final la adevarate implanturi „neuroprostetice”, care sa poata

înlocui portiuni deteriorate de tesut nervos. Ca sa nu mai vorbim, pe de alta parte, despre

perspectivele care se deschid pentru o noua generatie de calculatoare avansate, care sa

„mimeze” circuitele vii – circuite care... pot învata!

Exemple

Roboinsectele    

Pot zbura, înota sau merge în grup compact pe un drum drept. Se strâng unul

lânga altul si împreuna pot escalada orice obstacol. Vor putea veni în ajutorul oamenilor

oricând si oriunde, de la o simpla constructie pâna la cele mai riscante si imposibile

operatiuni de salvare. Aceasta va fi noua generatie de roboti aflata în studiu în

9

Page 10: Proiect SCR

laboratoarele Politehnicii din Lausanne, Elvetia, sub conducerea lui Dario Floreano.

Exemplul este cel al stolurilor de pasari, al roiurilor de furnici si de albine sau al

bancurilor de pesti. Inteligenta individuala este "prelungita", amplificata, în inteligenta de

grup! Cum altfel ar putea albinele sau mai ales termitele sa realizeze uluitoarele

constructii pe care le cunoastem? Caci aceasta capacitate nu este înscrisa în genele lor,

este, cum se spune, o "proprietate emergenta si colectiva"...

Floreano a construit roboti dotati cu... cod genetic: fiecare "individ" este dotat cu

o secventa unica de biti! Si se comporta într-un mod specific, dupa cum este "înscris" în

zestrea lor genetico-electronica! Mai mult, lor li se implementeaza "o minte", un program

- o neuroretea - care simuleaza comportamentul celulelor nervoase. În felul acesta,

roboinsectele pot învata, pot genera spontan un comportament de grup, pot deveni

parteneri indispensabili pentru noi, oamenii.

O caracteristica a noii generatii de roboti este înalta probabilitate de dezvoltare a unui

comportament în care interesul personal este sacrificat în favoarea interesului de grup! Ca

si furnicile, de pilda, care renunta la transportul unei sarcini usoare pentru a se aseza

alaturi de "colegele" lor transportând greutati uneori imense, dar utile întregului furnicar.

 

Vehicule inteligente

Dean Pomerleau a prezentat rezultatele cercetãrii colectivului de AI de la

Carnegie Mellon în domeniul "vehiculelor inteligente". Sistemul lor a fost încãrcat (la

propriu) într-o dubitã ce a parcurs distanta de 2850 mile (circa 4800 km) dintre

Washington, DC si San Diego (California). Este de-a dreptul uluitor faptul cã 98,2% din

distantã a fost condusã de pilotul automat, fãrã nici un ajutor din partea "factorului

uman"! Noul sistem de "viziune adaptivã" numit RALPH ("Rapidly Adapting Lateral

Position Handler") a fost capabil sã se descurce perfect în aproape toate conditiile:

condus pe zi sau pe noapte, pe ploaie sau soare, la apus sau la rãsãrit! Fãrã nici un fel de

10

Page 11: Proiect SCR

probleme, pilotul automat a fost capabil sã efectueze depãsiri dificile, sã pãstreze o

distantã "de sigurantã" fatã de ceilalti participanti la trafic, si "sã se asigure" înainte de a

schimba banda! Pe tot parcursul au existat douã probleme reale: pe o bucatã de autostradã

proaspãt asfaltatã nu erau trasate liniile de demarcatie si atunci sistemul "s-a prostit", iar

în traficul "nebun" de lângã San Diego autorii sistemului au preferat sã preia "comanda

manualã" (dar sã nu credeti cã în "balamucul" retelei de autostrãzi californiene e mult mai

sigur sã tii volanul "cu mâna ta"!). Evident, sistemul nu e perfect, pe moment nu conduce

decât pe autostrãzi, si, în plus, de câte ori "vede" un "exit" are tendinta sã iasã de pe

autostradã. Dar aceasta din urmã problemã a fost rezolvatã "din zbor" printr-un sistem

automat de mascare a exit-urilor "nerelevante" într-o manierã asemãnãtoare cu solutia

"ochelarilor de cal".

Dezvoltarea pe viitor

În 2004 au fost 2 milioane de roboți în uz, pe când doar pentru anul 2008 se

așteaptă 7 milioane de instalații noi.  Uniunea Europeană susține financiar lucrările din

cercetare, care până în 2010 ar putea permite ca roboții să fie introduși în spitale în

activități simple, ca de exemplu: transporturi de paturi în spital, livrarea mâncării,

salubrizare.  Până la sfârșitul lui 2008 va fi dezvoltat un robot, care să ajute la recoltarea

livezilor. 

11

Page 12: Proiect SCR

3. Descrierea structurala

3.1 Descrierea Hardware

3.1.1 Arduino Uno

Uno Arduino este o placa microcontroler

bazat pe ATmega328. Are 14 pini digitali de

intrare/iesire( dintre care 6 pot fi utilizati ca iesiri

PWM), 6 intrari analogice, un oscilator cu cristal

de 16 MHz, o conexiune USB, un jack de putere,

ICSP,si un buton de reset.

"Uno" înseamnă unul în limba italiană şi

este numit pentru a marca lansarea viitoare de

Arduino 1.0. Uno şi versiunea 1.0 vor fi versiunile de referinţă ale Arduino. Uno este

ultimul dintr-o serie de placi Arduino cu interfata USB, şi modelul de referinţă pentru

platforma Arduino.

Microcontroller ATmega328

Operating Voltage 5V

Input Voltage (recommended) 7-12V

Input Voltage (limits) 6-20V

Digital I/O Pins 14 (of which 6 provide PWM output)

Analog Input Pins 6

DC Current per I/O Pin 40 mA

DC Current for 3.3V Pin 50 mA

Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader

SRAM 2 KB (ATmega328)

EEPROM 1 KB (ATmega328)

Clock Speed 16 MHz

12

Page 13: Proiect SCR

3.1.2 Arduino Pro Mini

Arduino ProMini este o placa de

dezvoltare bazata pe ATMEGA168. Ea are

14 pini digitali de intrare / ieşire (din care 6

pot fi utilizati ca ieşiri PWM), 6 intrari

analogice, un rezonator pe placa, un buton

de resetare, şi găuri pentru pini conectori.

Arduino Mini Pro este destinat pentru

instalari semi-permanente, scop pentru proiectare. Placa in sine nu este prevazuta cu

conectori, de aceea se lasa la latitudinea utilizatorului alegerea interfetei de conectare.

Există două versiuni de Mini Pro. Una ruleaza la 3,3 V şi 8 MHz, cealălalta la 5V şi 16

MHz.

Microcontroller ATmega328

Operating Voltage 5V

Input Voltage (recommended) 7-12V

Input Voltage (limits) 6-20V

Digital I/O Pins 14 (of which 6 provide PWM output)

Analog Input Pins 6

DC Current per I/O Pin 40 mA

DC Current for 3.3V Pin 50 mA

Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader

SRAM 2 KB (ATmega328)

EEPROM 1 KB (ATmega328)

Clock Speed 16 MHz

Pentru programarea acestei placute, am folosit o placa FTDI careia i-am

adaugat 6 pini pentru lipirea la Arduino ProMini.

13

Page 14: Proiect SCR

3.1.3 Transmitatorul Radio 434 MHz

Este un modul Rf

foarte folositor si usor de

utilizat.

Are aplicabilitate in

urmatoarele: transmisie de

date wireless, joystick wireless, telecomenzi,

jucarii comandate wireless, chei de la

masini, automatizarea casnica, etc

Caracteristici:

Receptorul Radio 434 MHz

Functioneaza in pereche cu transmitatorul radio, fiind folosit la aceleasi aplicatii.

Caracteristici:

3.1.4 Driverul de motoare

14

Page 15: Proiect SCR

Un driver de motoare

se bazeaza pe o punte

H, astfel incat atunci

cand comandam doua

tranzistoare sa se

actioneze intr-o

anumita directie

motorul, iar cand

actionam celelalte doua sa se poata invarti motorul in cealalta directie

DRIVER MOTOARE 2 AMPERI TIP SHIELD (L298N),

ASAMBLAT:

Bazat pe circuitul L298N, acest driver de motoare

poate comanda 2 motoare de curent continuu, curent maxim

2 amperi. Driverul este complet asamblat sub forma unui

shield Arduino, facilitand astfel utilizarea simpla. 

Conectarea la Arduino se face cupland placa shield peste placa Arduino si

conectand pinii marcati VIN si GND la sursa de alimentare pentru motoare. Pinii PWM

care controleaza driver-ul L298 sunt 3, 5, 6 si 9 . Cele doua motoare se conecteaza in

pinii cu surub marcati "MOTOR1" si "MOTOR2", iar alimentarea pentru motoare se

conecteaza la pinii cu surub marcati "VIN" si "GND".

Pentru suportul si accesorii necesare infaptuirii fizice a

robotului am folosit un kit de robot, ce contine scheletul ce

trebuie asamblat pentru a sustine componentele dar si pentru a

ajuta la locomotive.

3.1.5 Kit pentru robot

15

Page 16: Proiect SCR

Kitul de robot kit are incluse doua motoare

de curent continuu 120:1 tip Pololu, 2 roti special

realizate pentru aceste motoare, o roata de

sprijin metalica si tot setul de conectori, suruburi

si piulite necesari pentru montaj complet. 

Acest kit contine doar motoarele, rotile,

platforma sasiu, roata de sprijin metalica, placile pentru

platforma si elementele de montaj.

3.1.6 Joystick

Joystickul prezent este folosit pentru a manevra

robotul, continand doua potensiometre, cate unul pentru

fiecare axa. Valoarea citita este un numar intre 0 si 1023, in

functie de acest numar facandu-se anumite operatii.

Acestuia pentru o simpla functionalitate i-am atasat un

shield.

3.2 Descrierea Software

3.2.1 Mediul de programare

16

Page 17: Proiect SCR

Mediul de dezvoltare a programelor arduino este unul simplu, dar in acelasi timp

si foarte util, avand posibilitatea si de programare grafica in mediul de dezvoltare

Processing. Interfata este una usoara si setarile aferente functionarii se seteaza rapid si

foarte simplu, singurele care trebuie facute fiind setarea portului la care este prezenta

placuta de dezvoltare si tipul placii de dezvoltare. Este disponibil pentru

Windows

Mac OS X

Linux: 32 bit, 64 bit

3.2.2 Biblioteca VirtualWire

VirtualWire este o bibliotecă de comunicare pentru Arduino, care permite cai

multiple de a comunica folosind emiţătoare şi receptoare radio de preturi reduse.

VirtualWire este o bibliotecă care oferă funcţii pentru a trimite mesaje scurte, fara

adresare, retransmitere sau confirmare.

Pentru abordarea proiectului am folosit doar cateva din functiile implementate

aici: vw_setup (setarea vitezei de transmisie), vw_rx_start (pornirea receptiei),

vw_wait_tx (asteptare pana se trimite intreg mesajul), vw_send(trimiterea mesajului).

Viteza recomandata pentru trimiterea mesajelor este de 2000 de biti pe secunda,

pentru a asigura o comunicare fara erori.

3.2.3 Programul de la receiver

Pentru programarea placii de dezvoltare careia ii sunt atasate motoarele si 4 leduri

pentru a arata directia de mers, s- a pornit de la cateva programele esentiale pentru

17

Page 18: Proiect SCR

programul final, cum ar fi, aprinderea unui led, comandarea unui motor, receptarea unui

mesaj primit de la transmitator.

Cu Arduino, aprinderea unui led si intarzierea acestuia este relative simpla,

deoarece functiile folosite au un nume usor de retinut si sunt foarte usor de inteles.

Ex:

int led =13; //se declara pinul afferent ledului

void setup() //functia principala de setare a pinilor

{

pinMode(led,OUTPUT);// drept output sau input

}

void loop() //corpul buclei repetitive

{

digitalWrite(led,HIGH); //scrierea valorii de high adica on

delay(500); //intarzierea de 500 de milisecunde

digitalWrite(led,LOW); //scrierea valorii de low adica off

delay(500);

}

Daca mai sus programul a folosit doar scrierea unor valori logice de High sau

Low, pentru motoare folosim scrierea analogical a unui semnal PWM.

Ex.

int M1_1 = 3; //se declara pinii aferenti motoarelor

int M1_2 = 5; //pentru fiecare motor folosim doi pini pentru a putea da

int M2_1 = 6; // o directie

int M2_2 = 9;

void setup()

18

Page 19: Proiect SCR

{

pinMode(M1_1, OUTPUT);//declaram pinii ca fiind de tip output pentru

pinMode(M1_2, OUTPUT);//ca acolo vom scrie valorile

pinMode(M2_2, OUTPUT);

pinMode(M2_1, OUTPUT);

}

void loop() {

analogWrite(M1_1,0);//pentru ca motorul sa se roteasca

analogWrite(M1_2,255);//in directia dorita

analogWrite(M2_1,0);//vom face ca la un pin sa fie valoarea

analogWrite(M2_2,255);//dorita de noi de la 1 la 255

} //si la celalalt pin valoarea 0 pentru

// a putea roti motorul intr –o anume //

// directie

Pentru a putea comanda robotul de la distanta avem nevoie de un programel pe

baza caruia vom recepta anumite valori sau mesaje de la transmitator. Programul urmator

doar primeste un simplu mesaj de la transmitator.

#include <VirtualWire.h> //includerea bibliotecii din care

void setup() //fac parte functiile folosite pentru

{ //transmitere si receptie

Serial.begin(9600); //pornirea comunicatii seriale, pentru //afisare

Serial.println("setup");

vw_setup(2000); // Bits per sec

vw_rx_start(); // pornirea PLL de la reciever

}

void loop()

19

Page 20: Proiect SCR

{

uint8_t buf[VW_MAX_MESSAGE_LEN]; //vectorul mesaj primit

uint8_t buflen = VW_MAX_MESSAGE_LEN; //lungimea vectorului aferent

if (vw_get_message(buf, &buflen)) // in caz de primire mesaj

{

int i;

// afisam componentele vectorului

Serial.print("Got: ");

for (i = 0; i < buflen; i++)

{

Serial.print(buf[i]);

Serial.print(" ");

}

Serial.println(""); //terminarea afisarii unei linii

}}

Programul de la receptie final sufera putine modificari deoarece grupurile de

octeti primate le vom face sa fie inapoi numere si ledurile prezente pe robot se vor

aprinde in functie de cum va merge robotul.

#include <VirtualWire.h> //includerea bibliotecii cu functiile pentru receptie

int M1_1 = 3; //declararea pinilor pentru cele doua motoare

int M1_2 = 5;

int M2_1 = 6;

int M2_2 = 9;

void setup()

{

pinMode(7,OUTPUT); //declararea tipului pentru fiecare pin utilizat

pinMode(8,OUTPUT);

20

Page 21: Proiect SCR

pinMode(12,OUTPUT);

pinMode(4,OUTPUT);

pinMode(M1_1, OUTPUT);

pinMode(M1_2, OUTPUT);

pinMode(M2_2, OUTPUT);

pinMode(M2_1, OUTPUT);

Serial.begin(9600);

vw_setup(2000); // Bits per sec

vw_rx_start(); // Pornirea PLL de la reciever

}

void loop()

{

{

byte temp[VW_MAX_MESSAGE_LEN]; //declaram vectorul de octeti primiti

byte templen = VW_MAX_MESSAGE_LEN; //precum si lungimea sa

if (vw_get_message(temp, &templen)) //in caz ca mesajul de octeti s-a primit

{ // initializam cele doua axe

int x,y;

digitalWrite(13, true); //aprindem ledul de pe placa pentru a arata ca s-a primit

x= (temp[1] << 8) | temp[0]; //refacem numerele citite de la cele

y= (temp[3] << 8) | temp[2]; //doua potensiometre

Serial.print(x,DEC); //afisam cele doua numere sa vedem

Serial.print(" "); //daca sunt ca cele de la transmitere

Serial.println(y,DEC);

if (y>900)

{

analogWrite(M1_1,0); //in functie de axele x si y

analogWrite(M1_2,255); //vom face robotul sa se miste fata/spate, sau sa se r

analogWrite(M2_1,0); //roteasca stanga dreapta

analogWrite(M2_2,255); //in functie de directia aleasa vom aprinde

21

Page 22: Proiect SCR

digitalWrite(7,LOW); //unul din cele patru leduri prezente

digitalWrite(8,LOW); //x si y sunt numere cuprinse intre 0 si 1023

digitalWrite(4,LOW); //de aceea alegem o marja de eroare sufficient de

digitalWrite(12,HIGH); //mare pentru a putea efectua operatiile dorite

}

else if (y<100)

{analogWrite(M1_1,255);

analogWrite(M1_2,0);

analogWrite(M2_1,255);

analogWrite(M2_2,0);

digitalWrite(7,LOW);

digitalWrite(8,LOW);

digitalWrite(4,HIGH);

digitalWrite(12,LOW);

}

else if (x>900)

{analogWrite(M1_1,0);

analogWrite(M1_2,255);

analogWrite(M2_1,255);

analogWrite(M2_2,0);

digitalWrite(7,HIGH);

digitalWrite(8,LOW);

digitalWrite(4,LOW);

digitalWrite(12,LOW);

}

else if (x<100)

{analogWrite(M1_1,255);

analogWrite(M1_2,0);

analogWrite(M2_1,0);

22

Page 23: Proiect SCR

analogWrite(M2_2,255);

digitalWrite(7,LOW);

digitalWrite(8,HIGH);

digitalWrite(4,LOW);

digitalWrite(12,LOW);

}

else

{analogWrite(M1_1,0);

analogWrite(M1_2,0);

analogWrite(M2_1,0);

analogWrite(M2_2,0);

digitalWrite(7,LOW);

digitalWrite(8,LOW);

digitalWrite(4,LOW);

digitalWrite(12,LOW);

}

}

}

}

3.2.3 Programul de la transmitter

Programul pentru transmiterea variabilelor in functie de care vom face operatiile

dorite, se bazeaza pe doua programele micute. Unul care citeste valorile de la cele doua

potensiometre, si unul care transmite datele.

Primul program doar citeste de la un potensiometru valoarea pe care acesta o

transmite.

int analog=1; //declararea pinului analogic

23

Page 24: Proiect SCR

void setup()

{

pinMode(analog,INPUT); //declararea lui ca intrare

Serial.begin(9600); //incepem afisarea

}

void loop()

{

Serial.println(analogRead(analog)); //afisam ceea ce primim de la

delay(1000); //potensiometru si urmatoarea valoare o afisam

} //dupa o secunda

Cel de-al doilea program trimite un simplu mesaj.

#include <VirtualWire.h> //includerea bibliotecii cu functiile aferente

void setup()

{

vw_setup(2000); // Bits per sec

}

void loop()

{

const char *msg = "hello"; //mesajul care vrem sa-l transmitem

vw_send((uint8_t *)msg, strlen(msg)); //pentru a trimite, avem

delay(400); //nevoie de vectorul de caractere, dar si lungimea sa

}

Programul final are unele retusuri datorita citirii de la potensiometre

Si aceste numere scriindu-se pe 10 biti, nu putem transmite pe 8 biti acest numar, de

aceea vom imparti numarul in doua siruri de biti.

24

Page 25: Proiect SCR

#include <VirtualWire.h> //includerea bibliotecii pentru functii

void setup()

{

Serial.begin(9600); // inceperea afisarii

Serial.println("setup");

vw_set_ptt_inverted(true); // inceperea transmisiei mesajului

vw_setup(2000); // Bits per sec

}

void loop()

{

char axis[6]; //declaram un vector maxim pentru cati octeti vom avea

int x=analogRead(2); //citim cele doua axe de la potensiometre

int y=analogRead(0);

Serial.print(x); //afisam cele doua valori

Serial.print(" ");

Serial.println(y);

byte lowerByte1 = (x & 0xFF); // impartim cele doua numere in doi

byte upperByte1=(x >>8); // octeti pentru a putea pune octetii

byte lowerByte2 = (y & 0xFF); // in vector

byte upperByte2=(y >>8);

axis[0]=lowerByte1; //initializam componentele vectorului

axis[1]=upperByte1;

axis[2]=lowerByte2;

axis[3]=upperByte2;

{

vw_send((uint8_t *)axis, sizeof(axis)); //transmitem vectorul,

vw_wait_tx(); // marimea sa in octeti, si se asteapta pana se

25

Page 26: Proiect SCR

digitalWrite(13, false);//trimite tot mesajul

}

}

4.Implementare practica

Implementarea practica a robotului s-a facut progresiv, pornind de la testarea

tuturor componentelor prin testarea lor software, si apoi asamblarea ca si un intreg.

Testarea lor software s-a facut prin compilarea micilor programe descries intr-un

capitol anterior, testandu-se functionarea in

parametrii normali descrisi in foaia de catalog de la

producator.

Pentru ca totul sa fie mai usor si reutilizabil

am folosit doua mini breadboard-uri. Sunt

instrumente foarte practice pentru a infaptui circuite

fara a fi nevoie de lipituri.

Atat partea ce constituie telecomanda sistemului cat si partea de circuit de la robot

au fost implementate pe doua breadboard-uri.

Telecomanda realizata cu Arduino plus driverul de

ajutorul unui joystick si un motoare asamblate pe

Arduino Pro Mini kitul de robot.

26

Page 27: Proiect SCR

In cele din urma rezultatul final folosind drept

alimentare pentru driverul de motoare doua baterii de 9

V legate in parallel, si pentru Arduino o singura baterie

de 9V.

5. Concluzii

Prezentul proiect are ca scop initierea in programarea Arduino, care este un mediu

destul de usor de programat. De la acest lucru am incercat transmiterea unor anumite

valori intregi prin intermediul unor module RC. In functie de valorile trimise facem

comanda unor motoare.

Toate componentele electrice au fost asamblate correct pentru functionarea

corecta a sistemului. Aceasta functionalitate a fost demonstrata prin functionarea corecta

a programelor implementate in placutele de dezvoltare, dar si transmiterea corecta a

datelor..

27