电子说
如果您见过笔记本电脑或翻盖式的手机,可能就已经注意到,当打开和关闭这些设备时,它会相应地自动的点亮和熄灭屏幕。但它怎么知道?如果您认为转轴上安装了某种开关来检测这种打开和关闭动作,那么您是对的!
这些设备使用一种廉价且非常可靠的传感器,称为干簧管(磁簧开关,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);
}
}
全部0条评论
快来发表一下你的评论吧 !