在本教程中,我們將使用 Arduino 的中斷功能來檢測霍爾傳感器附近的磁鐵并發(fā)光 LED。大多數(shù)情況下,霍爾傳感器將僅與中斷一起使用,因為它們的應用需要高讀取和執(zhí)行速度,因此讓我們在本教程中也使用中斷。
所需材料:
霍爾效應傳感器(A3144 或任何其他數(shù)字版本)
Arduino (任何版本)
10k 歐姆和 1K 歐姆電阻器
發(fā)光二極管
連接線
霍爾效應傳感器:
在我們深入研究連接之前,您應該了解一些關于霍爾效應傳感器的重要事項。實際上,有兩種不同類型的霍爾傳感器,一種是數(shù)字霍爾傳感器,另一種是模擬霍爾傳感器。數(shù)字霍爾傳感器只能檢測磁鐵是否存在(0 或 1),但模擬霍爾傳感器的輸出根據(jù)磁鐵周圍的磁場而變化,它可以檢測磁鐵的強度或距離。在本項目中,將僅針對數(shù)字霍爾傳感器,因為它們是最常用的傳感器。
顧名思義,霍爾效應傳感器的工作原理是“霍爾效應”。根據(jù)該定律,“當垂直于磁場引入具有沿一個方向流動的電流的導體或半導體時,可以以與電流路徑成直角的方式測量電壓”。使用這種技術,霍爾傳感器將能夠檢測到其周圍是否存在磁鐵。理論夠了,讓我們進入硬件。
Arduino霍爾效應傳感器電路連接及說明:
霍爾傳感器與 Arduino 接口的完整電路圖如下。
如您所見,霍爾效應傳感器 arduino 電路圖非常簡單。但是,我們經(jīng)常犯錯誤的地方是弄清楚霍爾傳感器的引腳數(shù)。將讀數(shù)面向您,左側(cè)的第一個引腳分別是 Vcc,然后是接地和信號。
我們將如前所述使用中斷,因此霍爾傳感器的輸出引腳連接到 Arduino 的引腳 2。引腳連接到 LED,當檢測到磁鐵時,該 LED 將打開。我只是在面包板上進行了連接,完成后看起來有點像這樣。
Arduino 霍爾效應傳感器代碼:
完整的Arduino代碼只有幾行,它可以在這個頁面的底部找到,可以直接上傳到你的Arduino板。如果您想知道該程序的工作原理,請進一步閱讀。
我們有一個輸入,即傳感器,一個輸出是LED。傳感器必須作為中斷輸入連接。因此,在我們的設置函數(shù)中,我們初始化這些引腳,并使引腳 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
}
當檢測到中斷時,將如上行所述調(diào)用切換函數(shù)。有許多中斷參數(shù),如切換、變化、上升、下降等,但在本教程中,我們將檢測霍爾傳感器輸出的變化。
現(xiàn)在在切換函數(shù)中,我們使用一個名為“state”的變量,如果已經(jīng)是 1,它只會將其狀態(tài)更改為 0,如果已經(jīng)為零,則更改為 1。這樣,我們可以使 LED 打開或關閉。
void toggle() {
state = !state;
}
最后,在我們的循環(huán)功能中,我們只需要控制LED。每次檢測到磁鐵時,可變狀態(tài)都會改變,因此我們使用它來確定 LED 應該保持亮起還是熄滅。
void loop() {
digitalWrite(LED, state);
}
Arduino霍爾效應傳感器工作:
準備好硬件和代碼后,只需將代碼上傳到Arduino即可。我使用9V電池為整個設置供電,您可以使用任何更好的電源。現(xiàn)在將磁鐵靠近傳感器,您的 LED 會發(fā)光,如果您將其拿走,它將熄滅。
注意:霍爾傳感器對極點敏感,這意味著傳感器的一側(cè)只能檢測北極或僅檢測南極,而不能同時檢測兩者。因此,如果您將南極靠近北感應表面,您的 LED 將不會發(fā)光。
內(nèi)部實際發(fā)生的事情是,當我們把磁鐵靠近傳感器時,傳感器會改變其狀態(tài)。這種變化是由中斷引腳感應到的,中斷引腳將調(diào)用切換函數(shù),我們將變量“狀態(tài)”從 0 更改為 1。因此,LED 將亮起。現(xiàn)在,當我們將磁鐵從傳感器上移開時,傳感器的輸出將再次發(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文章
23794瀏覽量
672598 -
霍爾傳感器
+關注
關注
28文章
756瀏覽量
64316 -
中斷
+關注
關注
5文章
905瀏覽量
42644 -
Arduino
+關注
關注
189文章
6495瀏覽量
190493
發(fā)布評論請先 登錄
霍爾元件檢測距離的遠近與霍爾元件磁鐵的選擇
霍爾式曲軸位置傳感器的識別與檢測
如何檢測和應用線性霍爾傳感器
開關型霍爾傳感器可控制哪些元器件
霍爾速度傳感器原理

霍爾傳感器優(yōu)缺點_霍爾傳感器工作原理_霍爾傳感器檢測方法

使用霍爾傳感器和磁鐵的Arduino速度計
使用霍爾傳感器和磁鐵的Arduino車速表

評論