bigbird 发表于 2014-6-10 15:52:56

DFRobot Arduino Smart Home kit智能家居语音识别系统 待机久死机

前段时间购得一套DFRobot Arduino Smart Home kit智能家居语音识别系统


测试使用下来,发现待机久了便会死机。绿色LED灯常亮,口令无任何反应。需要从启动,恢复正常,但闲置待机过久超过半小时上,便又挂掉死机。不知用过的朋友是否遇到同样问题,原配USB线供电 ,外置DC供电,均出现该问题。

Youyou 发表于 2014-6-16 14:47:34

本帖最后由 Youyou 于 2014-6-18 12:07 编辑

亲,可以试试我更新过的代码,测试了一上午,没有发现死机现象。之前在旺旺上也联系过你,我等着你的反馈。关于这套系统,语音播放完后再进行识别有一比较长的延迟,有空我看看能不能优化下。下载程序时要把扩展板的三档开关拨到PROG处,否则不能下载程序,下载完后,要拨到xbee处,否则不能进行发音。
相关库下载:语音识别:https://www.dfrobot.com.cn/image/data/DFR0177/Voice_1.0.rar
语音合成:https://www.dfrobot.com.cn/image/data/SEN0117/Syn6288_1.0.rar
DHT11:https://www.dfrobot.com.cn/image/data/DFR0067/dht11.zip
程序已经更新,加入了状态指示灯。

lauren 发表于 2014-6-11 15:36:59

这种类似的问题很有可能是有软件造成的呢,一般硬件很难说死机,像arduino这种控制器也都是使用工业控制器做的。
容易发生死机说明,软件不是很完善。

能尝试在你的源码当中插入一些数据推送的点,去发现,卡死在哪个步骤上面?

bigbird 发表于 2014-6-12 10:58:18

本帖最后由 Ricky 于 2014-6-12 11:18 编辑

lauren 发表于 2014-6-11 15:36
这种类似的问题很有可能是有软件造成的呢,一般硬件很难说死机,像arduino这种控制器也都是使用工业控制器 ...
你好,程序上全部是官方下载的源码,只修改过口令这一栏,烦请查看

#include <Wire.h>
#include <Voice.h>
#include "Syn6288.h"
Syn6288 syn;
#define SUM 10
#define DHT11_PIN 0      //ģ���?
byte dht11_dat;
uint8nAsrStatus=0;
char sRecog = {"dong gua","wen du zen me yang","kai deng","guan deng","yao kai deng ma","dong","gua","wen du","kai","guan"};//С���������¶���ô���ƣ��صƣ���Ҫ������С�ף�С
uint8_t text1[]={0xD2,0xBB,0xB6,0xFE,0xC8,0xFD,0xCB,0xC4,0xCE,0xE5,0xC1,0xF9,0xC6,0xDF,0xB0,0xCB,0xBE,0xC5,0xCA,0xAE,0xC1,0xE3};//һ�����������߰˾�ʮ��
uint8_t text2[]={0xC4,0xFA,0xBA,0xC3};// ���?
uint8_t text3[]={0xB5,0xB1,0xC7,0xB0,0xCE,0xC2,0xB6,0xC8,0xCE,0xAA};//��ǰ�¶�Ϊ
uint8_t text4[]={0xCA,0xAA,0xB6,0xC8,0xCE,0xAA,0xB0,0xD9,0xB7,0xD6,0xD6,0xAE};//ʪ��Ϊ�ٷ�֮
uint8_t text5[]={0xC9,0xE3,0xCA,0xCF,0xB6,0xC8};//���϶�
uint8_t text6[]="soundn";//������
uint8_t text7[]={0xC7,0xEB,0xD7,0xA2,0xD2,0xE2,0xA3,0xAC,0xD3,0xD0,0xCE,0xA3,0xCF,0xD5,0xC6,0xF8,0xCC,0xE5,0xD0,0xB9,0xC2,0xA9};//��ע�⣬��Σ������й©
uint8_t text8[]={0xD5,0xFD,0xD4,0xDA,0xBF,0xAA,0xB5,0xC6};//���ڿ���
uint8_t text9[]={0xD5,0xFD,0xD4,0xDA,0xB9,0xD8,0xB5,0xC6};//���ڹص�
uint8_t text10[]={0xC7,0xEB,0xCE,0xCA,0xC4,0xE3,0xD4,0xDA,0xCB,0xB5,0xCA,0xB2,0xC3,0xB4,0xA3,0xBF};//��������˵ʲô��
uint8_t text11[]={0xB9,0xE2,0xCF,0xDF,0xB2,0xBB,0xD7,0xE3,0x20,0xA3,0xAC,0xD5,0xFD,0xD4,0xDA,0xBF,0xAA,0xB5,0xC6};//���߲��㣬���ڿ���
uint8_t text12[]={0xCF,0xD6,0xD4,0xDA,0xB9,0xE2,0xCF,0xDF,0xC3,0xF7,0xC1,0xC1,0xA3,0xAC,0xB2,0xBB,0xD0,0xE8,0xD2,0xAA,0xBF,0xAA,0xB5,0xC6};//���ڹ�������������Ҫ����
uint8_t text13[]={0xB5,0xC6,0xD2,0xD1,0xB4,0xF2,0xBF,0xAA};//���Ѵ�
uint8_t text14[]={0xB5,0xC6,0xD2,0xD1,0xB9,0xD8,0xB1,0xD5};//���ѹر�
uint8_t text15[]={0xB9,0xE2,0xCF,0xDF,0xB2,0xBB,0xD7,0xE3,0x20,0xA3,0xAC,0xB5,0xC6,0xD2,0xD1,0xB4,0xF2,0xBF,0xAA};//���߲��㣬���Ѵ�
uint8_t text;
uint8_t textt;
int gas,shine;
int dat1,dat2;
int flag,sign;
int led=8;
int pig1,pig2,pig3,pig4;
void DHT11()
{
    byte i;
      byte dht11_in;
PORTC &= ~_BV(DHT11_PIN);
    delay(18);
    PORTC |= _BV(DHT11_PIN);
    delayMicroseconds(40);

    DDRC &= ~_BV(DHT11_PIN);
    delayMicroseconds(40);

    dht11_in = PINC & _BV(DHT11_PIN);

    if(dht11_in){
      Serial.println("dht11 start condition 1 not met");
      return;
    }
    delayMicroseconds(80);

    dht11_in = PINC & _BV(DHT11_PIN);

    if(!dht11_in){
      Serial.println("dht11 start condition 2 not met");
      return;
    }
    delayMicroseconds(80);
    for (i=0; i<5; i++)
      dht11_dat<i> = read_dht11_dat();

    DDRC |= _BV(DHT11_PIN);
    PORTC |= _BV(DHT11_PIN);

    byte dht11_check_sum = dht11_dat+dht11_dat+dht11_dat+dht11_dat;
    // check check_sum
    if(dht11_dat!= dht11_check_sum)
    {
   Serial.println("DHT11 checksum error");
    }
    dat1=dht11_dat;
    dat2=dht11_dat;
}

byte read_dht11_dat()
{
byte i = 0;
byte result=0;
for(i=0; i< 8; i++){


    while(!(PINC & _BV(DHT11_PIN)));// wait for 50us
    delayMicroseconds(30);

    if(PINC & _BV(DHT11_PIN))
      result |=(1<<(7-i));
    while((PINC & _BV(DHT11_PIN)));// wait '1' finish               
}
return result;
}
void finally (unsigned char n)
{
switch(n)
      {
      case 0: syn.play(text2,sizeof(text2),0);flag=1;break;
      case 1:
             if(flag==1)
             {
             pig1=dat1/10;
             pig2=dat1%10;
             pig3=dat2/10;
             pig4=dat2%10;
             syn.play(text3,sizeof(text3),0);
             if(pig1>0)
            {
               text=text1;
               text=text1;
               syn.play(text,sizeof(text),0);
               text=text1;
               text=text1;
               syn.play(text,sizeof(text),0);
            }
            if(pig2>0)
            {
                text=text1;
                text=text1;
                syn.play(text,sizeof(text),0);
            }
            syn.play(text5,sizeof(text5),0);
            syn.play(text4,sizeof(text4),0);
                  if(pig3>0)
            {
               textt=text1;
               textt=text1;
               syn.play(textt,sizeof(textt),0);
               textt=text1;
               textt=text1;
               syn.play(textt,sizeof(textt),0);
            }
            if(pig4>0)
            {
                textt=text1;
                textt=text1;
                syn.play(textt,sizeof(textt),0);
            }
            flag=0;
             }
                break;
      case 2:
               if(flag==1)
               {
               if(sign==0)
               {
               syn.play(text8,sizeof(text8),0);
               digitalWrite(led,HIGH);
               sign=1;
               }
               else syn.play(text13,sizeof(text13),0);
                flag=0;
             }
                break;      
      case 3:
               if(flag==1)
               {
               if(sign==1)
               {
                syn.play(text9,sizeof(text9),0);
                digitalWrite(led,LOW);
               sign=0;
               }
               else syn.play(text14,sizeof(text14),0);
                flag=0;
                }
                break;
         case 4:if(flag==1)
               {
                  shine=analogRead(2);
                  if(shine>700) //���ߴ�������ֵ
                  {
                   if(sign==0)
                  {   
                  syn.play(text11,sizeof(text11),0);
                  digitalWrite(led,HIGH);
                  sign=1;
                  }
                  else syn.play(text15,sizeof(text15),0);
                  }
                  else
                  {
                   syn.play(text12,sizeof(text12),0);
                   digitalWrite(led,LOW);
                   sign=0;
                  }
                  flag=0;
               }
               break;
      default:
                if(flag==1)
                {
                syn.play(text10,sizeof(text10),0);
                flag=0;
                }
                break;      
      }
}

void ExtInt0Handler ()
{
Voice.ProcessInt0();      //оƬ�ͳ��ж��ź�
                              
}
void setup()
{
Wire.begin();
Serial.begin(9600);
Voice.Initialise(MIC,VoiceRecognitionV1);//Initialise mode MIC or MONO,default is MIC
                                           //VoiceRecognitionV1 is VoiceRecognitionV1.0 shield
                                           //VoiceRecognitionV2 is VoiceRecognitionV2.1 module
attachInterrupt(0,ExtInt0Handler,LOW);
   DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN);
pinMode(led,OUTPUT);
pinMode(7,OUTPUT); //������ʾ��ʶ��״̬������ʱ��ʶ��
}
void loop()
{
      uint8 nAsrRes;
      nAsrStatus = LD_ASR_NONE;
      // DHT11();   
      while(1)
      {
          DHT11();
         gas=analogRead(1);
         if(gas>700)
       {
      syn.play(text6,sizeof(text6),0);
      syn.play(text7,sizeof(text7),0);
       }
         delay(100);
                switch(nAsrStatus)
                {
                        case LD_ASR_RUNING:
                        case LD_ASR_ERROR:               
                              break;
                        case LD_ASR_NONE:
                        {
                              nAsrStatus=LD_ASR_RUNING;
                            if (Voice.RunASR(SUM,80,sRecog)==0)
                              {
                                        nAsrStatus= LD_ASR_ERROR;
                                       Serial.println( "ASR_ERROR");
                              }

                              Serial.println( "ASR_RUNING.....");
                              digitalWrite(7,HIGH);
                              break;
                        }
                        case LD_ASR_FOUNDOK:
                        {
                                 digitalWrite(7,LOW);
                              nAsrRes =Voice. LD_GetResult();//      һ��ASRʶ�����̽���ȥȡASRʶ����      
                        
                finally(nAsrRes);
                              nAsrStatus = LD_ASR_NONE;
                              break;
                        }
                        case LD_ASR_FOUNDZERO:
                        default:
                        {      
                                 digitalWrite(7,LOW);
                              nAsrStatus = LD_ASR_NONE;
                              break;
                        }
               }// switch
            delay(500);
      }// while
}</i>

lauren 发表于 2014-6-12 12:33:46

bigbird 发表于 2014-6-12 10:58
你好,程序上全部是官方下载的源码,只修改过口令这一栏,烦请查看




不知道你想要实现的效果是什么样的?或许我们面向你要的效果来看程序怎么开发是更为合适一点。样例程序中貌似包含了比较杂的功能,温湿度采集,语音识别,环境气体数据采集,语音播放。貌似都有写,但是针对具体应用场景的软件开发才有意义。这个样例应该是纯展示功能的。

方便介绍下你想做的东西吗?这样能更好地帮你的

bigbird 发表于 2014-6-13 20:58:58

lauren 发表于 2014-6-12 12:33
不知道你想要实现的效果是什么样的?或许我们面向你要的效果来看程序怎么开发是更为合适一点。样例程序中 ...

我做一个智能灯,要用到这套系统里的功能,只要能正常工作没就行,现在两个主要问题,1》待机久死机2》环境光传感器不起作用

Youyou 发表于 2014-6-16 14:58:04

环境光传感器,建议单独用代码测试下正不正常,然后根据观察到的值,取一个适当的阀值。

bigbird 发表于 2014-6-18 11:19:56

你好,昨天试过了,试用了 voice2.ino 版本的程序,反应似乎比以前快,目前没有发现死机现象,但是出现新的问题
1> 原LED指示灯配件无任何反应

Youyou 发表于 2014-6-23 14:58:38

最新版的程序,加入了看门狗功能,可以有效的防止死机。

























bigbird 发表于 2014-6-24 16:22:26

收到了,非常感谢
页: [1]
查看完整版本: DFRobot Arduino Smart Home kit智能家居语音识别系统 待机久死机