语音控制智能家居系统-Arduino中文社区 - Powered by Discuz! Archiver

Kevin的小小罗 发表于 2017-10-29 20:41

语音控制智能家居系统

本帖最后由 Kevin的小小罗 于 2017-10-30 19:18 编辑

在做智能家居的远程控制的过程中,接触了语音控制的一些创意,就自己做了一个这方面的应用,想法就是在家中用语音来控制继电器,从而控制各种电器。按照比例设计了一套家具模型,然后在内部铺设了电路,一套智能家居就改造成啦。初步的想法是是用于做远程控制的,在语音控制方面做了一些拓展,实现远程、近程都能控制,这里只介绍语音控制方面的功能。语音控制模块用的是ASR—M08A,先上模型图~用到的传感器有:超声波传感器、红外传感器、光敏传感器、震动传感器
还有风扇、LED灯、3个舵机、喇叭
语音模块与Mega2560通过串口1连接,连接图如下:


然后介绍一下想实现的功能,当然水平所限,并没有全部实现。不过该系统的好处就是可扩展性很强,Mega2560有54路数字输入/输出口(其中16路可作为PWM输出),16路模拟输入,还有4路串口,实现比较复杂的扩展不在话下~

在设计语音开关门的时候,想到也可以用超声波来检测是否有人走近,需要开门,就做了一个简易的开关门装置。设计的过程中发现超声波传感器加红外传感器同时检测,效果更好。

同样在晾衣架上做了扩展,想法上想实现阴雨天自动收衣服,晴天又可以自动晾衣;当然阴雨天需要考虑风雨雷电许多因素,做成产品并不容易,因为手头有光亮度传感器和震动传感器,就做了一个简单的光感应晾衣架,原理如下图。

制作智能家居的优势就是可扩展性很强,适于用来了解各种传感器的工作原理,上面的介绍已经显示了这一点。
//语音控制、光感应晾衣架、超声波感应门程序段
#include <MsTimer2.h>
const int intA = 1000;
const int intB = 500;
const int INTERVAL = 1;   // 0.001 秒 = 1ms
void ggyy( ) {
   static unsigned int gy = 0;
   ++gy;
   if( gy % intA == 0)timerIsr() ;
   if( gy % intB == 0)timerIsr1();
}


#include<Servo.h>   //声明伺服舵机函数库
Servo myservo1;// 定义伺服舵机对象
Servo myservo2;
Servo myservo3;
int sensorPin =A0;//声明光敏电阻传感器连在模拟量端口0
int flag=0;      //声明变量,存储衣架伸出或者收起的标志
int light_val;   //声明变量,存储光敏电阻模拟量数据
//初始化


//volatile int state = LOW;

#include "SR04.h"
#define TRIG_PIN 2
#define ECHO_PIN 3
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long a;
int flag1=0;
int sensor=10;
int b;


int led=50;
int val;
int val1;
int sw1=22;
void setup()
{
pinMode(10,INPUT);
pinMode(led,OUTPUT);
Serial1.begin(9600);
Serial.begin(9600);
digitalWrite(led,LOW);
   pinMode(22, OUTPUT);      //如果没有这句,风扇不会转动
digitalWrite(22,LOW);
   myservo1.attach(9);       //初始化9号数字端口来控制舵机
   myservo2.attach(8);
   myservo3.attach(7);
   myservo1.write(90);   
   myservo2.write(90);
   myservo3.write(0);

   //attachInterrupt(0, timerIsr, CHANGE);
   MsTimer2::set(INTERVAL,ggyy);
   MsTimer2::start( );
}

/*void change()
{
   light_val=analogRead(sensorPin); //读取光敏电阻的数据
//delay(200);
   if(light_val>300 )
   {state=0;}
   if(light_val<300 )
   {state=1;}
}
*/
void timerIsr()
{
int zhendong=digitalRead(52);
light_val=analogRead(sensorPin); //读取光敏电阻值
//Serial.println(light_val);
//如果是晴天,并且衣架处于收起状态
if(light_val>300 && flag==0)
//变量light_val的参数值应根据当天的光线,通过测试来确定。
{
    myservo1.write(0);   // 启动舵机正转
    myservo2.write(0);   // 启动舵机正转
    delay(100);             // 等待2s,让衣架伸出到位
    flag=1; //标志衣架处于伸出状态
    // myservo.write(93);//舵机停止
}
//如果阴天,没有阳光,并且杆处于伸出状态
if(light_val<=300 && flag==1)
{
    myservo1.write(90);   // 启动舵机反转
    myservo2.write(90);      
    delay(100);             // 等待2s,让衣架收回到位
    flag=0; //标志衣架处于收起状态
    //myservo.write(93);// 舵机停止
}   
if(zhendong==0&&flag==1)
{
   myservo1.write(90);   // 启动舵机反转
    myservo2.write(90);      
    delay(100);             // 等待2s,让衣架收回到位
    flag=0;            //标志衣架处于收起状态
    //myservo.write(93);// 舵机停止
    }
}

void timerIsr1()                  //超声波红外感应门
{
   b=digitalRead(10);
a=sr04.Distance();

delay(1000);
if(a<5&&flag1==0&&b==0)
{
myservo3.write(90);//舵机停止
flag1=1;
}
if(a>=5&&flag1==1&&b==1)
//else
{
myservo3.write(180);
// delay(1000);
flag1=0;
// myservo3.write(0);// 舵机停止
}
}

void loop()
{

//timerIsr();

   val = Serial1.read();
    if (-1 != val){
      Serial.println(val);
      if (1==val){
      digitalWrite(led,HIGH);
      Serial.println("Hello!");
      //delay(500);
    //    digitalWrite(led,LOW);
      }
      else if(10==val)
      {
         digitalWrite(led,LOW);
          }
          else if(7==val){
          digitalWrite(sw1,HIGH);
          }
          else if(8==val){
          digitalWrite(sw1,LOW);
          }
         
    }
    val1 = Serial.read();
    if (-1 != val1){
      if ('1'== val1){
      Serial1.print("play,001,$");               //播放录音1
      }
      if ('2'== val1){
      Serial1.print("play,002,$");               //播放录音2
      }
      if('7'==val1){
      Serial1.print("play,007,$");          //注意区分Serial1和Serial
      }
      if('8'==val1){
      Serial1.print("play,008,$");          //注意区分Serial1和Serial
      }
    }
   delay(250);
   
}




演示一下:http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

视频网址:http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1







syl312 发表于 2017-10-29 21:50

1.感谢对社区比赛的支持,开发者积分和贡献值已发放,请点击以下链接领取纪念衫并参与抽奖~
http://www.arduino.cn/thread-48132-1-1.html
2.比赛结果会在11.15号前公布,请耐心等待。

song5161 发表于 2018-10-14 01:28

这个ASR—M08A模块买不到呀?楼主能够给个链接吗?
页: [1]
查看完整版本: 语音控制智能家居系统