1.热敏传感器模块

在这里插入图片描述
调试过程:
在这里插入图片描述

1.1 模块介绍

热敏电阻模块可以旋转可调节电位器来设置阈值,模块在环境温度达不到设定阈值时,DO 端输出高电平,当外界环境温度超过设定阈值时,DO 端输出低电平,AO 端输出为 ADC 采集的热敏电阻的模拟量。

1.2 参数特性

◆ 工作电压范围:适用于3V至5V,当使用的单片机ADC采集范围如果是0~3.3V时,就建议不要高于3.3V
◆ 工作温度范围:-55℃ ~ 125℃
◆ 热敏电阻阻值范围:最大阻值约 740KΩ,25℃的零功率电阻值为 10KΩ,为 NTC 热敏电阻,温度越高阻值越小
◆ 可调节电位器阻值范围:阻值最大为 10KΩ,用户可以根据实际需要,调整阈值以适应不同的环境温度条件

1.3 模块说明

在这里插入图片描述
模块上有两个LED,LED1为DO输出指示灯,当环境温度到达阈值时,DO数字信号输出为低电平,发光二极管LED1导通点亮,LED2为电源灯,上电后常亮
RT1 NTC-RES为负温度系数热敏电阻,阻值最大10KΩ,阻值随环境温度的升高而减小
RA2 10KΩ 可调节电位器,可以用螺丝刀旋扭电位器调节阻值大小,顺时针旋扭,接入到 1IN-的阻值变大,假设固定好当前要识别的一个温度环境,扭到刚好变化时就可以以此为阈值
U1 LM393ADR为电压比较器
VCC:电源
GND:公共地
1IN+:同相输入端,两边分别接的是电阻R7 10KΩ和热敏电阻RT1 10KΩ
1IN-:反向输入端,接到可调节电位器RA2,阻值最大是10KΩ
1OUT:输出端,接了上拉电阻R9,默认高电平
在环境温度超过电位器设置的阈值时:环境温度高时,热敏电阻 RT1 的阻值减小,当电阻减小时,如果电流保持不变,根据欧姆定律,则与 R7 串联的电路中分得的电压将减小,也就是 1IN-电压高于1IN+的电压,即反向输入端电压高于同相输入端时,输出为低电平,将输出低电平给 DO 数字信号输出口,使得LED1导通点亮
在这里插入图片描述
在环境温度低于电位器设置的阈值时:环境温度低时,热敏电阻 RT1 的阻值大,分得的电压大,1IN+电压高于 1IN-的电压,即同相输入端电压高于反向输入端时,输出为高阻态,1OUT 通过接了上拉电阻R9输出为高电平给DO数字信号输出口
在这里插入图片描述
模拟信号输出口 AO 会随着热敏电阻阻值变化,采集到的电压也会变化,另外会根据输入电压 VDD大小(通常为3.3V)而变化,单片机ADC范围如果是0~3.3V,就不建议输入电压VDD超过3.3V

1.4 模块接口

在这里插入图片描述

1.5 程序流程

用任意单片机选取任意GPIO脚做普通输入脚,选取任意一条ADC通道做模拟输入脚
普通输入脚接到热敏电阻模块的DO脚,来检测DO数字信号输出口的高低电平
模拟输入脚接到热敏电阻模块的AO脚,采集热敏电阻模块的模拟量
1.选定好GPIO脚,该脚与热敏电阻模块DO脚相连
2.选定好ADC通道,该脚与热敏电阻模块AO脚相连
3.初始化MCU对应的GPIO脚即DO脚,重点配置为浮空输入模式
4.初始化MCU对应的ADC脚即AO脚,重点配置为模拟输入模式
5.初始化ADC,可以采用中断读取或者DMA读取模拟量
6.通过读取DO脚的高低电平来判断环境温度是否超过设定的阈值
7. 根据ADC读取到AO引脚的模拟量来计算温度大小:
(1)读取的数值转电压
(2)电压转电阻
(3)根据公式计算实际的温度

2.readme介绍

/**************************************************************************************************/
【*】程序介绍

-工程名称 :光敏传感器触发蜂鸣器
-实验平台 :野火 STM32FC8T6-STM开发板

【 !】功能介绍:

实现光敏传感器触发蜂鸣器

【 !】实验操作:

1.核心板掉电情况下,将模块引出脚按照接线说明文件夹下的文件,接到板子对应脚上
2.确保引脚对应接上的情况下,核心板上电,将例程编译成功后,下载到核心板里
3.核心板的USB转串口通过数据线连接电脑,同时确保电脑安装了串口驱动并能识别到核心板的串口
4.电脑端使用串口调试助手,选择电脑与核心板相连的COM口,设置为115200-N-8-1并打开
5.复位核心板,即可接收核心板串口发送给电脑的数据
6.用手捂着热敏电阻或者其它方式加热,可以看到热敏模块上的LED1亮

注意事项
热敏模块的电源应接3.3V
调节电位器可以改变阈值
若光敏模块接收的的光照强度达到电位器设置的阈值 则光敏模块上的LED1灯亮起

/**************************************************************************************************/

【*】 引脚分配

热敏模块:
AO <—>不接
NTC_DO <—>PA12 热敏传感器温度达不到阈值的时候,D0是高电平,达到阈值的时候,D0是低电平
VDD <—>3V3
GND <—>GND

蜂鸣器模块:
BEPP->PA6 高电平响

/**************************************************************************************************/

【*】 程序描述:
<main.c>
1.初始化蜂鸣器和光敏传感器对应的GPIO,初始化对应端口
2.检测光敏传感器反馈的信号,并对根据反馈信息来控制蜂鸣器灯状态

/**************************************************************************************************/

3.接线图

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述

4.程序

4.1 main.c

/**
  ******************************************************************************
  * @file    main.c
  * @author  作者
  * @version v1.0
  * @date    2026.4.3
  * @brief   光敏传感器触发蜂鸣器灯标准库写法
  ******************************************************************************
  * @attention
  *
  * 版权声明
  *
  ******************************************************************************
  */
#include "beep/bsp_gpio_beep.h"
#include "ntc/bsp_gpio_ntc.h"
#include "stm32f10x.h"

/**
  * @brief  主函数
  * @param  无
  * @note   无
  * @retval 无
  */
  
int main (void)
{
    BEEP_GPIO_Config();
    NTC_GPIO_Config();
    
    while(1) 
    {
        /*温度高*/
        if (NTC_Scan(NTC_GPIO_PORT, NTC_GPIO_PIN) == Bit_RESET)
        {
            BEEP_GPIO_ON(BEEP_GPIO_PORT, BEEP_GPIO_PIN, BEEP_HIGH_TRIGGER);
        }
        else/*温度低*/
        {
            BEEP_GPIO_OFF(BEEP_GPIO_PORT, BEEP_GPIO_PIN, BEEP_HIGH_TRIGGER);
        }
        
    }
}



4.2 热敏传感器

4.2.1 bsp_gpio_ntc.c


/**
  ******************************************************************************
  * @file    bsp_gpio_ntc.c
  * @author  作者
  * @version v1.0
  * @date    2026.4.3
  * @brief   热敏传感器的函数接口
  ******************************************************************************
  * @attention
  *
  * 版权声明
  *
  ******************************************************************************
  */
#include "ntc/bsp_gpio_ntc.h"

/**
  * @brief  初始化控制 光敏传感器 的IO
  * @param  无
  * @retval 无
  */
  
void NTC_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = { 0 };

/*****************************核心板载按键****************************************/

#if 1
    /*开启GPIOA 端口时钟*/
    RCC_APB2PeriphClockCmd(NTC_GPIO_CLK_PORT, ENABLE); 
    
    /*设置PA12端口初始化高电平*/
    GPIO_SetBits(NTC_GPIO_PORT, NTC_GPIO_PIN);    
    
    // 配置引脚:选择GPIOA的Pin12
    GPIO_InitStruct.GPIO_Pin = NTC_GPIO_PIN;
    // 配置输出速度:50MHz
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    // 配置工作模式:浮空输入模式
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    
    GPIO_Init(NTC_GPIO_PORT, &GPIO_InitStruct);
#endif

}
/**
  * @brief  热敏传感检测
  * @param  GPIOX : x可以是 A,B,C等
  * @param  GPIO_PIN: 待操作的PIN
  * @retval BitAction枚举类型 有两个成员Bit_SET = 1和Bit_RESET = 0
  * @retval Bit_SET(外界温度弱)、Bit_RESET(外界温度高)
  */
BitAction NTC_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
    if (GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == Bit_RESET)
    {
        return Bit_RESET;
    }
    else
    {
        return Bit_SET;
    }
}

/***************************************END OF FILE *********************************************************/

4.2.2 bsp_gpio_ntc.h

#ifndef __BSP_GPIO_NTC_H
#define __BSP_GPIO_NTC_H

#include "stm32f10x.h"

/*定义连接GPIO端口,用户只需要修改下面代码即可改变控制的LED引脚 */

//NTC_D0
#define NTC_GPIO_PORT      GPIOA                       /* GPIO 端口 */
#define NTC_GPIO_CLK_PORT  RCC_APB2Periph_GPIOA        /* GPIO 端口时钟 */
#define NTC_GPIO_PIN       GPIO_Pin_12                 /* 对应PIN脚 */


void NTC_GPIO_Config(void);
BitAction NTC_Scan(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

#endif /*__BSP_GPIO_NTC_H*/



4.3 蜂鸣器

4.3.1 bsp_gpio_beep.c


/**
  ******************************************************************************
  * @file    bsp_gpio_beep.c
  * @author  作者
  * @version v1.0
  * @date    2026.4.3
  * @brief   蜂鸣器的函数接口
  ******************************************************************************
  * @attention
  *
  * 版权声明
  *
  ******************************************************************************
  */
#include "beep/bsp_gpio_beep.h"

/**
  * @brief  初始化控制 蜂鸣器 的IO
  * @param  无
  * @retval 无
  */
  
void BEEP_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = { 0 };
    
/*****************************用户自定义beep*******************************/
#if 1
    
    RCC_APB2PeriphClockCmd(BEEP_GPIO_CLK_PORT, ENABLE); 
    
    GPIO_ResetBits(BEEP_GPIO_PORT, BEEP_GPIO_PIN);    
    
    // 配置引脚:选择GPIOA的Pin6
    GPIO_InitStruct.GPIO_Pin = BEEP_GPIO_PIN;
    // 配置输出速度:50MHz
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    // 配置工作模式:推挽输出
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(BEEP_GPIO_PORT, &GPIO_InitStruct);
#endif



}

/**
  * @brief  开启蜂鸣器
  * @param  GPIOX : x可以是 A,B,C等
  * @param  GPIO_PIN: 待操作的PIN
  * @param  beep_soundsstatuss 蜂鸣器响时的状态
  * @retval 无
  */
void BEEP_GPIO_ON(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BEEP_TriggerLever beep_soundsstatus)
{
    if (beep_soundsstatus == BEEP_LOW_TRIGGER)
    {
        GPIO_ResetBits(GPIOx, GPIO_Pin);
    }
    else
    {
        GPIO_SetBits(GPIOx, GPIO_Pin);
    }
}

/**
  * @brief  关闭蜂鸣器
  * @param  GPIOX : x可以是 A,B,C等
  * @param  GPIO_PIN: 待操作的PIN
* * @param  beep_soundsstatuss 蜂鸣器不响时的状态
  * @retval 无
  */
void BEEP_GPIO_OFF(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BEEP_TriggerLever beep_soundsstatus)
{
    if (beep_soundsstatus == BEEP_LOW_TRIGGER)
    {
        GPIO_SetBits(GPIOx, GPIO_Pin);
    }
    else
    {
        GPIO_ResetBits(GPIOx, GPIO_Pin);
    }
}

/**
  * @brief  翻转对应 蜂鸣器
  * @param  GPIOX : x可以是 A,B,C等
  * @param  GPIO_PIN: 待操作的PIN
  * @retval 无
  */
void BEEP_TOGGLE(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
    GPIOx->ODR ^= GPIO_Pin;
}
/***************************************END OF FILE *********************************************************/

4.3.2 bsp_gpio_beep.h

#ifndef __BSP_GPIO_BEEP_H
#define __BSP_GPIO_BEEP_H

#include "stm32f10x.h"

/*定义连接GPIO端口,用户只需要修改下面代码即可改变控制的LED引脚 */

//beep
#define BEEP_GPIO_PORT      GPIOA                       /* GPIO 端口 */
#define BEEP_GPIO_CLK_PORT  RCC_APB2Periph_GPIOA        /* GPIO 端口时钟 */
#define BEEP_GPIO_PIN       GPIO_Pin_6                  /* 对应PIN脚 */

                          
/* 蜂鸣器的IO电平 */
typedef enum {
    BEEP_LOW_TRIGGER = 0,
    BEEP_HIGH_TRIGGER = 1,
}BEEP_TriggerLever;

void BEEP_GPIO_Config(void);
void BEEP_GPIO_ON(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BEEP_TriggerLever beep_soundsstatus);
void BEEP_GPIO_OFF(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BEEP_TriggerLever beep_soundsstatus);
void BEEP_TOGGLE(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

#endif /*__bsp_gpio_beep_H*/



5.文件配置

5.1 user文件

在这里插入图片描述

5.2 beep文件

在这里插入图片描述

5.3 ntc文件

在这里插入图片描述

6.实验现象

温度传感器触发蜂鸣器

Logo

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

更多推荐