Archivo de la etiqueta: puerto serie

modúlo bluetooth HC-06 y arduino


Hoy os traemos una nueva entrada donde hablamos del económico módulo bluetooth HC-06 y su funcionamiento con Arduino. Dicho módulo trabajo mediante conexión serie con el Arduino, y se comunica con el exterior mediante bluetooth, ya sea a través de un teléfono móvil, ordenador, tablet, etc.

El módulo en cuestión es este, lo he comprado ya con regulación a 3.3V, así que lo puedo conectar directamente a los 5V del Arduino sin problema (Aunque Arduino ya nos proporciona 3.3V, es mejor tener los 5V por si lo usamos en un montaje exterior sin la placa Arduino):

Como véis solo disponemos de 4 pines que son los necesarios, por un lado tenemos VCC que irá conectado a los 5V del Arduino, por otro GND que ira al pin GND de Arduino, después tenemos TXD que irá conectado al pin RXD del Arduino y RXD que irá al pin TXD de Arduino.

En concreto yo he probado dicho módulo en un teléfono HTC Desire S y con el software BlueTerm, y en el portátil con el software Octoplus Terminal (que es un software de comunicación-monitor serie).

Para añadir el módulo al pc mediante bluetooth se debe hacer como un puerto serie virtual, los pasos que yo he seguido son los siguientes:

1º Buscamos los dispositivos bluetooth:

2º Seleccionamos Puerto Serie Virtual:

3º Configuramos el puerto COM que queramos:

4º Finalizamos el proceso de añadir el módulo bluetooth:

Aquí está el video del funcionamiento del módulo:

Y aquí unas capturas para la comunicación del software BlueTerm con el módulo:

Aquí os dejo el código de comunicación para placas Arduino Uno, Mega y Nano:

//Programa prueba modulo bluetooth GP-GC021 o HC-06
//Probado con programas para android Blueterm y Amarino 2.0
//Probado con bluetooth portatil y software Octoplus Terminal
//Programa realizado para www.tallerarduino.wordpress.com por Regata

void setup()
{
  //Pin donde conectamos el led para ver el correcto funcionamiento del modulo
   pinMode(13,OUTPUT);
   //Configuracion de la velocidad del modulo 9600 por defecto, se puede cambiar
   //mediante comandos AT
   Serial.begin(9600);
}

void loop()
{
   //Mientras el puerto serie del modulo bluetooth esta disponible
   while (Serial.available())
   {
      //Guardamos en la variable dato el valor leido por el modulo bluetooth
       char dato= Serial.read();
       //Comprobamos el dato
       switch(dato)
       {
         //Si recibimos una 'w' encendemos el led 13 y enviamos para mostrar
         //en Blueterm Led encendido
         case 'w':
         {
           digitalWrite(13,HIGH);
           Serial.println("Led encendido");
           break;
         }
         //Si recibimos una 'e' apagamos el led 13 y enviamos para mostrar
         //en Blueterm Led apagado
         case 'e':
         {
           digitalWrite(13,LOW);
           Serial.println("Led apagado");
           break;
         }
         //Si recibimos una 'r' encendemos y apagamos el led mediante la secuencia
         //programa y mostramos en Blueterm Led intermitente
         case 'r':
         {
           digitalWrite(13,HIGH);
           delay(200);
           digitalWrite(13,LOW);
           delay(200);
           digitalWrite(13,HIGH);
           delay(100);
           digitalWrite(13,LOW);
           delay(100);
           Serial.println("Led intermitente");
           break;
         }
       }       
   }
}

Aquí el código para la placa Arduino Leonardo:

//Programa prueba modulo bluetooth GP-GC021 o HC-06
//Programa para la placa ARDUINO LEONARDO
//Probado con programas para android Blueterm y Amarino 2.0
//Probado con bluetooth portatil y software Octoplus Terminal
//Programa realizado para www.tallerarduino.wordpress.com por Regata
 
void setup()
{
  //Pin donde conectamos el led para ver el correcto funcionamiento del modulo
   pinMode(13,OUTPUT);
   //Configuracion de la velocidad del modulo 9600 por defecto, se puede cambiar
   //mediante comandos AT
   Serial1.begin(9600);
}
 
void loop()
{
   //Mientras el puerto serie del modulo bluetooth esta disponible
   while (Serial1.available())
   {
      //Guardamos en la variable dato el valor leido por el modulo bluetooth
       char dato= Serial1.read();
       //Comprobamos el dato
       switch(dato)
       {
         //Si recibimos una 'w' encendemos el led 13 y enviamos para mostrar
         //en Blueterm Led encendido
         case 'w':
         {
           digitalWrite(13,HIGH);
           Serial1.println("Led encendido");
           break;
         }
         //Si recibimos una 'e' apagamos el led 13 y enviamos para mostrar
         //en Blueterm Led apagado
         case 'e':
         {
           digitalWrite(13,LOW);
           Serial1.println("Led apagado");
           break;
         }
         //Si recibimos una 'r' encendemos y apagamos el led mediante la secuencia
         //programa y mostramos en Blueterm Led intermitente
         case 'r':
         {
           digitalWrite(13,HIGH);
           delay(200);
           digitalWrite(13,LOW);
           delay(200);
           digitalWrite(13,HIGH);
           delay(100);
           digitalWrite(13,LOW);
           delay(100);
           Serial1.println("Led intermitente");
           break;
         }
       }       
   }
}

Aquí el código de configuración del módulo mediante comandos AT (el módulo no debe de estar emparejado):

/*Cambio de configuracion del modulo bluetooth mediante comandos AT
para ello el modulo no debe estar vinculado con ningun dispositivo
bluetooth, en mi caso el led debe estar en modo intermitente, si esta
vinculado aparece encendido de forma permanente*/

int contador=1;

void setup()
{
  //Led 13 para indicar final de operacion de configuracion AT
  pinMode(13,OUTPUT);
  //Velocidad del modulo bluetooth, 9600 por defecto
  Serial.begin(9600);
  //Apagamos el led 13
  digitalWrite(13,LOW);
}

void loop()
{
  //Es para realizar los cambios una sola vez
  while (contador==1)
  {
   //Indicacion de tiempo de espera iniciado
   digitalWrite(13,HIGH);
   /*Tiempo de espera de 15 segundos (prudencial, se puede cambiar, depende de lo que tardes
   en volver a conectarlos) para reconectar cables RX y TX del modulo bluetooth
   a la placa Arduino ya que para programar esta deben estar desconectados*/
   delay(15000);
   //Indicacion de tiempo de espera finalizado
   digitalWrite(13,LOW);
   //Iniciamos comunicacion con modulo bluetooth mediante comandos AT
   Serial.print("AT");
   //Espera de 1 segundo según datasheet entre envio de comandos AT
   delay(1000);
   //Cambio de nombre donde se envia AT+NAME y seguido el nombre que deseemos
   Serial.print("AT+NAMEtallerarduino");
   //Espera de 1 segundo según datasheet entre envio de comandos AT
   delay(1000);
   /*Cambio de la velocidad del modulo en baudios
   Se envia AT+BAUD y seguido el numero correspondiente:
   
   1 --> 1200 baudios 
   2 --> 2400 baudios
   3 --> 4800 baudios
   4 --> 9600 baudios (por defecto)
   5 --> 19200 baudios
   6 --> 38400 baudios
   7 --> 57600 baudios
   8 --> 115200 baudios
   
   */
   Serial.print("AT+BAUD4");
   //Espera de 1 segundo según datasheet entre envio de comandos AT
   delay(1000);
   //Configuracion Password, se envia AT+PIN y seguido password que queremos
   Serial.print("AT+PIN1234");
   //Espera de 1 segundo según datasheet entre envio de comandos AT
   delay(1000);
   //Mostramos tanto por puerto serial y por led la finalizacion de la
   //configuracion AT del modulo bluetooth
   Serial.print("OK Cambios Realizados correctamente");
   digitalWrite(13,HIGH);
   //Al tener contador=2 ya no se vuelve a repetir el while, a no ser que
   //se produzca un reset, por tanto comenzaria un nuevo cambio de configuracion
   contador=2;
  }  
}

Por último os dejo los datasheets y los programas arriba expuestos:

http://www.mediafire.com/?m76srfxzx4i0amc

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Envio de información de Arduino a VB6.0 y de VB6.0 a Arduino


Este post es para entender el funcionamiento de la comunicación de Arduino con Visual Basic 6.0 y viceversa. He realizado un pequeño programa que nos permite la comunicación desde Arduino a Visual Basic 6.0 mediante puerto serie y de Visual Basic 6.0 a Arduino.

Para comprobar la comunicación desde Arduino a Visual Basic 6.0 vamos a controlarla mediante un pulsador conectado al pin 12 de nuestro Arduino y para comprobar el envío desde Visual Basic 6.0 a Arduino disponemos de un led conectado al pin 13.

El programa en Visual Basic 6.0 también es bastante sencillo, cuenta con dos botones, dos labels, un control de puerto serie y un temporazidor (Timer), para realizar cada 20 ms, en este caso, una acción automáticamente. Aquí una imagen de la aplicación:

Aquí tenéis el código hecho en Visual Basic 6.0:

Option Explicit

Dim dato As String 'Variable para guarda el dato recibido por el puerto serie

'Botón de conectar
Private Sub cmdConectar_Click()
Serie.PortOpen = True   'Abrimos el puerto serie
cmdConectar.Enabled = False 'Deshabilitamos botón de conectar
cmdDesconectar.Enabled = True 'Habilitamos botón de conectar
Timer1.Enabled = True 'Habilitar temporizador
End Sub

'Botón de desconectar
Private Sub cmdDesconectar_Click()
Serie.PortOpen = False  'Cerramos el puerto serie
cmdConectar.Enabled = True 'Habilitamos botón de conectar
cmdDesconectar.Enabled = False 'Deshabilitamos botón de desconectar
Timer1.Enabled = False 'Deshabilitamos temporizador
End Sub

'Función que se realiza automáticamente cada 20 ms
Private Sub Timer1_Timer()
dato = Left(Serie.Input, 1) 'Cortamos el dato que nos llega por puerto serie
'para solamente tener un único caracter
pulsador.Caption = dato 'Asigamos ese dato a nuestra label para mostrar el estado
'del pulsador
Serie.Output = pulsador.Caption 'Enviamos al arduino nuestro dato recibido por puerto serie
End Sub

El código arduino es bastante básico pero que sirve perfectamente para entender la comunicación serie entre VB y Arduino:

//Programa de comunicación bilateral Arduino-Visual Basic 6.0
//Mediante un pulsador enviamos información a visual y desde visual
//dependiendo del estado de ese pulsador mandamos una orden a arduino
//para encender un lez o apagarlo.
//Programa realizado por Regata

int boton=12; //pulsador conectado en pin 12
int led=13;   //led conectado en pin 13

void setup()
{
Serial.begin(9600); //Configuración de puerto serie
pinMode(led,OUTPUT); //Indicamos led como salida
//NOTA: no hace falta indicar el pulsador como entrada
}

void loop()
{
Serial.print(digitalRead(boton),DEC); //Enviamos por puerto serie el
//estado del pulsador hacia VB
if (Serial.available())  //Comprobamos si hay datos desde VB hacia Arduino
{
byte dato; //Variable donde guardaremos el dato recibido por puerto serie
dato=Serial.read();  //Guardamos el dato recibido
switch(dato)
{
case '0': //Apagamos el led si recibimos '0' por puerto serie
digitalWrite(led,LOW);
break;
case '1': //Encendemos el led si recibimos '1' por puerto serie
digitalWrite(led,HIGH);
break;
}
}
delay(30);
}

Aquí tenéis el esquema de conexión:

Y por último os dejo un video del funcionamiento:

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal