Arduino wall e - dok

21
Proiektu honetan Arduino plataformarekin lan egingo dugu. Bertan Arduino lengoaia nolakoa den ikusiko dugu hainbat adibide erabilita eta Wall-e errobot bat ere programatuko dugu. Honek 3 serbomotore(eskuak eta burua), 2 LED(begiak), buzzer 1(soinua), bluetooth modulo bat, 2 DC motore(gurpilak) eta ultrsoinu modulo(distantzia neurtzeko) bat izango ditu. Hauek gure Wall-e errobota mugitzeko eta erreakzionatzeko erabiliko ditugu. ARDUINO

description

Informatika tolosaldea proiektua

Transcript of Arduino wall e - dok

Page 1: Arduino wall e - dok

Proiektu honetan Arduino plataformarekin lan egingo dugu. Bertan

Arduino lengoaia nolakoa den ikusiko dugu hainbat adibide erabilita eta

Wall-e errobot bat ere programatuko dugu. Honek 3 serbomotore(eskuak

eta burua), 2 LED(begiak), buzzer 1(soinua), bluetooth modulo bat, 2 DC

motore(gurpilak) eta ultrsoinu modulo(distantzia neurtzeko) bat izango

ditu. Hauek gure Wall-e errobota mugitzeko eta erreakzionatzeko

erabiliko ditugu.

ARDUINO

Page 2: Arduino wall e - dok

Wall-e Arduino

1

Aurkibidea Sarrera .......................................................................................................................................................... 2

Zer da? ..................................................................................................................................................... 2

Zer behar dugu? ....................................................................................................................................... 2

Arduino ezaugarriak (Pin-ak) .................................................................................................................... 2

Lengoaia ....................................................................................................................................................... 3

Egitura ...................................................................................................................................................... 3

Aldagaiak .................................................................................................................................................. 3

Funtzioak .................................................................................................................................................. 3

Softwarea ..................................................................................................................................................... 4

Instalazioa ................................................................................................................................................ 4

Lehen bista ............................................................................................................................................... 5

Sketch-ak (Kodea) ......................................................................................................................................... 6

Egitura ...................................................................................................................................................... 6

delay (geldiunea) ................................................................................................................................. 6

digitalWrite .......................................................................................................................................... 6

analogWrite ......................................................................................................................................... 6

Komunikazioa ........................................................................................................................................... 6

Komunikazio seriala (PC-tik) ................................................................................................................ 6

Komunikazio seriala (Bluetooth) .......................................................................................................... 6

Kontrola.................................................................................................................................................... 7

IF erabiliz .............................................................................................................................................. 7

CASE erabiliz ........................................................................................................................................ 7

random (Ausazko zenbakia) ..................................................................................................................... 7

LED-a piztu eta itzali ................................................................................................................................. 8

Datuak irakurri eta imprimatu ................................................................................................................. 8

print eta println (imprimatu) ............................................................................................................... 8

echo eta trig (Ultrasoinua) ....................................................................................................................... 9

Buzzer ....................................................................................................................................................... 9

Serbomotoreak ...................................................................................................................................... 10

Motoreak ............................................................................................................................................... 11

Komandoak objektuetan gorde .................................................................................................................. 12

Wall-e Kodea .............................................................................................................................................. 13

Bibliografia.................................................................................................................................................. 20

Page 3: Arduino wall e - dok

Wall-e Arduino

2

Sarrera

Zer da? Arduino sfoftware libreko plataforma elektronikoa da, hardware eta software irekiak eta

flexibleak erabiliz prototipoak sortzeko erabiltzen dena. Arduino-ren pin-ak gure

ingurumenetik informazioa lortu dezakete hainbat sentsore erabiliz eta hauen bitartez LED-ak,

motorrak eta horrelako gauzekin eragin dezakete.

Xafla programatzeko Arduino Lengoaia erabiltzen da, hau C/C++.

Zer behar dugu? Proiektu honetan hainbat gauza erabili ditugu errobota egiteko:

Arduino Leonardo x1

Serbomotoreak x3

DC motoreak x2

Buzzer modulua x1

Ultrasoinu modulua x1

Bluetooth moduloax1

Arduino ezaugarriak (Pin-ak) Atal honetan gure arduinoaren pinak ikusi eta azalduko ditugu. Hau da guk erabiliko dugun

xafla: Arduino Leonardo.

Pin-ak

5V/3.3V: Pin positiboak, gure moduluei 5V edo 3.3V-ko potentzia emango die.

GND: Pin negatiboa.

Vin: 9V potentzia sartu diezaiokegu edo 9V potentzia atera

Pin Digitalak: Hauek 2 balore dituzte LOW eta HIGH(itzalita eta piztuta).

o PWM~ simboloa dutenak 0 eta 255-en arteko balorea hartu dezakete

Pin Analogikoak: PWM-ak bezalakoak. 0 eta 255-en arteko balorea hartu dezakete.

IOREF: Pin honekin mikrokontrolagailuaren tentsioa irakurri ditzakegu.

RESET: Hau Arduino xafla berrabiarazteko botoia da.

RESET: Hemen botoi bat konektatu dezakegu reset botoia bezala erabiltzeko.

SCL/SDA: I2C eta TWI dispositiboak konektatzeko balio du.

AREF: 5V baino txikiagoko potentzia erabiltzeko. Hemen jarritako potentzia xaflak

erabiliko duena da.

TX/RX: Komunikazio serial-erako erabiltzen dira.

ICSP: USB interfazeak konektatzeko.

Page 4: Arduino wall e - dok

Wall-e Arduino

3

Lengoaia Arduino plakaren lengoaia C eta C++ lengoaietan oinarritzen da. Xafla programatzeko sketch-ak erabiltzen dira eta

hauek hiru zatitan bana daitezke: Estruktura, aldagaiak eta funtzioak.

Ondorengo taulan proiektu honetan erabiliko ditugunak bakarrik daude, egitura, aldagai eta funtzio bakoitza

Arduino-ren web orrira darama bertako azalpena ikusi ahal izateko.

Egitura Aldagaiak Funtzioak Egitura

setup() (Hasiera)

loop() (Begizta)

Sintaxia

; (Puntu eta koma)

{} (Giltzak)

// (Iruzkinak)

Kontrol Egiturak

if (Konparaketa. Hau izanda, hau egin)

if...else (Konparaketa. Hau egin, bestela... )

for (Begizta zenbatzailea)

switch case (Konparaketa anitza)

while (Begizta boolean konparaketarekin)

break (Kodearen hausketa)

Operadore Aritmetikoak = (Berdin)

Operadore Konparatiboak

== (Hau bestearen berdina)

< (Hau bestea baino txikiagoa)

> (Hau bestea baino handiagoa )

<= (Hau bestea baino txikiagoa edo berdina)

>= (Hau bestea baino handiagoa edo berdina)

Konposizio Operadoreak ++ (Haunditu)

Constantes

HIGH | LOW (Altua/Baxua)

INPUT | OUTPUT (Sarrera/Irteera)

true | false (Egia/Gezurra

Constantes Numéricas

Tipos de Datos

char (Karaktereak)

int (Osoa)

float (Komarekin)

void (Hutsa)

Konbersioa char()

int()

float()

E/S Digitalak

pinMode()

digitalWrite()

digitalRead()

E/S Analogikoak

analogRead()

analogWrite() - PWM (modulación por ancho de pulso)

E/S Aurreratuak tone()

noTone()

shiftOut()

pulseIn()

Denbora delay()

Ausazko Zenbakiak random()

Komunikazioa Serial

Page 5: Arduino wall e - dok

Wall-e Arduino

4

Softwarea

Instalazioa Gure Arduinoa programatzeko lehenengo softwarea behar dugu. Software hau web orri

ofizialetik deskargatu dezakegu:

Web ofizialera joango gara: http://www.arduino.cc/es/

Hondoren ‘Download’ atalera joan beharko gara:

Download atalean gure sistema aukeratu beharko dugu, gure kasuan: Windows Installer.

Deskargatzen denean ireki egingo dugu, eta pausoak jarraituko ditugu:

Instalatzean honelako ikonoa agertuko zaigu.

Page 6: Arduino wall e - dok

Wall-e Arduino

5

Lehen bista Software honetan gure kodigoa idatziko du. Hau da lehenik prestatu behar dena.

Irekitzean ikusten den koadro zurian kodigoa idazten da.

Gure xaflaren modeloa aukeratuko dugu. Herramientas-Tarjetas-Arduino Leonardo.

Hondoren usb-tik xafla konektatu eta Herramientas-Puerto serial-COM X aukeratu.

Monitore Seriala irekitzeko Herramientas-Monitor Serial aukeratu.

Horrelako terminal txuria irekiko da.

Page 7: Arduino wall e - dok

Wall-e Arduino

6

Sketch-ak (Kodea)

Sketch-ak gure kodea dira. Softwarearekin hauek gorde eta hainbat ezberdin izan ditzazkegu.

Egitura void setup(){ }

Setup() funtzioan Arduino plakaren pinak ezartzeko erabiltzen da (adibidez led bat bigarren pinan jartzen dugula),

objektuak sortu ditzakegu eta hauen barruan komandoak ezarri (hau komando berbera behin eta berriz ez

idazteko erabiltzen da) eta bertan ere libreriak ezarri ditzakegu.

void loop(){ }

loop() funtzioa begizta bat da, hau da, bertakoa behin eta berriz exekutatuko du gure Arduino-ari komunikatzeko

aukera emanez.

delay (geldiunea) Arduino kodean geldiuneak egiteko delay-a erabiltzen da, hau milisegundotan adierazten dira

eta ezarritako denbora pasa beharko da kodearekin jarraitzeko. Adib:

delay(2000); //Hau kodea bi segundo geldituko du.

digitalWrite

Pin digitalei HIGH edo LOW (Piztu edo itzali) balorea emateko erabiltzen dira. Adib: LED batekin

digitalWrite (5, HIGH); //Hau bosgarren pinan konektatutako LED-a pizten du.

analogWrite

Pin digitalei HIGH edo LOW (Piztu edo itzali) balorea emateko erabiltzen dira. Adib: LED batekin

analogWrite (5, 100); //bosgarren pinan konektatutako LED-ari ehuneko balorea ematen dio.

Komunikazioa Komunikazio seriala (PC-tik)

Komunikazio seriala Arduino-rekin komunikatzeko erabiliko dugu PC-aren bitartez. Proiektu honetan bluetooth

komunikazioa erabili da baina proiektuko adibideak komunikazio hau erabiliko dute. Hemen dugu eskema:

void setup() { Serial.begin(9600); //Komunikazio seriala pizten du 9600 baudioetara } //Baudio: Transmisio digital batean zenbat bit bidaltzen diren segundoro. void loop() { if(Serial.available() > 0) { //Komunikazio seriala 0 bit baino altuagoa bada

//HEMEN GURE KODIGOA } // if(Serial.available() > 0) itxiko du.

Komunikazio seriala (Bluetooth)

Komunikazio seria bluetooth-aren bidez egiteko gure bluetooth moduluaren TX pina Arduinoaren RX pinarekin

konektatuko dugu eta RX pina TX- pinarekin.

void setup() { Serial1.begin(9600); //Komunikazio serial2-a pizten du 9600 baudioetara } void loop() { if(Serial1.available() > 0) { //Komunikazio serial2-a 0 bit baino altuagoa bada

//HEMEN GURE KODIGOA } //if(Serial2.available() > 0) itxiko du.

Page 8: Arduino wall e - dok

Wall-e Arduino

7

Kontrola Monitore serialetik hitzak edo hizkiak bidaliz xaflak guk programatutakoa egingo du.

IF erabiliz

void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { int var = Serial.read(); //Objektu bat ‘var’ izenekoa. Serial portutik idatzitakoa bertan gordeko da. if (var == '0'){ //var ‘0’ baldin bada bada ondorengoa egingo du:

//HEMEN GURE KODIGOA } //if (var==’0’) itxiko du.

//Hemen if (var==’x’) gehiago joan daitezke bakoitza bere kodigoarekin. else { //’var’ objektua ezarrita ez badago ondorengoa egingo du

//HEMEN GURE KODIGOA } } //if(Serial.available() > 0) itxiko du.

CASE erabiliz

Proiektuan batez ere CASE kontrol egitura erabili da, beraz, adibideetan hau erabiliko da.

void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { int var = Serial.read(); //Objektu bat ‘var’ izenekoa. Serial portutik idatzitakoa bertan gordeko da. switch (var) { //Hondorengo ‘case’-ak ‘var’ objetuarekin konparatuko ditu case '0': //’var’ objetua ‘0’ baldin bada ondorengoa egingo du: //Hemen gure kodigoa break; //case ‘0’-a bukatuko du. //Hemen case ‘x’: gehio jarri daitezke. } // switch (var) itxiko du }}

random (Ausazko zenbakia) void setup() { } void loop() { int numeroaleatorio = random(3); //Objektu bat sortuko dugu 'numeroaleatorio' izenarekin. Honek random funtzioa erabiliko du eta 0-tik 3-ra zenbaki bat aukeratuko du (berak nahi duena) Serial.println(numeroaleatorio); //Terminalean ‘numeroaleatorio’ objektua inprimatuko digu. delay(2000); //tiempo de espera de 2 segundos switch (numeroaleatorio) { //Switch funtzioa 'numeroaleatorio' objektuarekin habiaraziko du. case 0: //’numeroaleatorio’ objetua 0 edo 1 denean ondorengoa egingo du: case 1: // Serial.println ("ASD"); //Terminalean ‘ASD’ inprimatiko digu delay(2000); //kodea 2 segundo geldituko du. break; case 2: //si el objeto 'numeroaleatorio' es igual a '2' Serial.println ("QWE"); //’numeroaleatorio’ objetua 0 edo 1 denean ondorengoa egingo du: delay(2000); //kodea 2 segundo geldituko du. break; } }

Page 9: Arduino wall e - dok

Wall-e Arduino

8

LED-a piztu eta itzali Case-ak erabiliz LED-a piztu eta itzaliko dugu.

- LED-aren positiboa xaflaren 13 pin-ean konektatuta egongo da. (LED baten positiboa makil luzea da).

- LED-aren negatiboa xaflaren GND pin batean (nahi duna erabili dezakegu). (LED baten negatiboa makil motza da).

int ledPin = 13; // ‘ledPin’ objetua 13. pin-a(LED-a) izango da. void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { int var = Serial.read(); switch (var) { //ondorengo kasuak (case) ‘var’ objetuarekin konparatuko ditu. case '0': digitalWrite(ledPin, HIGH); //‘ledPin’ objetua HIGH balorera aldatuko da (LED-a piztuko da). break; case '1': //hacer algo cuando sea igual a 1 digitalWrite(ledPin, LOW); //‘ledPin’ objetua HIGH balorera aldatuko da (LED-a piztuko da). break; else digitalWrite(ledPin, HIGH); //‘ledPin’ objetua HIGH balorera aldatuko da (LED-a piztuko da). } } }

Datuak irakurri eta imprimatu print eta println (imprimatu)

Honekin gure Arduino plaka terminalean guk esandakoa inprimatuko digu.

void setup() { Serial.begin(9600); // Komunikazioa serie portutik irekiko du 9600 baudio-tara (abiadura) } void loop() { Serial.print("ASD"); // Serial portutik ‘ASDASDASD…’ bidaliko digu hitzak bata bestearen atzetik jarrita. Serial.println("ASD"); // Serial portutik ‘ASD ASD ASD…’ bidaliko digu hitz bakoitza lerro bakarrean jarrita. delay(1000); // Segundo bateko delay bat jarriko diogu programa trabatuta ez geratzeko. }

Serial.prin Serial.println

Page 10: Arduino wall e - dok

Wall-e Arduino

9

echo eta trig (Ultrasoinua)

Ultrasoinu moduloa Arduinoa zenbateko distantzia duen ikusteko balioko digu. Hau gure

errobota paretekin ez jotzeko balioko digu.

Honek 4 pin ditu: trigger, echo, 5V eta GND

int trigger=A0; //’trigger’ objetua A0 pinean, pin analogikoetan egongo da.(moduloaren trigger pina).

int echo=A1; // echo objetua A1 pinean pin analogikoetan egongo da.(moduloaren echo pina).

int distantzia; //’distantzia’ izeneko objektua sortuko dugu

void setup() { pinMode(trigger, OUTPUT); //’trigger’ pina OUTPUT bezala jarriko dugu ultrasoinua bidaliko duelako. pinMode(echo, INPUT); //’echo’ pina INPUT bezala jarriko dugu ultrasoinua jasoko duelako. } void loop() { digitalWrite(trigger,HIGH); //trigger pinari HIGH balorea emanez ultrasoinua bidaliko du.

delayMicroseconds(10); //’delay’ bat egingo dugu

digitalWrite(trigger,LOW); //trigger pinari LOW balorea emanez ultrasoinua geldituko dugu

distantzia=pulseIn(echo,HIGH); //’echo’ pina ‘trigger’ pina irakurriko du HIGH balorea hartu duen

momentutik LOW balorera aldatu de arte. Honek neurri bat emango digu: Pultsu zabalera

mikrosegundotan. Neurri hori ‘distantzia’ objetuan gordeko du.

Serial.println(distantzia); //Serial monitoretik ‘distantzia’ objetua inprimatuko digu

delay(1000);

} Ondoko adibidean 6000 baino gehiagoko zenbakiak distantzia dezente dute eta 1000 baino gutxiagoko

zenbakiak distantzia gutxi dute

Buzzer Buzzer-a bozgorailu txiki bat da, guk musika jotzeko erabiliko dugu. Hau A2 pinera konektatu dugu (Pin

analogikoetara).

int iraupena=575; //gure notaren durazioa microsegundutan

int nota1=349.228231; //erreproduzitu nahi dugun notaren hertzio-ak.

int a=0; //’a’ objetua hutxa egongo dena bertan nota berriro kalibratu ahal izateko.

void setup(){

Serial.begin(9600);

pinMode (A2, OUTPUT); //’A2’ pina OUTPUT bezala konfiguratuko dugu soinua ateratzeko.

}

void loop(){

while (Serial.available()){

char dato= Serial.read();

switch(dato) {

case'1': {

for (a=nota1;a<=nota1; a++) //‘a’ objetuan ‘nota1’ sartuko dugu, ‘a’ objetua ‘nota1’

baino txikiagoa bada, ‘a’ objetua errepikatuko da.

tone(A2, a, iraupena); //Erreproduzituko duen soinua ‘A2’ pinetik aterako da ‘a’ objetukoa

entzungo dugu eta ‘iraupena’ objektuan jarritakoa iraungo du.

break;

}

}

}

}

Page 11: Arduino wall e - dok

Wall-e Arduino

10

Serbomotoreak Gure errobotaren besoak eta burua mugitzeko sebomotoreak erabiliko ditugu. Motore hauek 0 eta 180

graduen arteko mugimendua dute.

Serbomotoreak <Servo.h> liburutegiarekin erabiltzen dira. Honekin gure serbomotoreak edozein pin

digitalean jarri ditzakegu eta gainera Servo komandoa edukiko dugu kodean jarri ahal izateko.

#include <Servo.h> //servoak pin digitaletan jartzeko erabiliko dugun liburutegia

Servo serbo1; //’serbo1’ izeneko objektu bat sortuko dugu Servo motatakoa izango dena.

void setup()

{

Serial.begin(9600);

serbo1.attach(2); //’serbo1’ objetua bigarren pinan jarrita dagoela esango diogu.

} // Serbo motoreak zein pinetan dauden ‘void setup(){}’ atalean ezartzen dira.

void loop()

{

while (Serial.available()){

char dato= Serial.read();

switch(dato) {

case'1': {

serbo1.write(0); //’serbo1’ objetua ‘0’ gradura mugituko da.

delay(1000);

break;

}

case'2': {

serbo1.write(180); //’serbo1’ objetua ‘180’ gradura mugituko da.

break;

}

}

}

}

180º

Page 12: Arduino wall e - dok

Wall-e Arduino

11

Motoreak Errobotak 2 gurpil izango ditu beraz bi DC motor erabiliko ditugu.

Arduino-ak bakarrik ezin du motorrei behar duten tentsioa eman, hau egiteko motor kontrolagailu bat

behar dugu. Guk L298N kontrolagailua erabili dugu. Honek 2 DC motor kontrolatzeko aukera ematen

digu. Sei konektore ditu: ENA IN1 IN2 ENB IN3 IN4

ENA: Pin honek IN1 eta IN2 pinak pizten ditu.

o IN1/IN2 hauetako pin bat HIGH balorea emanez(eta besteari LOW) motorra alde

batera edo bestera mugituko da (aurrera edo atzera).

ENB: Pin honek IN3 eta IN4 pinak pizten ditu.

o IN2/IN3 hauetako pin bat HIGH balorea emanez(eta besteari LOW) motorra alde

batera edo bestera mugituko da (aurrera edo atzera).

int ENA=5; //5 pina motor kontrolagailuaren ENA pinera konektatuta dago. ENA motorra pizten du.

int IN1=6; //6 pina kontrolagailuaren IN1 pinera konektatzen da. IN1 motorraren lehen kablea bat da.

int IN2=7; //7 pina kontrolagailuaren IN2 pinera konektatzen da. IN2 motorraren bigarren kablea da.

int ENB=8; //8 pina motor kontrolagailuaren ENB pinera konektatuta dago. ENB motorra pizten du.

int IN3=9; //9 pina kontrolagailuaren IN3 pinera konektatzen da. IN3 motorraren lehen kablea da.

int IN4=10;//10pina kontrolagailuaren IN4 pinera konektatzen da. IN4 motorraren bigarren kablea da.

void setup() { Serial1.begin(9600); } void loop() { if(Serial1.available() > 0) { int var = Serial1.read(); switch (var) { case '0': digitalWrite(IN1,HIGH); //Lehen motorraren IN1 kableari HIGH balorea jartzen dio.

digitalWrite(IN2,LOW); //Lehen motorraren IN2 kableari LOW balorea jartzen dio.

digitalWrite(IN3,HIGH); //Bigarren motorraren IN3 kableari HIGH balorea jartzen dio.

digitalWrite(IN4,LOW); //Bigarren motorraren IN4 kableari LOW balorea jartzen dio.

delay(2000);

digitalWrite(IN1,LOW); // Pinei LOW balorea emango diegu motorrak geldik uteko.

digitalWrite(IN2,LOW); // Pinei LOW balorea emango diegu motorrak geldik uteko.

digitalWrite(IN3,LOW); // Pinei LOW balorea emango diegu motorrak geldik uteko.

digitalWrite(IN4,LOW); // Pinei LOW balorea emango diegu motorrak geldik uteko.

break; } } } Taulan motorraren konbinaketa posibleak ikusi ditzakegu:

AURRERA ESKUINERA EZKERRERA ATZERA GELDIRIK

IN1 HIGH LOW HIGH LOW LOW

IN2 LOW HIGH LOW HIGH LOW

IN3 HIGH HIGH LOW LOW LOW

IN4 LOW LOW HIGH HIGH LOW

Balore hauekin aurrera doa

Balore hauekin aurrera doa

Page 13: Arduino wall e - dok

Wall-e Arduino

12

Komandoak objektuetan gorde Komandoak objektuen barruan gorde daitezke, honela objektuari deituz guk ezarritako kodea

habiatuko du.

Hau eginez gero ez daukagu behin eta berriz berdina idatzi behar, eta, gainera objektuan

komandoa aldatuz erabili dugun tokietan ere aldatuko da.

int ledbegiak = 13;

void begipiztuak(){ //objektu bat sortuko dugu void(hutsa) formatuan ‘begipiztuak()’ izenekoa eta

bertan ‘ledbegiak’ objetuari HIGH balorea emango diogu

digitalWrite(ledbegiak, HIGH);

}

void begiitzaliak(){//objektu bat sortuko dugu ‘begiitzaliak()’ izenekoa eta bertan ‘ledbegiak’ objetuari

LOW balorea emango diogu

digitalWrite(ledojos, LOW);

}

void setup()

{

Serial.begin(9600);

pinMode(ledbegiak, OUTPUT);

}

void loop(){

while (Serial.available()){

char dato= Serial.read();

switch(dato) {

case'h': {

begipiztuak(); //’begipiztuak’ objetuari deitzen diogu eta honek ‘ledbegiak’ objetuari HIGH

balorea emango diogu.

break;

}

case'g': {

begiitzaliak(); //’begiitzaliak’ objetuari deitzen diogu eta honek ‘ledbegiak’ objetuari LOW balorea

emango diogu.

break;

}

}

}

}

Wall-e errobotaren kodigoan hainbat kodigo objektuetan gorde ditugu hau bezala.

Page 14: Arduino wall e - dok

Wall-e Arduino

13

Wall-e Kodea

Orain Wall-e errobotaren kodea ikusiko dugu. Dena txikitu da gauzak ez errepikatzeko.

Ezaugarriak:

2 LED: Begiak.

3 serbomotore: Eskuak eta burua.

Buzzer bat.

Ultrasoinu bat.

Bluetooth moduloa.

2 DC motore.

Motor Kontrolagailu bat.

//LIBRERIA SERVOS

#include <Servo.h> //Serbomotorren liburutegia ezarriko dugu

//RANDOM

int var = random(10); // Random hau wall-e errobotaren autonomia buklean uzteko erabiliko dugu.

//ULTRASOINUA

int trigger=A0; //ultrasoinuen pinak ezarriko ditugu pin analogikoetan

int echo=A1;

int distancia; //’distancia’ objektua erabiliko dugu ultrasoinuaren datuak bertan gordetzeko

//LED BEGIAK

int ledojos = 13; //13 pinera konektatut dagoen ‘ledojos’ izena duen objektua

//SONIDO

int buzzer = 5; //5 pinera konektatut dagoen ‘buzzer izena duen objektua

//DURAZIOA

int duracion=275; ////gure notaren durazioa microsegundutan

… //Hemen guk nahi ditugunak jarriko ditugu.

//NOTAK Hz

int nota1=293.664768; // 'nota1' objetua nota baten hertzioak gordetzeko gero erreproduzitzeko.

… //Hemen guk nahi ditugunak jarriko ditugu

//OBJEKTUAK

int a=0//’a’ objetua nota berriro kalibratu ahal izateko.

//MOTORES

int ENA=5; // 5 pina motor kontrolagailuaren ENA pinera konektatuta dago.

int IN1=6; //6 pina motor kontrolagailuaren IN1 pinera konektatuta dago.

...

//SERVOMOTORES

Servo servo1; // WALL-E BURUA //

Servo servo2; // WALL-E ESKUIN ESKUA

Servo servo3; // WALL-E EZKER ESKUA

//MOBIMIENTUA PROGRAMATUAK+++++++++++++++++++++++++++++++++++++++++++++++++++++++

//BEGIAK

//BEGIAK PIZTU

void ojosencendidos(){ //Mugimenduak objetuetan gordeko ditugu.

digitalWrite(ledojos, 255);

}

Page 15: Arduino wall e - dok

Wall-e Arduino

14

//CABEZA

//0 GRADOS

void cabeza0(){

servo1.write(0);

//BRAZO DERECHO

//O GRADOS

int brazoderecho0(){

servo2.write(0);

}

//BRAZO IZQUIERDO

//0 GRADOS

int brazoizquierdo0(){

servo3.write(0);

}

//ULTRASONIDO

void ultrasonido(){

digitalWrite(trigger,HIGH);

delayMicroseconds(10);

digitalWrite(trigger,LOW);

distancia=pulseIn(echo,HIGH);

Serial.println(distancia);

}

//MOTORES

int adelante(){

digitalWrite(IN1,HIGH);

digitalWrite(IN2,LOW);

digitalWrite(IN3,HIGH);

digitalWrite(IN4,LOW);

delay(2000);

digitalWrite(IN1,LOW);

digitalWrite(IN2,LOW);

digitalWrite(IN3,LOW);

digitalWrite(IN4,LOW);

}

int adelante1(){

digitalWrite(IN1,HIGH);

digitalWrite(IN2,LOW);

digitalWrite(IN3,HIGH);

digitalWrite(IN4,LOW);

delay(2000);

}

//GESTOS

//RESET

int reset(){

ojosencendidos();

servo1.write(90);

servo2.write(0);

servo3.write(180);

}

Page 16: Arduino wall e - dok

Wall-e Arduino

15

//BAILE

int baile(){

for (a=nota1;a<=nota1;a++)

tone(A2, a, duracion);

servo1.write(90);

servo2.write(0);

servo3.write(90);

delay(300);

}

//INICIO==============================================================================

void setup()

{

//PINES--------------------------------------------------------------------------------------------------------------------------------

//COMUNICACION SERIAL BLUETOOTH

Serial1.begin(9600); //

//ULTRASONIDO

pinMode(trigger,OUTPUT); //’trigger’ objektua OUTPUT moduan ezarriko du

pinMode(echo,INPUT); //’echo’ objektua INPUT moduan ezarriko du

//LED OJOS

pinMode(ledojos, OUTPUT); //’ledojos’ objektua OUTPUT moduan ezarriko du

digitalWrite(ledojos, HIGH); //’ledojos’ objektuari HIGH balorea emango diogu

//BUZZER

pinMode (buzzer, OUTPUT); //’buzzer’ objektua OUTPUT moduan ezarriko du

//SERVOMOTORES

servo1.attach(2); //’servo1’ objektua 2 pinean ezartzen du

servo2.attach(3); //’servo2’ objektua 3 pinean ezartzen du

servo3.attach(4); //’servo3’ objektua 4 pinean ezartzen du

//MOVIMIENTO DE INICIO-------------------------------------------------------------------------------------------------------

//DESPERTAR

despertar(); //Hau piztean Wall-e egingo dituen mobimentuak da.

//SALUDO AL INICIO

saludo(); //Hau piztean Wall-e egingo dituen mobimentuak da.

//MOTORES

pinMode(ENA,OUTPUT);

pinMode(IN1,OUTPUT);

digitalWrite(ENA,HIGH); //Motorrak aktibatuko ditugu

digitalWrite(ENB,HIGH); //Motorrak aktibatuko ditugu

}

Page 17: Arduino wall e - dok

Wall-e Arduino

16

//COMANDOS=========================================================================

void loop()

{

while (Serial1.available()){

char dato= Serial1.read();

switch(dato) {

case'h': {

ojosencendidos(); //Begiak piztuko ditu

break;

}

//CABEZA

case'i': {

cabeza180(); //Burua 180º mugituko du

break;

}

//BRAZO DERECHO

case'k': {

brazoderecho0(); //Eskuina 0º mugituko du

break;

}

//BRAZO IZQUIERDO

case'b': {

brazoizquierdo180(); //Ezkerra 180º mugituko du

break;

}

//RESET

case'r': {

reset();//Eskuak jaitsi, burua zentratu eta begiak piztuko ditu

break;

}

//MOTORES

//ADELANTE

case'w': {

adelante();//Aurrera mugituko da

break;

}

//BAILE

case'0': {

baile();//Dantzatu egingo du

break;

}

Page 18: Arduino wall e - dok

Wall-e Arduino

17

//AUTONOMIA DEL WALL-E

case'1': { //’1’ sakatzean:

while(var < 200){ //While funtzioa irekiko du var objektua 200 baino txikiagoa bada

ultrasonido(); //Lehenengo ultrasoinuarekin distantzia neurtuko dugu

if (distancia>1000) { //’distancia’ objektua 1000 baino handiagoa bada:

int numeroaleatorio = random(30); //’numeroaleatorio’ objektua sortuko dugu eta honek 0 eta 29

zenbakien arteko zenbaki bat gordeko du.

Serial.println(numeroaleatorio); //’numeroaleatorio’ objektua inprimatuko dugu

switch (numeroaleatorio) { //switch funtzioa irekiko du ‘numeroaleatorio’ objektuarekin

case 0: //’numeroaleatorio’ 0 izatean:

atzera1(); //Wall-e atzera joango da.

break;

case 1:

case 2:

case 3:

case 4:

case 5:

case 6:

case 7:

case 8:

case 9:

case 10:

case 11:

case 12:

case 15:

reset();//Errobotaren eskuak eta burua zentratuko dira eta begiak piztuko ditu.

adelante1(); //Wall-e aurrera joango da.

break;

case 16:

case 17:

case 18:

case 19:

case 20:

case 21:

case 22:

case 25:

adelante1(); //Wall-e aurrera joango da.

break;

case 13:

case 23:

derecha1();//Wall-e eskuinera joango da.

break;

case 14:

case 24

izquierda1();//Wall-e ezkerrera joango da.

break;

Page 19: Arduino wall e - dok

Wall-e Arduino

18

case 26:

case 27:

case 28:

case 29:

quieto();//Wall-e gelditu egingo da.

break;

}

int numeroaleatorio1=random(30,60); //’numeroaleatorio1’ objektua sortuko dugu eta honek 30 eta

59 zenbakien arteko zenbaki bat gordeko du.

Serial.println(numeroaleatorio1);

delay(1000);

switch (numeroaleatorio1){ // switch funtzioa irekiko du ’numeroaleatorio1’ objektuarekin

case 30:

case 31:

case 34:

case 35:

case 36:

case 37:

case 39:

case 41:

case 42:

case 45:

case 46:

case 47:

case 48:

case 49:

case 50:

case 51:

case 54:

case 55:

case 56: // Hauek ez dute ezer egiten

delay(1000);

break;

case 52: //Burua 0º mugituko du

cabeza0();

break;

case 43: //Burua 180º mugituko du

cabeza180();

break;

case 53: //Eskuina 90º mugituko du

brazoderecho90();

break;

Page 20: Arduino wall e - dok

Wall-e Arduino

19

case 32: //Eskuina 180º mugituko du

brazoderecho180();

break;

case 38: //Ezkerra 90º mugituko du

brazoizquierdo90();

break;

case 57: //Ezkerra 180º mugituko du

brazoizquierdo180();

break;

case 58: //Eskuak gora mugituko ditu

manosarriba();

break;

case 59: //Eskuak behera mugituko ditu

manosabajo();

break;

case 40: //Eskuarekin agurra egingo du.

saludo();

break;

case 44: //Dantza egingo du

baile();

break;

}

}

else //’distancia’ objetua 1000 baino txikiagoa bada:

{

{

izquierda1(); //Ezkerretara joango da

}

}

}

}

}

}

}

Page 21: Arduino wall e - dok

Wall-e Arduino

20

Bibliografia www.arduino.cc: http://www.arduino.cc/es/

Sarrera: http://arduino.cc/es/Guide/Introduction

Lengoaia: http://arduino.cc/es/Reference/HomePage o Egiturak:

setup http://arduino.cc/es/Reference/Setup loop: http://arduino.cc/es/Reference/Loop if: http://arduino.cc/es/Reference/If if/else: http://arduino.cc/es/Reference/Else

o Aldagaiak: Objektuak:

int: http://arduino.cc/es/Reference/Int

void: http://arduino.cc/es/Reference/Void

switch/case: http://arduino.cc/es/Reference/SwitchCase

break: http://arduino.cc/es/Reference/Break o Funtzioak:

Pin digitalak

Pin moduak: http://arduino.cc/es/Reference/PinMode

digitalWrite: http://arduino.cc/es/Reference/DigitalWrite

digitalRead: http://arduino.cc/es/Reference/DigitalRead Pin analogikoak

analogRead: http://arduino.cc/es/Reference/AnalogRead

analogWrite: http://arduino.cc/es/Reference/AnalogWrite

Moduloak:

o Buzzer: http://arduino.cc/es/Reference/Tone

o Serbomotoreak: http://arduino.cc/es/Reference/Servo

Write: http://arduino.cc/es/Reference/ServoWrite

Attach: http://arduino.cc/es/Reference/ServoAttach

Erabilitako Objetuak

arduino Leonardo: http://www.ebay.es/itm/Arduino-compatible-Revision-3-R3-Leonardo-with-Free-USB-Cable-/161248175039?pt=UK_BOI_Electrical_Components_Supplies_ET&hash=item258b23e3bf&_uhb=1#shpCntId

Ultrasoinu Moduloa: http://www.ebay.es/itm/Arduino-Modulo-Ultrasonico-HC-SR04-Sensor-Distancia-Medidor-Transductor-D1-/221333788165?pt=LH_DefaultDomain_186&hash=item3388859605&_uhb=1

Motor Kontrolagailua: http://www.ebay.es/itm/Modulo-de-servo-motor-controlador-conductor-L298N-arduino-PIC-step-D1-/231180228189?pt=LH_DefaultDomain_186&hash=item35d36a565d&_uhb=1

Pila kablea: http://www.ebay.es/itm/LOTE-KIT-PILA-BOToN-CR1220-3V-PORTAPILAS-CLIP-BATERIA-ELECTRONICA-ARDUINO-/261420369589?pt=LH_DefaultDomain_186&hash=item3cddde46b5&_uhb=1