风筝
发表于: 2022-11-10 16:11:47 | 显示全部楼层

如果您见过笔记本电脑或翻盖式的手机,可能就已经注意到,当打开和关闭这些设备时,它会相应地自动的点亮和熄灭屏幕。但它怎么知道?如果您认为转轴上安装了某种开关来检测这种打开和关闭动作,那么您是对的!


这些设备使用一种廉价且非常可靠的传感器,称为干簧管(磁簧开关,Reed Switch),当磁铁靠近时它会导通或关断。


干簧管用于各种创意应用,如开门传感器、风速计(确定风速)等。它们非常适合任何需要非接触式控制的项目。因此,让我们仔细看看它们是什么以及它们是如何工作的!


干簧管概述

常见的干簧管包含一对由铁磁材料制成的金属簧片(这种材料很容易被磁化,但离开磁场时会失去磁性)。簧片触点的表面镀有耐磨金属,例如铑、钌、钯或铱,以延长其开关数百万次时的使用寿命。


簧片被密封在管状玻璃外壳内,以保持它们没有灰尘和污垢。干簧管的密封性使其适用于易爆环境,在这些环境中,传统开关的小火花会构成危险。玻璃管充满惰性气体,通常是氮气,或真空,以防止触点氧化。

Reed-Switch-Construction.jpg


通常,触点由镍铁合金制成,这些材料易于磁化(具有高磁导率)但不会长时间保持这种状态(具有低磁保持性)。作为一种机械设备,它们需要一些时间来响应磁场的变化 - 换句话说,与电子开关相比,它们的开关速度较低(通常为0.6ms开启时间,0.2 ms关闭时间)。


在存在磁场的情况下,两个触点都会移动,它们会形成一个平坦、平行的相互接触区域。这有助于增加簧片开关的寿命和可靠性。


干簧管只检测磁场的存在,不测量其强度。如果您对测量强度感兴趣,可以考虑使用模拟霍尔效应传感器。


干簧管如何工作?

了解干簧管如何工作的关键是要认识到它们既是磁路的一部分,也是电气电路的一部分 - 磁力和电流一样流经它们。


当您将磁铁靠近簧片开关时,整个开关将成为包括磁铁在内的“磁路”的一部分(图像中的虚线表示磁场的一部分)。

Reed-Switch-Magnetic-and-Electric-Circuit.jpg



干簧管的两个触点变成相反的磁极,这就是它们吸引并卡在一起的原因。靠近磁铁的哪一端并不重要:触点仍然以相反的方式极化并相互吸引。


当你把磁铁拿走时,触点分离并返回到原来的位置。

Reed-Switch-Working-Animation.gif


像这样的干簧管是常开的。这意味着通常当开关不受磁场影响时,开关打开且不导电。当磁铁足够靠近以激活开关时,触点闭合并且电流流过。


在这些插图中,触点的移动在很大程度上被夸大了。真正的干簧管的触点仅相距几微米(大约比人的头发细十倍)。所以这些动作是肉眼看不到的。

Actual-Reed-Switch-Working.gif


将干簧管连接到Arduino开发板

为我们的示例设置的电路尽可能简单。首先弯曲开关的两个引脚,使其垂直远离开关主体,使它们形成“U”形。


将干簧管插入面包板。然后使用跳线将开关的一端连接到地,另一端连接到Arduino的D2引脚。


如果以这种方式连接开关,则需要激活Arduino的内置输入引脚上拉电阻。否则,您必须在电路中使用外部10K上拉电阻。以下是示例电路:

Wiring-Reed-Switch-with-an-Arduino.jpg


Arduino代码 - 读取干簧管数据

这是一个基于上述电路的非常基本的Arduino草图,当您将磁铁靠近开关时,它将点亮内置LED(连接到引脚13),当您将其移开时熄灭。

  1. const int REED_PIN = 2;        // Pin connected to reed switch
  2. const int LED_PIN = 13;        // LED pin

  3. void setup() {
  4.         Serial.begin(9600);
  5.         pinMode(REED_PIN, INPUT_PULLUP);        // Enable internal pull-up for the reed switch
  6.         pinMode(LED_PIN, OUTPUT);
  7. }

  8. void loop() {
  9.         int proximity = digitalRead(REED_PIN); // Read the state of the switch
  10.         
  11.         // If the pin reads low, the switch is closed.
  12.         if (proximity == LOW) {
  13.                 Serial.println("Switch closed");
  14.                 digitalWrite(LED_PIN, HIGH);        // Turn the LED on
  15.         }
  16.         else {
  17.                 Serial.println("Switch opened");
  18.                 digitalWrite(LED_PIN, LOW);                // Turn the LED off
  19.         }
  20. }
复制代码

上传草图后,抓住磁铁,把它靠近开关。当磁铁到达干簧管1厘米的距离时,它应该触发。

Reed-Switch-Arduino-Code-Output.jpg


代码说明

该代码比较通俗易懂。首先定义了两个常量,它们声明了干簧管和内置LED连接到的Arduino引脚。

  1. const int REED_PIN = 2;
  2. const int LED_PIN = 13;
复制代码

在setup()函数中,干簧管引脚配置为输入,而LED引脚配置为输出。干簧管引脚启用了内部上拉电阻。

  1. void setup() {
  2.         Serial.begin(9600);
  3.         pinMode(REED_PIN, INPUT_PULLUP);
  4.         pinMode(LED_PIN, OUTPUT);
  5. }
复制代码

在loop()函数中,如果读取到干簧管引脚为低电平,则点亮内置的LED灯,否则熄灭。

  1. void loop() {
  2.         int proximity = digitalRead(REED_PIN);

  3.         if (proximity == LOW) {
  4.                 Serial.println("Switch closed");
  5.                 digitalWrite(LED_PIN, HIGH);
  6.         }
  7.         else {
  8.                 Serial.println("Switch opened");
  9.                 digitalWrite(LED_PIN, LOW);
  10.         }
  11. }
复制代码

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-23 02:47 , Processed in 0.041096 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表