Lekcja 7/31-2 : wykrywanie pola magnetycznego za pomocą przełącznika reed | Zestaw SunFounder
Wykrywanie pola magnetycznego to jeden z najprostszych i najbardziej satysfakcjonujących sposobów na rozpoczęcie pracy z wejściami cyfrowymi na Arduino. W tym projekcie zbudujesz detektor pola magnetycznego wykorzystujący przełącznik reed — maleńki przełącznik w szklanej obudowie, który zamyka swoje styki, gdy magnes się do niego zbliży. Ponieważ przełącznik reed zachowuje się dokładnie jak przycisk (jest albo otwarty, albo zamknięty), stanowi doskonałe wprowadzenie do funkcji digitalRead(), a także uczy, dlaczego rezystor pull-down ma znaczenie i jak wbudowany pull-up wejściowy Arduino może go całkowicie zastąpić.
Gdy już to uruchomisz, ten sam układ stanie się sercem wielu rzeczywistych konstrukcji. Oto kilka praktycznych pomysłów, które możesz wypróbować:
- Alarm drzwi i okien — zamontuj przełącznik reed na ramie, a mały magnes na drzwiach; Arduino zgłosi „otwarte” w momencie, gdy magnes się oddali.
- Tachometr bezkontaktowy — przyklej magnes do obracającego się koła i zliczaj impulsy, aby zmierzyć obroty na minutę.
- Odczytywacz licznika wody lub gazu — wiele liczników mediów ma wyjście impulsów magnetycznych, które przełącznik reed może wychwycić i rejestrować.
- Czujnik pokrywy laptopa / obudowy — wykrywaj zamknięcie pokrywy, aby wywołać uśpienie lub zapalić diodę statusu.
- Prędkościomierz rowerowy — magnes na szprysze i przełącznik reed na widelcu dają jeden impuls na obrót koła.
- Wykrywanie sabotażu — ukryj parę magnes i przełącznik reed wewnątrz obudowy, aby wiedzieć, czy została otwarta.
Jak działa przełącznik reed
Przełącznik reed to mała szklana kapsuła zawierająca dwa cienkie ferromagnetyczne blaszki (w filmie o 12:38). W obecności pola magnetycznego blaszki są przyciągane do siebie i stykają się, zamykając obwód. Usuń magnes, a blaszki odskoczą od siebie, ponownie otwierając obwód. Na tym polega cała zasada działania — to przełącznik bez ruchomego przycisku, bez zużycia od naciskania palcem i bez potrzeby fizycznego kontaktu z obiektem, który wykrywasz.
Możesz zweryfikować to zachowanie multimetrem w trybie ciągłości (w filmie o 13:59): gdy w pobliżu nie ma magnesu, miernik pokazuje obwód otwarty, a gdy tylko magnes się zbliży, brzęczyk się odzywa, a miernik wskazuje obwód zamknięty. Ponieważ przełącznik jest elektrycznie identyczny z przyciskiem, kod Arduino i okablowanie są takie same jak w przypadku każdego innego wejścia cyfrowego.
Wejścia cyfrowe i rezystory pull wyjaśnione
Arduino odczytuje pin cyfrowy jako HIGH albo LOW. Na płytce 5 V wszystko powyżej około 2,2 V jest traktowane jako HIGH, a wszystko poniżej około 1,5 V jako LOW (w filmie o 01:49). Problem polega na tym, że przełącznik podłączony bezpośrednio między pinem a 5 V pozostawia pin w stanie nieustalonym, gdy przełącznik jest otwarty — nie jest podłączony do niczego, więc zbiera zakłócenia i zwraca losowe wartości.
Dlatego właśnie stosuje się rezystor. Dwa układy działają równie dobrze:
- Rezystor podciągający do masy: rezystor 10 kΩ od pinu do masy. Pin odczytuje stan LOW, gdy przełącznik jest otwarty, i HIGH, gdy przełącznik łączy pin z 5 V.
- Rezystor podciągający do zasilania: rezystor 10 kΩ od pinu do 5 V. Pin odczytuje stan HIGH, gdy przełącznik jest otwarty, i LOW, gdy przełącznik łączy pin z masą.
Arduino ma również wewnętrzny rezystor podciągający, który można włączyć programowo za pomocą INPUT_PULLUP (w filmie o 19:52). Eliminuje to całkowicie potrzebę stosowania zewnętrznego rezystora — pin pozostaje w stanie HIGH, a zamknięcie przełącznika do masy ściąga go do stanu LOW. Kompromisem jest odwrócenie logiki: wciśnięcie (lub obecność magnesu) odczytuje teraz 0 zamiast 1.
Sprzęt i komponenty
- Arduino Uno (lub dowolna kompatybilna płytka)
- Moduł przełącznika reed lub goły przełącznik reed
- Rezystor 10 kΩ (potrzebny tylko w wersji z rezystorem podciągającym do masy)
- Płytka stykowa i przewody połączeniowe
- Mały magnes do testowania
- Kabel USB do programowania i zasilania
Przewodnik po połączeniach
Przełącznik reed podłącza się dokładnie tak samo jak przycisk. Jedna nóżka przełącznika reed idzie do 5 V, druga nóżka idzie do pinu 2 Arduino oraz do jednego końca rezystora 10 kΩ. Drugi koniec rezystora idzie do masy (w filmie o 14:40). Jest to konfiguracja z rezystorem podciągającym do masy, więc pin odczytuje stan LOW, gdy nie ma magnesu, i HIGH, gdy magnes zamyka przełącznik.
Na płytce stykowej umieść przełącznik reed tak, aby jego dwie nóżki znajdowały się w różnych rzędach, podłącz rezystor z tego samego rzędu co jedna nóżka do szyny masy, poprowadź czerwony przewód od drugiej nóżki do szyny 5 V, a zielony przewód od złącza przełącznika reed i rezystora do pinu 2 (w filmie o 15:53). Czarny idzie do masy, czerwony do 5 V, zielony do pinu 2 — ta sama konwencja kolorów stosowana w całym zestawie SunFounder.
Jeśli wolisz pominąć rezystor, podłącz jedną nóżkę przełącznika reed do pinu 2, a drugą bezpośrednio do masy, a następnie włącz INPUT_PULLUP w kodzie, jak opisano poniżej.
Objaśnienie kodu
Szkic jest celowo bardzo mały. Wszystko, co będziesz chciał zmienić, znajduje się w dwóch miejscach na początku pliku.
int reedPin = 2;//the pin reed switch is connected to
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);
}
reedPin — zmień tę liczbę, jeśli podłączyłeś przełącznik reed do innego pinu cyfrowego. Każdy pin cyfrowy w Uno działa; pin 2 jest tu użyty po prostu dlatego, że jest wygodny na płytce stykowej.
Serial.begin(9600) — ustawia prędkość monitora szeregowego. Jeśli zmienisz tę wartość, musisz również zmienić szybkość transmisji na liście rozwijanej w oknie Monitora szeregowego, w przeciwnym razie zobaczysz nieczytelne znaki (w filmie o 11:25).
pinMode(reedPin, INPUT) — konfiguruje pin jako wejście o wysokiej impedancji, aby mógł wykrywać napięcie ustalone przez przełącznik reed i rezystor. Jeśli zamiast tego używasz wewnętrznego rezystora podciągającego, zmień tę linię na pinMode(reedPin, INPUT_PULLUP); i pamiętaj, że odczyty będą odwrócone.
Pętla po prostu odczytuje pin i wypisuje wynik:
void loop() {
Serial.println(digitalRead(reedPin));
delay(10);
}
digitalRead(reedPin) zwraca 1, gdy pin jest w stanie HIGH, i 0, gdy jest w stanie LOW. Ponieważ wartość jest przekazywana bezpośrednio do Serial.println(), nie ma potrzeby stosowania zmiennej pośredniej — odczyt jest wypisywany bezpośrednio. Przy połączeniu z rezystorem podciągającym do masy 0 oznacza „brak pola magnetycznego”, a 1 oznacza „wykryto magnes” (w filmie o 18:31).
delay(10) kontroluje, jak często odczyt jest wypisywany. Dziesięć milisekund jest wystarczająco szybkie, że zobaczysz zmianę wartości w momencie, gdy magnes się zbliży. Jeśli wolisz spokojniejszy wyświetlacz, możesz zwiększyć tę wartość do 200 ms, ale pamiętaj, że spowolni to również wykrywanie (w filmie o 12:01).
Demonstracja projektu na żywo
Po wgraniu szkicu otwórz Monitor szeregowy i ustaw szybkość transmisji na 9600. Gdy w pobliżu nie ma magnesu, okno wypełnia się zerami. Zbliż mały magnes do szklanej kapsułki, a dane wyjściowe natychmiast zmienią się na jedynki; odsuń magnes, a wrócą do zera (w filmie o 17:04). Reakcja jest natychmiastowa i działa nawet wtedy, gdy magnes jest trzymany centymetr lub dwa od przełącznika.
Jeśli zamiast tego zbudowałeś wersję z rezystorem podciągającym do zasilania, logika jest odwrócona: monitor pokazuje 1 w spoczynku i 0, gdy magnes jest obecny (w filmie o 22:13). Tak czy inaczej, masz teraz niezawodny, bezkontaktowy detektor pola magnetycznego, który kosztuje prawie nic i można go wykorzystać w dowolnym z pomysłów na projekt wymienionych na początku tego artykułu.
Wersja tego samego ćwiczenia odczytu cyfrowego z przyciskiem jest omówiona osobno w Lekcja 7/31: Odczyt cyfrowy przycisku, wykrywanie pola magnetycznego SunFounder Kit | Robojax.
Powiązane projekty z tego filmu
Rozdziały
- [00:00] Wprowadzenie: dwa przykłady odczytu cyfrowego
- [01:33] Co oznaczają odczyt cyfrowy oraz HIGH/LOW
- [02:46] Jak działa przełącznik przyciskowy
- [03:25] Teoria rezystora podciągającego i opuszczającego
- [05:18] Podłączanie przycisku na płytce stykowej
- [08:21] Otwieranie i omówienie szkicu przycisku
- [10:55] Wgrywanie i testowanie przykładu z przyciskiem
- [12:38] Wprowadzenie do przełącznika reed i testowanie go multimetrem
- [14:40] Podłączanie przełącznika reed do pinu 2
- [16:46] Testowanie przełącznika reed magnesem
- [17:19] Omówienie szkicu przełącznika reed
- [19:45] Używanie INPUT_PULLUP bez zewnętrznego rezystora
Obrazy
/*
* 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
Rzeczy, których możesz potrzebować
-
AmazonBuy reed switch from Amazonamzn.to
-
Amazon
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
AllegroBuy reed switch from eBayebay.us
-
AliExpressBuy reed switch from AliExpresss.click.aliexpress.com
Zasoby i odniesienia
-
DokumentacjaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ZewnętrznyPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Pliki📁
Biblioteki Arduino (zip)
-
Kod źródłowy zestawu edukacyjnego inteligentnego samochodu SunFounder 3-w-1
3in1-kit-main-v2.zip12.80 MB
Instrukcja obsługi
-
Instrukcja montażu SunFounder 3-in-1 Arduino Smart CarTen dokument pokazuje krok po kroku montaż SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB