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 2 visitas.| 2994275 Visitas (desde Dic. 2011), hoy: 524 Visitas 6764 Pag. Vistas , ultimos 36 dias: 17034 Visitas. 100929 Pag. Vistas. Tu IP: 3.215.177.171
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 (12)

Arduino Robot Ps

Seguimos programando…

Esta vez, implementaremos un nuevo accesorio a nuestro robot. Un pequeño altavoz que nos proporcione información de en que punto del proceso se encuentra.

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

  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 ejecuta en el codigo)
*/

/*
En este ejercicio simplificamos variables no utilizadas (salidas analógicas para el control de velocidad) con respecto al código anterior.
Implementamos un altavoz (buzz) de PC para averiguar en que punto del proceso se encuentra nuestro Arduino Robot Ps. Nos informará con sonidos de lo que hace.

*/

#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 (aprobechamos que la masa esta al lado de este pin)

void setup()
{
  // Configuramos pines para motor 1
   pinMode(MOTOR1_CTL1,OUTPUT);
   pinMode(MOTOR1_CTL2,OUTPUT);

  // Configuramos pines para motor 2
   pinMode(MOTOR2_CTL1,OUTPUT);
   pinMode(MOTOR2_CTL2,OUTPUT);

   // Configuramos pin para salida (OUTPUT) del altavoz (speaker)
   pinMode(speakerPin, OUTPUT);
}

/*
void NOMBRE
son subprocesos a los que llamamos desde el programa principal
*/
void motorStart(char motor_num, byte direction)
{
  /*En este  void se reclaman dos variables (una de tipo "caracter (CHAR)" y otra de tipo BYT (byte) para especificar el numero de motor y direccion*/
   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)
{
  /*Este void "motorstop" detiene el motor que recibe entre parentesis (mediante una variable del tipo caracter ej. a,b,c,d,1,2,3...)*/
   if (motor_num == 1)//si el motor es el 1
   {
     digitalWrite(MOTOR1_CTL1,LOW);//ponemos a 0v (low) la salida
     digitalWrite(MOTOR1_CTL2,LOW);//ponemos a 0v (low) la salida del pin MOTOR1_CTL2 (nombre del pin que hemos puesto mas arriba y que se corresponde don el pon 9 del Arduino)
   }
   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+500);
     }

   delay(5000);
  // espera 5 segundos

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

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

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

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

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

}

Y así queda nuestra nueva implementación:
Image00011

Y ya podéis hacer la prueba… no olvidéis retocar los valores del bucle

   for (int i=500; i>200; i--)//restamos (de grave a agudo)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i+500);
     }

por

   for (int i=200; i<500; i++)//sumamos (de agudo a grave)
     {
        digitalWrite(speakerPin, HIGH);
        delayMicroseconds(i);
        digitalWrite(speakerPin, LOW);
        delayMicroseconds(i+500);
     }

u otras combinaciones (modificando los valores numéricos) para conseguir vuestro propio sonido.
Con este bucle creamos una onda cuadrada con una determinada frecuencia que es lo que interpreta el altavoz (speaker).
A valores mas pequeños, frecuencias mas altas = Sonidos más agudos.

Seguimos mañana.

Escribe un comentario

Tu comentario