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