如果您见过笔记本电脑或翻盖式的手机,可能就已经注意到,当打开和关闭这些设备时,它会相应地自动的点亮和熄灭屏幕。但它怎么知道?如果您认为转轴上安装了某种开关来检测这种打开和关闭动作,那么您是对的!
这些设备使用一种廉价且非常可靠的传感器,称为干簧管(磁簧开关,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 switchconst int led_pin = 13; // led pinvoid 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); }}
电池的自放电为什么重要?电池需要多长时间才会自放电?
体验高达万兆网络速度,推荐几款好用的万兆网线
一种微型生态花园控制系统设计
青岛市蓝宝石晶片项目投产建设LED产业链
Valve最新的VR控制器细节暴露 或采用LCD显示屏
如何使用Arduino开发板连接干簧管(Reed Switch)
Android Wear深度解读:以通知为中心
iPhoneX和iPhoneSE将停产新品iPhone的价格大概是多少?
EMI测试外置预放是如何降低底噪的?
国际大厂争抢规格制定权,人工智能深入学习成应用焦点
华为首发5G标准芯片 5G基带芯片争霸赛设计架构是关键
GD32F103C8单片机的PWM输出试验
数字钥匙关键技术:UWB(超宽带)实现原理一文讲透
脉冲信号电缆驱动电路传输性能分析
嫦五回家 那个抢镜的小动物是谁?从嫦五返回器前跑过的是兔子
通过Goooood®狗帝 融合CDN解决内容传递痛点:
蔚来NIO Phone发布:蔚来风格,旗舰选择
中国的风电与光伏之争将在2026年后加剧
帮你解决功耗、效率问题!看看18W电源适配器方案有多给力
如何实现机智云开源框架下的换肤操作?