Wall-e arduinoa

Page 1

ARDUINO 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.


Wall-e Arduino

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

1


Wall-e Arduino

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.

2


Wall-e Arduino

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 Egitura

 

setup() (Hasiera) loop() (Begizta)

Sintaxia

  

; (Puntu eta koma) {} (Giltzak) // (Iruzkinak)

Kontrol Egiturak

     

Aldagaiak Constantes

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)

   

HIGH | LOW (Altua/Baxua) INPUT | OUTPUT (Sarrera/Irteera) true | false (Egia/Gezurra Constantes Numéricas

   

char (Karaktereak) int (Osoa) float (Komarekin) void (Hutsa)

Konbersioa   

char() int() float()

 

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

E/S Aurreratuak    

tone() noTone() shiftOut() pulseIn()

delay()

Ausazko Zenbakiak

= (Berdin)

random()

Komunikazioa

== (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 

pinMode() digitalWrite() digitalRead()

Denbora

Operadore Konparatiboak

    

  

E/S Analogikoak Tipos de Datos

Operadore Aritmetikoak 

Funtzioak E/S Digitalak

++ (Haunditu)

3

Serial


Wall-e Arduino

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.

4


Wall-e Arduino

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.

5


Wall-e Arduino

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.

6


Wall-e Arduino

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; } }

7


Wall-e Arduino

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; void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { int var = Serial.read(); switch (var) { case '0': digitalWrite(ledPin, HIGH); break; case '1': digitalWrite(ledPin, LOW); break; else digitalWrite(ledPin, HIGH); } } }

// ‘ledPin’ objetua 13. pin-a(LED-a) izango da.

//ondorengo kasuak (case) ‘var’ objetuarekin konparatuko ditu. //‘ledPin’ objetua HIGH balorera aldatuko da (LED-a piztuko da). //hacer algo cuando sea igual a 1 //‘ledPin’ objetua HIGH balorera aldatuko da (LED-a piztuko da).

//‘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); } void loop() { Serial.print("ASD"); Serial.println("ASD"); delay(1000); }

// Komunikazioa serie portutik irekiko du 9600 baudio-tara (abiadura)

// Serial portutik ‘ASDASDASD…’ bidaliko digu hitzak bata bestearen atzetik jarrita. // Serial portutik ‘ASD ASD ASD…’ bidaliko digu hitz bakoitza lerro bakarrean jarrita. // Segundo bateko delay bat jarriko diogu programa trabatuta ez geratzeko.

Serial.prin

Serial.println

8


Wall-e Arduino

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; } } } }

9


Wall-e Arduino

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; } } 0º } }

180º

10


Wall-e Arduino

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. Balore hauekin aurrera doa digitalWrite(IN2,LOW); //Lehen motorraren IN2 kableari LOW balorea jartzen dio. digitalWrite(IN3,HIGH); //Bigarren motorraren IN3 kableari HIGH balorea jartzen dio. Balore hauekin aurrera doa 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:

IN1 IN2 IN3 IN4

AURRERA HIGH LOW HIGH LOW

ESKUINERA LOW HIGH HIGH LOW

EZKERRERA HIGH LOW LOW HIGH

11

ATZERA LOW HIGH LOW HIGH

GELDIRIK LOW LOW LOW LOW


Wall-e Arduino

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.

12


Wall-e Arduino

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); } …

13


Wall-e Arduino //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); }

14


Wall-e Arduino //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 }

15


Wall-e Arduino //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; }

16


Wall-e Arduino //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;

17


Wall-e Arduino 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;

18


Wall-e Arduino 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 } } } } } } }

19


Wall-e Arduino

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-USBCable/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-DistanciaMedidor-Transductor-D1-/221333788165?pt=LH_DefaultDomain_186&hash=item3388859605&_uhb=1  Motor Kontrolagailua: http://www.ebay.es/itm/Modulo-de-servo-motor-controlador-conductor-L298Narduino-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-BATERIAELECTRONICA-ARDUINO-/261420369589?pt=LH_DefaultDomain_186&hash=item3cddde46b5&_uhb=1

20


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.