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.| 3410421 Visitas (desde Dic. 2011), hoy: 270 Visitas 688 Pag. Vistas , ultimos 36 dias: 10059 Visitas. 47945 Pag. Vistas. Tu IP: 18.221.145.52
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 (11)

Arduino Robot Ps

 

Seguimos con el código…

Con pequeñas variaciones vamos entendiendo el funcionamiento de la programación.

Sin modificar el chasis, intentaremos averiguar cual es la variable tiempo (delay) para conseguir el giro de 180º.

/*********************************************************************************************

  Tutorial: Arduino Robot Ps V1.0
  Autor: Pesadillo.com Agosto 2015

http://www.pesadillo.com

 ********************************************************************************************/
//esto es una linea comentada (no se ejecuta en el codigo)

/*
Esto es una frase comentada (no se ejecutaen el codigo)
*/

/*
En este ejercicio estudiamos el comportamiento de las variables "delay" para adaptarlas a los movimientos deseados.
En este caso giros de 90º y 180º
*/

#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2
#define MOTOR1_PWM   11 // EA

#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4
#define MOTOR2_PWM   10 // EB

#define MOTOR_DIR_FORWARD  0
#define MOTOR_DIR_BACKWARD   1

int speakerPin = 13;  // declare the speaker pin number

void setup()
{
  // Setup pins for motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);
   pinMode(MOTOR1_PWM,OUTPUT);

  // Setup pins for motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);
   pinMode(MOTOR2_PWM,OUTPUT);

   // set the speaker pin mode to output
   pinMode(speakerPin, OUTPUT);
}

void setSpeed(char motor_num, char motor_speed)
{
   if (motor_num == 1)
   {
      analogWrite(MOTOR1_PWM, motor_speed);
   }
   else
   {
      analogWrite(MOTOR2_PWM, motor_speed);
   }
}

void motorStart(char motor_num, byte direction)
{

   char pin_ctl1;
   char pin_ctl2;

   if (motor_num == 1)
   {
      pin_ctl1 = MOTOR1_CTL1;
      pin_ctl2 = MOTOR1_CTL2;
   }
   else
   {
      pin_ctl1 = MOTOR2_CTL1;
      pin_ctl2 = MOTOR2_CTL2;
   }

   switch (direction)
   {
     case MOTOR_DIR_FORWARD:
     {
       digitalWrite(pin_ctl1,LOW);
       digitalWrite(pin_ctl2,HIGH);
     }
     break;

     case MOTOR_DIR_BACKWARD:
     {
        digitalWrite(pin_ctl1,HIGH);
        digitalWrite(pin_ctl2,LOW);
     }
     break;
   }
}

void motorStop(char motor_num)
{
   setSpeed(motor_num, 0);
   if (motor_num == 1)
   {
     digitalWrite(MOTOR1_CTL1,LOW);
     digitalWrite(MOTOR1_CTL2,LOW);
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,LOW);
     digitalWrite(MOTOR2_CTL2,LOW);
   }
}

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);
  // espera 5 segundos

  // avance
  motorStart(1, MOTOR_DIR_FORWARD);
  setSpeed(1, 50);
  motorStart(2, MOTOR_DIR_FORWARD);
  setSpeed(2, 50);
  delay(1100);//2200 milisegundos = +- 1metro

  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro derecha 90g
  motorStart(1, MOTOR_DIR_FORWARD);
  setSpeed(1, 50);
  motorStart(2, MOTOR_DIR_BACKWARD);
  setSpeed(2, 50);
  delay(230);//= +-90g
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro izquierda 90g
  motorStart(2, MOTOR_DIR_FORWARD);
  setSpeed(2, 50);
  motorStart(1, MOTOR_DIR_BACKWARD);
  setSpeed(1, 50);
  delay(230);//= +-90g
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);//paramos 5 segundos

  // giro derecha 180g
  motorStart(1, MOTOR_DIR_FORWARD);
  setSpeed(1, 50);
  motorStart(2, MOTOR_DIR_BACKWARD);
  setSpeed(2, 50);
  delay(460);//=+-180grados
  //paro
  motorStop(1);
  motorStop(2);
  delay (5000);

  /*
  motorStart(1, MOTOR_DIR_BACKWARD);
  setSpeed(1, 200);
  motorStart(2, MOTOR_DIR_BACKWARD);
  setSpeed(2, 200);

  delay(2000);

  motorStart(1, MOTOR_DIR_FORWARD);
  setSpeed(1, 140);
  motorStart(2, MOTOR_DIR_BACKWARD);
  setSpeed(2, 140);

  delay(2000);

  motorStart(1, MOTOR_DIR_BACKWARD);
  setSpeed(1, 140);
  motorStart(2, MOTOR_DIR_FORWARD);
  setSpeed(2, 140);

  delay(2000);
 */

}

Observese que desechamos parte del código inicial, pues tratamos de averiguar los datos necesarios para el correcto giro de nuestro prototipo.

Escribe un comentario

Tu comentario