Abrir portão eletrônico via bluetooh com palavra chave

Boa tarde amigos,
Primeiramente, gostaria de dizer que sou novato quando se trata de arduino. Tenho um conhecimento básico em eletrônica e trabalho com informática.
Enfim… iniciei um projeto para abrir e fechar o portão eletrônico de casa pelo celular (sempre esqueço o controle quando saio de taxi ou uber).
Comprei as peças necessárias (arduino uno, módulo bluetooth hc-06 e módulo relé 5v).
Fiz a montagem das peças de forma correta. Liguei o arduino nos 12v auxiliar da placa do portão e o relé na botoeira da placa.

Peguei em um site da internet um código para fazer funcionar o projeto e deu certo.

Agora vamos para o problema:
No código que baixei, o relé é acionado com apenas um caractere de comando. E eu sinto muita insegurança em deixar um sinal bluetooh disponível na frente da minha casa, onde basta baixar um app e descobrir um caractere para abrir o portão (por mais difícil que seja acontecer).
Então gostaria de utilizar uma palavra chave de pelo menos 8 caracteres para abrir o portão.
O problema é que tentei de várias formas com várias variáveis e o programa só funciona com apenas 1 caractere. Depois de muitas buscas pela internet e de ter quebrado cabeça sozinho, acabei desistindo e vim pedir ajuda aos colegas.
Alguém pode me ajudar com isso?
Segue abaixo o código que estou utilizando:

#include <SoftwareSerial.h>
#define RX 2
#define TX 3
#define RELE 7
SoftwareSerial bluetooth(RX, TX); // RX, TX

void setup() {
Serial.begin(9600); // Inicializa a serial nativa do Arduino
pinMode(RELE,OUTPUT); // Inicializamos o pino 7 do relé como output
digitalWrite(RELE,HIGH); // Inicializa a chave como desligada
bluetooth.begin(9600); // Inicializa a serial via software (Onde está conectado o nosso módulo bluetooth)
}

void verificaBluetooth(){ // Verifica se existe algum dado a ser lido da serial
if (bluetooth.available()){ // verifica se existem bytes a serem lidos da porta serial virtual
char dados = bluetooth.read(); // Lê 1 byte da porta serial
Serial.print(dados); // Mostra esse dado lido na porta serial
if (dados== ‘a’){ // Se o byte lido for igual a 0
digitalWrite(RELE,LOW); // Desliga a chave
}
else{
if (dados== ‘f’){ // Se o byte lido for igual a 1
digitalWrite(RELE,HIGH); // Liga a chave e aciona o motor
}
}
}
}

void loop (){
verificaBluetooth();
}

o que eu queria é trocar o “a” e o “f” por uma palavra ou número com pelo menos 8 caracteres, mas o arduino não aceita.
Desde já agradeço a atenção de todos.

Boas mano deparaste com um problema que nao e dificel de resolver posso dar-te uma maozinha e fazer aqui um codigo assim que o acabar ponho-o aqui diz-me se resultou!!!

Se poderes disponiblizar a app ou como ela faz o envio seria muito mais faacil pois nao sei como e feito o envio, contudo se souberes programar a app acho que chegas la.

Estas a enviar um 0 ou um a nao entendi.

Dizes que

digitalWrite(RELE,HIGH); // Inicializa a chave como desligada

depois dizes

digitalWrite(RELE,HIGH); // Liga a chave e aciona o motor

como estas a controlar o motor nas duas direçoes?

David_Pires:
Boas mano deparaste com um problema que nao e dificel de resolver posso dar-te uma maozinha e fazer aqui um codigo assim que o acabar ponho-o aqui diz-me se resultou!!!

Se poderes disponiblizar a app ou como ela faz o envio seria muito mais faacil pois nao sei como e feito o envio, contudo se souberes programar a app acho que chegas la.

Estas a enviar um 0 ou um a nao entendi.

Dizes que

digitalWrite(RELE,HIGH); // Inicializa a chave como desligada

depois dizes

digitalWrite(RELE,HIGH); // Liga a chave e aciona o motor

como estas a controlar o motor nas duas direçoes?

Boa noite amigo.
Eu fiz umas alterações no código e acabei esquecendo de alterar as linhas comentadas. O relé inicia em High, pois esse relé que estou utilizando aciona com o comando LOW

Por favor considerar o seguinte:

if (dados== 'a'){ // Se o byte lido for igual a a
digitalWrite(RELE,LOW); // Liga o relé e aciona o motor
}
else{
if (dados== 'f'){ // Se o byte lido for igual a f
digitalWrite(RELE,HIGH); // Desliga o relé

Estou usando o APP: Arduino Bluetooh Controller
No App configurei um botão que me permite configurar um comando para ON e um comando para OFF.
No comando ON do app eu coloquei o caractere utilizado para acionar o relé em LOW.
No comando OFF do app eu coloquei o caractere utilizado para acionar o relé em HIGH.

Configurei pelo app um timer para que quando eu aperte o botão ON, ele automaticamente após 1 segundo aciona o modo OFF.

Enfim.. o funcionamento está perfeito. Só preciso colocar uma palavra passe com mais caracteres ou números que sejam aceitos pelo código. Assim eu posso usar essa palavra chave configurada no APP para acionar o relé.

Boas amigo,

O codigo que criei, nao garanto que funciona nao o testei gosto de testar e se estiver mal ir a procura do erro, parece-me que deste modo da mas so tu o podes testar.

codigo

|
|
v

if (dados == 'a') { // Se o byte lido for igual a 'a'
caracter = 1;
}
if ((dados == 'b') && (caracter == 1)) { // Se o byte lido for igual a 'b' depois do 'a'
caracter = 2;
}
if ((dados == 'c') && (caracter == 2)) { // Se o byte lido for igual a 'c' depois do 'a' e do 'b'
caracter = 3;
}
if ((dados == 'd') && (caracter == 3)) { // Se o byte lido for igual a 'd' depois do 'a' do 'b' e do 'c'
caracter = 4;
}
if (caracter == 4) { //palavra passe 'abcd' foi recebida
digitalWrite(RELE, LOW); // Liga o relé e aciona o motor
}
if ((dados != 'a') || (dados != 'b') || (dados != 'c') || (dados != 'd') || (dados !== 'f'))// Se o byte lido for diferente de qualquer um dos da passe ou igual a 'f'
{
digitalWrite(RELE, HIGH); // Desliga o relé
caracter = 0;
}

//comentarios

|
|
v

Acho que consegues aplicar isto mas para isso nao podes enviar a pass toda junta, deves enviar um caracter da password de cada vez tipo teres um keypad com os varios numeros e letras na app e cada vez que carregas num numero ou letra esse e enviado para o arduino, eu penso que da maneira que o codigo esta so se fizeres a sequencia certa toda seguida e que ele ativa o motor, caso contrario desliga o rele.

Repara que tens de criar uma varialvel caracter

int caracter=0;

fora de qualquer void ();

esta e responsavel por ir verificando se a sequencia esta correta e se for inserido um valor errado tambem esta e resetada e a password tera de ser inserida do inico.

Neste codigo nao se esta a retribuir ao utilizador da app que a passe foi mal inserida mas tambem o e possivel fazer mas isso ja sao apenas algo para ficar melhor, boa sorte espero ter ajudado.

Dá-me feedback.

Boa tarde amigo,
Primeiramente agradeço a disposição do seu tempo ao me ajudar com o código.
Sua solução aparentemente funcionaria, mas não seria muito pratico o funcionamento dessa forma.
Pois o relé precisa de um comando para ligar e desligar.. sendo assim, primeiro eu teria que achar um app que disponibilizasse um teclado numérico, segundo teria que digitar o código para acionar o relé para abrir o portão, posteriormente teria que digitar o código para desligar o relé, depois novamente digitar o código para acionar o relé para fechar o portão e ainda digitar o código para desligar o relé novamente.
O que eu gostaria de fazer é algo prático que ao tocar no botão do celular o portão abrisse, e ao tocar novamente ele fechasse.. hoje ele está funcionando assim, mas com o problema de possuir apenas um caractere como chave.

Será que não existe uma forma de o arduino receber essa cadeia de caracteres todas de uma vez?
Grato pela atenção.

Tenho trabalhado com o modulo hc-05 e penso que se mandares a password logo também deve funcionar porque o próprio modulo separa os caracteres da password por bytes logo o arduino vai recebe-los separados e deve guarantir o funcionamento do codigo. Mas so fazendo a experiencia pois isso sao apenas conhecimentos que fui adquirindo na internet.

Outra coisa se gostas de modernizar as coisas e utilizar bluetooth/apps recomendo veres uns tutoriais MIT App Inventor 2.

Assim pode desenvolver a tua propria APP e nesse caso ate podes com apenas um botao enviar os caracteres da password todos separadamente.

David_Pires:
Tenho trabalhado com o modulo hc-05 e penso que se mandares a password logo também deve funcionar porque o próprio modulo separa os caracteres da password por bytes logo o arduino vai recebe-los separados e deve guarantir o funcionamento do codigo. Mas so fazendo a experiencia pois isso sao apenas conhecimentos que fui adquirindo na internet.

Outra coisa se gostas de modernizar as coisas e utilizar bluetooth/apps recomendo veres uns tutoriais MIT App Inventor 2.

Assim pode desenvolver a tua propria APP e nesse caso ate podes com apenas um botao enviar os caracteres da password todos separadamente.

Obrigado pela dica amigo. Tenho um módulo arduino com bluetooth + relé chegando, e assim que chegar vou colocar na bancada para efetuar novos testes com as dicas que me deu.
Por enquanto vou deixar o outro no portão funcionando com apenas um caractere e rezando para que ninguém descubra kkkk