语音识别智能家居控制设计

目录

一、方案流程及技术规格书设计

二、系统硬件电路设计

三、软件编写及调试

四、系统调试测试与分析

前言

      随着科学技术的快速发展,人们对生活品质的要求也不断提高,开始追求更好更方便的生活方式。因此,智能家居系统应运而生。智能家居控制系统(smart home control systems),是以智能家居系统为平台,对家居电器及家电设备自动控制。提升家居智能、安全、便利、舒适。

      传统的家居智能控制系统一般采用集中控制器为中心,采用界面按键操作的方式来控制家居家电。采用界面操作控制的弊端是操作复杂,必须在固定地点操作。

      随着语音识别技术的快速发展,语音识别的准确率和可靠性大幅提高。语音识别技术将进入工业、家电、通信、汽车电子、医疗、家庭服务、消费电子产品等各个领域。语音识别ASR(Automatic Speech Recognition)的最大优势在于使得人机用户界面更加自然和容易使用。

      基于语音识别技术的上述特点,同时结合当代智能家居在控制中的实际需求,我们选择语音控制的智能家居系统。本系统具有良好的开发和应用前景,在智能家居这个概念广为人知的时代,语音控制技术与智能家居的融合,最终会让智能家居引领市场并且走向更为广泛的应用。

 

软件工具准备

软件:

电路设计:protel99 se(up主使用版本) 或者其他版本,或者其他电路设计软件;

单片机开发:Keil5;

调试测试:串口调试助手,逻辑分析仪等;

工具:

电路焊接:电烙铁,SMT(有条件的);

调试:

万用表、示波器(基础入门即可,可以白嫖学校或者公司)USB转串口工具、仿真器;

一、方案流程及技术规格书设计

方案流程设计

技术规格书设计

1.本设计采用LD3320语音识别芯片。LD3320是一款非特定人语音识别芯片其提供的语音识别技术,是基于“关键词语列表”的识别技术;ASR技术。

2.LD3320识别语音后,单片机根据语音控制家电设备开关

3.家电设备有灯(双色LED灯模拟)、窗帘(步进电机模拟)、空调(继电器输出)、热水器(继电器输出)。

4、家居环境监测传感器有火焰传感器、烟雾传感器、温湿度传感器、人体红外传感器。

5、当火焰传感器、烟雾传感器、异常时,启动喷水设备(继电器输出)灭火。当人体红外传感器检测到人时,启动蜂鸣器报警。

6、语音控制灯开关、亮度、颜色。窗帘开关、空调开关、热水器开关。

7、报警信息通过GSM模块发送到指定手机。

8、设备状态在LCD显示。

9、4个按键可以手动控制设备开关。

系统硬件电路设计

2.1微处理控制电路

       设计采用韩国现代产MC96F6432单片机芯片。该芯片是8051内核的8位单片机,电路图如图所示:

       单片机供电电压是2-5V,设计采用5V供电,图中VCC为5V。C14是电源滤波去耦电容。J20是仿真烧录口。

    IO口连接介绍:

1、LCD显示

  P30-P37:连接LCD数据线,8位并行通讯。

  P17:RS 控制LCD命令或数据。

  P16:RW 控制LCD读或写数据。

  P15:E LCD使能。

  P14:CS1 左屏选择。

  P13:CS2 中间屏选择。

  P12:CS1 右屏选择。

2、语音模块

  P07-P06:Y_Lamp4-Y_Lamp3语音模块指示灯开关。

  P55:Y_AC 语音模块指示空调开关。

  P42:Y_Curton 语音模块指示窗帘开关。

  P43:Y_Heat语音模块指示热水器开关。

3、步进电机控制

  P10: C4 步进电机控制。

  P20-P22:C3-C1步进电机控制。

5、传感器

  P50:ROUT 人感传感器输出。

  P11:HDO 火焰传感器输出。

  P51:YDO 烟雾传感器输出。

6、按键

  P23:HEAT_SW控制热水器开关。

  P02:CURTON_SW控制窗帘开关。

  P52:LAMP_SW 控制灯开关。

  P03:AC_SW 控制空调开关。

7、外部设备控制

  P54:Water 喷水设备控制。

  P53:Alarm 报警设备控制。

  P25:AC 空调开关控制。

  P26: LEDG 绿灯控制。

  P27:LEDR红灯控制。

7、通讯模块

  P40:RXD串口接收脚。

  P41:TXD串口发送脚。

2.2  语音识别模块电路设计

      LD3320语音电路设计为独立模块。LD3320的基本应用电路由单片机STC11L08和LD3320组成。主控MCU STC11L08来完成LD3320芯片寄存器的操作。如设置标志位,读状态,写数据到FIFO,识别结果,等等。例如,编辑关键词时,拼音串设置成LD3320寄存器来完成编辑关键词。寄存器可以分为以下几类,FIFO数据缓冲器,语音识别控制寄存器,音量控制,模拟电路和其他辅助寄存器。寄存器的读写操作有2种方式,分别是标准并行模式和串行SPI模式,本设计采用标准并行模式。该LD3320寄存器的地址空间为8位,从00H〜FFH。LD3320电路如图所示。

IO口连接介绍:

VDD/VDDIO:3.3V电源输入。

MIC[P、N](9、10脚):麦克风输入正负端。

MONO(11脚):单声道输入。

MBS(12脚):麦克风偏置。

LINE[L、R](13、14脚):立体声左右端

HPO[L、R](15、16脚):耳机输入左右端

EQ[1、2、3](20-22脚):喇叭音量外部控制

SPO[N、P](25、26脚):喇叭输出

LOUT(L、R)(27、28脚):lineout输出

RSTB(47脚):复位信号

INTB(48脚):中断信号

STC11L08电路如图所示:

 IO口连接介绍:

 LD_P0-P7(37-30脚) : 8位数据线。

 LD_MD(6脚):读写模式控制,低电平是8位并行数据。

 LD_CS,WR,RD,A0(19,13,12,18脚):LD3320读写控制。

2.3  LCD显示电路

LCD19264显示电路如图:

R29是电位器,作用是调节显示对比度。R22是上电复位电路。R32是背光限流电阻。

IO口连接介绍:

RS、RW、E(5、6、7脚):LCD读写控制脚。

D0-D7(8-15脚):数据线。

CS1、CS2、CS3(16、17、18脚):屏幕选择脚,CS1低选择左屏,CS2低选择中间屏,CS3低选择右屏。

2.4 按键电路

       设计4个按键,单片机检测各个按键IO口电平,按键未按下时,高电平,按键按下时,低电平。按键控制对应设备开关。电路如图:

2.5  LED模拟灯电路设计

      设计LED红灯和绿灯模拟灯的颜色。灯的开关和亮度通过LEDR和LEDG控制。亮度设置有灭、暗、亮。设置灭时,LEDR,G输出低电平,设置暗时,LEDR,G输出50%占空比的方波,设置亮时LEDR,G输出高电平。

2.6步进电机驱动电路

       步进电机使用ULN2003达林顿管驱动,电路如图3-6-1。VCC是5V供电电压。C1-C4是脉冲控制脚。在C1-C4输出特定时序的脉冲信号,就能控制步进电机顺时针转或反时针转,模拟窗帘开关。

2.7 继电器及驱动电路设计

       设计4个继电器驱动电路模拟喷水设备开关、防盗报警开关、空调开关、热水器开关。图中三极管驱动继电器断开或闭合,当控制脚输出高电平时,三极管导通,继电器闭合。电阻起限流作用。二极管防止反向高压。LED灯指示继电器状态,继电器闭合时,LED灯亮,断开时,LED灯灭。电路图如下:

2.8 传感器电路设计

      传感器电路有人体红外传感器、烟雾传感器、火焰传感器,VCC和地供电,ROUT、YDO、HDO接单片机输入脚,当感应到信号时,对应脚输出低电平。YAO和HAO是传感器模拟输出,本设计未使用。电路如图:

2.9  GSM模块电路设计

       通信模块和单片机串口通信,VCC、GND给模块供电,U_RXD是模块串口接收脚,U_TXD是模块串口发送脚。电路如图。

       通信模块芯片使用的是3.3V电压,所以IO口不能和单片机直接连接,需要电平转换电路。电路如图。

2.10  电源电路设计

       系统采用外部9V电源适配器供电,9V直流电经过3端稳压模块7805的降压和稳压,输出5V电压给芯片和其他电路供电。电路如图。

 通讯模块供电是3.3V,通过3.3V稳压芯片ASM1117输出3.3V电压。电路如图。

三、软件编写及调试

3.1主程序设计

       系统采用MC96F6432单片机,外围设备有语音模块输入,火焰传感器输入,烟雾传感器输入,人感传感器输入,按键,LCD显示,步进电机控制,灯控制,空调继电器控制,热水器继电器控制,防盗报警继电器控制,灭火继电器控制。

       上电时,单片机初始化和外围设备初始化完成后,进入正常工作。单片机读取语音控制状态,根据状态控制灯光、空调继电器、窗帘步进电机、热水器继电器家电设备。单片机读取火焰传感器、烟雾传感器信号,控制灭火设备。单片机读取人感信号,控制报警继电器。LCD显示设备状态,报警信号通过GSM模块发送到指定手机。          

系统流程图如图

3.2 LCD显示程序设计

       HS19264是字符点阵液晶,显示屏分3部分,通过CS1,CS2,CS3低电平选择。按16x16汉字计算,可以显示12x4=48个汉字。LCD控制线是RS,RW,E,控制写命令还是写数据。汉字、字符、数字需要建立字模。LCD取对应字模显示对应点,合起来就能显示对应文字。图是LCD显示流程图。

19264LCD显示代码:

/**底层驱动 ******************/

/*RS P17输出高低电平*/

void set_RS(unsigned char RS)

{

   if(RS == 0)

      P17 = 0;  

   else

      P17 = 1;  

}

/*RW P16输出高低电平*/

void set_RW(unsigned char RW)

{

   if(RW == 0)

      P16 = 0;  

   else

      P16 = 1; }

/*E P15输出高低电平*/

void set_EN(unsigned char EN)

{

   if(EN == 0)

      P15 = 0;  

   else

      P15 = 1;

}

/*CS1 P14输出高低电平*/

void set_CS1(unsigned char CS1)

{

   if(CS1== 0)

      P14 = 0;  

   else

      P14 = 1;

}

/*CS2 P13输出高低电平*/

void set_CS2(unsigned char CS2)

{

   if(CS2== 0)

      P13 = 0;  

   else

      P13 = 1;

}

/*CS3 P12输出高低电平*/

void set_CS3(unsigned char CS3)

{

   if(CS3== 0)

      P12 = 0;  

   else

      P12 = 1;

}

/*LCD数据线P3口输出数据*/   

void set_data(unsigned char data)

{

   P3 = data ;

}

/*显示开关*/  

void lcd_command_onoff(unsigned char onoff)

{

   set_RW(0);

   set_RS(0);

   set_EN(0);

   set_data(onoff+0X3E);

   set_EN(1);

   set_EN(0);

}

/*设置显示起始位置*/ 

void lcd_command_startline(unsigned char startline)

{

   set_RW(0);

   set_RS(0);

   set_EN(0);

   set_data(startline+0Xc0);

   set_EN(1);

   set_EN(0);

}

/*设置显示页*/ 

void lcd_command_setpage(unsigned char page)

{

   set_RW(0);

   set_RS(0);

   set_EN(0);

   set_data(page+0Xb8);

   set_EN(1);

   set_EN(0);

}

/*设置显示列*/ 

void lcd_command_setyadd(unsigned char yadd)

{

   set_RW(0);

   set_RS(0);

   set_EN(0);

   set_data(yadd+0X40);

   set_EN(1);

   set_EN(0);

}  

/*向LCD DDRAM 写1BYTE 数据*/

void lcd_writedata(unsigned char data)   

{

   set_RW(0);

   set_RS(1);

   set_EN(0);

   set_data(data);

   set_EN(1);

   set_EN(0);

}

/*LCD初始化*/ 

void lcd_init(void)

{

   lcd_command_onoff(1);

   lcd_command_startline(0);

   lcd_clear_scr();

}

/*LCD选择屏幕1、2、3*/ 

void lcd_setscr(unsigned char scr)

{

   if(scr==1)

   {

     set_CS1(0);

     set_CS2(1);

     set_CS3(1);

   }

   else if(scr==2)

  {

     set_CS1(1);

      set_CS2(0);

      set_CS3(1);

  }

  Else

 {

set_CS1(1);

         set_CS2(1);

         set_CS3(0);

  }

}

/*LCD清屏1、2、3*/ 

void lcd_clear_scr(void)

{

   INT8U i,j;

   for(i=0;i<=7;i++)

   {

      set_CS1(1);

  set_CS2(0);

  set_CS3(0);

  lcd_command_setpage(i);

  lcd_command_setyadd(0);

  for(j=0;j<64;j++)

    {

  lcd_writedata(0x00);

}

   }

   for(i=0;i<=7;i++)

   {

      set_CS1(0);

  set_CS2(1);

  set_CS3(0);

  lcd_command_setpage(i);

  lcd_command_setyadd(0);

  for(j=0;j<64;j++)

    {

  lcd_writedata(0x00);

}

   }

   for(i=0;i<=7;i++)

   {

      set_CS1(0);

  set_CS2(0);

  set_CS3(1);

  lcd_command_setpage(i);

  lcd_command_setyadd(0);

  for(j=0;j<64;j++)

    {

  lcd_writedata(0x00);

}

   }

}

/*显示数字 显示8X16点字符  */

void lcd_write_0816(unsigned char page, unsigned char yadd, unsigned char fanxiang,const unsigned char *disp)

{

    unsigned char i=0,j=0;

for(j=0;j<2;j++)

{

  lcd_command_setpage(page+j);

  lcd_command_setyadd(yadd);

  for(i=0;i<8;i++)

    {

 if(fanxiang==0)

 {lcd_writedata(disp[j*8+i]);}

 else

 {lcd_writedata(~(disp[j*8+i]));}

}

     }

}

/*显示汉字,显示16X16点字符  */

void lcd_write_1616(unsigned char page, unsigned char yadd, unsigned char fanxiang,const unsigned char *disp)

{

    unsigned char i=0,j=0;

for(j=0;j<2;j++)

{

  lcd_command_setpage(page+j);

  lcd_command_setyadd(yadd);

  for(i=0;i<16;i++)

    {

 if(fanxiang==0)

 {lcd_writedata(disp[j*16+i]);}

 else

 {lcd_writedata(~(disp[j*16+i]));}

}

 }

}

3.3 步进电机驱动程序设计

       采用4相8拍步进电机,其原理是轮流通过电流,正转顺序是A,AB,B,BC,C,CD,D,DA。反转顺序是A,DA,D,CD,C,BC,B,AB。转速的快慢是由输出脉冲频率决定。  

步进电机代码:

/*输出脉冲驱动*/

    unsigned char MotorCtr(void)

{

    if (stop_flag==1) //停止转动

        {

P22 = 0;

P21 = 0;

P20 = 0;

P10 = 0;

return;

   }

   

   switch(step_index) //根据驱动时序,输出一个单脉冲信号波形

  {

case 0: //0 ,(A 相)

    P22 = 1;

    P21 = 0;

   P20 = 0;

   P10 = 0;

break;

case 1: //0、1, (AB 相)

P22 = 1;

    P21 = 1;

   P20 = 0;

   P10 = 0;

break;

case 2: //1,(B 相)

P22 = 0;

    P21 = 1;

   P20 = 0;

   P10 = 0;

break;

case 3: //1、2 , (BC 相)

P22 = 0;

    P21 = 1;

   P20 = 1;

   P10 = 0;

break;

case 4: //2, (C 相)

P22 = 0;

    P21 = 0;

   P20 = 1;

   P10 = 0;

break;

case 5: //2、3, (CD 相)

P22 = 0;

    P21 = 0;

   P20 = 1;

   P10 = 1;

break;

case 6: //3, (D 相)

P22 = 0;

    P21 = 0;

   P20 = 0;

   P10 = 1; break;

case 7: //3、0, (DA 相)

P22 = 1;

    P21 = 0;

   P20 = 1;

   P10 = 1;

}

if (turn==0) //转动方向控制,0-正转;1-反转

{

step_index++; //正转时序

if (step_index>7)

step_index=0;

}

else

{

step_index--;//反转时序

if (step_index<0)

step_index=7;

}

}

3.4  LCD驱动程序设计

       LED模拟灯光控制,LED状态有亮,暗,灭3种状态,LED的IO口输出高电平,灯亮,输出低电平,灯灭,输出PWM波,灯暗。图是LED控制流程图。

四、系统调试测试与分析

4.1电路焊接

       用电烙铁将单片机,液晶显示,继电器,LED灯,稳压电源模块,按键,语音模块,传感器模块,按键,电容,电阻等焊接到线路板。实物如图所示。

4.2系统调试

       连接电脑和烧写器,下载程序到单片机,上电初始化完成后,设备都在关闭状态。普通话说出以下单词,控制设备开。

1.开红灯。

 2.开绿灯。

3.开空调。

 4.开热水器。

 5.开窗帘。

       本智能家居系统设计报警功能,当火焰传感器检测到异常时,会显示火警,人体传感器检测到异常时,显示盗警。人移动到人体传感器前,显示盗警并继电器报警。如图。

  • 15
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cc ²ᶜ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值