Desde 1994 en la Red. La pagina de los aficionados a la electronica, informatica y otras curiosidades de la vida. No dudes en visitarnos.
Ahora 0 visitas.| 3408380 Visitas (desde Dic. 2011), hoy: 280 Visitas 698 Pag. Vistas , ultimos 36 dias: 10109 Visitas. 43961 Pag. Vistas. Tu IP: 13.59.82.167
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

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.

 

Escribe un comentario

Tu comentario