Buscar

Trabalho com Arduino Flávio

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Automação com Arduino via Bluetooth 
Micros Controladores
17/09/2020
Flavio Eduardo Caminski
 No mundo da automação em geral, é muito comum deparar-nos com controles remotos via celulares utilizando tecnologia BT. Isso é devido a 2 componentes básicos mas muito importantes:
1. Plataforma de desenvolvimento para OS ANDROID
2. Módulos BT baratos e acessíveis (Como por exemplo o HC-06)
como controlar as saídas de um Arduíno através de um celular de maneira a acionar qualquer equipamento elétrico eletrônico 
No mercado é comum encontrar módulos de BT 3.0  “Master-Slave” como o HC-05  e “Slaves” como o HC-06. 
Para esse projeto aqui, usarei um HC-06 que é bem popular e barato.
 O Módulo é alimentado com 5V o que faz com que ele seja facilmente conectado a um Arduino UNO por exemplo, para receber e transmitir informações a outros dispositivos como um PC ou um telefone celular. Seus pinos de transmissão e recepção podem ser conectados diretamente ao UNO, não havendo a necessidade de se utilizar divisores de tensão como vimos no caso do ESP8266.
Na prática, o HC-06 deve ser ligado diretamente aos pinos 0 e 1 do Arduino (Serial):
· HC06-Tx ao Arduino pin 0 (Rx)
· HC06-Rx ao Arduino pin 1 (Tx)
Ao se usar a entrada serial por HW do UNO é muito importante lembrar-se que o HC-06 não pode estar fisicamente conectado aos pinos 0 e 1 durante a carga do programa, isso porque o USB também usa essa mesma serial.  Uma maneira simples de se contornar esse probleminha (se seu projeto não utiliza muitos GPIOs do UNO) é usar uma porta serial por SW através da library SoftwareSerial (a mesma que usamos no caso do ESP8266). Em nosso caso aqui, usaremos os pinos 10 e 11 do UNO (Tx, Rx respectivamente).
O passo seguinte será escrever um código bem simples para se poder testar, programar e inicializar o HC-o6:
Para iniciar, incluir a Library Software Serial, definindo a variável “BT” como a nova porta serial.
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); // RX, TX
String command = ""; // Stores response of bluetooth device
 
void setup()
{
 Serial.begin(9600);
 Serial.println("Type AT commands!");
 BT.begin(9600); // HC-06 usually default baud-rate
}
 Em seguida vem o corpo principal do código que simplesmente espera por dados vindos do BT e uma vez que eles cheguem, os mesmos são escritos no Serial Monitor. Da mesma maneira, se podem enviar comandos AT desde o monitor serial até o módulo HC-06.
void loop()
{
if (BT.available()) // receive data if available.
{
while(BT.available()) // "keep receiving".
{
delay(10); //Delay added to make thing stable 
char c = BT.read(); //Conduct a serial read
command += c; //build the string.
} 
Serial.println(command);
command = ""; // No repeats
} 
if (Serial.available())
{
delay(10); 
BT.write(Serial.read());
}
}
 
Uma vez carregado o programa, faça alguns testes básicos. Por exemplo, envie “AT“, o módulo deverá responder “OK“. Pergunte a versão do Firmware: “AT+VERSION”, o módulo deverá responder, por exemplo: “linvorV1.8“. Com o HC-06 é possível definir um nome para o módulo por exemplo: “AT+NAMEMJRoBot_BT_HC06“.Mas diferente de outros módulos, voce não conseguirá saber qual é o nome que está definido para o módulo. Ao se enviar o comando anterior, o HC-06 responderá simplesmente: “OKsetname”. 
Em geral, o HC-o6 vem de fábrica com o password (ou PIN): 1234. Você poderá definir um novo com o comando AT: AT+PINxxxx onde ‘xxxx‘ serão 4 números.
Módulo conectado ao ARDUINO e funcionando.
Próximo passo baixar um aplicativo para celular Android.
Existem dois aplicativos que funcionam bem:
1. MJRoBot II BT Control
2. MJRoBot BT Digital Analog Voice Control
O App MJR0Bot II foi desenvolvido para comandar Robôs. Ele basicamente envia um caractere para cada comando de direção, modos AUTO/MANUAL, velocidade + e velocidade-. Alem de permitir o envio de mensagens em modo texto.
O App. MJRoBot Digital Analog Voice Control, envia comandos para acionamento digitais (ligar/desligar) tanto por botões como por voz e comandos numéricos para controle de PWMs (0-255).
Faça o Download de qualquer um dos dois Apps, vá ao set-up do celular e procure o modulo BT fazendo a conexão (entre com o PIN 1234 ou algum outro definido por você).  Isso deverá ser feito uma única vez, pois o celular guardará os dados de conexão. Uma vez que o celular e o HC-06 estão conversando, é só usar as APPs.
 A partir da segunda vez, ao lançar-se a app, o modulo BT estará desconectado. Acione o botão de BT, para que o app informe dos módulos disponíveis: Selecione o nome do módulo (No caso é esse com o HC-06 ao final).
 O App então mostrará “CONNECTED”, informando que está pareado com o HC-06. A partir daí, é só ir acionando os botões do APP e observar no Monitor Serial, o que é que o APP está enviando.
Por exemplo, acionando “ON” e “OFF” sequencialmente para os 4 devices, no caso da APP MJR0Bot BT Digi/Ana/Voice Ctrl, o resultado seria:
dev1on
dev1off
dev2on
dev2off
dev3on
dev3off
dev4on
dev4off 
Controlando as saídas do Arduino.
 circuito abaixo:
A idéia será usar o App MJRoBot Digi/Ana/Voice Ctrl para acender e apagar os LEDS e também controlar a intensidade dos mesmos.
Estaremos relacionando:
Device 1: 
"dev1on/dev1off" ==> LED Red ==> Pin 3 do UNO
Device 2: 
"dev2on/dev2off" ==> LED Yellow ==> Pin 5 do UNO
Device 3: 
"dev3on/dev3off" ==> LED Green==> Pin 6 do UNO
Device 4: 
"dev4on/dev4off" ==> LED Blue==> Pin 9 do UNO
Ou seja, ao acionar o botão “ON” relacionado ao “Device 1”, a mensagem de texto “dev1on”será enviada ao Arduino. Ao receber essa mensagem, o LED vermelho deverá acender e assim por diante.
Observe que os 4 pinos são pinos com capacidade de gerar PWM. Isso é importante para a utilização dos “sliders” da App, que enviarão valores para controlar a intensidade dos LEDs via PWM.
Dev A0: 
"r/ 0-255" ==> LED Red ==> Pin 3 do UNO
Dev A1: 
"y/ 0-255" ==> LED Yellow ==> Pin 5 do UNO
Dev A2: 
"g/ 0-255" ==> LED Green==> Pin 6 do UNO
Dev A3: 
"b/ 0-255" ==> LED Blue==> Pin 9 do UNO
No caso dos controles deslizantes (“sliders”), antes dos valores para controle do PWM (0 a 255), um caracter será enviado para que o Arduino saiba de que “slider” estará chegando o comando.
O código:
Setup inicial:
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11); //RX, TX respectively
String device;
const int dev1 = 3; //PWM
const int dev2 = 5; //PWM
const int dev3 = 6; //PWM
const int dev4 = 9; //PWM
void setup() 
{
 BT.begin(9600);
 Serial.begin(9600);
 
 pinMode(dev1, OUTPUT);
 pinMode(dev2, OUTPUT);
 pinMode(dev3, OUTPUT);
 pinMode(dev4, OUTPUT);
}
Podemos dividir a parte principal do programa em 4 blocos:
1. Espera dos comandos BT e construção da variável “device”
2. Acionamento dos LEDS a partir dos botões
3. Acionamento dos LEDS a partir de comandos de voz
4. Controle do intensidade dos LEDs via Sliders
void loop() 
{
 while (BT.available()) 
 {
 delay(10); //Delay added to make thing stable 
 char c = BT.read(); //Conduct a serial read
 device += c; //build the string.
 } 
 if (device.length() > 0) 
 {
 Serial.println(device); 
 // Button control:
 if (device == "dev1on") {digitalWrite(dev1, HIGH);}
 else if (device == "dev1off") {digitalWrite(dev1, LOW);}
 else if (device == "dev2on") {digitalWrite(dev2, HIGH);}
 else if (device == "dev2off") {digitalWrite(dev2, LOW);}
 else if (device == "dev3on") {digitalWrite(dev3, HIGH);}
 else if (device == "dev3off") {digitalWrite(dev3, LOW);}
 else if (device == "dev4on") {digitalWrite(dev4, HIGH);}
 else if (device == "dev4off") {digitalWrite(dev4, LOW);}
 else if (device == "ligar um" || device == "Ligar 1") {digitalWrite(dev1, HIGH);}
 else if (device == "desligar um" || device == "desligar 1") {digitalWrite(dev1, LOW);}
 else if (device == "ligar som" || device == "Ligar som") {digitalWrite(dev2, HIGH);}
 else if (device == "desligar som" || device == "Desligar som") {digitalWrite(dev2, LOW);}
 else if (device == "ligar TV" || device == "Ligar TV") {digitalWrite(dev3, HIGH);}
 else if (device == "desligarTV" || device == "Desligar TV") {digitalWrite(dev3, LOW);}
 else if (device == "ligar quarto" || device == "Ligar quarto") {digitalWrite(dev4, HIGH);}
 else if (device == "desligar quarto" || device == "Desligar quarto") {digitalWrite(dev4, LOW);}
 char colour = device[0]; 
 int value = device[2]; 
 Serial.print(" "); 
 Serial.println(value); 
 if ( colour == 'r') 
 { 
 analogWrite(dev1, value); // use value to set PWM for LED brigh
 } 
 if ( colour == 'y') 
 { 
 analogWrite(dev2, value); // use value to set PWM for LED brightness 
 } 
 if ( colour == 'g') 
 { 
 analogWrite(dev3, value); 
 } 
 if ( colour == 'b') 
 { 
 analogWrite(dev4, value); 
 }
 device=""; //Reset the variable
 } 
}

Continue navegando