第一步是收集有关室外温度、湿度和气体浓度的信息,作为敏感元件烟雾传感器的输入信息。当信号输入值与放大模块的A/D转换器输入电平相匹配时,无需放大放大器;当信号输入值与放大模块的A/D转换器输入级别不匹配时,放大器将放大电气信号。
A/D电路的第二阶段将模拟信号转换为单片机进行识别和判断。数字信号后,单片机接收和处理传感器发送的数字信号,分析数据,比较数字信号是否超过设定的浓度阈值(该测试设置为100ppm),并将测量的浓度转换为十进制数字发送到液晶显示器,观察效果更好。如果周围环境烟雾浓度达到设定阈值,启动蜂鸣器报警电路。整体原理图如下所示:
下面依次介绍几个用到的主要元器件:
1. 由于所有的传感器都是其物理信号转化为电信号,根据此原理就可以利用ADC芯片去模拟烟雾报警的输出。利用ADC0831和单片机89C52连接起来。原理图如下:
驱动代码如下:
sbit adcdo=P0^0;
sbit adcclk=P0^1;
sbit adccs=P0^2;
sbit adcdoa=P0^3;
sbit adcclka=P0^4;
sbit adccsa=P0^5;
char bdata ch;
sbit ch_0 = ch^0;
void delay1(char x)
{
char i;
for(i=0;i<x;i++);
}
//--------------adc1--------------//
void adcck(void)
{
adcclk=1;
delay1(1);
adcclk=0;
delay1(1);
}
char readadc(void)
{
char i;
ch=0;
adccs=0;
adcck();
while(adcdo);
for (i=0; i<8; i++)
{
adcck();
ch <<= 1;
ch_0 = adcdo;
}
adccs=1;
return(ch);
}
2. LCD1602拥有功耗小、数据显示丰富、体型轻便,功能也比较强大,本系统的优点较多,当前已在诸多单片机产品中得到了全里面的推广和使用。LCD1602一共有16个引脚,其引脚分布如图所示。
3. DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便,DHT11的数据端口是连接到了STC89C52的P3.5端口,如图所示。
驱动代码如下:
#include <absacc.h>
#include <intrins.h>
#include <reg51.h>
sbit DATA_DHT11 = P3^5;
unsigned char sensor_DATA[4]={0x0,0x0,0x0,0x0};
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
delay1ms();
}
void testChange()
{
unsigned char i = 0x56;
sensor_DATA[2] = i;
}
void time_Tgo()
{
unsigned char i;
_nop_();
i = 3;
while (--i);
}
void start_DHT11()
{
DATA_DHT11 = 1;
_nop_();_nop_();_nop_();_nop_();
DATA_DHT11 = 0;
delay(20);
DATA_DHT11 = 1; //微处理器的I/O设置为输入状态,由上拉电阻拉高
time_Tgo(); //释放总线,13us,等待回应时间应大于proteus上的时间30us
time_Tgo();
time_Tgo(); //3*13us
}
void time_delay30us()
{
unsigned char i;
i = 11;
while (--i);
}
unsigned char getDHT11_byte()
{
unsigned char i,dat,temp;
for ( i = 0; i < 8; i++)
{
//time_Tlow_en();//先过54us
while(!DATA_DHT11);//先过54us,低电平
time_delay30us();
temp = 0;
if(DATA_DHT11 == 1)
{
temp = 1;
}
while(DATA_DHT11);
dat <<= 1;
dat = dat|temp;
}
return dat;
}
void getDHT11_allData()
{
unsigned char RH,RL,TH,TL,revise;
start_DHT11();
if(DATA_DHT11 == 0) //接收83us的应答信号,
{
while(DATA_DHT11 == 0); //等待拉高现在data为0
while(DATA_DHT11); //退出通知单片机接受信号,等87us
RH=getDHT11_byte(); //接收湿度高八位
RL=getDHT11_byte(); //接收湿度低八位
TH=getDHT11_byte(); //接收温度高八位
TL=getDHT11_byte(); //接收温度低八位
revise=getDHT11_byte(); //接收校正位
//time_Tlow_en(); //结束
if((RH+RL+TH+TL)==revise) //校正
{
sensor_DATA[0] = RH;
sensor_DATA[1] = RL;
sensor_DATA[2] = TH;
sensor_DATA[3] = TL;
}
}
}
4. 本设计利用Proteus软件中的电源设置成12V去模拟蓄电池的电压。由于单片机、DHT11传感器、LCD1602液晶显示屏的供电电压是5V,故需要降压。本设计利用7805降压芯片,把供电电源的12V降至5V,供给单片机、DHT11传感器、LCD1602液晶显示屏。如图所示。