迷你磁簧,全称迷你磁簧开关(干簧管模块),是一种利用磁场控制通断的无源开关组件,这类磁性感应器件一般作为门磁检测、位置检测、限位触发使用,目前已经广泛用于嵌入式设备、智能硬件、创客 DIY 场景;它能够在磁场靠近时导通、磁场远离时断开,拥有体积小、响应快、无机械触点磨损、低功耗、即插即用、适配 3.3V/5V 低压环境、可直接接 GPIO 检测、使用寿命长等优点。
迷你磁环组成:
工作原理:
模块本质是一个受磁场控制的开关。当磁铁靠近模块时,玻璃管内的磁簧片被磁化并相互吸引接触,电路导通;当磁铁远离时,簧片失去磁性并依靠弹性分离,电路断开,以此实现磁场触发的开关信号输出。
根据表格和图片指导,将外设与开发板一一对应连接
| 外设 | 开发板 |
|---|---|
| 磁簧(+) | 3.3V |
| 磁簧(-) | GND |
| 磁簧(S) | PIN4(GPIO31) |
from machine import Pin
import utime
class MiniMagneticController(object):
"""Mini magnetic sensor module control class."""
def __init__(
self,
sensor_pin=Pin.GPIO31,
output_pin=Pin.GPIO30,
trigger_level=0,
output_active_level=1,
):
# Typical scenario: After the door magnet is triggered, it increases the output, driving the warning light, buzzer or relay.
self.sensor = Pin(sensor_pin, Pin.IN, Pin.PULL_PU)
self.output = Pin(output_pin, Pin.OUT, Pin.PULL_DISABLE, 0)
self.trigger_level = trigger_level
self.output_active_level = output_active_level
self.output_inactive_level = 0 if output_active_level else 1
self.last_state = self.sensor.read()
# Read magnetic sensor
def read_sensor(self):
return self.sensor.read()
def is_triggered(self):
return self.read_sensor() == self.trigger_level
# Output linkage control
def set_output(self, active):
level = self.output_active_level if active else self.output_inactive_level
self.output.write(level)
# Update output linkage based on sensor state, and return whether the state has changed and whether it is currently triggered.
def update(self):
state = self.read_sensor()
triggered = state == self.trigger_level
self.set_output(triggered)
if triggered:
print("Magnetic field change detected")
else:
print("No magnetic field change detected")
changed = state != self.last_state
self.last_state = state
return changed, triggered
def monitor(self):
# Practical Applications: Periodic polling and output linkage, commonly used for access control status indication and intrusion detection.
while True:
changed, triggered = self.update()
if changed:
if triggered:
print("[MiniMagnetic] Event: trigger edge")
else:
print("[MiniMagnetic] Event: release edge")
utime.sleep(1)
def main():
controller = MiniMagneticController(
sensor_pin=Pin.GPIO31,
output_pin=Pin.GPIO30,
trigger_level=0,
output_active_level=1,
)
controller.monitor()
if __name__ == '__main__':
main()
