在消防安全领域,现在对火灾的迅速精准监控变得尤为关键。而采用stm32这类芯片搭建的系统,其中有很多值得深入研究的问题。
系统核心芯片stm32的作用
stm32芯片在系统中扮演着关键角色。在某个城市的众多建筑消防监控系统中,stm32芯片负责收集诸如烟雾浓度、温度等火灾相关数据。芯片性能十分可靠。在烟雾浓度检测方面,选用了精准的数字型火灾探测器,并通过总线与处理器相连接,确保了数据采集的顺利进行。这种连接模式有助于数据的快速传输。此外,在其它地区的类似系统中,这种连接方式也得到了实际应用并证明是有效的。
此外,该系统在将收集到的信息通过串口连接的wifi或NBIOT模块传输至远端用户那里扮演关键角色。各地远端用户在接收到数据后,会根据各自的配置执行不同的处理方式。
硬件设计原理图
在硬件设计中,原理图至关重要。观察已制成的实体设备,我们发现报警器内含有灰尘和烟雾等传感器。烟雾传感器输出的信号模拟性较强,与实际测试环境中的表现相似,信号较为微弱。因此,必须使用放大模块进行信号增强,接着通过AD转换器完成信号转换,单片机才能正确接收数字信号。此外,经过零点补偿、标定运算等处理后的数字信号,既能显示在液晶屏上,也能依次传输至上位机。整个流程在各个硬件环节都需遵循严格的数据标准和逻辑顺序。尽管不同型号的设备在硬件原理上存在细微差别,但整体设计理念保持高度统一。
核心软件设计
核心软件为系统注入了生命力。该系统的软件设计逻辑相当严谨。在单片机内部处理信号时,会将接收到的数字信号与预设值进行比对,一旦达到特定级别,便会启动相应的延时声光报警。在实际操作中,软件中的各项数值和操作流程都是基于大量实验和数据分析得出的。比如,在特定条件下,设定的比对数值既不能过高也不能过低,否则可能会引发报警延迟或误报。此外,软件还需确保各部件间的协同运作,从传感器信号接收,到核心处理,再到最终的报警和数据发送,整个过程连贯流畅,保障系统整体运行顺畅。
传感器工作细节
传感器是系统的感官。以MQ-2型号传感器为例,预热环节至关重要。因为这类传感器若长时间未使用,一旦通电,就如同新用时一样,无法立即准确收集烟雾信息。因此,预热是确保传感器在烟雾浓度监测系统中正常工作的先决条件。传感器具有明显的采集特性,能将烟雾信号转换成电信号。在工厂车间等场所进行烟雾监测时,传感器接收到的电信号通常很微弱,因此后续的调理和转换过程变得特别重要。
信号调整与处理
传感器传来的电信号通常较小,这是很正常的情况。为了确保系统能够准确判断火灾是否发生,这些信号必须经过调整。根据现有系统的测试结果,电信号首先会通过信号调理电路和采样保持器。信号调理电路负责改善电信号质量,而采样保持器则用于稳定信号,以便后续处理。随后,信号将由AD转换器执行模数转换等操作。这一系列过程不容有失,因为任何小错误都可能导致对火灾判断的失误。虽然在不同地点搭建的系统,信号调整的具体参数可能有所差异,但基本原理和操作流程保持一致。
系统工作流程
系统运作井然有序。启动系统之初,需先对传感器进行预热,随后进行程序初始化,确保系统能够进入监管模式。在数据收集环节,烟雾浓度检测系统启动,将烟雾信号转换为电信号进行收集。经过信号转换处理后,stm32单片机对烟雾浓度信息进行分析,并结合灰尘传感器的数据,评估电压是否超过设定阈值,进而决定是否触发报警。若判定需报警,单片机将通过WIFI模块与上位机进行通讯。类似在大型商场安装的系统,正是依照这一严谨的流程,全天候确保场所的消防安全。
主函数中初始化了串口1、串口2、SPI2、液晶屏、IED灯引脚及按键引脚、烟雾报警器,PM2.5的ADC功能引脚及ADC功能初始化,然后直接进入WIFI模块配置的过程,将WIFI配置为AP模式后,开始跟上位机进行通讯。
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组
uart_init(115200); //串口初始化为115200
USART2_Init(115200); //初始化串口2波特率为115200
SPI2_Init(); //初始化SPI
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
#if (CODE_TYPE==2)
DHT11_GPIO_Config();
Adc_Init_Light();
Adc_Init_Soil();
#elif(CODE_TYPE==3)
Adc_Init_Fire();
//Adc_Init_MQ25();
Adc_Init_MQ135();
Adc_Init_PM25();
#endif
//初始化空气质量检测传感器
mem_init(); //初始化内存池
Lcd_Clear(WHITE);
LCD_ShowString(5,20,128,16,16,"System Success!");
delay_ms(1500);
Lcd_Clear(WHITE);//清屏
atk_8266_test(); //进入ATK_ESP8266测试
}
WIFI模块的连接
WIFI模块通过单片机串口2的引脚PA2和PA3来连接,首先初始化串口2,然后通过AT命令,将WIFI模块设置工作在AP模式,且作为服务器,服务器的端口号为5000,上位机首先连接次WIFI的热点,然后连上WIFI的服务器,此时单片机可以将采集的火情及毒气浓度值及PM2.5 的值发送给上位机,上位机也可以设置单片机的手动或自动工作的模式。也可以远程让单片机发出报警。
//连接端口号:8086
const u8* portnum="5000";
//WIFI STA模式 ,设置要去连接的路由器无线参数
const u8* wifista_ssid="ALIENTEK"; //路由器SSID号
const u8* wifista_encryption="wpawpa2_aes"; //wpa/wpa2 aes加密方式
const u8* wifista_password="12345678"; //连接密码
//WIFI AP模式 模块对外的无线参数
#if (CODE_TYPE==2)
const u8* wifiap_ssid="DanChenBS_Soil";
#elif (CODE_TYPE==3)
const u8* wifiap_ssid="DanChenBS_Fire"; //对外SSID号
#else
const u8* wifiap_ssid="DanChenBS_FC";
#endif
const u8* wifiap_encryption="wpawpa2_aes"; //wpa/wpa2 aes加密方式
const u8* wifiap_password="12345678"; //连接密码
自动报警
当上位机与下位机连接成功过后,上位机的模式切换到自动报警模式以后,下位机会把单片机所处环境信息实时传给上位机程序并显示,当数据远远超过所设置阈值时,就进行报警。
def manual_close(self):
send_data = '###AUTO'
self.gui.var1.set('已切换到自动模式')
i = 15
while(i > 0):
tcp_client_socket.send(send_data.encode("gbk"))
data_len = len(prase_data)
if( data_len > 0 and data_len < 10):
break
i -= 1
time.sleep(0.1)
def Add_open(self):
send_data = '###OPEN'
self.gui.var2.set('开始报警')
i = 15
while(i > 0):
tcp_client_socket.send(send_data.encode("gbk"))
data_len = len(prase_data)
if( data_len > 0 and data_len < 10):
break
i -= 1
time.sleep(0.1)
def Add_close(self):
send_data = '###CLOSE'
self.gui.var2.set('停止报警')
i = 15
while(i > 0):
tcp_client_socket.send(send_data.encode("gbk"))
data_len = len(prase_data)
if( data_len > 0 and data_len < 10):
break
i -= 1
time.sleep(0.1)
大家是否认为,与传统的火灾监控系统相比,使用stm32芯片的系统在维护方面更胜一筹?欢迎读者们踊跃留言交流。同时,不妨点个赞,把这篇文章转发出去。