Caută cod

Lecția 7/31-2 : detectarea câmpului magnetic folosind întrerupătorul reed | Kitul SunFounder

Lecția 7/31-2 : detectarea câmpului magnetic folosind întrerupătorul reed | Kitul SunFounder

Detectarea unui câmp magnetic este una dintre cele mai simple și mai satisfăcătoare modalități de a începe cu intrări digitale pe un Arduino. În acest proiect vei construi un detector de câmp magnetic folosind un comutator reed — un mic comutator încapsulat în sticlă care își închide contactele ori de câte ori un magnet se apropie de el. Deoarece comutatorul reed se comportă exact ca un buton (este fie deschis, fie închis), este o introducere perfectă în funcția digitalRead() și te învață și de ce contează un rezistor pull-down și cum pull-up-ul intern al Arduino îl poate înlocui complet.

reed_switch

Odată ce ai acest lucru funcțional, același circuit devine inima multor construcții din lumea reală. Iată câteva idei practice pe care le poți încerca:

  • Alarmă pentru uși și ferestre — montează comutatorul reed pe un toc și un mic magnet pe ușă; Arduino raportează „deschis" în momentul în care magnetul se îndepărtează.
  • Tahometru fără contact — lipește un magnet pe o roată rotativă și numără impulsurile pentru a măsura RPM.
  • Cititor de contor de apă sau gaz — multe contoare de utilități au o ieșire cu impuls magnetic pe care un comutator reed o poate detecta și înregistra.
  • Senor pentru capacul laptopului / carcasă — detectează când un capac este închis pentru a declanșa somnul sau un LED de stare.
  • Vitezometru pentru bicicletă — un magnet pe spiță și un comutator reed pe furcă îți oferă un impuls per rotație a roții.
  • Detectarea manipulării — ascunde o pereche magnet și comutator reed în interiorul unei carcase pentru a ști dacă a fost deschisă.

Cum funcționează un comutator reed

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

Un comutator reed este o mică capsulă de sticlă care conține două lame subțiri feromagnetice (în video la 12:38). În prezența unui câmp magnetic, lamele sunt atrase una spre cealaltă și se ating, închizând circuitul. Îndepărtează magnetul și lamele se despart, deschizând din nou circuitul. Acesta este întregul principiu — este un comutator fără buton mobil, fără uzură din apăsări cu degetul și fără nevoia de contact fizic cu obiectul pe care îl detectezi.

Poți verifica acest comportament cu un multimetru în modul de continuitate (în video la 13:59): fără magnet în apropiere, multimetrul arată un circuit deschis, iar imediat ce un magnet se apropie, buzzerul sună și multimetrul indică un circuit închis. Deoarece comutatorul este identic din punct de vedere electric cu un buton, codul Arduino și cablajul sunt aceleași ca pentru orice altă intrare digitală.

Intrări digitale și rezistoare pull explicate

Arduino citește un pin digital fie ca HIGH, fie ca LOW. Pe o placă de 5 V, orice peste aproximativ 2,2 V este tratat ca HIGH și orice sub aproximativ 1,5 V ca LOW (în video la 01:49). Problema este că un comutator conectat direct între un pin și 5 V lasă pinul în stare flotantă când comutatorul este deschis — nu este conectat la nimic, așa că preia zgomot și raportează valori aleatorii.

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
buton cu INPUT_PULLUP

De aceea se folosește un rezistor. Două configurații funcționează la fel de bine:

  • Tragere în jos: un rezistor de 10 kΩ de la pin la masă. Pinul citește LOW când comutatorul este deschis și HIGH când comutatorul conectează pinul la 5 V.
  • Tragere în sus: un rezistor de 10 kΩ de la pin la 5 V. Pinul citește HIGH când comutatorul este deschis și LOW când comutatorul conectează pinul la masă.

Arduino are, de asemenea, un rezistor intern de tragere în sus care poate fi activat din software cu INPUT_PULLUP (în video la 19:52). Acest lucru elimină complet necesitatea rezistorului extern — pinul stă în repaus la HIGH, iar închiderea comutatorului la masă îl trage la LOW. Compromisul este că logica este inversată: apăsat (sau magnet prezent) citește acum 0 în loc de 1.

Hardware și componente

  • Arduino Uno (sau orice placă compatibilă)
  • Modul comutator reed sau comutator reed simplu
  • Rezistor de 10 kΩ (necesar doar pentru versiunea cu tragere în jos)
  • Breadboard și fire de conexiune
  • Un mic magnet pentru testare
  • Cablu USB pentru programare și alimentare

Ghid de conectare

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

Comutatorul reed este conectat exact ca un buton. Un terminal al comutatorului reed merge la 5 V, celălalt terminal merge la pinul 2 al Arduino și la un capăt al rezistorului de 10 kΩ. Celălalt capăt al rezistorului merge la masă (în video la 14:40). Aceasta este o configurație cu tragere în jos, astfel încât pinul citește LOW fără magnet prezent și HIGH când un magnet închide comutatorul.

Pe breadboard, plasați comutatorul reed astfel încât cele două terminale ale sale să fie în rânduri diferite, conectați rezistorul de la același rând ca un terminal în jos la șina de masă, trageți un fir roșu de la celălalt terminal la șina de 5 V și un fir verde de la joncțiunea dintre comutatorul reed și rezistor la pinul 2 (în video la 15:53). Negru merge la masă, roșu merge la 5 V, verde merge la pinul 2 — aceeași convenție de culori folosită în întregul kit SunFounder.

Dacă preferați să săriți peste rezistor, conectați un terminal al comutatorului reed la pinul 2 și celălalt terminal direct la masă, apoi activați INPUT_PULLUP în cod, așa cum este descris mai jos.

Explicația codului

Sketch-ul este intenționat foarte mic. Tot ce veți dori să modificați se află în două locuri în partea de sus a fișierului.

int reedPin = 2;//the pin reed switch is connected to 

void setup() {
  Serial.begin(9600);
  pinMode(reedPin, INPUT);
}

reedPin — modificați acest număr dacă ați conectat comutatorul reed la un alt pin digital. Orice pin digital de pe Uno funcționează; pinul 2 este folosit aici pur și simplu pentru că este convenabil pe breadboard.

Serial.begin(9600) — setează viteza monitorului serial. Dacă modificați această valoare, trebuie să modificați și rata de baud din meniul derulant al ferestrei Serial Monitor, altfel veți vedea caractere fără sens (în video la 11:25).

pinMode(reedPin, INPUT) — configurează pinul ca intrare de înaltă impedanță, astfel încât să poată detecta tensiunea stabilită de comutatorul reed și rezistor. Dacă folosiți în schimb tragerea internă în sus, schimbați această linie în pinMode(reedPin, INPUT_PULLUP); și rețineți că citirile vor fi inversate.

Bucla citește pur și simplu pinul și afișează rezultatul:

void loop() {
  Serial.println(digitalRead(reedPin));
  delay(10);       
}

digitalRead(reedPin) returnează 1 când pinul este HIGH și 0 când este LOW. Deoarece valoarea este transmisă direct în Serial.println(), nu este nevoie de o variabilă intermediară — citirea este afișată direct. Cu conexiunea cu tragere în jos, 0 înseamnă „fără câmp magnetic" și 1 înseamnă „magnet detectat" (în video la 18:31).

delay(10) controlează cât de des este afișată o citire. Zece milisecunde este suficient de rapid pentru a vedea valoarea schimbându-se în momentul în care un magnet se apropie. Dacă preferați un afișaj mai calm, îl puteți crește la 200 ms, dar rețineți că acest lucru încetinește și detectarea (în video la 12:01).

Demonstrație live a proiectului

După încărcarea sketch-ului, deschideți Serial Monitor și setați rata de baud la 9600. Fără magnet în apropiere, fereastra se umple cu zerouri. Apropiați un mic magnet de capsula de sticlă și ieșirea comută imediat la unu; îndepărtați magnetul și revine la zero (în video la 17:04). Răspunsul este instantaneu și funcționează chiar și când magnetul este ținut la un centimetru sau doi de comutator.

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

Dacă ați construit în schimb versiunea cu tragere în sus, logica este inversată: monitorul afișează 1 în repaus și 0 când magnetul este prezent (în video la 22:13). În orice caz, aveți acum un detector de câmp magnetic fără contact, fiabil, care costă aproape nimic și poate fi integrat în oricare dintre ideile de proiect enumerate la începutul acestui articol.

Versiunea cu buton a acestei lecții de citire digitală este tratată separat în Lecția 7/31: Citire digitală buton, detectarea câmpului magnetic SunFounder Kit | Robojax.

Proiecte similare din acest videoclip

Capitole

  • [00:00] Introducere: două exemple de citire digitală
  • [01:33] Ce înseamnă citire digitală și HIGH/LOW
  • [02:46] Cum funcționează un întrerupător cu buton
  • [03:25] Teoria rezistențelor pull-up și pull-down
  • [05:18] Conectarea butonului pe breadboard
  • [08:21] Deschiderea și explicarea schiței butonului
  • [10:55] Încărcarea și testarea exemplului cu buton
  • [12:38] Prezentarea întrerupătorului reed și testarea acestuia cu un multimetru
  • [14:40] Conectarea întrerupătorului reed la pinul 2
  • [16:46] Testarea întrerupătorului reed cu un magnet
  • [17:19] Explicarea schiței întrerupătorului reed
  • [19:45] Utilizarea INPUT_PULLUP fără un rezistor extern

Imagini

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
Limba: 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);       
}

Resurse și referințe

Fișiere📁

Biblioteci Arduino (zip)

Manualul utilizatorului