Construye tu robot por menos de 20€ con Arduino. Arduino Robot Ps (15)
Arduino Robot Ps
Seguimos de lleno con la programación, entendiendo paso a paso, y evolucionando nuestro programa para conseguir simplificar las ordenes a enviar a nuestro pequeño robot.
Hemos dedicado 10 minutos diarios, y ya tenemos nuestro pequeño robot autónomo, realizando pequeños movimientos pre programados.
Seguimos programando…
Hemos pasado a la utilización del “array”… un comando que nos permitirá almacenar varios valores en una variable…
Lo entenderemos fácilmente con el codigo:
(código 7)
/********************************************************************************************* Tutorial: Robot Ps Autor: www.pesadillo.com - 12 Agosto 2015 http://www.pesadillo.com/ Modificamos codigo para porgramar movimientos y tiempos predifinidos para conseguir simplificar las ordenes de mando. Implementacion del "array" ********************************************************************************************/ #define MOTOR1_CTL1 8 // I1 #define MOTOR1_CTL2 9 // I2 #define MOTOR2_CTL1 6 // I3 #define MOTOR2_CTL2 7 // I4 #define MOTOR_DIR_FORWARD 0 #define MOTOR_DIR_BACKWARD 1 int speakerPin = 13; // declaro pin para speaker void setup() { // Setup pins for motor 1 pinMode(MOTOR1_CTL1,OUTPUT); pinMode(MOTOR1_CTL2,OUTPUT); // Setup pins for motor 2 pinMode(MOTOR2_CTL1,OUTPUT); pinMode(MOTOR2_CTL2,OUTPUT); // set the speaker pin mode to output pinMode(speakerPin, OUTPUT); } //pitidos void pitido(char pitidos_num) { for (int pip=0; pip<pitidos_num; pip++) { for (int i=300; i>0; i--) { digitalWrite(speakerPin, HIGH); delayMicroseconds(200); digitalWrite(speakerPin, LOW); delayMicroseconds(200); } delay (50); } } /* Tarea a realizar avanza(2000);//enviamos cuanto avanza para(2000);//enviamos cuanto para atras(2000);//enviamos cuanto atras... para(2000); girad(230);//= +-90g para(2000); girai(230);//= +-90g para(2000); girad(460);// giro derecha 180g para(2000); */ //comandos //definimos dos valores, comado y tiempode tarea (tarea) // array con mismo numero de valores (se corresponden) //tabla de comandos // 0 = parar // 1 = avanza // 2 = atras // 3 = giraderecha // 4 = giraizquierda int comando[10]={1,0,2,0,3,0,4,0,3,1}; int tarea[10]={1000,2000,1000,2000,230,1000,230,2000,460,1000}; //Empieza el ciclo void loop() { // usamos un bucle para hacer efecto silvido. for (int i=500; i>200; i--) { digitalWrite(speakerPin, HIGH); delayMicroseconds(i); digitalWrite(speakerPin, LOW); delayMicroseconds(i); } delay (5000);//esperamos 5 segundos después de silvido //comenzamos el cliclo del programa bucle //Este ciclo es el encargado de realizar cada orden almacenada en los dos arrays predefinidos //el que controla el movimiento y el tiempo de ese movimiento //definimos la variable numérica (INT) "i" con el valor cero, decimos que se ejecite mientras sea menor que 10 (i < 10) y vamos sumando uno (i++) for (int i = 0; i < 10; i++) { // avance if (comando[i]==1) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); delay (tarea[i]); } //giro derecha if (comando[i]==3) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,HIGH); digitalWrite(MOTOR2_CTL1,HIGH); digitalWrite(MOTOR2_CTL2,LOW); delay (tarea[i]); } //giro izquierda if (comando[i]==4) { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,HIGH); delay (tarea[i]); } //atras if (comando[i]==2) { digitalWrite(MOTOR1_CTL1,HIGH); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,HIGH); digitalWrite(MOTOR2_CTL2,LOW); delay (tarea[i]); } if (comando[i]==0) { digitalWrite(MOTOR1_CTL1,LOW); digitalWrite(MOTOR1_CTL2,LOW); digitalWrite(MOTOR2_CTL1,LOW); digitalWrite(MOTOR2_CTL2,LOW); pitido(2); delay (tarea[i]); } } //Una vez terminado el bucle "for" realizamos 3 pitidos y vuelve al comienzo del bucle infinito -void loop()- pitido(3); delay (3000); }
Como hemos visto anteriormente, una vez simplificada la acción de los motores, nos dedicamos a mejorar el programa simplificando la forma de enviar las ordenes a nuestro robot. En este caso, dos arrays “emparejados” se encargan almacenar los dos comando necesarios para la realización del movimiento.
Veremos un nuevo retoque el próximo día.
|
![]() | 15 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |