Skip to content

Latest commit

 

History

History
104 lines (77 loc) · 3.52 KB

File metadata and controls

104 lines (77 loc) · 3.52 KB

迷你磁簧模块

一、 模块介绍

迷你磁簧,全称迷你磁簧开关(干簧管模块),是一种利用磁场控制通断的无源开关组件,这类磁性感应器件一般作为门磁检测、位置检测、限位触发使用,目前已经广泛用于嵌入式设备、智能硬件、创客 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()