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:
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…
Tuitear 2.260 Veces leído 0 comentarios |
4 octubre 2015 en Electronica | tags: Arduino, Cursos |