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 |





















