Lição 7/31-2 : detectando campo magnético usando interruptor reed | Kit SunFounder
Detetar um campo magnético é uma das formas mais simples e mais gratificantes de começar com entradas digitais num Arduino. Neste projeto vais construir um detetor de campo magnético usando um interruptor reed — um pequeno interruptor encapsulado em vidro que fecha os seus contactos sempre que um íman se aproxima dele. Como o interruptor reed se comporta exatamente como um botão (está aberto ou fechado), é uma introdução perfeita à função digitalRead(), e também te ensina porque é que uma resistência de pull-down é importante e como o pull-up interno de entrada do Arduino a pode substituir por completo.
Depois de isto funcionar, o mesmo circuito torna-se o coração de muitos projetos do mundo real. Aqui estão algumas ideias práticas que podes experimentar:
- Alarme de porta e janela — monta o interruptor reed numa moldura e um pequeno íman na porta; o Arduino reporta "aberto" no momento em que o íman se afasta.
- Taquímetro sem contacto — cola um íman a uma roda giratória e conta os pulsos para medir as RPM.
- Leitor de contador de água ou gás — muitos contadores de serviços públicos têm uma saída de pulso magnético que um interruptor reed consegue captar e registar.
- Sensor de tampa de portátil / invólucro — deteta quando uma tampa é fechada para acionar o modo de suspensão ou um LED de estado.
- Velocímetro de bicicleta — um íman no raio e um interruptor reed na forqueta dão-te um pulso por cada rotação da roda.
- Deteção de violação — esconde um par de íman e interruptor reed dentro de um invólucro para saberes se foi aberto.
Como Funciona um Interruptor Reed
Um interruptor reed é uma pequena cápsula de vidro que contém duas lâminas ferromagnéticas finas (no vídeo aos 12:38). Na presença de um campo magnético as lâminas são atraídas uma para a outra e tocam-se, fechando o circuito. Remove o íman e as lâminas separam-se, abrindo novamente o circuito. Esse é todo o princípio — é um interruptor sem botão móvel, sem desgaste por pressões dos dedos e sem necessidade de contacto físico com o objeto que estás a detetar.
Podes verificar este comportamento com um multímetro no modo de continuidade (no vídeo aos 13:59): sem íman por perto o medidor mostra um circuito aberto, e assim que um íman se aproxima o buzzer soa e o medidor lê um circuito fechado. Como o interruptor é eletricamente idêntico a um botão, o código e a ligação do Arduino são iguais aos de qualquer outra entrada digital.
Entradas Digitais e Resistências de Pull Explicadas
O Arduino lê um pino digital como HIGH ou LOW. Numa placa de 5 V, qualquer valor acima de aproximadamente 2,2 V é tratado como HIGH e qualquer valor abaixo de cerca de 1,5 V como LOW (no vídeo aos 01:49). O problema é que um interruptor ligado diretamente entre um pino e 5 V deixa o pino flutuante quando o interruptor está aberto — não está ligado a nada, por isso capta ruído e reporta valores aleatórios.
É por isso que se usa uma resistência. Duas configurações funcionam igualmente bem:
- Pull-down: um resistor de 10 kΩ do pino para o terra. O pino lê LOW quando o interruptor está aberto e HIGH quando o interruptor conecta o pino a 5 V.
- Pull-up: um resistor de 10 kΩ do pino para 5 V. O pino lê HIGH quando o interruptor está aberto e LOW quando o interruptor conecta o pino ao terra.
O Arduino também possui um resistor de pull-up interno que pode ser habilitado via software com INPUT_PULLUP (no vídeo em 19:52). Isso elimina completamente a necessidade do resistor externo — o pino fica em HIGH em repouso, e fechar o interruptor para o terra o puxa para LOW. A desvantagem é que a lógica é invertida: pressionado (ou ímã presente) agora lê 0 em vez de 1.
Hardware e Componentes
- Arduino Uno (ou qualquer placa compatível)
- Módulo de interruptor reed ou interruptor reed simples
- Resistor de 10 kΩ (necessário apenas para a versão pull-down)
- Protoboard e fios jumper
- Um pequeno ímã para testes
- Cabo USB para programação e alimentação
Guia de Ligação
O interruptor reed é ligado exatamente como um botão de pressão. Um terminal do interruptor reed vai para 5 V, o outro terminal vai para o pino 2 do Arduino e para uma extremidade do resistor de 10 kΩ. A outra extremidade do resistor vai para o terra (no vídeo em 14:40). Esta é uma configuração pull-down, então o pino lê LOW sem ímã presente e HIGH quando um ímã fecha o interruptor.
Na protoboard, coloque o interruptor reed de modo que seus dois terminais fiquem em linhas diferentes, conecte o resistor da mesma linha de um terminal até o trilho de terra, passe um fio vermelho do outro terminal para o trilho de 5 V, e um fio verde da junção do interruptor reed e do resistor para o pino 2 (no vídeo em 15:53). Preto vai para o terra, vermelho vai para 5 V, verde vai para o pino 2 — a mesma convenção de cores usada em todo o kit SunFounder.
Se você preferir pular o resistor, ligue um terminal do interruptor reed ao pino 2 e o outro terminal diretamente ao terra, depois habilite INPUT_PULLUP no código conforme descrito abaixo.
Explicação do Código
O sketch é intencionalmente minúsculo. Tudo o que você vai querer alterar está em dois lugares no topo do arquivo.
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
reedPin — mude este número se você ligou o interruptor reed a um pino digital diferente. Qualquer pino digital no Uno funciona; o pino 2 é usado aqui simplesmente porque é conveniente na protoboard.
Serial.begin(9600) — define a velocidade do monitor serial. Se você mudar este valor, também deve mudar o dropdown de baud rate na janela do Monitor Serial, caso contrário você verá caracteres sem sentido (no vídeo em 11:25).
pinMode(reedPin, INPUT) — configura o pino como entrada de alta impedância para que ele possa detectar a tensão definida pelo interruptor reed e pelo resistor. Se você estiver usando o pull-up interno, mude esta linha para pinMode(reedPin, INPUT_PULLUP); e lembre-se de que as leituras serão invertidas.
O loop simplesmente lê o pino e imprime o resultado:
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
digitalRead(reedPin) retorna 1 quando o pino está HIGH e 0 quando está LOW. Como o valor é passado diretamente para Serial.println(), não há necessidade de uma variável intermediária — a leitura é impressa diretamente. Com a ligação pull-down, 0 significa "sem campo magnético" e 1 significa "ímã detectado" (no vídeo em 18:31).
delay(10) controla com que frequência uma leitura é impressa. Dez milissegundos é rápido o suficiente para que você veja o valor mudar no instante em que um ímã se aproxima. Se você preferir uma exibição mais calma, pode aumentar para 200 ms, mas note que isso também torna a detecção mais lenta (no vídeo em 12:01).
Demonstração do Projeto ao Vivo
Depois de carregar o sketch, abra o Monitor Serial e defina o baud rate para 9600. Sem ímã por perto, a janela se enche de zeros. Aproxime um pequeno ímã da cápsula de vidro e a saída imediatamente muda para uns; afaste o ímã e ela volta a zero (no vídeo em 17:04). A resposta é instantânea e funciona mesmo quando o ímã é mantido a um ou dois centímetros do interruptor.
Se você construiu a versão pull-up, a lógica é invertida: o monitor mostra 1 em repouso e 0 quando o ímã está presente (no vídeo em 22:13). De qualquer forma, você agora tem um detector de campo magnético sem contato confiável que custa quase nada e pode ser incluído em qualquer uma das ideias de projeto listadas no topo deste artigo.
A versão com botão de pressão desta mesma lição de leitura digital é abordada separadamente na Lição 7/31: Leitura Digital Botão de Pressão, detectando campo magnético SunFounder Kit | Robojax.
Projetos relacionados deste vídeo
Capítulos
- [00:00] Introdução: dois exemplos de leitura digital
- [01:33] O que significa leitura digital e HIGH/LOW
- [02:46] Como funciona um interruptor de botão de pressão
- [03:25] Teoria do resistor pull-up e pull-down
- [05:18] Ligação do botão de pressão na protoboard
- [08:21] Abrindo e explicando o sketch do botão
- [10:55] Carregando e testando o exemplo do botão
- [12:38] Apresentando o interruptor reed e testando-o com um multímetro
- [14:40] Ligação do interruptor reed ao pino 2
- [16:46] Testando o interruptor reed com um ímã
- [17:19] Explicando o sketch do interruptor reed
- [19:45] Usando INPUT_PULLUP sem um resistor externo
Imagens
/*
* Lesson 7/31-2: Digital read, working with reed switch
Download and resource page https://robojax.com/RJT590
watch video tutorial https://www.youtube.com/watch?v=yyJrqFKn-X4
* written/updated by Ahmad Shamshiri www.Robojax.com
* Dec 12, 2022
*
*/
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
Common Course Links
Common Course Files
Coisas que você pode precisar
-
AmazonasBuy reed switch from Amazonamzn.to
-
Amazonas
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
-
eBayBuy reed switch from eBayebay.us
-
AliExpressBuy reed switch from AliExpresss.click.aliexpress.com
Recursos e referências
-
DocumentaçãoDocumentação para o Kit de Aprendizado 3 em 1 IoT/Carro Inteligente/SunFounderdocs.sunfounder.com
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Código fonte do kit de aprendizado Smart Car 3 em 1 da SunFounder
3in1-kit-main-v2.zip12.80 MB
Manual do Usuário
-
Manual de montagem do SunFounder 3-em-1 Arduino Smart CarEste documento mostra a montagem passo a passo do SunFounder 3-em-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB