基于51单片机的智能家居系统

        本次使用51单片机以及语音识别模块LD3320和一些外围传感器设备,实现了一个简易智能家居系统。现将实现的过程和使用的模块向大家介绍,有些涉及底层驱动的地方可能不会详细介绍,着重介绍设计思路、实现的过程、以及主函数的逻辑。

目录

摘要

1.引言

1.1单片机的发展

1.2课题意义

1.3开发工具的选择

2.设计要求

3.器件选型

3.1单片机选型

3.2语音模块选型

3.3温度传感器

3.4显示器选型

3.5无线传输模块选型

3.6红外感应模块

4.设计思路

5.方案介绍

5.1软件部分

5.2硬件部分

5.2.1 51单片机

 5.2.2 语音识别模块LD3320

5.2.3 DS18B20温度传感器

5.2.4 LCD1602显示器

5.2.5 ARMP3遥控器

6.测试数据

6.1 测试过程及效果:

6.2 产生的误差:

7.实物图


摘要

        智能家居作为家庭信息化的实现方式,已经成为社会信息化发展的重要组成部分,物联网因其巨大的应用前景,将是智能家居产业发展过程中一个比较现实的突破口,对智能家居的产业发展具有重大意义。本文基于容易实现,方便操作,贴近使用的设计理念,设计的智能家居系统是以AT89C51单片机为主控器件,与温度传感器、红外收发模块、LCD1602显示屏、红外遥控之间进行数据交换。主机部分是系统的核心部分,通过红外遥控对系统温度的阈值进行设置,并利用LCD显示模块对室内当前温度和所设阈值进行实时显示,当所测温度高于阈值时报警。除此之外,还利用红外避障模块设计了一个防盗报警装置,当有人靠近时,蜂鸣器报警予以警示。整个模块还使用了语音模块,实现了对家居的智能控制。

1.引言

1.1单片机的发展

        单片机诞生于20世纪70年代,1974年Fairchild(仙童)公司研制出第一台卫星计算机F8。.此时集成电路属于中规模发展时期,各种新材料新工艺尚未成熟,单片机仍处于发展的初级阶段,元件集成规模还比较小,功能比较简单,一般均把CPU、RAM,有的还包括一些简单的I/O口集成到芯片上,像Fairchild公司就属于这一类型,它还需配上外围的其他处理电路方才构成完整的计算系统。 

        1976年Intel公司推出了MCS-48单片机,这个时期的单片机才是真正的8位单片微型计算机。它以体积小,功能全,价格低赢得了广泛应用。这一阶段,单片机被正式命名为Single Chip Microcomputer,即单片微型计算机。总的来说,这一时期的单片机性能较弱属于低、中档产品。 

        1982年以后,16位单片机问世,例如Intel公司的MCS-96系列。16为单片机比起8位机,数据宽度增加了一倍,实时处理能力更强,主频更高,RAM增加到232字节,RAM则达到了8KB,并且有8个中断源,同时配置了多路的A/D转换通道,高速的I/O处理单元,适用于更复杂的测控系统。 

        现在,单片机发展迅速,按操作处理的基本数据位数来看已经有4位、8位、16位、32位、甚至64位。单片机设计生产周期缩短、成本下降、应用领域拓宽,开始向专用型单片机发展。

1.2课题意义

        随着人们对居住环境要求的不断提高,家居智能化已经成为住宅发展的必然趋势。自从1984年在美国康涅迪格州诞生了世界上最早的智能建筑,之后加拿大、欧洲、澳大利亚和东南亚等经济比较发达的国家也先后提出了智能家居的概念,即将家庭中各种通讯设备、家用电器和家庭安防装置通过家庭网络连接到一个家庭智能化系统上进行集中的或异地的监控,并保持这些家庭设施与住宅环境的和谐与协调。在我国智能家居也在逐渐升温,但智能家居始终没有真正的走进人们的生活,主要是因为目前它在价格、实用性和功能的丰富程度上存在着一定的问题。所以开展本课题的研究具有人性化和个性化的特点,也是智能家居的意义所在。

1.3开发工具的选择

        Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

2.设计要求

        系统有语音识别功能,使用语音识别模块来控制整个系统的开启与关闭。有测温功能,显示功能,将测得的温度实时显示在LCD屏幕上面。还有温度阈值,阈值可以通过红外遥控器设置,温度超过阈值时就报警。同时还有一个红外避障模块,用于检测人体,起到防盗报警的作用。当有人靠近时,检测到有人,就会报警!

3.器件选型

        本系统主要由单片机最小系统板、语音模块、温度传感器、无线传输系统、屏幕显示模块、红外感应模块组成,下面分别论证这几个模块的选择。

3.1单片机选型

        方案一:AT89C52单片机。AT89C52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器,适于常规编程器。但是架构太简单,片上外设少,不适合本次使用。

        方案二:STM32单片机。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。STM32单片机程序都是模块化的,接口相对简单些,内有A/D转换电路,可扩展性强。

        因为本次设计所需硬件资源不太大,AT89C52单片机完全可以胜任,故本次选择方案一,采用AT89C52系列单片机为主控处理器。

3.2语音模块选型

        方案一:采用JQ8900作为语音播报电路。JQ8900是一款具有单片机内核的语音芯片,因此,可以冠名为JQ8900系列语音单片机。功能多音质好应用范围广性能稳定是JQ8900系列语音单片机的特长,弥补了以往各类语音芯片应用领域狭小的缺陷, MP3控制模式、按键控制模式、按键组合控制模式、并口控制模式、一线串口控制模式、等多种控制方式,配套专用上位机,指令自动生成。

    方案二:采用LDV5语音识别模块。该模块具备USB接口, TF卡读取U盘功能,直接修改剧本;具备支持大4G mini低速TF卡;可实现人机对话,播放MP3功能,播放歌曲,播放对话;具备串口输出识别码功能,支持1-12字节 自定义16进制输出;支持口令识别方式;支持普通识别模式、按键触发模式以适应不同应用环境;具备串口实现MP3点播功能,可以选择任意播放MP3;具备看门狗复位功能,系统更稳定耐用;支持550条语音命令识别,每条10字以内,每次候选50句识别;具备8个10口的控制功能,通过配置TF卡文件可以实现输出高电平、低电平、高电平点动0.5S、高电平点动1S的控制。

    通过比较,本次选择兼有语音播报功能和语音识别、控制功能的LDV5语音识别模块。

3.3温度传感器

        方案一:使用LMT70温度传感器。LMT70是一款带有输出使能引脚的超小型、高精度、低功耗互补金属氧化物半导体 (CMOS) 模拟温度传感器。LMT70 几乎适用于所有高精度、低功耗的经济高效型温度感测应用。但非接触式测温时其误差太大。

      方案二:使用DS18B20温度传感器。它是常用的数字温度传感器,输出的是数字信号,具有体积小、抗干扰能力强、接线方便等优点。但它在非接触情况下无法准确获得物体温度。

     方案三:使用MLX90614—BCC温度传感器。该模块体积小、易集成,测量温度范围广,测量辨析度可达0.02℃。支持无接触温度测量,可以在10cm范围内精准测温。

     通过比较,本次选择DS18B20温度传感器。

3.4显示器选型

        方案一:采用LCD1602作为显示屏,LCD1602是工业字符型液晶,能够同时显示16x02即32个字符。是一种专门用来显示字母、数字、符号等的点阵型液晶模块。但是可扩展能力弱。

        方案二:采用2.8寸TFT显示屏,彩色显示,320*240分辨率,有较高的扩展性,可以用它实现键盘,显示等多种功能,功能强大。

        因为此次不需要显示太多内容,也不需要显示图片,所以选择方案一,采用LCD1602作为显示方案。

3.5无线传输模块选型

        方案一:采用HC08_WIFI模块传输温度阈值。HC08蓝牙模块是广州汇承公司的产品,HC系列分别有蓝牙,WiFi以及433MHz无线通信模块若干,其中HC系列的蓝牙模块目前用于单片机通信的方面最广,具有低功耗(以HC08为代表),配备双模蓝牙,操作极为简单(安装支持BLE的APP后无需对码且指令集简单),主从机一体,通信效果好这些优点。

        方案二:使用ARMP3红外遥控器传送温度阈值。其采用一体化,集红外接收、放大、滤波和比较器输出等的模块作为红外接收头的模块元件,不需要任何外接元件,就能完成从红外线信号接收到输出与TTL电平信号相兼容的所有工作,适合于各种红外线遥控和红外线数据传输。

        经选择,本次采用方案二,使用红外遥控器进行数据的无线传输。

3.6红外感应模块

        因红外感应模块原理简单,故直接选择能够输出TTL电平的红外收发模块。

4.设计思路

 

5.方案介绍

5.1软件部分

主函数代码如下:

#include "reg52.h"   
#include "LED.h"
#include "beep.h"
#include "delay.h"
#include "shumaguan.h"
#include "key.h"
#include "key44.h"
#include "INT1.h"
#include "T1interrupt.h"
#include "usart.h"
#include "LCD1602.h"
#include "DS18B20.h"
#include "infrared.h"
#include "HC08.h"

sbit LD=P1^1;     //语音模块的PA1口接到了单片机的P1^1口
void main(void)
{  
    IrInit();     //红外遥控初始化
    UsartInit();  //串口初始化
    LcdInit();    //LCD显示器初始化
   while(1)
   {  
     if(LD==1)    //如果语言识别模块识别到了对应的命令  
     { 
     cewen();     //用于测温的函数
     }
     bzfunc();   //用于防盗报警的函数
   
   }
}

主函数里面主要是由语音控制的测温模块代码,以及实时运行的防盗代码。

测温部分的全部代码如下:

#include "reg52.h"   
#include "LED.h"
#include "beep.h"
#include "delay.h"
#include "shumaguan.h"
#include "key.h"
#include "key44.h"
#include "INT1.h"
#include "T1interrupt.h"
#include "usart.h"
#include "LCD1602.h"
#include "DS18B20.h"
#include "infrared.h"

char tmp[7]="123.45C";
char zhi[]="00.00C";
//u8 IrValue[6];

uchar Ds18b20Init()
{
	uchar i;
	DSPORT = 0;			 //将总线拉低480us~960us
	i = 70;	
	while(i--);//延时642us
	DSPORT = 1;			//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
	i = 0;
	while(DSPORT)	//等待DS18B20拉低总线
	{
		delay_nms(1);
		i++;
		if(i>5)//等待>5MS
		{
			return 0;//初始化失败
		}
	
	}
	return 1;//初始化成功
}

void Ds18b20WriteByte(uchar dat)
{
	uint i, j;

	for(j=0; j<8; j++)
	{
		DSPORT = 0;	     	  //每写入一位数据之前先把总线拉低1us
		i++;
		DSPORT = dat & 0x01;  //然后写入一个数据,从最低位开始
		i=6;
		while(i--); //延时68us,持续时间最少60us
		DSPORT = 1;	//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
		dat >>= 1;
	}
}

uchar Ds18b20ReadByte()
{
	uchar byte, bi;
	uint i, j;	
	for(j=8; j>0; j--)
	{
		DSPORT = 0;//先将总线拉低1us
		i++;
		DSPORT = 1;//然后释放总线
		i++;
		i++;//延时6us等待数据稳定
		bi = DSPORT;	 //读取数据,从最低位开始读取
		/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
		byte = (byte >> 1) | (bi << 7);						  
		i = 4;		//读取完之后等待48us再接着读取下一个数
		while(i--);
	}				
	return byte;
}

void  Ds18b20ChangTemp()
{
	Ds18b20Init();
	delay_nms(1);
	Ds18b20WriteByte(0xcc);		//跳过ROM操作命令		 
	Ds18b20WriteByte(0x44);	    //温度转换命令
	//Delay1ms(100);	//等待转换成功,而如果你是一直刷着的话,就不用这个延时了
   
}

void  Ds18b20ReadTempCom()
{	

	Ds18b20Init();
	delay_nms(1);
	Ds18b20WriteByte(0xcc);	 //跳过ROM操作命令
	Ds18b20WriteByte(0xbe);	 //发送读取温度命令
}

int Ds18b20ReadTemp()
{
	int temp = 0;
	uchar tmh, tml;
	Ds18b20ChangTemp();			 	//先写入转换命令
	Ds18b20ReadTempCom();			//然后等待转换完后发送读取温度命令
	tml = Ds18b20ReadByte();		//读取温度值共16位,先读低字节
	tmh = Ds18b20ReadByte();		//再读高字节
	temp = tmh;
	temp <<= 8;
	temp |= tml;
	return temp;
}

int datapros(int temp) 	 
{     int t;
   	float tp;  
	if(temp< 0)				//当温度值为负数
  	{
		
		//因为读取的温度是实际温度的补码,所以减1,再取反求出原码
		temp=temp-1;
		temp=~temp;
		tp=temp;
		temp=tp*0.0625*100+0.5;	
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。
 
  	}
 	else
  	{			
		
		tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
		//如果温度是正的那么,那么正数的原码就是补码它本身
		temp=tp*0.0625*100+0.5;	
		//留两个小数点就*100,+0.5是四舍五入,因为C语言浮点数转换为整型的时候把小数点
		//后面的数自动去掉,不管是否大于0.5,而+0.5之后大于0.5的就是进1了,小于0.5的就
		//算加上0.5,还是在小数点后面。
	}
	  t=temp;
     return t;
}

void cewen(void)
{
   int i,t,yuzhi=2500;     //首先设置阈值为25℃
   u8 ch[]="yuzhi:";
    led4=0;
  if(IrValue[2]==22)      //如果遥控器按下了“0”,阈值为0℃
     yuzhi=0000;
  else if(IrValue[2]==12)   //如果遥控器按下了“1”,阈值为5℃
     yuzhi=500;
  else if(IrValue[2]==24)   //如果遥控器按下了“2”,阈值为10℃
     yuzhi=1000;
  else if(IrValue[2]==94)   //如果遥控器按下了“3”,阈值为15℃
     yuzhi=1500;
  else if(IrValue[2]==8)   //如果遥控器按下了“4”,阈值为20℃
     yuzhi=2000;
  else if(IrValue[2]==28)  //如果遥控器按下了“5”,阈值为25℃
     yuzhi=2500;
  else if(IrValue[2]==90)   //如果遥控器按下了“6”,阈值为30℃
     yuzhi=3000;
  else if(IrValue[2]==66)   //如果遥控器按下了“7”,阈值为35℃
     yuzhi=3500;
  else if(IrValue[2]==82)   //如果遥控器按下了“8”,阈值为40℃
     yuzhi=4000;
  else if(IrValue[2]==74)   //如果遥控器按下了“9”,阈值为45℃
     yuzhi=4500;
    t=datapros(Ds18b20ReadTemp());  //t为DS18B20处理后得到的量
	 tmp[0]=t/10000+48;
    tmp[1]=(t/1000)%10+48;
    tmp[2]=(t/100)%10+48;
    tmp[4]=(t/10)%10+48;
    tmp[5]=t%10+48;
    
   if(t>yuzhi)     //如果所测温度大于阈值,则报警
   {
     led2=~led2,beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100);
      beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100);
      beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100);
      beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100);
      beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100),beep_us(100);
   }
   LcdInit();
   for(i=0;i<7;i++)
	{
		LcdWriteData(tmp[i]);	 //显示当前所测温度
	}
  // delay_nms(500);
   LcdWriteCom(0x40+0x80);   //在第二行显示
   for(i=0;i<6;i++)
   {  
      LcdWriteData(ch[i]);
   }
   zhi[0]=yuzhi/1000+48;
   zhi[1]=(yuzhi/100)%10+48;
   zhi[3]=(yuzhi/10)%10+48;
   zhi[4]=(yuzhi/10)%10+48;
   for(i=0;i<6;i++)
   {  
      LcdWriteData(zhi[i]);     //显示阈值
   }
    delay_nms(500);
 }

        这里的上半段是DS18B20传感器的驱动代码。后面的cewnen()是主要代码。首先根据红外遥控按下的按键确定阈值是多少,然后获取实时温度,将温度数值转为字符串放到字符数组里面。然后根据所测温度是否大于温度阈值决定是否报警。最后,将所测温度显示在LCD1602的第一行,将温度阈值显示在LCD1602的第二行。蜂鸣器报警代码如下:

         因为这里的蜂鸣器是无源蜂鸣器,不能直接给高低电平,要给一定频率的方波才行,这里的延迟时间a就决定了蜂鸣器鸣叫的频率。

        防盗报警部分的代码如下:

#include "reg52.h"   
#include "LED.h"
#include "beep.h"
#include "delay.h"
#include "shumaguan.h"
#include "key.h"
#include "key44.h"
#include "INT1.h"
#include "T1interrupt.h"
#include "usart.h"
#include "LCD1602.h"

sbit bz=P1^0;    //红外收发模块的数据口接单片机P1^0口
void bzfunc()
{
   if(bz==0)    //若有物体靠近红外模块,红外模块输出低电平,启动报警
      beep_my();
}

        当红外避障模块检测到有人靠近之后,bz管脚就会变为低电平。单片机检测到这个低电平时就会驱动蜂鸣器进行报警。

5.2硬件部分

5.2.1 51单片机

         STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗千扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。

        主要特性如下:

        ·增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.

        ·工作电压:5.5V~3.3V (5V单片机)/3.8V~2.0V (3V单片机)

        ·.工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz

        ·用户应用程序空间为8K字节

        ·片上集成512字节RAM

        ·通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,PO口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻

        ·通用异步串行口(UART),还可用定时器软件实现多个UART工作

        ·温度范围:-40~~~+85℃(工业级)/0~75℃(商业级〉

        ·PDIP封装

 5.2.2 语音识别模块LD3320

        语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。与说话人识别及说话人确认不同,后者尝试识别或确认发出语音的说话人而非其中所包含的词汇内容。

        本次采用的语音识别模块特性如下:

        ·供电电压:5V(USB口或排针接口)

        ·输出端口:8个10口,1个串口(TTL)

        ·I0口电平:高电平3.3V

        ·通信方式:串口通信(3.3V TTL电平)

        ·主控芯片:STM32F103RCT6 、LD3320A

        ·规格:50*50*2OMM

        当该语音模块识别到对应的语音后,会播放相应的音频文件,对应的管脚电平也会发生变化。可以利用管脚电平的变换使单片机做出一定的控制,从而实现语音控制的功能。

5.2.3 DS18B20温度传感器

        温度传感器的种类众多,在应用于高精度、高可靠性的场合时DALLAS 公司生产的DS18B20温度传感器当仁不让。超小的体积、超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。了解其工作原理和

        应用可以拓宽我们对单片机开发的思路。

        DS18B20的主要特征:

        全数字温度转换及输出。先进的单总线数据通信。

        最高12位分辨率,精度可达±0.5摄氏度12位分辨率时的最大工作周期为750毫秒。可选择寄生工作方式。

        检测温度范围为-55℃~+125℃ ( -67°F~+257°F)内置EEPROM,限温报警功能。

        64位光刻ROM,内置产品序列号,方便多机挂接。多样封装形式,适应不同硬件系统。

        DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力强。其一个工作周期可分为两个部分,即温度检测和数据处理。18B20共有三种形态的存储器资源:

        ROM只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码,后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。

        RAM 数据暂存器,用于内部计算和数据存取﹐数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM 的镜像。在上电复位使其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换,计算的暂存单元。第9个字节为前8个字节的CRC码。

        EEPROM非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据。DS18B20共3位EEPROM,并在RAM 都存在镜像,以方便用户操作。

5.2.4 LCD1602显示器

接口信号说明如下:

 (1)基本操作时序:

a.读状态:输入:RS=L,RW=H。E=H                       输出:DO~D7=状态字

b.写指令:输入:RS=L,RW=L,DO~D7指令码,E=高脉冲              输出:无

c.读数据:输入:RS=H,RW=H,E=H                          输出:D0~D7=数据

d.写数据:输入:RS=H,RW=L,DO~D7数据,E=高脉冲                 输出:无

(2)基本状态字:

STA0-6 :当前数据地址指针的数值

STA7:读写操作使能1:禁止2:允许

5.2.5 ARMP3遥控器

红外遥控发射器:

        通常红外遥控为了提高抗干扰性能和降低电源消耗,红外遥控器常用载波的方式传送二进制编码,常用的载波频率为38kHz,这是由发射端所使用的455kHz晶振来决定的。在发射端要对晶振进行整数分频,分频系数一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遥控系统采用36kHz、40 kHz、56 kHz等,一般由发射端晶振的振荡频率来决定。所以,通常的红外遥控器是将遥控信号(二进制脉冲码)调制在38KHz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。       

           

        红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。红外遥控接收器的主要作用是将遥控发射器发来的红外光信号转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VOUT)。

5.2.6 红外感应模块

        该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3v-5V。该传感器的探测距离可以通过电位器调节、具有干扰小、便于装配、使用方便等特点,可以广泛应用于机器人避障、避障小车、流水线计数及黑白线循迹等众多场合。

6.测试数据

6.1 测试过程及效果:

        将LCD1602模块、DS18B20模块、红外接收头插在开发板上,红外感应模块的数据输出端接P1^0,语音识别模块的PA1接单片机的P1^1,单片机和语音识别模块接同一个电源,打开开关,液晶显示器上没有任何显示,唤醒语音识别模块,对其说出“我要测温了”,液晶显示器上显示出当前温度,且每0.5s刷新一次显示。对其说出“关闭测温”,则液晶显示器暂停显示。(不再刷新温度数值)。用红外遥控器设置其温度阈值,当温度阈值小于所测温度时,蜂鸣器发出报警声。若阈值没有小于当前温度则不报警。当用手指靠近红外感应模块时,蜂鸣器也发出报警。

6.2 产生的误差:

    在液晶显示器上显示的DS18B20温度传感器测得的温度与用一般温度计测得的实际环境温度有0.5C的误差,测得的温度比环境温度高0.5℃。

7.实物图

 

  • 33
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值