APP下载

单片机于灭火器的应用

2019-10-19陈婷婷李贵强秦雨晴龙秀堂王翔

关键词:灭火器智能控制单片机

陈婷婷 李贵强 秦雨晴 龙秀堂 王翔

摘 要:近年来,火灾频繁的发生,国家也对消防工作非常的重视。但现目前市场上存在的灭火器不够智能化,为了打破传统灭火器呆板的缺点,现将单片机与灭火器相结合,使灭火器变得更加智能化,能够自动检测及自动灭火。同时,可安装蓝牙和WiFi装置,当发生火灾时,在远处的终端也可查看并控制火灾情况。随着科技的发展,时代的进步,嵌入式计算机系统已经应用到了各行各业,也有很多应用实例,如,人们日常生活中的手机、空调、洗衣机都与之密切相关,而单片机应用系统是中低档嵌入式的主流。

关键词:灭火器;单片机;智能控制;远端控制

1 控制原理及系统

想要检测温度,达到燃点温度时开始报警,并开始自动灭火。系统需要有温度传感器,灭火装置,报警器等组成。在整个工作过程中,当温度达到了预警温度,开始预警,当温度进一步升高,发生初期火灾时,启动灭火装置,并开始报警。由于此系统用主要由单片机控制,而单片机只能读取数字信号,对温度变化这种模拟信号无法输入,则需要一个A/D转换器将温度传感器接受了温度变化引起的电压电流变化的模拟信号转变为数字信号。当然,由于各模块的有效电压值不一样,中间需要变压器进行变压,才能将电输送到各模块进行工作。工作流程圖如图1.1所示。

2 单片机工作过程及程序内容

单片机控制系统:AT89S51

单片机控制系统是整个装置的关键,单片机需要接受温度变化带来的信号,经A/D转换器和电压放大器,(当中其中需配备电池)将电压调整到单片机的工作电压范围内,经过单片机的内部程序的运算,输出高低电平,来触发或者不触发报警系统和灭火装置。将单片机的输出接口与电机总闸连接,还可在火灾初期切断电源,以防止火灾的蔓延。

在此程序中,以蜂鸣器代表报警系统,以电磁阀开关代表灭火装置,其具体程序如下:

#include  "led.h"

#include  "delay.h"

#include  "key.h"

#include  "sys.h"

#include  "ds18b20.h"

int  main(void)

{

// vu8  key=0;

delay_init();            //延时函数初始化

LED_Init();      //初始化与LED连接的硬件接口

BEEP_Init();                   //初始化蜂鸣器端口

KEY_Init();                   //初始化与按键连接的硬件接口

DS18B20_Init();              //初始化与温度传感器

while(1)

{

if(PEin(0)==1)    //烟雾传感器

{PEout(3)=1;                                                  //气阀开关

PEout(4)=1; //蜂鸣器

}

if(PEin(1)==0)    //火光传感器

{PEout(3)=1;                                          //气阀开关

PEout(4)=1; //  蜂鸣器

}

wendu();        //温度传感器

}

}

以上为主函数

子函数1

void  LED_Init(void)

{

GPIO_InitTypeDef    GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);   //使能PB,PE端口时钟

GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_5|GPIO_Pin_3|GPIO_Pin_4;   //LED0-->PB.5  端口配置

GPIO_InitStructure.GPIO_Mode  =  GPIO_Mode_Out_PP;     //推挽输出

GPIO_InitStructure.GPIO_Speed  =  GPIO_Speed_50MHz;   //IO口速度为50MHz

GPIO_Init(GPIOE, &GPIO_InitStructure);   //根据设定参数初始化GPIOE.5

}

子函数2

void  LED_Init(void)

{

GPIO_InitTypeDef    GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);   //使能PB,PE端口时钟

GPIO_InitStructure.GPIO_Pin  =  GPIO_Pin_5|GPIO_Pin_3|GPIO_Pin_4;   //LED0-->PB.5  端口配置

GPIO_InitStructure.GPIO_Mode  =  GPIO_Mode_Out_PP;     //推挽输出

GPIO_InitStructure.GPIO_Speed  =  GPIO_Speed_50MHz;   //IO口速度为50MHz

GPIO_Init(GPIOE, &GPIO_InitStructure);   //根据设定参数初始化GPIOE.5

}

子函数3

void  Init_DS18B20(void)

{

unsigned  char  x=0;

DQ=1;   //DQ先置高

delay(8);   //稍延时

DQ=0;   //发送复位脉冲

delay(80);   //延时(>480us)

DQ=1;   //拉高数据线

delay(5);   //等待(15~60us)

x=DQ;   //用X的值来判断初始化有没有成功,18B20存在的话X=0,否则X=1

delay(20);

}

子函数4

void  ReadTemperature(void)

{

Init_DS18B20();   //初始化

WriteOneChar(0xcc);   //跳过读序列号的操作

WriteOneChar(0x44);   //启动温度转换

delay(125);   //轉换需要一点时间,延时

Init_DS18B20();   //初始化

WriteOneChar(0xcc);   //跳过读序列号的操作

WriteOneChar(0xbe);   //读温度寄存器(头两个值分别为温度的低位和高位)

tempL=ReadOneChar();   //读出温度的低位LSB

tempH=ReadOneChar();   //读出温度的高位MSB

if(tempH>0x7f)             //最高位为1时温度是负

{

tempL=~tempL; //补码转换,取反加一

tempH=~tempH+1;

fg=0;             //读取温度为负时fg=0

}

sdata  =  tempL/16+tempH*16;             //整数部分

xiaoshu1  =  (tempL&0x0f)*10/16;   //小数第一位

xiaoshu2  =  (tempL&0x0f)*100/16%10; //小数第二位

xiaoshu=xiaoshu1*10+xiaoshu2;   //小数两位

}

子函数5

void  delay_init()

{

#if  SYSTEM_SUPPORT_OS     //如果需要支持OS.

u32  reload;

#endif

SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟    HCLK/8

fac_us=SystemCoreClock/8000000; //为系统时钟的1/8

#if  SYSTEM_SUPPORT_OS     //如果需要支持OS.

reload=SystemCoreClock/8000000; //每秒钟的计数次数  单位为K

reload*=1000000/delay_ostickspersec; //根据delay_ostickspersec设定溢出时间

//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右

fac_ms=1000/delay_ostickspersec; //代表OS可以延时的最少单位

SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;       //开启SYSTICK中断

SysTick->LOAD=reload;   //每1/delay_ostickspersec秒中断一次

SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;       //开启SYSTICK

#else

fac_ms=(u16)fac_us*1000; //非OS下,代表每个ms需要的systick时钟数

#endif

}

子函数6

#define  PAout(n)      BIT_ADDR(GPIOA_ODR_Addr,n)    //输出

#define  PAin(n)        BIT_ADDR(GPIOA_IDR_Addr,n)    //输入

#define  PBout(n)      BIT_ADDR(GPIOB_ODR_Addr,n)    //输出

#define  PBin(n)        BIT_ADDR(GPIOB_IDR_Addr,n)    //输入

#define  PCout(n)      BIT_ADDR(GPIOC_ODR_Addr,n)    //輸出

#define  PCin(n)        BIT_ADDR(GPIOC_IDR_Addr,n)    //输入

#define  PDout(n)      BIT_ADDR(GPIOD_ODR_Addr,n)    //输出

#define  PDin(n)        BIT_ADDR(GPIOD_IDR_Addr,n)    //输入

这里只是一个简单的程序,能简单的完成控制,可将此程序插入单片机中完成基本的检测和灭火步骤,若后续系统组成有变,将程序稍作改动便可实现功能。需注意的是,在此程序中,并未考虑氧气浓度,如何灭火,灭火介质等因素的影响,若需精确的控制,还应将各个因素考虑完全。

3 结束语

在很多控制系统中都运用了单片机,将单片机运用于自动检测并自动启动灭火装置不仅仅可以减轻人们的劳动强度,也可以极大的减少火灾的发生几率,保护一些重要设备的寿命,远端的控制更是提供了整个系统的安全性。当然,现在也有很多自动检测并灭火装置,虽然都用了控制,但在基础系统及结构上还是有着很多的差别。此种自动检测并灭火的装置也有其缺点,如不能完成地、系统地、灭火,当火灾形势严重时,此系统基本就报废了,因为其工作前提是单片机及各线路完好无损,当有的重要元件或线路因为某些不可控因素遭到腐蚀或高温等破坏时,可能会导致整个系统无法正常工作。

参考文献:

[1]徐春辉,陈忠斌,章海亮.单片微型计算机原理及应用[M].中国工信出版集团,2017(08).

[2]邓伟昭.基于单片机AT89S51的房间自动化灭火[J],2016.

[3]刘鑫.基于单片机的火灾报警系统的设计[D].东北石油大学,2018.

猜你喜欢

灭火器智能控制单片机
智能控制在机器人领域中的应用
应用型人才培养导向下智能控制教学改革探讨
浅谈开关式电梯IC卡系统及展望
小小消防员第三集
C8051F020与80C51单片机的异同点
单片机I/O口模拟串行通讯的C51实现方法
单片机调试方法的探讨
用PIC单片机制作的时间继电器