自上一章《UI界面设计》后,我们的开发工作已经完成了60%左右了。这一章呢,小编将介绍报警模块的设计。之前所做的工作,只是完成对环境参量的测量和显示。现在要对所获取的参量进行分析,即根据实际情况设置相关的阈值,判断是否异常,若出现异常,则采取报警,同时提醒工作人员,并且系统也会采取一定的措施来解决问题。
在本制作中,只是象征性的做一下报警设计。举个例子,假如湿度出现异常(过高),超出上限,报警,同时需要启动抽湿机,当环境湿度达到正常值后,停止抽湿机,报警随之停止。这才是一个真正的反馈控制系统。但本制作,由于材料有限,只有一个电机,虽然能够有一定效果,但功能还是受限,所以就省略了。
因此,在报警模块,我们这样设计:当温湿度超过阈值范围(过大或过小),则蜂鸣器报警,报警指示灯亮;当空气质量超过上限时,蜂鸣器报警,报警指示灯亮,同时启动直流电机(代替空气净化装置);当测量距离超过安全距离时,蜂鸣器报警,报警指示灯亮。
1.资源介绍
无源蜂鸣器可以产生不同频率的声音,而有源蜂鸣器,内部有振荡电路,产生的声音频率固定,而此处我们只是简单的报警,所以采用有源蜂鸣器。
报警指示灯采用LED灯即可,这里无须介绍。
关于空气净化装置,我们这里用电机代替。这里,我们需要采用电机驱动电路,采用L298N电机驱动模块。下面简要介绍一下该模块。
L298N电机驱动模块:在模块的电源部分,有VMS(12v)、VCC(5v)、GND3个接口。电源正极接VMS,电源负极接GND,这样就给电机驱动模块上电了。MotorA和MotorB的四个接口,分别接电机的端口,所以该模块可驱动两个电机。ENA和ENB分别是使能端,IN1、IN2、IN3和IN4分别是控制电机的端口,可驱动电机正反转。这里我们只驱动1个电机,使用ENA,IN1,IN2和MotorA。
2.软件编程
(1)蜂鸣器报警
首先,配置GPIO口,将PA6设置成推挽输出模式,这里不再给出代码,大家应该都会的。
然后编写蜂鸣器报警代码。
void buzzer(void)
{
u8 i;
for(i=0; i<100; i++)
{
Beep_L;
delay_ms(1);
Beep_H;
delay_ms(1);
}
}
这里,只需将蜂鸣器端口以一定的频率上下振荡,蜂鸣器就能发出声音,频率高,声音相对大一些。
(2)LED报警灯
将相关的LED报警灯配置成推挽输出模式即可。
(3)电机驱动模块
将电机的ENA、IN1、IN2端口设置成推挽输出模式,初始化不再给出。
void motorRun(void)
{
if(flag)//电机启动/停止标志位
{
ENA_H;//使能端有效,电机转动
}
else
{
ENA_L;//使能端无效,电机停止
}
IN1_H;
IN2_L;
}
这里,电机的启动和停止,只需控制驱动电机的使能端,让它使能或者失能即可。电机两个端口分别给高、低电平即能转起来了。
(4)编写报警处理函数
/*报警函数*/
void alarm(void)
{
//温度异常报警
if(temperature>=temper_H||temperature<=temper_L)
{
LED0_ON();
temper_sign = 1;
}
else
{
LED0_OFF();
temper_sign = 0;
}
//湿度异常报警
if(humidity>=humid_H||humidity<=humid_L)
{
LED1_ON();
humid_sign = 1;
}
else
{
LED1_OFF();
humid_sign = 0;
}
//空气质量异常报警
if(value>=air_upperlimit)
{
LED2_ON();
air_sign = 1;
flag = 1;
}
else
{
LED2_OFF();
air_sign = 0;
flag = 0;
}
//距离异常报警
if(distance/100>=length)
{
LED3_ON();
length_sign = 1;
}
else
{
LED3_OFF();
length_sign = 0;
}
if(temper_sign==0&&humid_sign==0&&air_sign==0&&length_sign==0)
{
cancel = 0;//正常情况,关闭取消报警
}
if(temper_sign|humid_sign|air_sign|length_sign)
{
if(!cancel)
{
buzzer();
}
}
motorRun();
}
这里,判断温湿度、空气质量、测量距离是否正常,然后分情况处理,同时设置好相关的标志位,比如监控显示标志位,电机启动/停止标志位。还有,如果都正常的话,将取消报警标志位置位。
UI界面报警部分:

监视界面(空气质量异常)

监视界面(多处异常)

报警界面(已开启报警)

报警界面(取消报警)

电机界面(空气质量异常)

电机界面(强制开启)
到目前为止,我们所做的都是基于stm32的下位机的开发。而在后面的章节中,小编将介绍如何将单片机采集的数据通过蓝牙模块传输给手机,实时地在手机界面上显示,同时绘制一些相关的曲线。如果技术可行的话,还可以通过手机蓝牙软件实时监控我们的多功能时钟,完成上位机与下位机的通信交互。
上一篇:基于stm32的多功能时钟5——LCD12864库函数的建立
下一篇:为什么STM32中运行的C程序执行某些函数时死机?
推荐阅读最新更新时间:2026-03-25 11:25
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用

stm32驱动屏IC rm68042
STM32 PMSM FOC 简介
基于STM32G031的测试测量训练平台完成虚拟仪器实现
现代雷达系统的信号设计
BFR340T






京公网安备 11010802033920号