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:
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.|
|
![]() | 17 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |






















