Caça-Fantasmas com Efeito Hall: Arduino e Sensor KY-024
Um Arduino, um sensor Hall e um ímã para enxergar o que os olhos não veem: o campo magnético. Tem simulador para testar no navegador, código pronto, ligações e gráfico em tempo real no computador.
Publicado na Mecatrônica Jovem nº 16
Este projeto saiu na edição 16 da revista Mecatrônica Jovem, como uma versão atualizada do projeto original do professor Newton C. Braga: o Caça-Fantasmas. A ideia clássica ganhou Arduino, sensor Hall e um gráfico em Python, aproximando a proposta original das ferramentas de hoje.
Visão geral
O módulo KY-024 reúne um sensor Hall linear 49E e um comparador LM393. A saída A0 varia com a intensidade e a polaridade do campo magnético; a saída D0 liga quando o campo passa de um limite ajustado no trimpot do módulo.
O Arduino lê as duas saídas. Quando o D0 dispara, acende um LED e toca um buzzer. Ao mesmo tempo, o brilho de um segundo LED acompanha a intensidade do campo, e os valores seguem pela serial para o Plotter Serial da Arduino IDE ou para o programa em Python.
Aviso de professor: este sensor não prova que fantasmas existem. Ele mede campo magnético (ímãs, alto-falantes, motores), e isso já é ciência de verdade e muito divertido.
Como funciona o efeito Hall
Dentro de uma plaquinha por onde passa corrente, o campo magnético empurra os elétrons para um dos lados. Aparece uma tensão perpendicular à corrente e ao campo, proporcional à corrente e à intensidade do campo. Quanto mais forte o campo, maior a tensão. O efeito foi descoberto por Edwin Hall em 1879.
Simulador: mexa no campo e veja o Arduino reagir
Mesma conta do Hall.ino: o constrain() segura o valor entre 390 e 820, o map() estica essa faixa para 0 a 1023, e o LED de brilho recebe esse valor dividido por 4.
Perto de 512 é o repouso. Para um lado é um polo do ímã; para o outro lado, o outro polo.
Simplificação: aqui o D0 dispara quando o valor bruto passa deste limite. No módulo real, o nível do D0 pode ser alto ou baixo.
Simulação feita para entender a lógica. Não é a leitura de um sensor de verdade.
Lista de peças
Peças comuns de bancada, fáceis de achar em lojas de eletrônica.
- 1 Arduino UNO R3
- 1 módulo KY-024 (sensor Hall linear 49E + comparador LM393)
- 2 LEDs, um para o alerta e outro para o brilho
- 2 resistores de 220 a 470 ohms, um para cada LED
- 1 buzzer ativo
- Protoboard e fios jumper
- 1 ímã (os de neodímio são os mais sensíveis)
Hardware e pinagem
Pinagem usada no Hall.ino, escrito para o Arduino UNO R3.
| Peça | Pino do Arduino |
|---|---|
| KY-024 A0 | A0 |
| KY-024 D0 | D9 |
| KY-024 + | 5V |
| KY-024 G | GND |
| LED de alerta (com resistor) | D13 |
| LED de brilho (com resistor) | D6, pino PWM |
| Buzzer ativo | D7 |
O catodo dos LEDs e o outro terminal do buzzer vão ao GND, junto com o GND do módulo.
Por que o LED de brilho está no D6? Para variar o brilho usamos PWM, e no UNO só os pinos 3, 5, 6, 9, 10 e 11 têm PWM. O pino 13 não tem, e nele o LED só liga ou desliga.
Código do Arduino: Hall.ino
Abra na Arduino IDE, escolha a placa Arduino UNO, selecione a porta e faça o upload.
Calibre para o seu módulo
Cada sensor é um pouco diferente. Abra o Plotter Serial (Ferramentas, Plotter Serial, em 9600), aproxime e afaste o ímã e ajuste LEITURA_MINIMA e LEITURA_MAXIMA no código. Como o sensor responde também à polaridade, inverter o ímã leva o valor para o outro lado do repouso.
Se o LED e o buzzer ficarem ligados sem ímã por perto, troque NIVEL_D0_DETECTANDO para LOW (alguns módulos usam nível baixo ao detectar) ou gire o trimpot do módulo.
Gráfico em Python: hall_plotter.py
O Python lê o que o Arduino manda pela USB e desenha as duas curvas em tempo real, com Tkinter e Matplotlib.
- Instale as bibliotecas:
pip install -r requirements.txt(pyserial, matplotlib e pillow). No Linux, o Tkinter pode vir separado:sudo apt install python3-tk. - Feche o Monitor Serial e o Plotter Serial da Arduino IDE: só um programa usa a porta por vez.
- Rode
python hall_plotter.py. Se ele não achar o Arduino sozinho, informe a porta:python hall_plotter.py --porta COM3(no Linux, algo como/dev/ttyACM0). - Para ter um banner no topo da janela, coloque uma imagem chamada
cabecalho.pngao lado do script. Sem ela, tudo funciona do mesmo jeito.
Resultado esperado
- Sem ímã por perto, o LED de alerta e o buzzer ficam desligados.
- Ao aproximar o ímã, o valor bruto sai do valor de repouso, a curva sobe e o LED de brilho acende mais forte.
- Quando o campo passa do limite do trimpot, o LED de alerta acende e o buzzer toca.
- Virando o ímã, a curva vai para o outro lado do repouso.
Pontos de atenção
- Cuidado com ímãs fortes: os de neodímio beliscam dedos, danificam cartões magnéticos e devem ficar longe de pessoas que usam marcapasso.
- Nível do D0: alguns módulos KY-024 ativam o D0 em nível baixo. O código tem a constante
NIVEL_D0_DETECTANDOpara isso. - Porta serial ocupada: se o Python não abrir a porta, feche o Monitor Serial e o Plotter Serial da Arduino IDE.
Créditos
O projeto original do detector magnético é do professor Newton C. Braga. Esta é uma versão atualizada, publicada na revista Mecatrônica Jovem nº 16, com artigo e código do Tio Rafa. Para conhecer o trabalho do professor Newton, visite o Instituto Newton C. Braga.
Quer aprender mais sobre o sensor Hall? Leia o artigo sobre Magnetômetro do professor Léo Corradini em potassio-40.blogspot.com.
O projeto no GitHub
O código completo, as ligações e o passo a passo estão no repositório do projeto.
Quer montar o seu Caça-Fantasmas?
Baixe o projeto completo, teste o simulador e leve a ideia para a sua turma. Se quiser adaptar para uma aula ou oficina, fale com o Tio Rafa.