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 5 visitas.| 4204309 Visitas (desde Dic. 2011), hoy: 1005 Visitas 1313 Pag. Vistas , ultimos 36 dias: 111531 Visitas. 119660 Pag. Vistas. Tu IP: 216.73.216.17
Que ando curioseando:
AutosuficienciaCosas de casaElectronicaEn InternetInformáticaMundo MisticoSin categoríaSociedadTe lo recomiendo

Electronica 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:

0Image00003 0Image00002

Una vez localizada la aplicación, y tras averiguar los comandos que envía la aplicación al modulo. Modificamos nuestro programa…

 
[php]
/*********************************************************************************************

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

[/php]

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:
[php]
/*********************************************************************************************

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

[/php]

Y… He aquí el resultado:

Un nuevo Juguete para los peques de la casa…

Escribe un comentario

Tu comentario