Date post: | 22-Oct-2015 |
Category: |
Documents |
Upload: | alex-ghidan |
View: | 56 times |
Download: | 5 times |
Proiect SCR
ROBOT COMANDAT RC
Studenti :
Alexandru-Daniel Ghidan
Alexandru Dinca
Marius-Stefan Moisa
Coordonator:
Conf. Dr. Ing. Adrian Popovici
1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
{
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
{
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
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
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
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
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
#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
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
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