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.| 3410602 Visitas (desde Dic. 2011), hoy: 229 Visitas 515 Pag. Vistas , ultimos 36 dias: 10080 Visitas. 47992 Pag. Vistas. Tu IP: 3.17.184.90
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 (17)

Arduino Robot Ps

Una vuelta de tuerca…

Habiendo programado nuestro pequeño robot para sus “primeros pasos” el peque de la casa me ha preguntado: “¿y por que no puedo usar el mando de la tele para moverlo?”

A lo que he respondido y por que no?

Me he puesto manos a la obra, y en lugar de utilizar el mando del TV, me he dicho, “y si usamos directamente el teléfono por bluethooth y nos evitamos las interferencias infrarrojas y poder usarlo en la calle con un amplio radio de alcance? …

Aquí la solución:

0Image00001

Un modulo BT HC-05 para el arduino (ebay 1,65€)

Antes de implementar el programa definitivo, debemos probar el funcionamiento del Arduino con el puerto serie virtual que se genera en la comunicación entre el programa y la placa Arduino, para ello, utilizaremos un nuevo código, que nos permitirá revisar las ordenes que enviamos desde el puerto serie de la aplicación y verificar el movimiento en el robot.

Elevamos el robot del suelo para que queden las ruedas en el aire y enviamos el siguiente programa:

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

  Tutorial: Robot Ps
  Autor: www.pesadillo.com - 12 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.
  PRIMERA PARTE: Mediante la consola de puerto serie del programador Arduino (monitor serie) enviaremos los
  comandos para verificar el funcionamiento del programa sobre el Arduino Robot Ps

 ********************************************************************************************/
#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

char Bluetooth; //crear variable que almacena los datos recibidos por el puerto serie
String inputString=""; //definimos a nulo la cadena de texto

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);
   Serial.begin(9600);   // set the baud rate to 9600, same should be of your Serial Monitor
}

//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
// La nuestra utiliza los siguientes caracteres:
//F = Arriba
//L = Izquierda
//R = Derecha
//D = Abajo
//E = Stop (aqui utilizaremos el pitido)

//Empieza el ciclo
void loop()
{

if(Serial.available()){//Si hay datos en el puerto serie
  while(Serial.available())
    {
      char inChar = (char)Serial.read(); //lee la entrada de datos
      inputString += inChar;        //compone la cadena como la recibe por el puerto serie
    }
    Serial.println(inputString); //damos saliada a la cadena de texto almacenada.
    while (Serial.available() > 0)
    { Bluetooth = Serial.read() ; }      // borrar buffer (datos almacenados) del puerto serie

  // avance
  if (inputString=="F") //En caso de recibir
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   //delay (tarea[i]); No utilizamos los delay ya que funcionara mientras reciba el comando por el puerto serie
  }
  //giro derecha
  if (inputString=="R")
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,HIGH);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   //delay (tarea[i]);
  }
  //giro izquierda
  if (inputString=="L")
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,HIGH);
   //delay (tarea[i]);
  }
  //atras
  if (inputString=="D")
  {
   digitalWrite(MOTOR1_CTL1,HIGH);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,HIGH);
   digitalWrite(MOTOR2_CTL2,LOW);
   //delay (tarea[i]);
  }
  //para
  if (inputString=="E")
  {
   digitalWrite(MOTOR1_CTL1,LOW);
   digitalWrite(MOTOR1_CTL2,LOW);
   digitalWrite(MOTOR2_CTL1,LOW);
   digitalWrite(MOTOR2_CTL2,LOW);
   pitido(2);
   //delay (tarea[i]);
  }

  inputString = "";//Poner vaciar variable
  //cerramos la recepcion datos serie
  }

//fin del ciclo del programa
}

Una vez realizada la programación, nos vamos a HERRAMIENTAS / MONITOR SERIE y enviamos las letras escogidas para efectuar los diferentes movimientos… veremos que el robot interpreta el comando recibido por el puerto serie y lo ejecuta.

En la siguiente entrada, realizaremos la conexión del modulo e implantaremos el nuevo programa.

En este punto, he de mencionar que todo lo publicado hasta ahora en este “paso a paso” funciona perfectamente, intentar utilizar códigos de terceros o recopilados de foros me ha llevado a callejones sin salida y pérdidas de tiempo.

Escribe un comentario

Tu comentario