在本教程中,我們將使用 Arduino 的中斷功能來檢測霍爾傳感器附近的磁鐵并發光 LED。大多數情況下,霍爾傳感器將僅與中斷一起使用,因為它們的應用需要高讀取和執行速度,因此讓我們在本教程中也使用中斷。
所需材料:
霍爾效應傳感器(A3144 或任何其他數字版本)
Arduino (任何版本)
10k 歐姆和 1K 歐姆電阻器
發光二極管
連接線
霍爾效應傳感器:
在我們深入研究連接之前,您應該了解一些關于霍爾效應傳感器的重要事項。實際上,有兩種不同類型的霍爾傳感器,一種是數字霍爾傳感器,另一種是模擬霍爾傳感器。數字霍爾傳感器只能檢測磁鐵是否存在(0 或 1),但模擬霍爾傳感器的輸出根據磁鐵周圍的磁場而變化,它可以檢測磁鐵的強度或距離。在本項目中,將僅針對數字霍爾傳感器,因為它們是最常用的傳感器。
顧名思義,霍爾效應傳感器的工作原理是“霍爾效應”。根據該定律,“當垂直于磁場引入具有沿一個方向流動的電流的導體或半導體時,可以以與電流路徑成直角的方式測量電壓”。使用這種技術,霍爾傳感器將能夠檢測到其周圍是否存在磁鐵。理論夠了,讓我們進入硬件。
Arduino霍爾效應傳感器電路連接及說明:
霍爾傳感器與 Arduino 接口的完整電路圖如下。
如您所見,霍爾效應傳感器 arduino 電路圖非常簡單。但是,我們經常犯錯誤的地方是弄清楚霍爾傳感器的引腳數。將讀數面向您,左側的第一個引腳分別是 Vcc,然后是接地和信號。
我們將如前所述使用中斷,因此霍爾傳感器的輸出引腳連接到 Arduino 的引腳 2。引腳連接到 LED,當檢測到磁鐵時,該 LED 將打開。我只是在面包板上進行了連接,完成后看起來有點像這樣。
Arduino 霍爾效應傳感器代碼:
完整的Arduino代碼只有幾行,它可以在這個頁面的底部找到,可以直接上傳到你的Arduino板。如果您想知道該程序的工作原理,請進一步閱讀。
我們有一個輸入,即傳感器,一個輸出是LED。傳感器必須作為中斷輸入連接。因此,在我們的設置函數中,我們初始化這些引腳,并使引腳 2 作為中斷工作。這里的引腳 2 稱為 Hall_sensor,引腳 3 稱為 LED。
void setup() {
pinMode(LED, OUTPUT); //LED is a output pin
pinMode(Hall_sensor, INPUT_PULLUP); //Hall sensor is input pin
attachInterrupt(digitalPinToInterrupt(Hall_sensor), toggle, CHANGE); //Pin two is interrupt pin which will call toggle function
}
當檢測到中斷時,將如上行所述調用切換函數。有許多中斷參數,如切換、變化、上升、下降等,但在本教程中,我們將檢測霍爾傳感器輸出的變化。
現在在切換函數中,我們使用一個名為“state”的變量,如果已經是 1,它只會將其狀態更改為 0,如果已經為零,則更改為 1。這樣,我們可以使 LED 打開或關閉。
void toggle() {
state = !state;
}
最后,在我們的循環功能中,我們只需要控制LED。每次檢測到磁鐵時,可變狀態都會改變,因此我們使用它來確定 LED 應該保持亮起還是熄滅。
void loop() {
digitalWrite(LED, state);
}
Arduino霍爾效應傳感器工作:
準備好硬件和代碼后,只需將代碼上傳到Arduino即可。我使用9V電池為整個設置供電,您可以使用任何更好的電源。現在將磁鐵靠近傳感器,您的 LED 會發光,如果您將其拿走,它將熄滅。
注意:霍爾傳感器對極點敏感,這意味著傳感器的一側只能檢測北極或僅檢測南極,而不能同時檢測兩者。因此,如果您將南極靠近北感應表面,您的 LED 將不會發光。
內部實際發生的事情是,當我們把磁鐵靠近傳感器時,傳感器會改變其狀態。這種變化是由中斷引腳感應到的,中斷引腳將調用切換函數,我們將變量“狀態”從 0 更改為 1。因此,LED 將亮起?,F在,當我們將磁鐵從傳感器上移開時,傳感器的輸出將再次發生變化。我們的中斷語句再次注意到了這種變化,因此變量“state”將從 1 更改為 0。因此,如果 LED 熄滅。每次將磁鐵靠近傳感器時,都會重復相同的情況。
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;
int val=0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), test, CHANGE);
Serial.begin(9600);
}
void loop() {
digitalWrite(ledPin, state);
Serial.println(val/2);
}
void test() {
state = !state;
val++;
}
-
led
+關注
關注
242文章
23362瀏覽量
663222 -
霍爾傳感器
+關注
關注
27文章
728瀏覽量
63381 -
中斷
+關注
關注
5文章
900瀏覽量
41755 -
Arduino
+關注
關注
188文章
6477瀏覽量
187827
發布評論請先 登錄
相關推薦
霍爾元件檢測距離的遠近與霍爾元件磁鐵的選擇
如何檢測和應用線性霍爾傳感器
霍爾速度傳感器原理
![<b class='flag-5'>霍爾</b>速度<b class='flag-5'>傳感器</b>原理](https://file1.elecfans.com//web2/M00/A6/DB/wKgZomUMQOiAVGIvAABXH-4mVeg924.png)
評論