Siguenos en ...

Google+facebooktwitter

youtubepinterest RSS aquihayapuntes

Últimos Tutoriales

Licencia

Creative Commons

 

Todo el contenido de este sitio está bajo una licencia de Creative Commons

 

Comunicación Bluetooth con los módulos HC-05

 

 

4º Ejemplo: Comunicación Bluetooth entre dos Microcontroladores

 

Este último ejemplo consiste en controlar un motor paso a paso unipolar por medio de Bluetooth. El módulo que se conecta como master al PIC es el que recibe los comandos para el control del motor, el receptor conectado como esclavo a otro PIC recibe las instrucciones para gobernar un pequeño motor paso a paso (28BYJ-48).

 

Esquema del circuito:

 

Esquema conexión dos PICs por Bluetooth

 

Fotos de la Demo:


Comunicación Bluetooth entre dos PICs

 

HC-05 Master PIC

 

HC-05 Esclavo PIC

 

Código fuente de los PICs:

 

  • Maestro:

 
///////////////////////////////////////////////////////////////////////// 
// Ejemplo (4) HC-05 Configurado como Maestro y conectado          
// a un PIC a través del puerto serie.                                                      
// Autor: Biblioman                                                                                    
// www.aquihayapuntes.com                                                                 
///////////////////////////////////////////////////////////////////////// 
 
#include <16F877.h> 
#device ICD=TRUE 
#fuses HS,NOWDT,NOPROTECT,NOLVP 
#use delay(clock=20000000) 
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) 
 
#bit DERECHA = 0x08.0 
#bit MARCHA = 0x08.1 
#bit RAPIDO = 0x08.2 
#bit PASO = 0x08.3 
 
void main(void) 
{ 
  
 while(TRUE){ 
   
   
   if ((MARCHA==0)&&(DERECHA==0)&&(RAPIDO==0)&&(PASO==0)){ 
      printf("a");//Motor parado 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==0)&&(RAPIDO==0)&&(PASO==1)){ 
      printf("b");//Marcha Manual lenta izquierda 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==0)&&(RAPIDO==1)&&(PASO==0)){ 
      printf("c");//Motor parado 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==0)&&(RAPIDO==1)&&(PASO==1)){ 
      printf("d");//Marcha manual rápida izquierda 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==1)&&(RAPIDO==0)&&(PASO==0)){ 
      printf("e");//Motor parado 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==1)&&(RAPIDO==0)&&(PASO==1)){ 
      printf("f");//Marcha manual lenta derecha 
       delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==1)&&(RAPIDO==1)&&(PASO==0)){ 
      printf("g");//Motor parado 
      delay_ms(500); 
      } 
   if ((MARCHA==0)&&(DERECHA==1)&&(RAPIDO==1)&&(PASO==1)){ 
      printf("h");//Marcha manual rápida derecha 
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==0)&&(RAPIDO==0)&&(PASO==0)){ 
      printf("A");//Marcha Automática lenta izquierda  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==0)&&(RAPIDO==0)&&(PASO==1)){ 
      printf("B");//Marcha Automática lenta izquierda 
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==0)&&(RAPIDO==1)&&(PASO==0)){ 
      printf("C");//Marcha Automática rápida izquierda  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==0)&&(RAPIDO==1)&&(PASO==1)){ 
      printf("D");//Marcha Automática rápida izquierda  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==1)&&(RAPIDO==0)&&(PASO==0)){ 
      printf("E");//Marcha Automática lenta derecha  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==1)&&(RAPIDO==0)&&(PASO==1)){ 
      printf("F");//Marcha Automática lenta derecha  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==1)&&(RAPIDO==1)&&(PASO==0)){ 
      printf("G");//Marcha Automática rápida derecha  
      delay_ms(500); 
      } 
   if ((MARCHA==1)&&(DERECHA==1)&&(RAPIDO==1)&&(PASO==1)){ 
      printf("H");//Marcha Automática rápida derecha  
      delay_ms(500); 
      } 
  } 
 } 
 

  • Esclavo:

 
///////////////////////////////////////////////////////////////////////// 
// Ejemplo (4) HC-05 Configurado como esclavo y conectado            
// a un PIC a través del puerto serie.                                                       
// Autor: Biblioman                                                                                    
// www.aquihayapuntes.com                                                                   
///////////////////////////////////////////////////////////////////////// 
 
#include <16F877.h> 
#device ICD=TRUE 
#fuses HS,NOWDT,NOPROTECT,NOLVP 
#use delay(clock=20000000) 
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) 
#use FAST_IO(B) 
#use FAST_IO(C) 
#byte FASES= 0x06 
int velocidad=300; 
void GiroDerecha(){ 
    FASES=0b000110; //paso 1 
    delay_ms(velocidad); 
    FASES=0b000011; //paso 2 
    delay_ms(velocidad); 
    FASES=0b001001; //paso 3 
    delay_ms(velocidad); 
    FASES=0b001100; // paso 4 
    delay_ms(velocidad);  
} 
void GiroIzquierda(){ 
    FASES=0b001100; //paso 1 
    delay_ms(velocidad); 
    FASES=0b001001; //paso 2 
    delay_ms(velocidad); 
    FASES=0b000011; //paso 3 
    delay_ms(velocidad); 
    FASES=0b001100; // paso 4 
    delay_ms(velocidad);  
} 
void main(void) 
{ 
 char valor=0; 
 SET_TRIS_B(0x00); 
 while(TRUE){         
  if(kbhit()) 
          valor=getc(); 
      switch (valor){ 
      case 'a'://motor parado 
         FASES=0b000000; 
         break; 
          
      case 'b': //Marcha Manual Lenta Izquierda  
         velocidad=10; 
         GiroIzquierda();  
         break; 
          
      case 'c': //Motor parado 
         FASES=0b000000; 
         break;  
          
      case 'd': //Marcha manual rápida izquierda 
         velocidad=3; 
         GiroIzquierda();  
         break;     
          
       case 'e': //Motor parado 
         FASES=0b000000; 
         break;   
          
      case 'f': //Marcha manual lenta derecha 
         velocidad=10; 
         GiroDerecha(); 
         break;     
          
      case 'g': //Motor parado 
         FASES=0b000000; 
         break;   
       
      case 'h': //Marcha manual rápida derecha 
         velocidad=3; 
         GiroDerecha();  
         break;    
          
      case 'A': //Marcha Automática lenta izquierda  
         velocidad=10; 
         GiroIzquierda();  
         break;    
       
      case 'B': //Marcha Automática lenta izquierda  
         velocidad=10; 
         GiroIzquierda();  
         break;    
          
      case 'C': //Marcha Automática rápida izquierda  
         velocidad=3; 
         GiroIzquierda();  
         break;    
          
      case 'D': //Marcha Automática rápida izquierda  
         velocidad=3; 
         GiroIzquierda();  
         break;  
          
      case 'E': //Marcha automática lenta derecha 
         velocidad=10; 
         GiroDerecha();  
         break;   
      case 'F': //Marcha automática lenta derecha 
         velocidad=10; 
         GiroDerecha();  
         break;       
          
      case 'G': //Marcha automática rápida derecha 
         velocidad=3; 
         GiroDerecha();  
         break;         
        
      case 'H': //Marcha automática rápida derecha 
         velocidad=3; 
         GiroDerecha();  
         break;    
      case '\n': 
         break;    
          
      default:  
        velocidad=15;      
        break; 
        }  
    
  } 
 } 
 

 
El vídeo:
 

 
Nota (3): Las resistencia que van conectadas a los pines 32 y 31 y a los Leds indicadores del modo de funcionamiento del módulo son de 470 Ω en vez de los 10 KΩ que aparecen en los esquemas.
 
Nota (4): El pin UART_RXD (2) no tiene resistencia pull-up en el módulo HC-05 por lo que hay que habilitar la pull-up en el pin del PIC o poner una resistencia externa de 10 k tal y como se muestran en los esquemas.
 

Fuentes de información  

http://es.wikipedia.org/wiki/Bluetooth
http://www.wavesen.com/products.asp?pId=3
http://www.ccsinfo.com/
 
 
Y hasta aquí mis experiencias con los módulos HC-05 …espero que os sean de utilidad y como siempre espero vuestros comentarios, en el hilo del foro que trata sobre este tema, donde además iré incluyendo algunas cosas más.


 
Un saludo y hasta la próxima

 

© 2007-2017 AquiHayapuntes.com