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…
|
|
![]() | 4 octubre 2015 en Electronica | tags: Arduino, Cursos |























