全部资料:私
基于STM32的烟雾温度大棚报警器
1. 烟雾采集传感器选用MQ-2,由于该传感器输出的是模拟信号,STM32内部ADC将模拟信号转为数字信号。
2. 温度采集使用DS18B20数字传感器,温度测量范围-55到128℃,测量精度±0.1℃;3. 显示设备使用1602液晶,可以在屏幕上显示实时烟雾浓度值、温度值,以及报警值等信息;
4. 报警模块则采用蜂鸣器和LED灯组成,两个LED分别代表了烟雾报警指示和温度报警指示,无论哪个检测元素超标,蜂鸣器都会鸣叫报警;
5. 设计采用3个按键作为操作输入设备,可以用来调节报警阈值的大小;
6.串口实时发送温度检测值、烟雾浓度测量值和报警信息通过蓝牙模块给手机。
基于STM32的烟雾温度大棚报警器毕业论文
摘要
本文介绍了一种基于STM32单片机的烟雾温度大棚报警器设计。该系统通过MQ-2烟雾传感器和DS18B20温度传感器分别采集烟雾浓度和温度数据,利用1602液晶显示实时数据,并通过蜂鸣器和LED灯实现报警功能。此外,系统还设计了3个按键用于调节报警阈值,并通过蓝牙模块将实时数据发送给手机进行远程监控。该系统具有低成本、高可靠性和易于扩展等优点,适用于大棚等农业场所的火灾预警和温度监控。
关键词
STM32;MQ-2烟雾传感器;DS18B20温度传感器;1602液晶;大棚报警器
一、引言
随着农业现代化的推进,大棚种植已成为农业生产中的重要方式。然而,大棚内的火灾和温度异常等问题对农作物生长构成严重威胁。因此,设计一种能够实时监测大棚内烟雾浓度和温度,并在异常情况下及时报警的系统具有重要意义。本文介绍了一种基于STM32单片机的烟雾温度大棚报警器设计,该系统具有低成本、高可靠性和易于扩展等优点,适用于大棚等农业场所的火灾预警和温度监控。
二、系统总体设计
2.1 系统架构
本系统主要由STM32单片机、MQ-2烟雾传感器、DS18B20温度传感器、1602液晶显示模块、蜂鸣器和LED灯报警模块、3个按键输入模块以及蓝牙模块组成。系统架构如图2-1所示。
<img src="https://example.com/system_architecture.png" />
图2-1 系统架构图
2.2 工作原理
系统通过MQ-2烟雾传感器采集大棚内的烟雾浓度数据,通过DS18B20温度传感器采集温度数据。STM32单片机对采集到的数据进行处理,并通过1602液晶显示实时数据。当烟雾浓度或温度超过设定的阈值时,蜂鸣器会发出报警声,同时相应的LED灯会亮起。用户可以通过3个按键调节报警阈值。此外,系统还通过蓝牙模块将实时数据发送给手机进行远程监控。
三、硬件设计
3.1 STM32单片机
STM32单片机作为系统的核心控制器,负责数据采集、处理和传输。本系统选用STM32F103系列单片机,该系列单片机具有高性能、低功耗和丰富的外设接口等优点,适用于本系统的设计要求。
3.2 MQ-2烟雾传感器
MQ-2烟雾传感器是一种常用的气体传感器,对烟雾具有较高的灵敏度。该传感器输出模拟信号,可以通过STM32单片机的ADC接口进行采集。MQ-2烟雾传感器的电路连接如图3-1所示。
<img src="https://example.com/mq2_circuit.png" />
图3-1 MQ-2烟雾传感器电路图
3.3 DS18B20温度传感器
DS18B20是一种数字式温度传感器,具有高精度、低功耗和易于集成等优点。该传感器通过单总线接口与STM32单片机进行通信,可以实现对大棚内温度的精确测量。DS18B20温度传感器的电路连接如图3-2所示。
<img src="https://example.com/ds18b20_circuit.png" />
图3-2 DS18B20温度传感器电路图
3.4 1602液晶显示模块
1602液晶显示模块是一种常用的字符型液晶显示器件,可以显示2行16个字符。该模块通过I2C或SPI接口与STM32单片机进行通信,用于显示实时烟雾浓度、温度以及报警值等信息。1602液晶显示模块的电路连接如图3-3所示。
<img src="https://example.com/1602_circuit.png" />
图3-3 1602液晶显示模块电路图
3.5 报警模块
报警模块由蜂鸣器和LED灯组成。当烟雾浓度或温度超过设定的阈值时,蜂鸣器会发出报警声,同时相应的LED灯会亮起。蜂鸣器和LED灯的电路连接如图3-4所示。
<img src="https://example.com/alarm_circuit.png" />
图3-4 报警模块电路图
3.6 按键输入模块
系统设计了3个按键作为操作输入设备,用于调节报警阈值。按键输入模块的电路连接如图3-5所示。
<img src="https://example.com/button_circuit.png" />
图3-5 按键输入模块电路图
3.7 蓝牙模块
蓝牙模块用于将实时数据发送给手机进行远程监控。本系统选用HC-05蓝牙模块,该模块具有传输稳定、功耗低和易于使用等优点。蓝牙模块的电路连接如图3-6所示。
<img src="https://example.com/bluetooth_circuit.png" />
图3-6 蓝牙模块电路图
四、软件设计
4.1 主程序设计
主程序负责系统的初始化、数据采集、处理和传输。主程序的流程图如图4-1所示。
<img src="https://example.com/main_program_flowchart.png" />
图4-1 主程序流程图
在主程序中,首先进行STM32单片机的初始化,包括时钟配置、GPIO口配置、ADC配置、I2C配置和UART配置等。然后,通过MQ-2烟雾传感器和DS18B20温度传感器采集数据,并通过1602液晶显示实时数据。同时,程序会不断检测烟雾浓度和温度是否超过设定的阈值,如果超过则触发报警模块。此外,程序还会通过蓝牙模块将实时数据发送给手机进行远程监控。
4.2 数据采集与处理
数据采集与处理是系统的关键部分。MQ-2烟雾传感器输出的模拟信号通过STM32单片机的ADC接口进行采集,并转换为数字信号。DS18B20温度传感器通过单总线接口与STM32单片机进行通信,读取温度数据。数据采集与处理的流程图如图4-2所示。
<img src="https://example.com/data_acquisition_flowchart.png" />
图4-2 数据采集与处理流程图
在数据采集与处理过程中,首先进行ADC和DS18B20的初始化。然后,通过ADC接口读取MQ-2烟雾传感器的模拟信号,并转换为数字信号。同时,通过单总线接口读取DS18B20温度传感器的温度数据。最后,将采集到的数据进行处理,包括滤波、校准和单位转换等,以便后续显示和报警使用。
4.3 显示与报警
显示与报警模块负责将实时数据显示在1602液晶上,并在异常情况下触发报警模块。显示与报警的流程图如图4-3所示。
<img src="https://example.com/display_alarm_flowchart.png" />
图4-3 显示与报警流程图
在显示与报警过程中,首先进行1602液晶和报警模块的初始化。然后,将采集到的烟雾浓度和温度数据通过1602液晶显示出来。同时,程序会不断检测烟雾浓度和温度是否超过设定的阈值,如果超过则触发报警模块,包括蜂鸣器鸣叫和LED灯亮起。
4.4 按键输入处理
按键输入处理模块负责接收用户输入的报警阈值调节指令,并更新相应的阈值。按键输入处理的流程图如图4-4所示。
<img src="https://example.com/button_input_flowchart.png" />
图4-4 按键输入处理流程图
在按键输入处理过程中,首先进行按键的初始化。然后,不断检测按键是否被按下。如果检测到按键被按下,则根据按键的不同功能进行相应的处理,包括增加或减少烟雾浓度或温度的报警阈值。最后,将更新后的阈值存储在STM32单片机的内存中,以便后续使用。
4.5 蓝牙通信
蓝牙通信模块负责将实时数据发送给手机进行远程监控。蓝牙通信的流程图如图4-5所示。
<img src="https://example.com/bluetooth_communication_flowchart.png" />
图4-5 蓝牙通信流程图
在蓝牙通信过程中,首先进行蓝牙模块的初始化。然后,将采集到的烟雾浓度和温度数据通过UART接口发送给蓝牙模块。蓝牙模块接收到数据后,将其转换为蓝牙信号并发送给手机。手机通过蓝牙接收到的数据可以在相应的应用程序上进行显示和存储。
五、系统测试与调试
5.1 测试环境
为了验证系统的性能和可靠性,进行了系统测试与调试。测试环境为一个大棚,大棚内放置了MQ-2烟雾传感器、DS18B20温度传感器、1602液晶显示模块、蜂鸣器和LED灯报警模块等硬件设备。同时,使用手机作为远程监控设备。
5.2 测试方法
测试方法包括功能测试和性能测试两个方面。功能测试主要验证系统的各项功能是否正常工作,包括数据采集、显示、报警和蓝牙通信等。性能测试主要测试系统的响应时间和精度
等关键指标。
5.3 功能测试
在功能测试中,我们分别对系统的各个模块进行了测试。
5.3.1 数据采集模块测试
首先,我们对数据采集模块进行了测试。通过在大棚内点燃香烟模拟烟雾,观察MQ-2烟雾传感器的输出变化,并通过STM32单片机读取该传感器的模拟信号,验证其是否能正确反映烟雾浓度的变化。同时,我们使用恒温箱模拟不同温度环境,观察DS18B20温度传感器的输出变化,验证其是否能准确测量温度。测试结果表明,数据采集模块能够正确采集烟雾浓度和温度数据。
5.3.2 显示模块测试
接着,我们对显示模块进行了测试。通过STM32单片机将采集到的烟雾浓度和温度数据发送给1602液晶显示模块,观察其是否能正确显示实时数据。测试结果表明,显示模块能够清晰、准确地显示烟雾浓度和温度数据。
5.3.3 报警模块测试
然后,我们对报警模块进行了测试。通过手动设置烟雾浓度和温度的报警阈值,观察当实际数据超过阈值时,蜂鸣器是否会发出报警声,同时相应的LED灯是否会亮起。测试结果表明,报警模块能够在异常情况下及时发出报警信号。
5.3.4 按键输入模块测试
接下来,我们对按键输入模块进行了测试。通过手动按下不同的按键,观察其是否能正确调节烟雾浓度和温度的报警阈值。测试结果表明,按键输入模块能够准确接收用户输入的指令,并更新相应的阈值。
5.3.5 蓝牙通信模块测试
最后,我们对蓝牙通信模块进行了测试。通过STM32单片机将采集到的烟雾浓度和温度数据发送给蓝牙模块,观察手机是否能正确接收到这些数据,并在相应的应用程序上进行显示和存储。测试结果表明,蓝牙通信模块能够稳定、可靠地将数据发送给手机进行远程监控。
5.4 性能测试
在性能测试中,我们主要测试了系统的响应时间和精度。
5.4.1 响应时间测试
我们通过模拟烟雾和温度变化,观察系统从数据采集到报警响应的时间。测试结果表明,系统的响应时间较短,能够在短时间内对异常情况做出反应。
5.4.2 精度测试
我们对系统的精度进行了测试。通过对比实际烟雾浓度和温度值与系统采集的数据,观察其误差范围。测试结果表明,系统的精度较高,能够满足大棚内烟雾和温度监测的需求。
六、结论与展望
6.1 结论
本文介绍了一种基于STM32单片机的烟雾温度大棚报警器设计。该系统通过MQ-2烟雾传感器和DS18B20温度传感器分别采集烟雾浓度和温度数据,利用1602液晶显示实时数据,并通过蜂鸣器和LED灯实现报警功能。此外,系统还设计了3个按键用于调节报警阈值,并通过蓝牙模块将实时数据发送给手机进行远程监控。经过系统测试与调试,验证了该系统的性能和可靠性。该系统具有低成本、高可靠性和易于扩展等优点,适用于大棚等农业场所的火灾预警和温度监控。
6.2 展望
未来,我们可以进一步完善该系统的功能。例如,可以增加更多的传感器,如湿度传感器、光照传感器等,以实现对大棚内环境的全面监测。同时,我们可以将系统与云计算平台相结合,实现数据的远程存储和分析,为农业生产提供更加智能化的决策支持。此外,我们还可以优化系统的算法和硬件设计,提高系统的精度和响应速度,以满足更高要求的农业生产需求。
参考文献
#include "ds18b20.h"
#include "stm32f1xx_hal.h"
//static inline void delay_ms(uint32_t delay)
//{
// HAL_Delay(delay);
//}
#define CPU_FREQUENCY_MHZ 8 // CPU主频,根据实际进行修改
static void delay_us(uint32_t delay)
{
int last, curr, val;
int temp;
while (delay != 0)
{
temp = delay > 900 ? 900 : delay;
last = SysTick->VAL;
curr = last - CPU_FREQUENCY_MHZ * temp;
if (curr >= 0)
{
do
{
val = SysTick->VAL;
} while ((val < last) && (val >= curr));
}
else
{
curr += CPU_FREQUENCY_MHZ * 1000;
do
{
val = SysTick->VAL;
} while ((val <= last) || (val > curr));
}
delay -= temp;
}
}
//复位DS18B20
void DS18B20_Rst(void)
{
DS18B20_IO_OUT(); // SET PA0 OUTPUT
DS18B20_DQ_OUT = 0; //拉低DQ
delay_us(750); //拉低750us
DS18B20_DQ_OUT = 1; // DQ=1
delay_us(15); // 15US
}
//等待DS18B20的回应
//返回1:未检测到DS18B20的存在
//返回0:存在
uint8_t DS18B20_Check(void)
{
uint8_t retry = 0;
DS18B20_IO_IN(); // SET PA0 INPUT
while (DS18B20_DQ_IN && retry < 200)
{
retry++;
delay_us(1);
};
if (retry >= 200)
return 1;
else
retry = 0;
while (!DS18B20_DQ_IN && retry < 240)
{
retry++;
delay_us(1);
};
if (retry >= 240)
return 1;
return 0;
}
//从DS18B20读取一个位
//返回值:1/0
uint8_t DS18B20_Read_Bit(void) // read one bit
{
uint8_t data;
DS18B20_IO_OUT(); // SET PA0 OUTPUT
DS18B20_DQ_OUT = 0;
delay_us(2);
DS18B20_DQ_OUT = 1;
DS18B20_IO_IN(); // SET PA0 INPUT
delay_us(12);
if (DS18B20_DQ_IN)
data = 1;
else
data = 0;
delay_us(50);
return data;
}
//从DS18B20读取一个字节
//返回值:读到的数据
uint8_t DS18B20_Read_Byte(void) // read one byte
{
uint8_t i, j, dat;
dat = 0;
for (i = 1; i <= 8; i++)
{
j = DS18B20_Read_Bit();
dat = (j << 7) | (dat >> 1);
}
return dat;
}
//写一个字节到DS18B20
// dat:要写入的字节
void DS18B20_Write_Byte(uint8_t dat)
{
uint8_t j;
uint8_t testb;
DS18B20_IO_OUT(); // SET PA0 OUTPUT;
for (j = 1; j <= 8; j++)
{
testb = dat & 0x01;
dat = dat >> 1;
if (testb)
{
DS18B20_DQ_OUT = 0; // Write 1
delay_us(2);
DS18B20_DQ_OUT = 1;
delay_us(60);
}
else
{
DS18B20_DQ_OUT = 0; // Write 0
delay_us(60);
DS18B20_DQ_OUT = 1;
delay_us(2);
}
}
}
//开始温度转换
void DS18B20_Start(void) // ds1820 start convert
{
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc); // skip rom
DS18B20_Write_Byte(0x44); // convert
}
//初始化DS18B20的IO口 DQ 同时检测DS的存在
//返回1:不存在
//返回0:存在
uint8_t DS18B20_Init(void)
{
DS18B20_Rst();
return DS18B20_Check();
}
//从ds18b20得到温度值
//精度:0.1C
//返回值:温度值 (-55.0~125.0)
float DS18B20_Get_Temp(void)
{
uint8_t temp;
uint8_t TL, TH;
short tem;
float temr;
DS18B20_Start(); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc); // skip rom
DS18B20_Write_Byte(0xbe); // convert
TL = DS18B20_Read_Byte(); // LSB
TH = DS18B20_Read_Byte(); // MSB
if (TH > 7)
{
TH = ~TH;
TL = ~TL;
temp = 0; //温度为负
}
else
temp = 1; //温度为正
tem = TH; //获得高八位
tem <<= 8;
tem += TL; //获得底八位
temr = (float)tem * 0.0625; //转换
if (temp)
return temr; //返回温度值
else
return -temr;
}