智能语音控制风扇灯

智能语音风扇灯是基于普中51实验板做的一个小项目。主要功能是语音控制风扇档位变化和rgb灯变换颜色。

 系统硬件以围绕STC89C52为核心的外围功能元件展开,文章重点从语音大脑模块、5V DC直流风扇、5050封装RGB灯珠模块、数码管四个方面开展硬件介绍与功能设计。

 

 

 

 RGB呼吸灯电路

系统可以通过单片机产生PWM脉冲进行控制。通过语音模块发出的指令,单片机通过串口接收处理后,由从控制器P1.0、P1.1、P1.2、P1.3口输出PWM方波脉冲控制RGB灯珠的发光。在LED模块中,RGE5050为全彩RGB高亮LED灯珠,且R、G、B三个引脚均串联了限流电阻以防止烧毁灯珠,其余的三个引脚均接地。另外,模块的工作电压为3.3V-5V,接电后即可发出单色或复色光。硬件电路图如图3所示。

 

PWM即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,而我们想要实现控速以及后面的RGB灯呼吸灯效果,刚好可以利用PWM来实现。

 rgb的PWM代码可以参考下面的思路

//定时器中断设置
void Timer0_Init(void)
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//
	TL0 = 0x9C;		//设置定时初值
	TH0 = 0xFF;		//
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;
	EA=1;
	PT0=0;
}
//PWM控制定时器中断函数
void Timer0_Routine() interrupt 1
{
	TL0 = 0x9C;		//重装初值设置定时初值
	TH0 = 0xFF;		//
	if(LEDCounter<R_Patten)	//计数值小于比较值
	{
		R=1;		//输出1
	}
	else				//计数值大于比较值
	{
		R=0;		//输出0
	}
			if(LEDCounter<G_Patten)	//计数值小于比较值
	{
		G=1;		//输出1
	}
	else				//计数值大于比较值
	{
		G=0;		//输出0
	}
			if(LEDCounter<B_Patten)	//计数值小于比较值
	{
		Blue=1;		//输出1
	}
	else				//计数值大于比较值
	{
		Blue=0;		//输出0
	}
}

 

//LED灯颜色控制
void LEDMODE( unsigned char Patten) 
{
	Patten%=5;
   	
	if(Key1==1)
		{
		GND=0;
	
				//设置比较值,改变PWM占空比

			if(Patten==0){P2=0X00;R_Patten=225;G_Patten=0;B_Patten=0;}  //红
			if(Patten==1){P2=0X00;R_Patten=0;G_Patten=225;B_Patten=0;}  //绿
			if(Patten==2){P2=0X00;R_Patten=0;G_Patten=0;B_Patten=225;}  //蓝
			if(Patten==3){P2=0X00;R_Patten=160;G_Patten=32;B_Patten=240;} //紫
			if(Patten==4){P2=0X00;R_Patten=0;G_Patten=255;B_Patten=255;}  //青
			if(Patten==5){P2=0X00;R_Patten=255;G_Patten=255;B_Patten=0;}  //黄		
}

风扇的pwm控制同理

 //定时器中断函数
void Timer0_Routine() interrupt 1
{
	TL0 = 0x9C;		//重装初值设置定时初值
	TH0 = 0xFF;		//
	Counter++;
	Counter%=100;	//计数值变化范围限制在0~99
	if(Counter<Compare)	//计数值小于比较值
	{
		Motor=1;		//输出1
	}
	else				//计数值大于比较值
	{
		Motor=0;		//输出0
	}

//风扇档位控制
void Fan(unsigned char Speed)
{

		if(Key==1)
		{
			
			if(Speed==0){Compare=0;}
			if(Speed==1){Compare=25;}	//设置比较值,改变PWM占空比
			if(Speed==2){Compare=50;}
			if(Speed==3){Compare=75;}
			if(Speed==4){Compare=100;}
			
		}
	
}

语音模块使用的是语音大脑模块VB6824,这里的语音模块已经写好程序,我们把它当做串口透传模块来使用,语音模块会发生两个数组只取后一个为控制命令。

 

 

串口参考代码如下 

//串口初始化
void Uart_Init() 
{ 
    SCON=0x50; //串口工作方式1,8位UART,波特率可变  
    TH2=0xFF;           
    TL2=0xFD;   //波特率:115200 晶振=11.0592MHz 
    RCAP2H=0xFF;   
    RCAP2L=0xFD; //16位自动再装入值 
    EA=1;
	  ES=1;
/*****************/
    TCLK=1;   
    RCLK=1;   
    C_T2=0;   
    EXEN2=0; //波特率发生器工作方式

/*****************/
    TR2=1 ; //定时器2开始
}
//串口中断服务函数
void Uart() interrupt 4
{

    if(RI == 1)
	{
    RI = 0;
    Buffer[Count] = SBUF;         //用数组接收串口数据,一个BYTE。  		
		if(Count == 2){Count = 0;}      //只接收两个,下次再接收覆盖。  }		
		if(TI)           //如果是发送标志位,清除
		   TI=0;
	}
		switch(Buffer[1])
		{
		
		case 0x02:	 /*命令“打开灯光”*/
		
			Key1=1;
			P2=0X00;	
	   	LEDMODE(Patten);
			break;
		
		
		case 0x03:		/*命令“关闭灯光”*/
			Key1=0;
			P2=0X00;
          R_Patten=0;
		  G_Patten=0;
		  B_Patten=0;		  		  
			break;
		case 0x04:		/*命令“改变颜色”*/
			P2=0X00;
		 
		  Patten++;
		  LEDMODE(Patten);
			
			break;
		
		
		case 0x05:			/*命令“打开风扇”*/
			P2=0X31;
		   Key=1;
			Fan(Speed);
		  display(Speed);
			
			break;
		case 0x06:		/*命令“关闭风扇”*/
			Compare=0;
		   Key=0;
		   P2=0X31;
			break;
		
		
		case 0x07:			/*命令“增大风速”*/
			Speed++;
		  if(Speed>=5){Speed=4;}
	  	Fan(Speed);
			P2=0X31;
			display(Speed);
			break;
		case 0x08:				/*命令“减小风速”*/
			Speed--;
		  Fan(Speed);
			P2=0X31;
		  display(Speed);	
			break;

					
	}
   Buffer[0]=0;
	 Buffer[1]=0; //清除上一个命令
     Count++;
					if(TI)           //如果是发送标志位,清除
		TI=0;
}

 为了匹配115200的波特率要求,这里使用了定时器2的16位重装模式。

【RT-Thread作品秀】智能家居的语音控制方案。作者:xqyjlj 概述智能家居是现在一个很火热的方向,随着人们生活水平的提高,我们都逐渐开始希望身边的电器都可以不用手来控制,本作品就是基于这种需求,开发出来了一个基于语音控制智能家居方案。本智能家居方案,分为联网与不联网两种版本。其中,无论是联网与不联网,语音识别功能均能正常使用。在本作品没有连上网的情况下,可以进行语音对开关的控制,进行MP3等常用音频文件的播放,以及具有拍照功能,可以将拍下来的照片储存在SD卡内,在本作品连上网的情况下,还附加了以下功能,可以将一些数据上报到云平台(onenet),并且将一些工作日志通过邮件发送给用户。 开发环境硬件:ART_PI(主控) LD3320(语音识别芯片) VS1053(音频解码芯片) OV2640(摄像头) RT-Thread版本:RT-Thread V 4.0.3 开发工具及版本:RT-Thread Studio 2.0.0 RT-Thread使用情况概述内核:调度器,信号量。 组件:UART,DFS,SPI,IIC,PIN。 软件包:smtp_client,btstack,netuils,fal,easyflash,littlefs,onenet。 硬件框架主控:ART-PI ART-Pi 是 RT-Thread 团队为嵌入式软件工程师、开源创客设计的一款极具扩展功能的 DIY 开源硬件。致力打造一个开源的软硬件平台。 语音识别芯片:LD3320 LD3320是非特定人(不用针对指定人)语音识别芯片,即语音声控芯片。最多可以识别50条预先内置的指令。 音频解码芯片:VS1053 VS1053是一款利用SPI通讯的音频解码模块,支持大部分的音频文件的解码播放和编码保存 摄像头:OV2640 OV2640是OmniVision公司生产的一颗1/4寸的CMOSUXGA(1632*1232)图像传感器;支持自动曝光控制、自动增益控制、自动白平衡、自动消除光条纹等自动控制功能。 软件框架说明本项目采用的是多级联控模式。将多个模块的任务分为多个级别,以语音识别为主体,摄像头和语音播报为从体,在语音识别到关键字的时候,会出发相对应的函数,实现不同的效果,而onenet是与语音识别互相独立的,会源源不断的把数据实时发送到云端。 软件模块说明smtp_thread_entry:邮件线程,用于发送邮件。 ld3320_asr_thread:语音识别线程,用于语音识别,调用其他程序。 onenet_upload_entry:onenet线程,用于向云端发送数据。 语音识别过程: 首先初始化LD3320芯片,在对其写入需要识别的关键字数据,之后启动LD3320,之后等待其信号引脚拉低,在其信号引脚拉低后,通过读取其寄存器,我们便能知道LD3320获取到了什么样的关键字。之后便从关键字调取我们的相对应的函数。使之工作于不同的功能。 演示效果演示视频: 比赛感悟在报名这个比赛之后,我的目标其实是比现在的功能多得多的,这一点可以从我的Gitee上面的进度表可以看出,奈何原本打算三个人做的项目,到最后,也是我一个人来完成。自己之前画的板子,也是因为自己画板功力不足,还有焊接能力不足,导致本来拥有更多功能的拓展板也没完成。 不过比赛嘛,重要的不是结果,而是过程。通过这次比赛,我最起码收货到了以下知识: 安卓开发,微信小程序设计,web开发(以上由于个人能力问题,其实并未实现),音频处理,STM32H750的众多DMA的设置,以及bootloader,同时也知道了STM32还能片外运行的神奇事情,也学会了RT-Thread Studio的使用。最重要的事情就是明白了不要过分依赖别人,自己想的计划,就要自己去实现,不要总是把任务布置给其他人。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值