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.
Tuitear 1.915 Veces leído 0 comentarios |
17 septiembre 2015 en Electronica | tags: Arduino, Cursos, Electronica |