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 4 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 (14)

Arduino Robot Ps

Seguimos probando…

Siguiendo con el objetivo de simplificar las ordenes de mando para nuestro pequeño robot, nos hemos puesto las manos a la obra y hemos llegado a una simplificación interesante:

 

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

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 Agosto 2015

http://www.pesadillo.com/

  Implementamos altavoz para proporcionar pitidos de señalizacion. Simplificamos los giros en motores.
  Simplificamos codigo enviando a los subprocesos los tiempos de ejecución del comando.

 ********************************************************************************************/
#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); 
}


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)
{
   if (motor_num == 1)
   {
     digitalWrite(MOTOR1_CTL1,LOW);
     digitalWrite(MOTOR1_CTL2,LOW);     
   }
   else
   {
     digitalWrite(MOTOR2_CTL1,LOW);
     digitalWrite(MOTOR2_CTL2,LOW);     
   }
}


//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);  
     }
}


// avance
void avanza(int avanza_num) //seguimos con el SUBPROCESO "avanza" al que le pedimos un valor numerico (INT)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH); 
 delay (avanza_num);//Aplicamos el valor numerico obtenido entre parentesis 
}  

void para(int para_num)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,LOW);
 pitido(2);
 delay(para_num);
}  

//giro derecha
void girad(int girad_num)
{
 digitalWrite(MOTOR1_CTL1,LOW);
 digitalWrite(MOTOR1_CTL2,HIGH);
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW);
 delay (girad_num);  
}   

//giro izquierda  
void girai(int girai_num)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,LOW);
 digitalWrite(MOTOR2_CTL2,HIGH);
 delay (girai_num);   
} 

//atras
void atras(int atras_num)
{
 digitalWrite(MOTOR1_CTL1,HIGH);
 digitalWrite(MOTOR1_CTL2,LOW); 
 digitalWrite(MOTOR2_CTL1,HIGH);
 digitalWrite(MOTOR2_CTL2,LOW); 
 delay (atras_num);  
} 
  

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); 
        
     }
    //fin silvido 
   delay(5000);// espera 5 segundos

//He aqui el código simplificado con los comandos del anterior desarrollo:
  
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);
//Final

// Como se observa muchisimo mas simple
pitido(3);
delay (3000);
}

El próximo día rizaremos más el rizo y conseguiremos un nuevo objetivo.

Escribe un comentario

Tu comentario