Controle de Ventilador por Bluetooth
Como um toque no celular pode mudar uma escolha no Arduino? Aprenda esse caminho com três LEDs, entenda a comunicação Bluetooth e crie seu aplicativo no App Inventor.
Entender o desafio
Imagine que você está estudando e quer mudar a velocidade do ventilador sem sair do lugar. O celular parece resolver isso com quatro botões: três velocidades e Desligar. Mas como esse toque chega ao Arduino? E como saber se a mensagem foi entendida?
Vamos descobrir esse caminho em partes. Primeiro, três LEDs vão representar as velocidades: LED 1 para baixa, LED 2 para média e LED 3 para alta. Assim podemos observar as escolhas sem conectar o ventilador. Nenhum LED representa uma medição do motor.
| Parte | O que faz | O que você observa |
|---|---|---|
| Aplicativo | Transforma o toque em um texto: 0, 1, 2 ou 3. | O comando escolhido pelo usuário. |
| HC-05 | Leva as mensagens por Bluetooth entre celular e Arduino. | A comunicação, quando testada com o módulo real. |
| Arduino Uno | Lê o comando e escolhe qual LED deve acender. | A resposta do programa. |
| Três LEDs | Representam baixa, média e alta. | Somente um aceso por vez; todos apagados em 0. |
| Ventilador real | É o objetivo futuro do projeto. | Depende de identificação, projeto elétrico e testes profissionais. |
Combine o significado dos comandos
O aplicativo e o Arduino precisam seguir o mesmo combinado, chamado protocolo. Aqui, o texto 0 pede para apagar os LEDs; 1, 2 e 3 escolhem um deles. Depois de aplicar a escolha, o Arduino responde com o mesmo caractere. Essa resposta confirma o que o programa fez; não confirma rotação nem contato elétrico de um ventilador.
Confira o que aprendeu
Se o Arduino respondeu “2”, o que você pode afirmar?
Conferir o raciocínio
Que o programa informou a seleção 2. Com LEDs, você ainda pode observar se o LED correspondente acendeu. Isso não permite afirmar que um ventilador está girando.
Antes de montar qualquer peça, vamos entender por que os cuidados mudam quando saímos dos LEDs e pensamos no ventilador.
Preparar a atividade com segurança
Agora você sabe o que cada comando significa. Antes de colocar esse comando em um circuito, precisamos responder outra pergunta: o que acontece se uma ligação ou uma escolha estiver errada? No exercício, usamos LEDs e alimentação USB. Um ventilador de 220 V envolve outros riscos e exige outra preparação.
Abra a aula Eletricidade e cuidados com os equipamentos. Ela explica as grandezas elétricas no contexto do projeto e a diferença entre pedir “Desligar” e retirar a alimentação com segurança. Depois, use o link de retorno para continuar nesta etapa.
Prepare o exercício
- Separe Uno, cabo USB, três LEDs e um resistor de 330 Ω para cada LED. Ω é o símbolo de ohm, a unidade de resistência.
- Confira a montagem com o professor, sem alimentação. Não troque fios com o circuito ligado.
- Para acrescentar o HC-05 mais adiante, peça a identificação da placa, a conferência da alimentação e dos níveis dos sinais.
- Mantenha relés, motor e fios da tomada fora desta montagem.
Confira o que aprendeu
Por que começar com LEDs se o objetivo é controlar um ventilador?
Conferir o raciocínio
Porque eles tornam visível a escolha feita pelo programa e permitem estudar os comandos sem acrescentar os riscos do motor e da rede elétrica. Depois, o equipamento real precisa de uma avaliação específica.
Com esse limite entendido, vamos conhecer a peça que aparece com frequência no controle de equipamentos: o relé.
Entender os contatos do relé
O Arduino consegue indicar uma escolha com um LED. Para um aparelho que exige mais corrente, uma ordem de controle precisa acionar um circuito adequado. O relé ajuda a entender essa separação: uma parte recebe a ordem e outra abre ou fecha contatos.
Na aula Relés: como uma ordem muda um contato, observe a bobina e experimente os contatos no desenho. Você vai entender COM, NA e NF antes de usar essas marcações em uma peça real.
O que precisamos descobrir sobre a placa real?
Registre modelo, alimentação, corrente exigida e forma de acionamento. Uma placa de quatro relés não é definida apenas pela inscrição “10 A”. O tipo de motor, sua partida, os contatos, a placa e a fonte também precisam de avaliação.
Confira o que aprendeu
O que a simulação dos contatos ensina e o que ela não comprova?
Conferir o raciocínio
Ela mostra qual caminho abre ou fecha quando a bobina muda de estado. Não comprova isolamento, capacidade para um motor, qualidade da montagem nem comportamento de um contato com defeito.
Agora já sabemos separar uma ordem de controle da ligação de um aparelho. Falta descobrir como essa ordem pode chegar sem o cabo USB.
Levar mensagens pelo Bluetooth
No começo, o comando pode sair do computador pelo cabo USB. Para sair do celular sem esse cabo, ele precisa atravessar o Bluetooth. O HC-05 recebe a mensagem sem fio e a entrega ao Uno pelos pinos de comunicação.
Abra a aula HC-05: levar mensagens do celular ao Uno. Confira o significado de TX e RX, a velocidade serial e a diferença entre parear, conectar e receber uma resposta.
Antes de ligar o HC-05
Peça ao professor que confira a placa e sua documentação. Não presuma que VCC e RX aceitam a mesma tensão. O programa espera comunicação serial a 9600 bit/s no modo de dados. Só monte a ligação aprovada, com a alimentação removida.
Como descobrir em que ponto surgiu o problema
Se o Android reconhece o HC-05, houve pareamento. Se o aplicativo abre a comunicação, houve conexão. Se o Arduino recebe e responde corretamente, houve troca de mensagens. Conferir nessa ordem ajuda a localizar a dificuldade, sem mudar vários fios ou configurações ao mesmo tempo.
Confira o que aprendeu
O HC-05 aparece na lista do celular. Já podemos dizer que o Arduino recebeu um comando?
Conferir o raciocínio
Ainda não. Aparecer na lista ou estar pareado não comprova a troca de mensagens. É preciso conectar pelo aplicativo, enviar o texto e conferir a resposta do Arduino.
Na próxima etapa, vamos testar os programas em uma ordem que permite descobrir o que funciona antes de acrescentar a próxima parte.
Programar e testar os LEDs
Vamos construir a solução em três versões. Na primeira, você testa apenas Uno e LEDs. Na segunda, acrescenta mensagens por Bluetooth. Na terceira, o Arduino também verifica se o celular continua enviando mensagens. Cada programa é completo: abra sua pasta na IDE Arduino, o programa usado para editar e gravar o código na placa, e escolha a placa Uno.
Experimente primeiro na tela
Toque em Conectar, escolha uma velocidade e observe o LED. Depois toque em Parar os sinais de presença e aguarde: o LED deve apagar. Esta simulação não usa Bluetooth real nem envia comandos a equipamentos.
Monte os três indicadores
Com a alimentação retirada, ligue cada saída a seu próprio resistor de 330 Ω e LED, conforme o desenho. O ânodo é o terminal positivo do LED; o cátodo vai ao GND, a referência do circuito. Confira os terminais do componente, sem depender apenas do comprimento das pernas. Peça ao professor que confira antes de conectar o USB.
Programa 1 — faça os comandos funcionar pelo USB
Baixe o arquivo abaixo, abra-o na IDE e grave no Uno. Abra o Monitor Serial a 9600 bit/s. Envie um caractere de cada vez: 1, 2, 3 e 0. Somente o LED escolhido deve acender; 0 apaga todos. O Monitor também mostra o caractere de confirmação. Se enviar uma letra como X, o programa apaga os LEDs e responde 0.
// Mundo bit Byte — checkpoint 1: somente LEDs; nenhum motor ou rele.
// Uno: D5, D6 e D7 -> cada um a seu resistor de 330 ohms -> anodo LED.
// Os tres catodos vao ao GND. Monitor Serial: 9600, sem fim de linha.
const byte LEDS[] = {5, 6, 7};
byte velocidade = 0;
void selecionar(byte nova) {
// Primeiro apaga todos; depois acende, no maximo, um indicador.
for (byte i = 0; i < 3; i++) digitalWrite(LEDS[i], LOW);
velocidade = nova <= 3 ? nova : 0;
if (velocidade > 0) digitalWrite(LEDS[velocidade - 1], HIGH);
}
void setup() {
for (byte i = 0; i < 3; i++) {
digitalWrite(LEDS[i], LOW);
pinMode(LEDS[i], OUTPUT);
}
Serial.begin(9600);
selecionar(0);
}
void loop() {
if (!Serial.available()) return;
char comando = Serial.read();
if (comando == '\r' || comando == '\n') return;
selecionar(comando >= '0' && comando <= '3' ? comando - '0' : 0);
Serial.write('0' + velocidade); // Confirmacao logica de um caractere.
}
Entenda o código antes de avançar
Na lista LEDS estão os pinos 5, 6 e 7. A função selecionar, um trecho que realiza uma tarefa definida, apaga os três LEDs antes de acender o escolhido. A repetição for percorre a lista; as condições if decidem se o comando é válido. Se vetor, função ou condição forem novos para você, retome esses assuntos no bloco Programação Aplicada antes de continuar.
Programa 2 — troque o cabo de mensagens pelo Bluetooth
Conclua o teste USB antes de acrescentar o HC-05. Depois de conferir sua ligação e configuração com o professor, grave este programa. Use um aplicativo de teste serial Bluetooth que envie texto, sem acrescentar mensagens automáticas. Envie 0, 1, 2 e 3 e compare os LEDs com as respostas. Essa versão mantém a última escolha enquanto não chega outro comando.
// Mundo bit Byte — checkpoint 2: HC-05 com LEDs, sem motor ou rele.
// Identifique e valide alimentacao, niveis e baud rate do HC-05 antes da ligacao.
// Uno D2 (RX software) recebe TX do modulo com niveis compativeis.
// Uno D3 (TX software) envia ao RX do modulo por adaptacao de nivel validada.
// A alimentacao do modulo e o adaptador nao sao definidos por este codigo.
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(2, 3); // RX, TX do Arduino.
const byte LEDS[] = {5, 6, 7};
byte velocidade = 0;
void selecionar(byte nova) {
for (byte i = 0; i < 3; i++) digitalWrite(LEDS[i], LOW);
velocidade = nova <= 3 ? nova : 0;
if (velocidade > 0) digitalWrite(LEDS[velocidade - 1], HIGH);
}
void setup() {
for (byte i = 0; i < 3; i++) {
digitalWrite(LEDS[i], LOW);
pinMode(LEDS[i], OUTPUT);
}
bluetooth.begin(9600); // Confirmar esta velocidade na variante real.
selecionar(0);
}
void loop() {
if (!bluetooth.available()) return;
char comando = bluetooth.read();
if (comando == '\r' || comando == '\n') return;
selecionar(comando >= '0' && comando <= '3' ? comando - '0' : 0);
bluetooth.write('0' + velocidade);
}
Programa 3 — perceba quando as mensagens param
Imagine que o LED 3 está aceso e o celular para de enviar dados. Precisamos que o Uno perceba essa ausência por conta própria. O aplicativo envia ? a cada 500 milissegundos, ou meio segundo, como um sinal de “continuo aqui”. Essa verificação periódica também é conhecida como heartbeat.
Grave o programa 3. Se passarem 2000 milissegundos, ou 2 segundos, sem uma mensagem válida para essa verificação, ele apaga os LEDs. O sinal ? não escolhe velocidade e não recebe resposta. Depois de apagados pelo prazo, somente voltar a enviar ? não reacende os LEDs: é preciso um novo comando 1, 2 ou 3. Esses tempos servem ao exercício; não dimensionam a proteção de um motor.
// Mundo bit Byte — checkpoint 3: prototipo didatico SOMENTE COM LEDs.
// Nao conectar estas saidas a reles ou a qualquer circuito de 220 V.
// Uno: LEDs/resistores em D5,D6,D7; Bluetooth software em D2(RX),D3(TX).
// Alimentacao/niveis do HC-05: verificar a variante e a interface antes de montar.
// Protocolo: textos '0'..'3'; '?' a cada 500 ms mantem o enlace supervisionado.
// Retorno: um caractere '0'..'3' confirma somente o estado logico dos LEDs.
#include <SoftwareSerial.h>
SoftwareSerial bluetooth(2, 3);
const byte LEDS[] = {5, 6, 7};
const uint32_t PRAZO_MS = 2000UL; // Escolha didatica, nao parametro de seguranca de motor.
byte velocidade = 0;
uint32_t ultimaMensagem = 0;
void selecionar(byte nova) {
for (byte i = 0; i < 3; i++) digitalWrite(LEDS[i], LOW);
velocidade = nova <= 3 ? nova : 0;
if (velocidade > 0) digitalWrite(LEDS[velocidade - 1], HIGH);
}
void confirmar() {
bluetooth.write('0' + velocidade);
}
void verificarPrazo(uint32_t agora) {
// Subtracao sem sinal tambem funciona quando millis() volta a zero.
if (velocidade > 0 && (uint32_t)(agora - ultimaMensagem) >= PRAZO_MS) {
selecionar(0);
confirmar();
}
}
void receber(char comando, uint32_t agora) {
if (comando == '\r' || comando == '\n') return;
// Uma mensagem de supervisao atrasada nao deve esconder um prazo ja expirado.
verificarPrazo(agora);
ultimaMensagem = agora;
if (comando == '?') return; // Mantem comunicacao; nunca liga os LEDs.
selecionar(comando >= '0' && comando <= '3' ? comando - '0' : 0);
confirmar();
}
void setup() {
for (byte i = 0; i < 3; i++) {
digitalWrite(LEDS[i], LOW);
pinMode(LEDS[i], OUTPUT);
}
selecionar(0);
bluetooth.begin(9600); // Requer HC-05 configurado para 9600 em modo de dados.
ultimaMensagem = millis();
}
void loop() {
verificarPrazo(millis());
// Processa um caractere por volta; nao bloqueia esperando texto ou delimitador.
if (bluetooth.available()) receber(bluetooth.read(), millis());
}
Confira as trocas, não só a sequência crescente
Teste cada escolha a partir das outras: de 0 para 1, de 1 para 0, de 3 para 2 e assim por diante. Há 12 trocas entre estados diferentes, além das quatro repetições do mesmo comando. Registre o LED observado e a resposta recebida. No programa 3, teste também a falta de mensagens e confirme que o retorno apenas de ? não religa um LED.
Confira o que aprendeu
Por que testar de 3 para 1 se de 1 para 3 já funcionou?
Conferir o raciocínio
Porque a ordem anterior pode revelar uma dificuldade diferente. Cada troca precisa apagar a escolha anterior antes de acender a nova. Com LEDs, observe o resultado; para um motor, outros testes e proteções continuam necessários.
Os comandos já têm significado e um caminho de comunicação. Agora vamos colocar esses comandos nos botões do nosso aplicativo.
Criar e testar o aplicativo
Você já viu o comando chegar ao Uno e mudar um LED. Agora o usuário precisa fazer isso sem digitar caracteres: tocar em Velocidade 2 deve enviar o texto 2. A tela também precisa indicar quando ainda está esperando a resposta.
Siga a aula Crie o aplicativo Ventilador MbB no App Inventor. Ela explica a tela, os blocos e os cuidados com conexão e respostas. Se quiser testar a versão disponível antes de construir a sua, baixe o APK, o arquivo de instalação para Android:
Baixar Ventilador MbB para Android (.apk) · Conferir a versão do arquivo
03_bancada_supervisionada.ino, apresentado na etapa anterior. Ele reconhece os sinais ? enviados pelo aplicativo. Mantenha o exercício apenas com LEDs.Ventilador MbB
Ilustração da tela — botões sem ação
Desconectado. Sem confirmação física.
Protótipo somente com LEDs.
Instalei o app, mas os botões não aceitam toque. É defeito?
Sem o Arduino respondendo, as velocidades ficam bloqueadas de propósito. O aplicativo precisa do HC-05 ligado ao Uno com o programa 3. Ao conectar, envia 0 e espera a resposta 0. Se ela não chega, encerra a tentativa; não basta ligar o Bluetooth do celular ou escolher qualquer aparelho da lista.
Para experimentar os comandos sem equipamento, use o simulador da etapa 5. Para testar o APK, prepare a montagem com LEDs e confira a resposta do Uno. Não retire a confirmação do código para liberar os botões.
Essa figura mostra a organização da tela; seus botões não comandam o Arduino. No aplicativo instalado, as velocidades só são liberadas depois da conexão e da resposta inicial do programa. Quando ele diz “confirmação lógica”, está informando a resposta do Arduino, sem medir movimento.
Confira o que aprendeu
O app mostrou uma mensagem de desconexão. Por que o Arduino também precisa verificar a falta de mensagens?
Conferir o raciocínio
Porque o aviso na tela não muda sozinho os pinos do Arduino. No programa 3, a falta de mensagens faz o próprio Uno apagar os LEDs. Isso demonstra uma decisão local, sem substituir proteções elétricas de um equipamento.
Planejar a etapa do ventilador real
Com os LEDs, você consegue observar a seleção feita pelo Arduino. Um motor acrescenta corrente de partida, movimento e componentes que podem falhar. Por isso, a etapa de 220 V ainda exige um projeto elétrico específico. O objetivo continua sendo um ventilador real com três velocidades, mas este material não fornece suas ligações à tomada.
Não substitua os LEDs por relés para completar o projeto. Antes de prosseguir, reúna com o profissional responsável as informações abaixo.
O que precisa ser conhecido sobre o equipamento
| Informação ou verificação | Por que é necessária |
|---|---|
| Modelo, manual, placa de identificação e estado do ventilador | Identificar exatamente o equipamento que será avaliado. |
| Ligações das velocidades, motor, capacitor e proteção contra aquecimento | Entender quais combinações são permitidas e preservar as proteções. |
| Relés, fonte, fios e proteções adequados ao motor | Considerar a partida e as condições reais de funcionamento. |
| Impedimento de velocidades incompatíveis, inclusive com falhas | Não depender apenas da escolha feita no aplicativo. |
| Isolamento, caixa de proteção, fixação e desligamento da alimentação | Evitar acesso a partes perigosas e permitir intervenção adequada. |
| Inspeções e testes registrados pelo profissional | Decidir em que condições o equipamento pode ser liberado. |
Esses registros precisam corresponder ao ventilador usado. Trocar o modelo pode exigir rever o circuito e as proteções, mesmo que os botões do aplicativo continuem iguais.
Confira o que aprendeu
Os LEDs responderam corretamente em todos os testes. O ventilador já está pronto para ligar?
Conferir o raciocínio
Não. Ainda faltam o projeto elétrico para o modelo real, a avaliação das falhas, as proteções e os testes profissionais. LEDs ajudam a estudar comandos, mas não reproduzem o comportamento de um motor.
Conferir e explicar os resultados
Volte à pergunta inicial: como um toque no celular chega a uma escolha no Arduino? Agora você deve conseguir explicar cada parte desse caminho e apresentar o resultado dos seus testes. Separe o que viu na tela, o que observou na placa e o que ainda não foi realizado.
Organize os resultados
| Teste | O que conferir | Onde testar |
|---|---|---|
| Comandos 0, 1, 2 e 3 | Todos apagados em 0; somente o LED escolhido nos demais. | Simulador e montagem com LEDs, em registros separados. |
| 12 trocas e quatro repetições | Nenhuma escolha mantém dois LEDs acesos. | Programa e placa com LEDs. |
| Letra inválida, como X | O Arduino apaga os LEDs e responde 0. | Programa e placa com LEDs. |
| Reiniciar o Uno ou restaurar sua alimentação | Começar com os LEDs apagados. | Placa real. |
| Parar os sinais de presença no programa 3 | Apagar após o prazo; somente ? não reacende. | Simulador e comunicação real, em testes separados. |
| Negar permissão, perder conexão e reconectar | Informar a falha; nova conexão começa enviando 0. | Aplicativo instalado no Android. |
| Ventilador e suas proteções | Cumprir os critérios e testes do projeto específico. | Etapa conduzida pelo profissional responsável. |
Uma última decisão
O Arduino respondeu “3”. Qual frase descreve o que sabemos?
Apresente o que aprendeu
Entregue os arquivos usados, o desenho da montagem com LEDs e seus registros de teste. Para cada resultado, escreva o que esperava, o que observou e o que ainda precisa verificar. As marcações desta página ficam neste navegador; não alteram o progresso do Meu MbB.
Baixar orientações dos três programas · Baixar roteiro de testes · Baixar projeto editável do aplicativo
Confira o que aprendeu
O que você consegue explicar agora que não conseguia no início?
Conferir o raciocínio
Como um comando percorre o sistema, por que precisamos de resposta e prazo, como testar escolhas com LEDs e por que a ligação de um ventilador exige outras verificações. Use exemplos dos seus testes para sustentar a explicação.