Descrición
Nesta sección imos conectar dúas placas de arduino utilizando bluetooth.
Imos utilizar de forma simplificada o que se coñece por arquitectura mestre/escravo, na que un compoñente realiza labores de control, supervisión e coordinación (denominado mestre) e os restantes realizan tarefas específicas (denominados escravos), devolvendo os resultados ao compoñente mestre.
Os módulos Bluetooth máis comúns para Arduíno son o HC-05 (6 pins) que pode actuar como mestre ou como escravo e o HC-06 (4 pins) que só pode actuar como escravo.
Montaxe
Unha das placas, a que ten o HC-05 funcionará enviando datos cada vez que prememos nun pulsador e a outra, a que ten un HC-06, recibirá estes datos e actuará acendendo e apagando un LED.
Necesitamos:
- 2 placas arduino UNO
- Un módulo HC-05
- Un módulo HC-06
- 2 reistencias de 220Ω e 2 resistencias de 100Ω para os divisores de tensión
- Un pulsador e unha resistencia de 10kΩ
- Un led e unha resistencia de 220Ω
Protección do módulo bluetooth:
O pin de recepción de datos Rx do módulo bluetooth non debería superar unha voltaxe de 3,3V, así que se traballamos con 5V deberiamos protexer o módulo.
Se conectamos un divisor de tensión tal e como aparece na imaxe, con resistencias de 100Ω e 220Ω, ao pin Rx chegarán como máximo 3,4V cando o pin Tx do Arduíno envíe 5V, polo que evitaremos que o módulo se queime cando o utilizamos de maneira continua.
Hai módulos, coma o “CZ-HC-05” da marca “gomcu” e outros que se poden conectar a 5V, pero tamén funcionan a 3,3V. Se non tes a seguridade de que se pode conectar a 5V utiliza sempre un divisor de tensión.
Montaxe da placa 1:
- Arduino UNO: Ard-RX=pin 10 e Ard-TX pin 11
- Un módulo HC-05: bt-RX ao divisor de tensión, bt-TX a Ard-RX pin 10
- Divisor de tensión: Mirar esquema. Ard-TX= pin 11

- Un pulsador coa súa resistencia de 100kΩ ao pin 2.
Montaxe da placa 2:
- Arduino UNO: Ard-RX=pin 10 e Ard-TX pin 11
- Un módulo HC-06: bt-RX ao divisor de tensión, bt-TX a Ard-RX pin 10
- Divisor de tensión: Mirar esquema. Ard-TX= pin 11
- Un LED coa súa resistencia de 220Ω ao pin 13.
Configuración dos módulos bluetooth
Para que se podan comunicar entre si debemos configurar o HC-05 como mestre. O HC-06 sempre actúa coma escravo, así que non imos facer nada.
O noso módulo HC-05 non ten pulsador. Nese caso debemos conectar o pin Key a 3.3V Este pin utilízase para configurar o módulo bluetooth (cambiar o nome, contrasinal, parámetros, etc.)
Carga o seguinte programa no arduino e despois conecta o módulo HC-05:
/*
Configuración AT do módulo HC-05
Ard-RX= pin10 e Ard-TX pin11
bt-KEY a Ard-3,3V
bt-VCC a Ard-5V
bt-GND a Ard-GND
bt-RX a ard-TX (pin 11) a través dun divisor de tesnión
bt-TX a ard-RX (pin10)
*/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(10, 11); // RX | TX
const long baudRate = 38400; // velocidade de comunicación co BT
char c=' ';
boolean NL = true;
void setup() {
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
}
void loop(){
// Lemos desde o módulo BT e enviamos á consola
if (BTserial.available()) {
c = BTserial.read();
Serial.write(c);
}
// Lemos desde a consola e enviamos ao módulo BT
if (Serial.available()) {
c = Serial.read();
BTserial.write(c);
// O carácter ">" indica que se introduce un texto.
if (NL) { Serial.print(">"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}
Notarás que o LED do módulo latexa moi amodo. Iso é que esa en modo de configuración. Abre a consola e introduce os seguintes parámetros en negriña:
- AT (inicia a configuración. Recibirás un OK)
- AT+ROLE=1 (Establece o rol: role=1 mestre role=1 escravo. Recibirás un OK)
- AT+CMODE=1 (Configura o módulo para que se emparelle con calquera enderezo. Recibirás un OK)
- AT+NAME? (preguntamos o nome do módulo. Recibirás o nome, normalemnte NAME:HC-05)
- AT+NAME=HC-05 (Con esta instrución podes cambiar o nome. Nós imos deixar o mesmo)
- AT+PSWD? (devólvenos o enderezo, no noso caso devolve +PSWD:1234)
- AT+PSWD=1234 (Se queres cambiar o contrasinal usa este comando. Nós imos deixar o que ten)
- AT+UART? (devólvenos a velocidade de comunicación en baudios. Devolve +UART:9600,0,0. Imos deixalo así)
- AT+UART=4 (Para cambiar a velocidade: 1=>1200 baudios, 2=>2400, 3=>4800, 4=>9600 (por defecto), 5=>19200, 6=>38400, 7=>57600, 8=>115200)
Cando acabemos desconectamos co cable KEY e reiniciamos o módulo desconectándoo e volvendo a conectalo. Notarás agora que os latexos son de maior frecuencia. Iso significa que xa está en modo de comunicación.
Programas
Agora imos emparellalo co módulo HC-06 que está na placa que ten un LED. Cando prememos no pulsador o HC-05 envía un dato (‘a’ ou ‘b’) e escríbeo tamén na consola. O HC-06 interpreta ese dato para acender ou apagar o LED. Ao mesmo tempo envía unha resposta ao outro BT para indicar se o led está aceso ou apagado.
Imos chamar BT1 ao módulo HC-05 e BT2 ao módulo HC-06
Carga cada perograma na placa correspondente. O ideal é utilizar para cada programa unha versión diferente do IDE de arduino. Cando estén cargados abre a consola de cada programa e obsérvaas simultaneamente.
Programa 1. Placa con HC-05 e pulsador
#include <SoftwareSerial.h>
SoftwareSerial BT1(10, 11); // RX, TX
// Declaración de variables
const int pulsador=2;
int estado=0; // estado do pulsador
// Configuración:
void setup() {
BT1.begin(9600); // Comunicación con Bluetooth
Serial.begin(9600);
}
// LOOP
void loop() {
// Envío de datos de BT1 a BT2
if (digitalRead(pulsador)==HIGH){
while(digitalRead(pulsador)==HIGH); // Agarda mentres o pulsador esta premido
delay(30); // tempo para evitar o efecto rebote do pulsador
if (estado==0){
BT1.print('a'); // Envía o dato a
Serial.println("enviado a"); // Indica na consola que enviou oi dato
}
else{
BT1.print('b'); // Envía o dato b
Serial.println("enviado b");
}
estado=!estado; // cambia o estado do pulsador
}
// recepción de datos desde o BT2 a BT1
if (BT1.available()) {
char c = BT1.read();
Serial.write(c); // Imprime os datos recibidos na consola
}
}
Programa 2. Placa con HC-06 e LED
#include <SoftwareSerial.h>
SoftwareSerial BT2(10, 11); // RX, TX
// Declaración de variables
const int led=13;
// Configuración:
void setup() {
// Bluetooth serie
BT2.begin(9600); // Comunicación con Bluetooth
Serial.begin(9600); // Comunicación coa consola
pinMode(led, OUTPUT); // Led como saída
}
// LOOP
void loop() {
while(! BT2.available()); // Agarda a que haxa datos no buffer
char sinal = BT2.read(); // asigna eses datos á variable sinal
Serial.println(sinal); // imrime na consola
if( sinal =='a'){ // Se recibe "a" acende o LED
digitalWrite(led, HIGH);
Serial.println("Aceso"); // na consola aparece que esa aceso
BT2.write("led aceso"); // Envía "led aceso" ao módulo BT1
BT2.write("\r\n");
}
if( sinal =='b'){ // Se recibe "b" apaga o LED
digitalWrite(led, LOW);
Serial.println("Apagado");
BT2.write("led apagado");
BT2.write("\r\n");
}
}
Pode que os módulos tarden uns segundos en comunicarse entre si. Cando estean conectados, ao premer no pulsador dunha placa deberás poder acender e apagar o LED da outra e tamén ver o que sucede nas respectivas consolas.
Propostas
Adapta estes programas a calquera outro tipo de comunicación que queiras facer. Por exemplo, un sensor analóxico nunha placa indica os graos de xiro dun servo na outra, ou calquera outra cousa que necesites.