如果您見過筆記本電腦或翻蓋式的手機,可能就已經注意到,當打開和關閉這些設備時,它會相應地自動的點亮和熄滅屏幕。但它怎么知道?如果您認為轉軸上安裝了某種開關來檢測這種打開和關閉動作,那么您是對的!
這些設備使用一種廉價且非常可靠的傳感器,稱為干簧管(磁簧開關,Reed Switch),當磁鐵靠近時它會導通或關斷。
干簧管用于各種創意應用,如開門傳感器、風速計(確定風速)等。它們非常適合任何需要非接觸式控制的項目。因此,讓我們仔細看看它們是什么以及它們是如何工作的!
干簧管概述
常見的干簧管包含一對由鐵磁材料制成的金屬簧片(這種材料很容易被磁化,但離開磁場時會失去磁性)。簧片觸點的表面鍍有耐磨金屬,例如銠、釕、鈀或銥,以延長其開關數百萬次時的使用壽命。
簧片被密封在管狀玻璃外殼內,以保持它們沒有灰塵和污垢。干簧管的密封性使其適用于易爆環境,在這些環境中,傳統開關的小火花會構成危險。玻璃管充滿惰性氣體,通常是氮氣,或真空,以防止觸點氧化。
通常,觸點由鎳鐵合金制成,這些材料易于磁化(具有高磁導率)但不會長時間保持這種狀態(具有低磁保持性)。作為一種機械設備,它們需要一些時間來響應磁場的變化 - 換句話說,與電子開關相比,它們的開關速度較低(通常為0.6ms開啟時間,0.2 ms關閉時間)。
在存在磁場的情況下,兩個觸點都會移動,它們會形成一個平坦、平行的相互接觸區域。這有助于增加簧片開關的壽命和可靠性。
干簧管只檢測磁場的存在,不測量其強度。如果您對測量強度感興趣,可以考慮使用模擬霍爾效應傳感器。
干簧管如何工作?
了解干簧管如何工作的關鍵是要認識到它們既是磁路的一部分,也是電氣電路的一部分 - 磁力和電流一樣流經它們。
當您將磁鐵靠近簧片開關時,整個開關將成為包括磁鐵在內的“磁路”的一部分(圖像中的虛線表示磁場的一部分)。
干簧管的兩個觸點變成相反的磁極,這就是它們吸引并卡在一起的原因。靠近磁鐵的哪一端并不重要:觸點仍然以相反的方式極化并相互吸引。
當你把磁鐵拿走時,觸點分離并返回到原來的位置。
像這樣的干簧管是常開的。這意味著通常當開關不受磁場影響時,開關打開且不導電。當磁鐵足夠靠近以激活開關時,觸點閉合并且電流流過。
在這些插圖中,觸點的移動在很大程度上被夸大了。真正的干簧管的觸點僅相距幾微米(大約比人的頭發細十倍)。所以這些動作是肉眼看不到的。
將干簧管連接到Arduino開發板
為我們的示例設置的電路盡可能簡單。首先彎曲開關的兩個引腳,使其垂直遠離開關主體,使它們形成“U”形。
將干簧管插入面包板。然后使用跳線將開關的一端連接到地,另一端連接到Arduino的D2引腳。
如果以這種方式連接開關,則需要激活Arduino的內置輸入引腳上拉電阻。否則,您必須在電路中使用外部10K上拉電阻。以下是示例電路:
!
Arduino代碼 - 讀取干簧管數據
這是一個基于上述電路的非常基本的Arduino草圖,當您將磁鐵靠近開關時,它將點亮內置LED(連接到引腳13),當您將其移開時熄滅。
const int REED_PIN = 2; // Pin connected to reed switch
const int LED_PIN = 13; // LED pin
void setup() {
Serial.begin(9600);
pinMode(REED_PIN, INPUT_PULLUP); // Enable internal pull-up for the reed switch
pinMode(LED_PIN, OUTPUT);
}
void loop() {
int proximity = digitalRead(REED_PIN); // Read the state of the switch
// If the pin reads low, the switch is closed.
if (proximity == LOW) {
Serial.println("Switch closed");
digitalWrite(LED_PIN, HIGH); // Turn the LED on
}
else {
Serial.println("Switch opened");
digitalWrite(LED_PIN, LOW); // Turn the LED off
}
}
上傳草圖后,抓住磁鐵,把它靠近開關。當磁鐵到達干簧管1厘米的距離時,它應該觸發。
代碼說明
該代碼比較通俗易懂。首先定義了兩個常量,它們聲明了干簧管和內置LED連接到的Arduino引腳。
const int REED_PIN = 2;
const int LED_PIN = 13;
在setup()函數中,干簧管引腳配置為輸入,而LED引腳配置為輸出。干簧管引腳啟用了內部上拉電阻。
void setup() {
Serial.begin(9600);
pinMode(REED_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
}
在loop()函數中,如果讀取到干簧管引腳為低電平,則點亮內置的LED燈,否則熄滅。
void loop() {
int proximity = digitalRead(REED_PIN);
if (proximity == LOW) {
Serial.println("Switch closed");
digitalWrite(LED_PIN, HIGH);
}
else {
Serial.println("Switch opened");
digitalWrite(LED_PIN, LOW);
}
}
-
磁場
+關注
關注
3文章
878瀏覽量
24214 -
干簧管
+關注
關注
3文章
80瀏覽量
28092 -
Arduin
+關注
關注
0文章
8瀏覽量
6118
發布評論請先 登錄
相關推薦
評論