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

Arduino Robot Ps

A la conquista del Bluetooth (2) …

Ayer planteamos el esquema y este es el resultado:

0Image00003 0Image00002

Una vez localizada la aplicación, y tras averiguar los comandos que envía la aplicación al modulo. Modificamos nuestro programa…

 

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

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

http://www.pesadillo.com/

  Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el
  robot realice una tarea programada, controlaremos sus movimientos.
  SEGUNDA PARTE: Mediante comunicacion Bluethooth comunicaremos un telefono con el Arduino Robot Ps
  Utilizaremos la aplicacion de  http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
  
 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2


#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4


int speakerPin = 13;  // declaro pin para speaker

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11
#define RST 5
//#define KEY 4

SoftwareSerial BTSerial(RxD, TxD);

//char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
int inputString=0; //definimos 0 el valor de texto recibido por BT
 

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

  pinMode(RST, OUTPUT);
 // pinMode(KEY, OUTPUT);
  digitalWrite(RST, LOW);
  //digitalWrite(KEY, HIGH);
  digitalWrite(RST, HIGH);
  
  delay(500);
  
  BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);
  BTSerial.begin(9600);//Habilitamos puerto BT a la velocidad de 9600
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)  
   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);  
     }
}

// Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot
//Programa para control con el telefono: http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
// La nuestra utiliza los siguientes caracteres:
//A = Arriba
//B = Abajo
//C = Derecha
//D = Izquierda
//E = Stop
//F = Giro 360
//G = Giro -360

//Empieza el ciclo
void loop()
{
  
  if (BTSerial.available()){ //si hay datos en el BT
   /* COMENTAMOS ESTE TEXTO QUE NO UTILIZAMOS while(BTSerial.available())
    {
      char inChar = BTSerial.read(); //lee la entrada de datos caracter por caracter
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
      
    }
   BTSerial.println(inputString); //'Imprimimos la cadena de texto almacenada en el puerto en la variable*/
   inputString=BTSerial.read(); //almacenamos el valor del texto enviado
   
   
  
  //delay (50);
   // while (Serial.available() > 0)  
   // { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie
   

  // avance
  if (inputString=='A') //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH); 
  
  }

  //atras
  if (inputString=='B')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW); 
   
  } 

     //giro Derecha  
  if (inputString=='C')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (50); //giramos durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
  //giro Izquierda
  if (inputString=='D')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (50); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
 
  
  //para
  if (inputString=='E')
  {
   
         // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
  } 
 //giro derecha 360
  if (inputString=='F')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (490); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
  
       //giro izquierda 360  
  if (inputString=='G')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (490); 
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
 
   

   
  }
 //inputString = "";//Poner vaciar variable
}//fin del ciclo del programa

y se lo enviamos a la placa Arduino…

 

Retocamos el código y evitamos que el robot ande continuamente. De la siguiente forma, se controlará mejor el movimiento:

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

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

http://www.pesadillo.com/

  Experimento... Implementamos un sistema de control remoto por Bluetooth. En lugar de que el
  robot realice una tarea programada, controlaremos sus movimientos.
  SEGUNDA PARTE: Mediante comunicacion Bluethooth comunicaremos un telefono con el Arduino Robot Ps
  Utilizaremos la aplicacion de  http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
  En este codigo evitamos que se mueva continuamente y mandamos ordenes cortas para mejor control.
  
 ********************************************************************************************/
#define MOTOR1_CTL1  8  // I1
#define MOTOR1_CTL2  9  // I2


#define MOTOR2_CTL1  6  // I3
#define MOTOR2_CTL2  7  // I4


int speakerPin = 13;  // declaro pin para speaker

#include <SoftwareSerial.h>

#define RxD 10
#define TxD 11
#define RST 5
//#define KEY 4

SoftwareSerial BTSerial(RxD, TxD);

//char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
int inputString=0; //definimos 0 el valor de texto recibido por BT
 

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

  pinMode(RST, OUTPUT);
 // pinMode(KEY, OUTPUT);
  digitalWrite(RST, LOW);
  //digitalWrite(KEY, HIGH);
  digitalWrite(RST, HIGH);
  
  delay(500);
  
  BTSerial.flush();
  delay(500);
  BTSerial.begin(9600);
  BTSerial.begin(9600);//Habilitamos puerto BT a la velocidad de 9600
}

//pitidos (subproceso)
void pitido(char pitidos_num)
{
// el sibproceso pitido(3) Haría 3 pitidos)  
   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);  
     }
}

// Antes de nada, obtenemos la lista de comandos de la aplicacion para manejar el robot
//Programa para control con el telefono: http://www.hobbyprojects.com/bluetooth-device-control/android-bluetooth-robo-remote-control-project.html
// La nuestra utiliza los siguientes caracteres:
//A = Arriba
//B = Abajo
//C = Derecha
//D = Izquierda
//E = Stop
//F = Giro 360
//G = Giro -360

//Empieza el ciclo
void loop()
{
  
  if (BTSerial.available()){ //si hay datos en el BT
   /*while(BTSerial.available())
    {
      char inChar = BTSerial.read(); //lee la entrada de datos caracter por caracter
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
      
    }
   BTSerial.println(inputString); //'Imprimimos la cadena de texto almacenada en el puerto en la variable*/
   inputString=BTSerial.read(); //almacenamos el valor del texto enviado
   
   
  
  //delay (50);
   // while (Serial.available() > 0)  
   // { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie
   

  // avance
  if (inputString=='A') //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH); 
     delay (300); //durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  }

  //atras
  if (inputString=='B')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW); 
      delay (300); //durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 

     //giro Derecha  
  if (inputString=='C')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (50); //giramos durante este tiempo.
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
  //giro Izquierda
  if (inputString=='D')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (50); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
 
  
  //para
  if (inputString=='E')
  {
   
         // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
  } 
 //giro derecha 360
  if (inputString=='F')
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   delay (490); 
      // paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
  } 
  
       //giro izquierda 360  
  if (inputString=='G')
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   delay (490); 
      //paramos motores
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW); 
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);  
  } 
  
 
   

   
  }
 //inputString = "";//Poner vaciar variable
}//fin del ciclo del programa

Y… He aquí el resultado:

Un nuevo Juguete para los peques de la casa…

Escribe un comentario

Tu comentario