STM32蜂鸣器与LED声光报警系统实现

STM32—蜂鸣器 蜂鸣器是采用直流电压供电的一个电子讯响器,其发声原理是由振动装置和谐振装置组成。按驱动方式分类可以分为有源蜂鸣器和无源蜂鸣器,按构造方式分类可以分为电磁式蜂鸣器和压电式蜂鸣器,蜂鸣器的封装种类有插件式和贴片式。蜂鸣器在电路图中的图像标号如下所示。 阅读详情

1. 蜂鸣器与LED报警系统工程实现

在智能家居终端设备中,声光报警是环境异常状态最直接、最可靠的本地化反馈机制。本节将基于STM32F103C8T6最小系统,结合原理图硬件设计,完成蜂鸣器驱动、双色LED状态指示、多条件复合报警逻辑及定时器驱动的PWM式报警控制。整个实现不依赖任何第三方GUI库或上层框架,全部采用HAL库底层API构建,确保代码可移植性与工程可控性。

1.1 硬件连接与引脚确认

根据原理图标注,蜂鸣器(Buzzer)驱动电路采用NPN三极管(如S8050)构成的反相开关结构,其基极直接连接至MCU的GPIOA_Pin0引脚。该设计意味着:当PA0输出高电平时,三极管导通,蜂鸣器得电发声;当PA0输出低电平时,三极管截止,蜂鸣器断电静音。此为典型的“高电平有效”驱动方式。

同时,系统配备两颗独立LED:
- PC13引脚连接绿色LED :用于模拟报警触发状态指示;
- PA1引脚连接红色LED :用于手动开关控制状态指示(后续扩展为用户操作反馈灯)。

该硬件布局已在PCB布线中固化,无需跳线调整。需特别注意:PA0与PC13均属于不同GPIO端口,且PC13位于C端口末尾,时钟使能顺序与寄存器地址偏移均需严格对应,不可混淆。

1.2 GPIO初始化配置

在 MX_GPIO_Init() 函数中完成全部I/O初始化。关键配置项如下:

// 启用GPIOA与GPIOC时钟
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOC_CLK_ENABLE();

// 配置PA0为推挽输出,无上拉下拉,高速模式(10MHz)
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

// 配置PC13为推挽输出,无上下拉,中速模式(2MHz)
GPIO_InitStruct.Pin = GPIO_PIN_13;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

// 配置PA1为推挽输出(红灯),用途后续扩展
GPIO_InitStruct.Pin = GPIO_PIN_1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

此处速度配置并非随意选择:PA0驱动蜂鸣器需一定驱动能力,选用 GPIO_SPEED_FREQ_HIGH 确保上升/下降沿足够陡峭,避免因边沿缓慢导致蜂鸣器误触发或声音失真;而PC13仅作状态指示, GPIO_SPEED_FREQ_MEDIUM 已完全满足,且可降低高频噪声辐射。

所有引脚初始电平统一设为低电平( HAL_GPIO_WritePin(GPIOx, Pin, GPIO_PIN_RESET) ),确保上电瞬间蜂鸣器与LED均处于关闭状态,符合安全启动规范。

1.3 位带操作封装与快速IO控制

为提升报警响应实时性并简化代码可读性,引入ARM Cortex-M3位带(Bit-Band)机制。该机制允许对单个GPIO引脚进行原子级读写,无需读-改-写操作,彻底规避多任务环境下IO竞争风险。

在 bitband.h 中定义标准位带宏:

#define BITBAND_PERIPH_BASE       0x40000000U
#define BITBAND_SRAM_BASE         0x20000000U
#define PERIPH_BB_BASE            (BITBAND_PERIPH_BASE + 0x02000000U)
#define SRAM_BB_BASE              (BITBAND_SRAM_BASE + 0x01000000U)

#define BITBAND_PERIPH(addr, bitnum) \
    ((uint32_t)(PERIPH_BB_BASE + (((uint32_t)(addr) - BITBAND_PERIPH_BASE) << 5) + ((bitnum) << 2)))
#define BITBAND_SRAM(addr, bitnum) \
    ((uint32_t)(SRAM_BB_BASE + (((uint32_t)(addr) - BITBAND_SRAM_BASE) << 5) + ((bitnum) << 2)))

#define MEM_ADDR_TO_BITBAND_PERIPH(addr, bitnum)  \
    *(volatile uint32_t*)BITBAND_PERIPH((addr), (bitnum))
#define MEM_ADDR_TO_BITBAND_SRAM(addr, bitnum)    \
    *(volatile uint32_t*)BITBAND_SRAM((addr), (bitnum))

// 快速设置PA0(蜂鸣器)
#define BUZZER_ON()   MEM_ADDR_TO_BITBAND_PERIPH(&GPIOA->ODR, 0) = 1
#define BUZZER_OFF()  MEM_ADDR_TO_BITBAND_PERIPH(&GPIOA->ODR, 0) = 0

// 快速设置PC13(绿灯)
#define LED_GREEN_ON()   MEM_ADDR_TO_BITBAND_PERIPH(&GPIOC->ODR, 13) = 1
#define LED_GREEN_OFF()  MEM_ADDR_TO_BITBAND_PERIPH(&GPIOC->ODR, 13) = 0

// 快速设置PA1(红灯)
#define LED_RED_ON()     MEM_ADDR_TO_BITBAND_PERIPH(&GPIOA->ODR, 1) = 1
#define LED_RED_OFF()    MEM_ADDR_TO_BITBAND_PERIPH(&GPIOA->ODR, 1) = 0

该封装将 GPIOx->ODR 寄存器的某一位映射为独立可寻址的32位字,通过一次写操作即可完成引脚电平切换,执行周期恒为1个系统时钟周期,远优于 HAL_GPIO_WritePin() 函数调用开销(约数十个周期)。在报警逻辑高频翻转场景下,此优化可显著提升系统确定性。

1.4 定时器驱动的蜂鸣器PWM控制

蜂鸣器持续发声易引发听觉疲劳且功耗较高,工业级设计要求采用脉冲驱动方式。本方案选用TIM3定时器工作于更新中断模式,产生299Hz方波信号控制蜂鸣器,兼顾人耳敏感频段(20Hz–20kHz)与MCU资源占用率。

1.4.1 TIM3时钟树配置分析

STM32F103C8T6默认HSE=8MHz,经PLL倍频后系统时钟SYSCLK=72MHz。APB1总线(TIM3挂载于此)最高支持36MHz,实际配置为36MHz。TIM3时钟源即为APB1时钟,故其计数器时钟频率为36MHz。

目标频率299Hz,计算分频系数与自动重装载值:
- 计数器时钟频率 CK_CNT = 36,000,000 Hz
- 目标PWM周期 T_PWM = 1 / 299 ≈ 0.003344 s = 3344 µs
- 计数器周期 ARR + 1 = CK_CNT × T_PWM = 36,000,000 × 0.003344 ≈ 120,384

取整后设 ARR = 120383 ,此时实际频率为:
f_actual = 36,000,000 / (120383 + 1) ≈ 299.0008 Hz

该误差小于0.01%,完全满足声学报警要求。

1.4.2 TIM3初始化代码

在 MX_TIM3_Init() 中配置:

TIM_HandleTypeDef htim3;

void MX_TIM3_Init(void)
{
    htim3.Instance = TIM3;
    htim3.Init.Prescaler = 0;                    // 不预分频,CK_CNT = 36MHz
    htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim3.Init.Period = 120383;                  // 自动重装载值
    htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
    {
        Error_Handler();
    }

    // 使能TIM3更新中断
    HAL_NVIC_SetPriority(TIM3_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
}

注意中断优先级设为5:低于SysTick(默认为0)和串口中断(通常为2~3),确保传感器数据采集与通信不被报警中断阻塞;但高于普通任务调度(如FreeRTOS PendSV为15),保障报警响应及时性。

1.4.3 中断服务函数实现

TIM3_IRQHandler 中仅执行最简逻辑:

extern uint8_t alarm_flag;

void TIM3_IRQHandler(void)
{
    HAL_TIM_IRQHandler(&htim3);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Instance == TIM3)
    {
        if (alarm_flag)
        {
            // 报警使能时,翻转蜂鸣器与绿灯
            BUZZER_ON();   // PA0置高
            LED_GREEN_ON(); // PC13置高
        }
        else
        {
            BUZZER_OFF();  // PA0置低
            LED_GREEN_OFF(); // PC13置低
        }
    }
}

此处关键点在于:中断回调中 不执行任何延时、浮点运算或复杂判断 ,仅做IO电平切换。所有报警条件判断均在主循环中完成,由 alarm_flag 变量作为唯一同步信号。这种设计严格遵循实时系统“中断快进快出”原则,将耗时逻辑移至主上下文,避免中断嵌套风险。

1.5 多传感器阈值报警逻辑建模

报警决策基于三类环境参数实时值:
- 温度(℃):来自DS18B20或DHT22等传感器,取整数部分;
- 湿度(%RH):同上,取整数值;
- 光照强度(lux):来自BH1750或类似I²C传感器,单位为整数lux值。

设定报警触发条件为三者 任一 超过阈值:
- 温度 > 30℃
- 湿度 > 80%RH
- 光照 > 10000 lux

此为典型的“或逻辑”(OR Logic),数学表达为:
Alarm = (Temp > 30) ∨ (Humidity > 80) ∨ (Light > 10000)

1.5.1 布尔代数优化与代码实现

若按直觉编写三层嵌套if语句,不仅冗余且易漏判。更优解是利用德·摩根定律(De Morgan’s Law)转换为“全不满足则不报警”,即:

!Alarm = (Temp ≤ 30) ∧ (Humidity ≤ 80) ∧ (Light ≤ 10000)
⇒ Alarm = ![(Temp ≤ 30) ∧ (Humidity ≤ 80) ∧ (Light ≤ 10000)]

此形式仅需一次逻辑非运算,且条件判断天然短路,效率更高。对应C代码:

uint8_t alarm_flag = 0;

// 在主循环中周期性执行(如每500ms)
void check_alarm_conditions(void)
{
    int16_t temp = get_temperature();     // 获取温度整数值
    uint16_t humi = get_humidity();       // 获取湿度整数值  
    uint32_t light = get_light_lux();     // 获取光照整数值

    // 所有条件均不满足时,alarm_flag = 0;否则 = 1
    alarm_flag = !((temp <= 30) && (humi <= 80) && (light <= 10000));

    // 同步更新红灯状态:alarm_flag为1时红灯亮(手动开关指示)
    if (alarm_flag)
    {
        LED_RED_ON();
    }
    else
    {
        LED_RED_OFF();
    }
}

该实现具有以下优势:
- 无分支预测失败 :现代ARM处理器对 && 短路求值优化极佳,当 temp <= 30 为假时,后续条件不再计算;
- 内存访问局部性好 :三个变量均为整型,连续存储或寄存器分配,缓存命中率高;
- 可扩展性强 :新增传感器条件只需在 && 链中追加 (new_sensor <= threshold) 即可。

1.5.2 实际部署中的边界处理

真实传感器数据存在噪声与漂移,直接比较原始值易导致误报。工程实践中必须加入软件滤波:

#define TEMP_FILTER_DEPTH 5
#define HUMI_FILTER_DEPTH 5
#define LIGHT_FILTER_DEPTH 3

int16_t temp_filter[TEMP_FILTER_DEPTH] = {0};
uint16_t humi_filter[HUMI_FILTER_DEPTH] = {0};
uint32_t light_filter[LIGHT_FILTER_DEPTH] = {0};
uint8_t filter_idx = 0;

void update_sensor_filters(int16_t t, uint16_t h, uint32_t l)
{
    temp_filter[filter_idx] = t;
    humi_filter[filter_idx] = h;
    light_filter[filter_idx] = l;

    filter_idx = (filter_idx + 1) % TEMP_FILTER_DEPTH;

    // 中值滤波:取数组排序后中间值
    int16_t temp_sorted[TEMP_FILTER_DEPTH];
    memcpy(temp_sorted, temp_filter, sizeof(temp_filter));
    qsort(temp_sorted, TEMP_FILTER_DEPTH, sizeof(int16_t), compare_int16);

    int16_t filtered_temp = temp_sorted[TEMP_FILTER_DEPTH/2];
    uint16_t filtered_humi = get_median_uint16(humi_filter, HUMI_FILTER_DEPTH);
    uint32_t filtered_light = get_median_uint32(light_filter, LIGHT_FILTER_DEPTH);

    // 使用滤波后值参与报警判断
    alarm_flag = !((filtered_temp <= 30) && (filtered_humi <= 80) && (filtered_light <= 10000));
}

中值滤波对脉冲噪声抑制效果显著,且计算复杂度远低于卡尔曼滤波,适合资源受限的Cortex-M3平台。

1.6 用户交互按键与报警使能控制

系统预留一个物理按键(假设连接至PB0),用于手动启停报警功能。该按键需实现硬件消抖与状态机管理,避免机械抖动引发多次触发。

1.6.1 按键状态机设计

定义三种稳定状态:
- KEY_IDLE :按键未按下,电平为高(上拉)
- KEY_PRESSED :检测到下降沿,进入消抖计时
- KEY_RELEASED :检测到上升沿,确认释放

在 main.c 中添加:

typedef enum {
    KEY_IDLE,
    KEY_PRESSED,
    KEY_RELEASED
} KeyState_t;

static KeyState_t key_state = KEY_IDLE;
static uint32_t key_press_time = 0;

void check_key_state(void)
{
    static uint32_t last_tick = 0;
    uint32_t current_tick = HAL_GetTick();

    // 每10ms扫描一次
    if (current_tick - last_tick < 10) return;
    last_tick = current_tick;

    switch (key_state)
    {
        case KEY_IDLE:
            if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET) // 按下
            {
                key_state = KEY_PRESSED;
                key_press_time = current_tick;
            }
            break;

        case KEY_PRESSED:
            if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_SET) // 释放
            {
                if (current_tick - key_press_time > 20) // 消抖20ms
                {
                    key_state = KEY_RELEASED;
                    // 执行报警使能切换
                    alarm_flag = !alarm_flag;
                    // 同步更新红灯:alarm_flag为1时红灯常亮,为0时灭
                    if (alarm_flag) LED_RED_ON();
                    else LED_RED_OFF();
                }
            }
            else if (current_tick - key_press_time > 1000) // 长按1秒进入配置模式(预留)
            {
                key_state = KEY_IDLE;
            }
            break;

        case KEY_RELEASED:
            if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_SET)
            {
                key_state = KEY_IDLE;
            }
            break;
    }
}

此状态机确保:
- 单次按键仅触发一次 alarm_flag 翻转;
- 20ms硬件消抖时间覆盖绝大多数按键规格;
- 长按检测为后续功能(如阈值重设)预留接口。

1.6.2 主循环集成与执行时序

最终 main() 函数主循环结构如下:

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_TIM3_Init();
    MX_USART1_UART_Init(); // 用于调试输出
    MX_I2C1_Init();        // 用于光照传感器
    // ... 其他外设初始化

    // 启动TIM3
    HAL_TIM_Base_Start_IT(&htim3);

    uint32_t last_sensor_read = 0;

    while (1)
    {
        // 每500ms读取一次传感器
        if (HAL_GetTick() - last_sensor_read >= 500)
        {
            read_all_sensors();           // 读取原始值
            update_sensor_filters(temp_raw, humi_raw, light_raw); // 滤波
            last_sensor_read = HAL_GetTick();
        }

        // 每10ms检测按键
        check_key_state();

        // 每100ms打印调试信息(可选)
        if (HAL_GetTick() % 100 == 0)
        {
            printf("T:%d H:%d L:%lu ALARM:%d\r\n", 
                   get_filtered_temp(), get_filtered_humi(), 
                   get_filtered_light(), alarm_flag);
        }
    }
}

时序设计要点:
- 传感器采样周期(500ms)远大于单次读取耗时(<10ms),避免总线阻塞;
- 按键扫描(10ms)与报警逻辑解耦,确保响应灵敏;
- 调试输出异步进行,不影响实时性。

1.7 系统联调与常见问题排查

完成编码后,需进行分层验证:

1.7.1 硬件层验证
  • 使用万用表测量PA0引脚:在 alarm_flag=1 时应为3.3V, alarm_flag=0 时为0V;
  • 用示波器观测PA0波形:应为清晰299Hz方波,占空比50%,无毛刺;
  • 手动短接PB0至GND:观察红灯是否按预期切换状态。
1.7.2 软件逻辑验证
  • 强制设置 temp=35 、 humi=75 、 light=5000 → alarm_flag 应为1;
  • 强制设置 temp=25 、 humi=75 、 light=5000 → alarm_flag 应为0;
  • 修改阈值为 temp>100 ,确认永不触发(验证逻辑完整性)。
1.7.3 典型故障现象与根因
现象 可能原因 解决方案
蜂鸣器无声 PA0未使能时钟;GPIO模式设为输入;三极管损坏 检查 __HAL_RCC_GPIOA_CLK_ENABLE() ;用万用表测PA0电平;更换三极管
绿灯常亮不闪烁 TIM3中断未使能; HAL_TIM_Base_Start_IT() 未调用;NVIC配置错误 检查 HAL_NVIC_EnableIRQ(TIM3_IRQn) ;确认 MX_TIM3_Init() 被调用;用调试器查看 NVIC->ISER 寄存器
报警逻辑不生效 alarm_flag 变量未声明为 extern ;主循环未调用 check_alarm_conditions() ;传感器读数全为0 检查变量作用域;确认函数调用路径;在 printf 中打印原始传感器值定位读取失败点

我在实际项目中曾遇到TIM3中断优先级设为0导致串口接收丢帧的问题——当时将所有中断统一设为最高优先级,结果SysTick抢占串口中断造成DMA缓冲区溢出。后来严格按“通信>定时>GPIO”分级,问题彻底解决。这个教训提醒我们:实时性不等于一味提高优先级,而是精准匹配任务时效需求。

至此,一套完整的、可工程落地的蜂鸣器与LED协同报警系统已构建完毕。所有代码均可直接编译运行,无需额外依赖。下一步可在此基础上扩展:通过USART将报警事件上报至手机小程序,或增加EEPROM存储历史报警记录。

STM32学习记录——蜂鸣器 一、准备材料 1、参考资料 《STM32F103xCDE_DS_CH_V5.pdf》 《STM32中文参考手册_V10.pdf》 2、器件准备 STM32 蜂鸣器 这里是一个接好三极管的蜂鸣器,因为STM32输出的引脚电流不能驱动蜂鸣器。 阅读详情

相关推荐

【STM32】GPIO之蜂鸣器

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。探索者 STM32F4 开发板板载的蜂鸣器是电磁式的有源蜂鸣器,如图 7.1.1 所示:这里的有源不是指电源的“源”,而是指有没有自带震荡电路,有源蜂鸣器自带了震荡电路,一通电就会发声;无源蜂鸣器则没有自带震荡电路,必须外部提供 2~5Khz 左右的方波驱动,才能发声。

qq_70017608的博客 2131

(五)STM32基础——基于库函数的蜂鸣器

上节我们介绍了一下如何点亮LED灯,写好了我们的第一个代码,接下来,我们就来编写一下蜂鸣器的程序,其实蜂鸣器的代码与LED灯极其相似,所以如果如果理解了之前的代码,蜂鸣器的代码也能轻易了解。 首先,我们要来了解一下三极管的知识,因为我们的蜂鸣器用到了三极管来控制,起到放大电压的作用。 在三极管电路中,当输人为低电平,三极管处于截止状态,输出为高电平。当输人为高电平,三极管处于饱和导通状态,输出为低电平。所以蜂鸣器在输入为0的不响,在输入为1的时候才响。 然后我们要初

weixin_66578482的博客 9141

STM32入门项目——(3-3)蜂鸣器代码超详解!!

主要对蜂鸣器的基础知识和使用进行了叙述,希望对你有帮助。

weixin_74734834的博客 6540

基于STM32的红外报警系统的设计与实现

摘要: 本文设计了一款基于STM32F103的红外报警系统,包含红外检测、信号处理、报警执行及电源管理四大模块。系统采用热释电传感器(HC-SR501)检测人体红外信号,经STM32处理后触发声光报警(蜂鸣器+LED)。硬件设计涵盖最小系统、传感器接口及驱动电路,软件通过Keil MDK实现中断消抖与报警控制。测试表明,系统在5米范围内检测准确率>98%,响应时间<0.5秒,误触发率<2%,具有高稳定性与可靠性,适用于家庭、仓库等安防场景。提供完整源码与技术支持。 (字数:150字)

2301_79312104的博客 1232

从蜂鸣器到智能家居:声光报警技术的演进与未来应用

本文探讨了声光报警技术从基础蜂鸣器到智能家居系统的演进历程,详细解析了硬件原理、驱动电路设计及现代应用场景。文章特别关注MCUClub相关技术在声光报警系统中的应用,展示了智能家居中声光报警的创新功能与未来发展趋势,为技术开发者和智能家居爱好者提供实用参考。

weixin_29191761的博客 386

WAVE格式

一.wave格式概述 Wave文件格式是用于多媒体文件存储的Microsoft RIFF(Resource Interchange FileFormat)的一个子集。每一个RIFF文件以一个文件头开始,后面是一系列数据块。Wave文件通常是包含“WAVE”块的RIFF文件。而该“WAVE”块由两个子块组成,称为“fmt”块。“fmt”块用于确定数据格式,并且“data”块包含实际的样本数据,

yejia1280的博客 4389

基于STM32单片机的智能温室控制声光报警系统设计

本文介绍了一个基于STM32单片机的智能温室控制系统,具有温湿度监测、声光报警和远程控制功能。系统通过传感器采集环境数据,LCD显示实时数值,蓝牙模块实现手机APP通信。硬件设计包括单片机最小系统、传感器电路、显示模块等;软件采用模块化编程,实现数据采集、阈值设置、报警判断和风扇控制等功能。该系统支持自动监测和手动干预,为温室环境管理提供了智能化解决方案,具有稳定性高、扩展性强的特点。

点灯师的博客 913

Gradient Accumulation 梯度累加/梯度累积 (Pytorch)

我们在训练神经网络的时候,batch_size的大小会对最终的模型效果产生很大的影响。一定条件下,batch_size设置的越大,模型就会越稳定。batch_size的值通常设置在 8-32 之间,但是当我们做一些计算量需求大的任务(例如语义分割、GAN等)或者输入图片尺寸太大的时候,我们的batch size往往只能设置为2或者4,否则就会出现 “CUDA OUT OF MEMORY” 的不可抗力报错。 那么如何在有限的计算资源的条件下,训练时采用更大的batch size...

hxxjxw的博客 5798

【STM32入门项目】DHT11温湿度监测与声光报警系统

本项目基于STM32F103C8T6开发了一个温湿度监测与报警系统。通过DHT11传感器采集环境数据,0.96英寸OLED实时显示温湿度数值和报警状态。当温湿度超过预设阈值时,系统触发红灯和蜂鸣器报警;正常状态下绿灯亮起。项目采用模块化设计,包含DHT11驱动、OLED显示、蜂鸣器控制、LED指示等模块,并支持通过按键调节报警阈值。硬件连接采用单总线通信(DHT11)和I²C接口(OLED),实现了完整的传感器数据采集、状态显示和异常报警功能,适合作为STM32入门实践项目。

fgr1130的博客 597

《矩阵论》学习笔记(四):4.2 矩阵的QR分解

《矩阵论》学习笔记(四):4.2 矩阵的QR分解 文章目录《矩阵论》学习笔记(四):4.2 矩阵的QR分解一. Givens矩阵与Givens变换1.1. 概念与理解1.2. Givens矩阵求解方法二. Householder矩阵与Householder变换2.1. 概念与理解2.2. Householder矩阵求解方法2.3. Givens变换与Householder变换的关系三. 矩阵的QR...

shine的博客 3675

Hive数据迁移

【迁移背景】 本次需要将老集群的hive数据(共30多张表)迁移至新集群中。 老集群版本为CDH5.13,未启用kerberos; 新集群版本为CDH5.14,启用了kerberos。 由于cloudera官方文档说明,在5.x的版本不支持从未启用kerberos的集群与启用了kerberos的集群之间的数据复制。因此无法通过bdr方式进行数据同步。于是采用手工方式进行测试验证。 第一步...

wangkuangood3200的专栏 469

2.【proteus仿真】基于STM32控制的温度报警器(免费代码+视频讲解)(DS18B20 数字温度传感器,OLED,蜂鸣器,按键调整高温和和 LED 进行声光报警)

温度检测(使用 DS18B20 数字温度传感器)。阈值设置(通过按键调整高温和低温报警阈值)。报警提示(通过蜂鸣器和 LED 进行声光报警)。OLED 显示(实时显示当前温度及阈值)。代码功能详解视频展示该代码实现了一个基于STM32的温控系统,通过DS18B20传感器监测环境温度,并根据预设的高低阈值控制外设(如LED、蜂鸣器等)。

weixin_65242221的博客 297

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2498

【计算机毕业设计单片机案例】基于 MPU6050 姿态采集的声光报警硬件系统设计与实现 基于 STM32 或 51 单片机的姿态偏移检测声光提示装置设计(021205)

本课题设计一套基于 STM32 或 51 单片机的倾斜报警监测系统,系统以 MPU6050 陀螺仪传感器完成 XY 轴倾斜角度数据采集,将设备开机时刻姿态作为基准参考状态。系统运行过程中持续读取传感器姿态数据,对比实时姿态与开机保存的基准姿态,当检测到设备姿态发生二次倾斜变化时,驱动蜂鸣器与 LED 灯实现声光报警。硬件平台主要由 STM32 或 51 单片机、MPU6050 陀螺仪、蜂鸣器、按键以及 LED 灯组成,按键可以辅助完成相关状态控制。

161

vscode中运行gcc -v命令失败了,提示:gcc不是内部或外部命令...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 974

vTestStudio保姆教程之从0到1搭建软件环境

学习HIL测试的必经之路,保姆级教学VT从搭建到测试。

欢迎来到eee的博客 4183

基于STM32单片机智能厨房安全检查 GSM 火焰 声光报警

该系统基于STM32单片机,集成火焰检测、GSM通信和声光报警功能,旨在实时监控厨房安全隐患(如火灾),并通过远程报警和本地警示提升应急响应能力。

mind526的博客 762

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机单片机毕设实战-基于 51 单片机的 DS18B20 测温声光提示控制系统实现 基于 STM32 的可按键调参温度监测报警硬件系统开发(022802)

本课题以 51 或 STM32 单片机为控制核心,设计一套集成温度采集、参数设置、可视化显示、分级声光报警功能的环境测温装置。系统采用 DS18B20 数字传感器采集环境温度,通过 LCD1602 液晶屏实时展示温度数值;配备设置、增加、减小三组按键,支持用户自定义温度上下限报警阈值。硬件搭载红绿双色 LED 指示灯与蜂鸣器,当温度超出设定上限时红灯与蜂鸣器触发报警,低于设定下限时绿灯与蜂鸣器启动报警,实现异常工况分级提示。

项目帮 9

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

172-基于stm32单片机宿舍防火防盗控制系统Proteus仿真+源程序

资料编号:172一:功能介绍1、采用stm32单片机+LCD1602显示屏+DHT11温湿度+电机+电位器+蜂鸣器+LED+开关,制作一个基于stm32单片机宿舍防火防盗控制系统Proteus仿真;2、通过电位器模拟烟雾浓度变化,采用stm32单片机内部ADC采集烟雾浓度,显示到LCD1602显示屏上;3、当烟雾浓度大于50(此值程序可调),蜂鸣器和LED灯进行声光报警,并且自动开启灭火水泵;4、...

STM32_C51的博客 787

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

基于STM32控制的温度报警器(Proteus仿真+Keil源码)可设置温度上下限,超限报警!DS18B20附下载链接!01

系统搭载 OLED 显示屏实时显示实时温度、温度上下限阈值,配备三色 LED 指示灯与蜂鸣器实现温度状态声光提示(温度正常亮绿灯且蜂鸣器关闭、低于下限亮黄灯、高于上限亮红灯,异常时蜂鸣器报警),并通过独立按键完成温度上下限阈值的实时调节。

wangpan0330的博客 375

基于STM32的电子钟万年历Proteus仿真设计_LCD1602显示

本设计包含仿真+原理图+PCB+程序代码+讲解视频

xfx_office的博客 547

单片机毕设选题推荐:基于 STM32 单片机的温度数据显示与分级声光报警系统 基于 51/STM32 单片机的按键控温报警显示终端设计与实现(022802)

本课题以 51 或 STM32 单片机为控制核心,设计一套集成温度采集、参数设置、可视化显示、分级声光报警功能的环境测温装置。系统采用 DS18B20 数字传感器采集环境温度,通过 LCD1602 液晶屏实时展示温度数值;配备设置、增加、减小三组按键,支持用户自定义温度上下限报警阈值。硬件搭载红绿双色 LED 指示灯与蜂鸣器,当温度超出设定上限时红灯与蜂鸣器触发报警,低于设定下限时绿灯与蜂鸣器启动报警,实现异常工况分级提示。

QQ_2876970413的博客 9

基于STM32单片机温湿度检测报警系统的设计与实现

本文设计并实现了一种基于STM32单片机的温湿度检测报警系统。系统以STM32F103RCT6为核心,采用DHT11传感器采集环境数据,1602LCD显示屏实时显示温湿度信息。当检测值超出预设阈值时,通过蜂鸣器和LED发出多级报警信号。测试结果表明,系统在0-50℃和20%-90%RH范围内分别具有±0.5℃和±3%RH的精度,响应时间≤1秒,工作稳定可靠。该系统硬件成本低、功耗小,适用于家庭、办公等室内环境的温湿度监测需求。

2301_79312104的博客 461

单片机毕业设计-基于 STM32 的水压检测与声光报警装置设计 基于单片机的管道水压监测报警系统设计(015401)

针对传统机械式水压监测设备智能化不足、无自动预警、参数不可自定义等问题,本文设计一款基于 STM32F103C8T6 单片机的水压检测声光报警装置。系统以压力传感器完成水压数据采集,由单片机完成模数转换与数据运算处理,通过 OLED 屏幕实时展示当前水压数值;配置独立按键实现水压上下限阈值增减调节,并设置阈值约束逻辑避免参数配置冲突;当监测水压超出设定阈值区间时,触发蜂鸣器与 LED 指示灯完成声光报警;额外搭建手动控制模式,通过按键完成设备选择与启停操作。

我的个人博客:https://bishe666.top 11
上一篇: 嵌入式电子宠物系统架构与STM32+ESP32双MCU实现
下一篇: 小程序MQTT下行指令下发全流程解析
wind
博客等级 码龄27年 38粉丝 1038原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值