Lezione 7/31-2 : rilevare il campo magnetico utilizzando l'interruttore reed | Kit SunFounder
Rilevare un campo magnetico è uno dei modi più semplici e soddisfacenti per iniziare con gli ingressi digitali su un Arduino. In questo progetto costruirai un rilevatore di campo magnetico usando un reed switch — un piccolo interruttore racchiuso in vetro che chiude i suoi contatti ogni volta che un magnete gli si avvicina. Poiché il reed switch si comporta esattamente come un pulsante (è o aperto o chiuso), è un'introduzione perfetta alla funzione digitalRead(), e ti insegna anche perché una resistenza di pull-down è importante e come il pull-up integrato dell'Arduino possa sostituirla completamente.
Una volta che questo funziona, lo stesso circuito diventa il cuore di molti progetti reali. Ecco alcune idee pratiche che puoi provare:
- Allarme per porte e finestre — monta il reed switch su un telaio e un piccolo magnete sulla porta; l'Arduino segnala "aperto" nel momento in cui il magnete si allontana.
- Tachimetro senza contatto — incolla un magnete su una ruota rotante e conta gli impulsi per misurare gli RPM.
- Lettore di contatori dell'acqua o del gas — molti contatori di utenza hanno un'uscita a impulsi magnetici che un reed switch può rilevare e registrare.
- Sensore per coperchio del laptop / custodia — rileva quando un coperchio è chiuso per attivare la sospensione o un LED di stato.
- Ciclocomputer — un magnete sul raggio e un reed switch sulla forcella ti danno un impulso per ogni giro della ruota.
- Rilevamento manomissione — nascondi una coppia magnete e reed switch all'interno di una custodia così sai se è stata aperta.
Come funziona un reed switch
Un reed switch è una piccola capsula di vetro contenente due sottili lamelle ferromagnetiche (nel video al minuto 12:38). In presenza di un campo magnetico le lamelle sono attratte l'una verso l'altra e si toccano, chiudendo il circuito. Rimuovi il magnete e le lamelle si separano di scatto, aprendo di nuovo il circuito. Questo è l'intero principio — è un interruttore senza pulsante mobile, senza usura dovuta alla pressione delle dita e senza bisogno di contatto fisico con l'oggetto che stai rilevando.
Puoi verificare questo comportamento con un multimetro in modalità continuità (nel video al minuto 13:59): senza magnete nelle vicinanze il multimetro mostra un circuito aperto, e non appena un magnete si avvicina il cicalino suona e il multimetro legge un circuito chiuso. Poiché l'interruttore è elettricamente identico a un pulsante, il codice Arduino e il cablaggio sono gli stessi di qualsiasi altro ingresso digitale.
Ingressi digitali e resistenze di pull spiegati
L'Arduino legge un pin digitale come HIGH o LOW. Su una scheda a 5 V, qualsiasi valore superiore a circa 2,2 V è considerato HIGH e qualsiasi valore inferiore a circa 1,5 V è considerato LOW (nel video al minuto 01:49). Il problema è che un interruttore collegato direttamente tra un pin e 5 V lascia il pin flottante quando l'interruttore è aperto — non è collegato a nulla, quindi capta disturbi e riporta valori casuali.
Ecco perché si usa una resistenza. Due configurazioni funzionano ugualmente bene:
- Pull-down: una resistenza da 10 kΩ dal pin a massa. Il pin legge LOW quando l'interruttore è aperto e HIGH quando l'interruttore collega il pin a 5 V.
- Pull-up: una resistenza da 10 kΩ dal pin a 5 V. Il pin legge HIGH quando l'interruttore è aperto e LOW quando l'interruttore collega il pin a massa.
L'Arduino ha anche una resistenza di pull-up interna che può essere abilitata via software con INPUT_PULLUP (nel video a 19:52). Questo elimina completamente la necessità della resistenza esterna — il pin rimane HIGH a riposo, e chiudendo l'interruttore a massa lo porta a LOW. Il compromesso è che la logica è invertita: premuto (o magnete presente) ora legge 0 invece di 1.
Hardware e componenti
- Arduino Uno (o qualsiasi scheda compatibile)
- Modulo reed switch o reed switch nudo
- Resistenza da 10 kΩ (necessaria solo per la versione pull-down)
- Breadboard e fili jumper
- Un piccolo magnete per i test
- Cavo USB per la programmazione e l'alimentazione
Guida al cablaggio
Il reed switch è cablato esattamente come un pulsante. Un piedino del reed switch va a 5 V, l'altro piedino va al pin 2 di Arduino e a un'estremità della resistenza da 10 kΩ. L'altra estremità della resistenza va a massa (nel video a 14:40). Questa è una configurazione pull-down, quindi il pin legge LOW senza magnete presente e HIGH quando un magnete chiude l'interruttore.
Sulla breadboard, posiziona il reed switch in modo che i suoi due piedini si trovino in righe diverse, collega la resistenza dalla stessa riga di un piedino alla barra di massa, porta un filo rosso dall'altro piedino alla barra da 5 V, e un filo verde dalla giunzione del reed switch e della resistenza al pin 2 (nel video a 15:53). Il nero va a massa, il rosso va a 5 V, il verde va al pin 2 — la stessa convenzione di colori usata in tutto il kit SunFounder.
Se preferisci evitare la resistenza, collega un piedino del reed switch al pin 2 e l'altro piedino direttamente a massa, poi abilita INPUT_PULLUP nel codice come descritto di seguito.
Spiegazione del codice
Lo sketch è volutamente minuscolo. Tutto ciò che vorrai modificare si trova in due punti nella parte superiore del file.
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
reedPin — cambia questo numero se hai cablato il reed switch a un pin digitale diverso. Qualsiasi pin digitale sull'Uno funziona; il pin 2 è usato qui semplicemente perché è comodo sulla breadboard.
Serial.begin(9600) — imposta la velocità del monitor seriale. Se cambi questo valore devi anche cambiare il menu a tendina del baud rate nella finestra del Monitor Seriale, altrimenti vedrai caratteri illeggibili (nel video a 11:25).
pinMode(reedPin, INPUT) — configura il pin come ingresso ad alta impedenza in modo che possa rilevare la tensione impostata dal reed switch e dalla resistenza. Se stai usando il pull-up interno, cambia questa riga in pinMode(reedPin, INPUT_PULLUP); e ricorda che le letture saranno invertite.
Il loop semplicemente legge il pin e stampa il risultato:
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
digitalRead(reedPin) restituisce 1 quando il pin è HIGH e 0 quando è LOW. Poiché il valore viene passato direttamente a Serial.println(), non serve una variabile intermedia — la lettura viene stampata direttamente. Con il cablaggio pull-down, 0 significa "nessun campo magnetico" e 1 significa "magnete rilevato" (nel video a 18:31).
delay(10) controlla la frequenza con cui viene stampata una lettura. Dieci millisecondi sono abbastanza veloci da vedere il valore cambiare nell'istante in cui un magnete si avvicina. Se preferisci un display più calmo puoi aumentarlo a 200 ms, ma nota che questo rallenta anche il rilevamento (nel video a 12:01).
Dimostrazione del progetto dal vivo
Dopo aver caricato lo sketch, apri il Monitor Seriale e imposta il baud rate a 9600. Senza magnete nelle vicinanze la finestra si riempie di zeri. Avvicina un piccolo magnete alla capsula di vetro e l'output passa immediatamente a uno; allontana il magnete e torna a zero (nel video a 17:04). La risposta è istantanea e funziona anche quando il magnete viene tenuto a un centimetro o due dall'interruttore.
Se invece hai costruito la versione pull-up, la logica è invertita: il monitor mostra 1 a riposo e 0 quando il magnete è presente (nel video a 22:13). In entrambi i casi, ora hai un rilevatore di campo magnetico senza contatto, affidabile, che costa quasi nulla e può essere inserito in qualsiasi delle idee progettuali elencate all'inizio di questo articolo.
La versione con pulsante di questa stessa lezione di lettura digitale è trattata separatamente nella Lezione 7/31: Lettura digitale pulsante, rilevamento campo magnetico SunFounder Kit | Robojax.
Progetti correlati da questo video
Capitoli
- [00:00] Introduzione: due esempi di lettura digitale
- [01:33] Cosa significano lettura digitale e HIGH/LOW
- [02:46] Come funziona un interruttore a pulsante
- [03:25] Teoria delle resistenze di pull-up e pull-down
- [05:18] Cablaggio del pulsante sulla breadboard
- [08:21] Apertura e spiegazione dello sketch del pulsante
- [10:55] Caricamento e test dell'esempio del pulsante
- [12:38] Introduzione dell'interruttore reed e test con un multimetro
- [14:40] Cablaggio dell'interruttore reed al pin 2
- [16:46] Test dell'interruttore reed con un magnete
- [17:19] Spiegazione dello sketch dell'interruttore reed
- [19:45] Uso di INPUT_PULLUP senza una resistenza esterna
Immagini
/*
* 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
Cose di cui potresti avere bisogno
-
AmazonBuy reed switch from Amazonamzn.to
-
Amazon
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
eBayBuy reed switch from eBayebay.us
-
AliExpressBuy reed switch from AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
DocumentazioneDocumentazione per il kit di apprendimento SunFounder 3 in 1 IoT/Smart Car.docs.sunfounder.com
-
Esterno
File📁
Librerie Arduino (zip)
-
Codice sorgente del kit di apprendimento Smart Car 3-in-1 di SunFounder
3in1-kit-main-v2.zip12.80 MB
Manuale dell'utente
-
Manuale di assemblaggio SunFounder 3-in-1 Arduino Smart CarQuesto documento mostra l'assemblaggio passo dopo passo della SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB