传感器 门磁感通模块
门磁感通模块原理图GND(1):接地引脚。OUT(2):电路导通时输出低电平,电路断开时输出高电平。原理图中的电路是比较常见的用法,这个模块一般会使用在门上。当门磁模块是闭合的,就是门窗状态是关闭时,干簧管内部的两个干簧片是闭合的,输出一个低电平;当门磁模块是打开的,也就是门窗状态是被打开的,两个干簧片就会打开,输出一个高电平。
·
一、工作原理
门磁传感器的核心是干簧管,它是一个由磁场控制的“开关”。当磁铁靠近时,开关闭合,电路接通;当磁铁远离时,开关断开,电路切断。 磁铁靠近,簧片吸合,电路导通;磁铁远离,簧片断开,电路断开,通过检测这个电路的通断状态,就能判断门的开合。
二、简单介绍

门磁感通模块原理图
<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); // 主循环延时
}
}
更多推荐



所有评论(0)