一、工作原理

门磁传感器的核心是干簧管,它是一个由磁场控制的“开关”。当磁铁靠近时,开关闭合,电路接通;当磁铁远离时,开关断开,电路切断。 磁铁靠近,簧片吸合,电路导通;磁铁远离,簧片断开,电路断开,通过检测这个电路的通断状态,就能判断门的开合。

二、简单介绍

门磁感通模块原理图

<1>引脚介绍

GND(1)  :接地引脚。
OUT(2)  :电路导通时输出低电平,电路断开时输出高电平。

<2>常用模式

门磁感通模块由永磁体门磁主体两部分组成:较小的部件为永磁体,内部有一块永久磁铁,用来产生恒定的磁场;较大的是门磁主体,也就是包含干簧管的部分。门磁感通模块常见有常开型常闭型。如图所示,一个干簧管,如果是常开型,则永磁体和门磁主体合上时干簧管接触在一起,电路导通,永磁体和门磁主体分开时干簧管分开,电路断开;而常闭型则是相反,永磁体和门磁主体合上时干簧管接触在一起,电路断开,永磁体和门磁主体分开时干簧管分开,电路导通。

<3>电路介绍

原理图中的电路是比较常见的用法,这个模块一般会使用在门上。当门磁模块是闭合的,就是门窗状态是关闭时,干簧管内部的两个干簧片是闭合的,输出一个低电平;当门磁模块是打开的,也就是门窗状态是被打开的,两个干簧片就会打开,输出一个高电平

三、代码实现

<1>door.c

#include "door.h"

void DOOR_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	
	RCC_APB2PeriphClockCmd (DOOR_GPIO_CLK, ENABLE );	// 打开连接 单片机引脚端口时钟
	GPIO_InitStructure.GPIO_Pin = DOOR_GPIO_PIN;		// 配置连接 单片机引脚模式
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;		// 设置为上拉输入
	GPIO_Init(DOOR_GPIO_PORT, &GPIO_InitStructure);		// 初始化 

}

uint16_t DOOR_GetData()
{
    if(DOOR == 1)  // 检测到开门
    {
        delay_ms(10); // 去抖动
        if(DOOR == 1)
            return 1; // 确认开门
    }
    return 0;  // 默认返回关门
}

<2>door.h

#ifndef __DOOR_H
#define	__DOOR_H
#include "stm32f10x.h"

#define		DOOR_GPIO_CLK			RCC_APB2Periph_GPIOB//引脚配置信息根据实际修改
#define 	DOOR_GPIO_PORT			GPIOB
#define 	DOOR_GPIO_PIN			GPIO_Pin_15
#define DOOR  GPIO_ReadInputDataBit(DOOR_GPIO_PORT,DOOR_GPIO_PIN)		

void DOOR_Init(void);
uint16_t DOOR_GetData(void);

#endif 

<3>使用示例

#include "stm32f10x.h"
#include "door.h"

int main(void)
{
    // 初始化门磁传感器
    DOOR_Init();
    
    printf("门磁监测系统启动...\r\n");
    
    while(1)
    {
        // 获取门状态
        uint16_t door_status = DOOR_GetData();
        
        // 根据状态执行相应操作
        if(door_status == 1)
        {
            // 门被打开时的处理
            PrintDoorStatus(1);

            while(DOOR_GetData() == 1)
            {
                delay_ms(100); // 每隔100ms检查一次
            }
            printf("门已关闭\r\n");
        }
        else
        {
            // 门关闭状态,可以执行一些后台任务
            static uint32_t last_time = 0;
            if(HAL_GetTick() - last_time > 5000)
            {
                printf("系统运行中... 门状态:关闭\r\n");
                last_time = HAL_GetTick();
            }
        }
        
        delay_ms(50); // 主循环延时
    }
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐