Monday, June 1, 2015

Teste - comunicação bluetooth - 2ª tentativa

Uma nova tentativa de comunicação bluetooth com Arduino, após orientação do nosso colega de classe Vinicius Bazan: fazer o reset manual do módulo Bluetooth (curto do pino 5 - Reset - com o pino 1 - 3.3V). Após o reset, foi possível reconfigurar o módulo usando a ferramenta BluetoothBee Setting Tool para Name: MKrules / PIN: 0233, e realizar a comunicação com o celular.

Como as portas RX e TX do Bluetooth Bee estão em nível 3.3V e as portas RX e TX do Arduino estão em 5V, é recomendável utilizar a XBEE shield como intermediário (nos primeiros testes, a conexão cruzada entre RX e TX foi feita diretamente. Felizmente, não houve nenhum dano irreversível). Portanto, as conexões ficam:


Bluetooth Bee
XBEE Shield
Arduino UNO
3.3V (Pino 1)
(ligação direta Bluetooth Bee - Arduino)
3.3V
TX (Pino 2)
RX (Pino 0)
Pino 2
RX (Pino 3)
TX (Pino 1)
Pino 3
GND
GND
GND



Devido ao mal-funcionamento do BT do celular disponível no momento do teste, a comunicação BT será estabelecida entre o Arduino e o laptop, utilizando o software Tera Term como mostrado em http://www.instructables.com/id/Add-bluetooth-to-your-Arduino-project-ArduinoHC-06/?ALLSTEPS. Tal link também fornece um código .ino para, através de comandos recebidos por BT, acender e apagar um LED e fazer o retorno ao outro dispositivo, enviando uma string. O código foi alterado para a inserção de um potenciômetro e uso da biblioteca SoftwareSerial, o que permite a configuração de outras portas do Arduino para uso de comunicação serial. Assim, evita-se que a comunicação BT interfira na comunicação USB-Arduino, permitindo que uploads de novos códigos sejam feitos mesmo que o módulo BT esteja ligado.

//Alterações feitas em 31/05/2015

#include <SoftwareSerial.h>
#define POT  A0

SoftwareSerial bt(2,3); //RX,TX
char blueToothVal;           //value sent over via bluetooth
char lastValue;              //stores last state of device (on/off)
void setup()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
bt.begin(9600);
}
 
void loop()
{
 int potReading = analogRead(POT);
 if(bt.available())
 {//if there is data being recieved
   blueToothVal=bt.read(); //read it
 }
 if (blueToothVal=='n')
 {//if value from bluetooth serial is n
   digitalWrite(13,HIGH);            //switch on LED
   if (lastValue!='n')
     bt.println(F("LED is on")); //print LED is on
     Serial.println(F("LED is on")); //print LED is on
   lastValue=blueToothVal;
 }
 else if (blueToothVal=='f')
 {//if value from bluetooth serial is n
   digitalWrite(13,LOW);             //turn off LED
   if (lastValue!='f')
     bt.println(F("LED is off")); //print LED is on
     Serial.println(F("LED is off")); //print LED is on
   lastValue=blueToothVal;
 }
 else if (blueToothVal=='p')
 {
   bt.print("Pot: ");
   bt.println(potReading);
   lastValue=blueToothVal;
 }
 delay(1000);
}

Após emparelhar o módulo BT (MKrules) do Arduino ao laptop, abrir uma nova conexão serial no Tera Term na porta (COM#: Serial Padrão por link Bluetooth), onde # é o número da porta serial em que o módulo BT ficou emparelhado. Um indicativo de que a conexão está ocorrendo é um LED azul no módulo Bluetooth Bee.

Figura 1: LED azul em destaque. Tera Term aberto no laptop


Figura 2: digitando-se ‘n’ no Tera Tem, o LED verde acende e o Arduino envia a string “LED is on”

Figura 3: digitando-se ‘f’ no Tera Tem, o LED verde apaga e o Arduino envia a string “LED is off”

Figura 4: digitando-se ‘p’ no Tera Term, o Arduino envia o valor do potenciômetro (posição 1)

Figura 5: enquanto nenhuma outra tecla for apertada, o valor do potenciômetro (agora numa posição 2) continua sendo exibido.

Em suma, a programação do módulo Bluetooth dentro do Arduino funciona da mesma forma que comunicação serial (Serial.available(), Serial.print(), Serial.println(), Serial.read(). Portanto, a comunicação ocorrerá pelo envio de char (byte). O futuro aplicativo no App Inventor deverá receber a sequência de char, formar uma string e extrair as informações necessárias.

No comments:

Post a Comment