Cerca codice

Lezione 7/31-2 : rilevare il campo magnetico utilizzando l'interruttore reed | Kit SunFounder

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.

reed_switch

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

lesson-7-reading-reed-with-magnet-multimeter

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.

why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-8
pulsante con INPUT_PULLUP

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

lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring

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.

lesson-7-reading-reed-wiring-on-breadboard

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

reed_switch
reed_switch
push button with INPUT_PULLUP
push button with INPUT_PULLUP
why_use_resistor_switch-1
why_use_resistor_switch-1
why_use_resistor_switch-2
why_use_resistor_switch-2
why_use_resistor_switch-3
why_use_resistor_switch-3
why_use_resistor_switch-4
why_use_resistor_switch-4
why_use_resistor_switch-5
why_use_resistor_switch-5
why_use_resistor_switch-6
why_use_resistor_switch-6
why_use_resistor_switch-7
why_use_resistor_switch-7
why_use_resistor_switch-8
why_use_resistor_switch-8
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-reed-with-magnet-multimeter
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-schematic
lesson-7-reading-push-button-wiring
lesson-7-reading-push-button-wiring
lesson-7-reading-reed-schematic
lesson-7-reading-reed-schematic
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring
lesson-7-reading-reed-wiring-on-breadboard
lesson-7-reading-reed-wiring-on-breadboard
932-Lesson 7/31-2: Digital read, working with reed switch
Lingua: C++
/*
 * 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);       
}

File📁

Librerie Arduino (zip)

Manuale dell'utente