查看: 69396|回复: 135

NO.5基于arduino 控制的语音控制调节台灯

  [复制链接]

该用户从未签到

发表于 2013-7-17 11:14 | 显示全部楼层 |阅读模式
本帖最后由 伊本哈兰 于 2013-8-4 17:32 编辑

我们的语音控制调节台灯实现了全语音控制,它可以根据不同的语音命令作出开关和不同的动作,我们的台灯可以完成上、下、左、右、开、关、摇头、点头、跳舞的动作。其次,为了实现台灯的功能我们购买了机械臂,一个Arduino控制板,一个扩展板,一个语音控制模块,一个升压模块,一个LED灯和电池。最后就是将这些零零散散的东西组装起来并编写程序,反复调试,直至它可以根据我们的命令准确无误的完成各种动作。{:soso_e113:}

硬件完成的总效果图

硬件完成的总效果图

换个角度

换个角度

霸气的灯头部分

霸气的灯头部分

使用的是DFROBORT的mega1280和语音控制模块,最上面是V5扩展模块

使用的是DFROBORT的mega1280和语音控制模块,最上面是V5扩展模块

使用的升压模块,给12V的LED供电

使用的升压模块,给12V的LED供电

关灯后~

关灯后~

评分

参与人数 1金币 +9 收起 理由
nust_奔跑 + 9

查看全部评分

该用户从未签到

 楼主| 发表于 2013-7-17 11:40 | 显示全部楼层
本帖最后由 伊本哈兰 于 2013-7-17 14:47 编辑

接下来是上视频短片~

视频后的小花絮中的问题我们通过改变舵机变化的速度,和加装木质底座,已经得到了完美的解决~

  • TA的每日心情
    郁闷
    2016-11-3 15:50
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-6-8 17:05 | 显示全部楼层

    回帖奖励 +4 金币

    太牛了,确实牛!必须赞一个!

    该用户从未签到

    发表于 2013-8-30 22:20 | 显示全部楼层

    回帖奖励 +4 金币

    楼主辛苦了,作品很棒。挺你。

    该用户从未签到

    发表于 2013-7-23 21:50 | 显示全部楼层
    真厉害

    该用户从未签到

     楼主| 发表于 2013-7-17 11:38 | 显示全部楼层
    本帖最后由 伊本哈兰 于 2013-7-17 11:44 编辑

    然后是一些测试中的图~

    测试实际使用时的照明效果

    测试实际使用时的照明效果

    一个比较“销魂”的角度

    一个比较“销魂”的角度

    点评

    666  发表于 2018-7-12 18:14

    该用户从未签到

     楼主| 发表于 2013-7-17 11:40 | 显示全部楼层
    本帖最后由 伊本哈兰 于 2013-8-21 22:05 编辑

    最后是程序源代码~谢谢各位客官支持~
    #include "Voice.h" //申明语音识别库文件
    #include"Servo.h"
    Servo servo1;    //duoji1
    Servo servo2;    //duoji2
    Servo servo3;    //duoji3
    #define SUM 28 //定义待识别的单词数量
    uint8 nAsrStatus=0; //申明语音模块工作状态
    int ledPin=6;
    int power1=20;
    int power2=20;
    int a=70,b=70,c=100;
    char sRecog[SUM][80] =    //定义识别单词“拼音”内容的数组
    {"qian","hou","zuo","you","shang","xia","kai","kaideng","fuwei","guan","guandeng","yi","er","san"};
    char flag;//定义向上位机发送字符命令的变量
    //根据单词数组的元素号,执行相应命令
    void finally (unsigned char n)
    {
    switch(n)
    {
    case 0:
    b=b+power1;
    c=c+power1;
    if(b<145)
    servo2.write(b);//前进
    else
    servo2.write(b=b-power1);
    if(c>50)
    servo3.write(c);
    else
    servo3.write(c=c-power1);
    break;
    case 1:
    b=b-power1;
    c=c-power1;
    if(b>20)
    servo2.write(b); //后退
    else
    servo2.write(b=b+power1);
    if(c<160)
    servo3.write(c);
    else
    servo3.write(c=c+power1);
    break;
    case 2:
    a=a-power2;
    if(a>0)
    servo1.write(a=a); //左转
    else
    servo1.write(a=a+power2);
    break;
    case 3:
    a=a+power2;
    if(a<150)
    servo1.write(a); //右转
    else
    servo1.write(a=a-power2);
    break;
    case 4:
    c=c+power1;
    if(c<160)
    servo3.write(c);//起
    else
    servo3.write(c=c-power1);
    break;
    case 5:
    c=c-power1;
    if(c>50)
    servo3.write(c);//xia
    else
    servo3.write(c=c+power1);
    break;
    case 6:
    servo1.write(a=70);//Begin
    servo2.write(b=70);
    servo3.write(c=100);
    digitalWrite(ledPin, HIGH);   // sets the LED on
    break;
    case 7:
    servo1.write(a=70);//Begin
    servo2.write(b=70);
    servo3.write(c=100);
    digitalWrite(ledPin, HIGH);   // sets the LED on
    break;
    case 8:
    servo1.write(a=70);//Begin
    servo2.write(b=70);
    servo3.write(c=100);
    digitalWrite(ledPin, HIGH);   // sets the LED on
    break;
    case 9:
    servo1.write(a=70); //停止
    servo2.write(b=30);
    servo3.write(c=50);
    digitalWrite(ledPin, LOW);    // sets the LED off
    break;
    case 10:
    servo1.write(a=70); //停止
    servo2.write(b=30);
    servo3.write(c=50);
    digitalWrite(ledPin, LOW);    // sets the LED off
    break;
    case 11:     //jiangnanSTYLE
    servo1.write(a=70);
    servo2.write(b=70);
    servo3.write(c=100);
    for(int j=0;j<5;j++)
    {
      digitalWrite(ledPin, HIGH);   // sets the LED on
      delay(1000);
      digitalWrite(ledPin,LOW);   // sets the LED off
      delay(1000);
    }
    digitalWrite(ledPin, HIGH);   // sets the LED on
    for(a;a>=30;a=a-5)
    {
      servo1.write(a);
      delay(100);
    }
    delay(1000);
    for(int i=0;i<3;i++)
    {
      for(c;c<115;c=c+5)
      {
        servo3.write(c);
        delay(100);
      }
      for(c;c>85;c=c-5)
      {
        servo3.write(c);
        delay(100);
      }
    }
    delay(500);
    for(a;a<=120;a=a+5)
    {
      servo1.write(a);
      delay(100);
    }
    delay(1000);
    for(int i=0;i<3;i++)
    {
      for(c;c<115;c=c+5)
      {
        servo3.write(c);
        delay(100);
      }
      for(c;c>85;c=c-5)
      {
        servo3.write(c);
        delay(100);
      }
    }
    servo1.write(a=70);
    servo2.write(b=70);
    servo3.write(c=100);
    for(int i=0;i<5;i++)
    {
      for(b,c;b<105;b=b+5,c=c+7)
      {
        servo2.write(b);
        servo3.write(c);
        digitalWrite(ledPin, HIGH);   // sets the LED on
        delay(50);
        digitalWrite(ledPin, LOW);    // sets the LED off
        delay(50);
      }
      for(b,c;b>55;b=b-5,c=c-7)
      {
        servo2.write(b);
        servo3.write(c);
        digitalWrite(ledPin, HIGH);   // sets the LED on
        delay(50);
        digitalWrite(ledPin, LOW);    // sets the LED off
        delay(50);
      }
    }
    servo1.write(a=70);
    servo2.write(b=70);
    servo3.write(c=100);
    digitalWrite(ledPin, HIGH);   // sets the LED on
    break;
    case 12:     //yaotou
    servo1.write(a=70);
    for(int i=0;i<5;i++)
    {
      for(a;a>35;a=a-5)
      {
        servo1.write(a);
        delay(100);
      }
      for(a;a<105;a=a+5)
      {
        servo1.write(a);
        delay(100);
      }
    }
    servo1.write(a=70);
    break;
    case 13:    //diantou
    servo3.write(c=100);
    for(int i=0;i<3;i++)
    {
      for(c;c<115;c=c+5)
      {
        servo3.write(c);
        delay(100);
      }
      for(c;c>85;c=c-5)
      {
        servo3.write(c);
        delay(100);
      }
    }
    servo3.write(c=100);
    break;
    default:
    break;
    }
    }
    //识别到声音,产生一个触发中断
    void ExtInt0Handler ()
    {
    Voice.ProcessInt0();//执行中断服务子程序
    }
    //初始化
    void setup()
    {
      servo1.attach(3);
      servo1.write(70);
      servo2.attach(5);
      servo2.write(70);
      servo3.attach(8);
      servo3.write(100);
      pinMode(ledPin, OUTPUT);      // sets the digital pin as output
      digitalWrite(ledPin, HIGH);   // sets the LED on
      Voice.Initialise(MIC);//初始化语音模块
      attachInterrupt(0,ExtInt0Handler,LOW);
    }
    //主程序
    void loop()
    {
    uint8 nAsrRes;
    nAsrStatus = LD_ASR_NONE;
    while(1)
    {
    //当语音模块处于各状态,执行相应工作
    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.....");
    break;
    }
    //识别到单词是设定单词
    case LD_ASR_FOUNDOK:
    {
    //Serial.print( "ASR_FOUN ONE: ");
    //提取所识别到的单词是数组的第几个元素
    nAsrRes =Voice. LD_GetResult();
    //根据数组元素号,执行相应命令
    finally(nAsrRes);
    nAsrStatus = LD_ASR_NONE;
    break;
    }
    //识别到单词“不是”设定单词
    case LD_ASR_FOUNDZERO:
    {
    //Serial.println( "ASR_FOUND ZERO");
    nAsrStatus = LD_ASR_NONE;
    break;
    }
    default:
    {
    nAsrStatus = LD_ASR_NONE;
    break;
    }
    }// switch
    delay(100);    //yanshi 0.5s
    }// while
    }


    该用户从未签到

    发表于 2013-7-17 11:48 | 显示全部楼层

    回帖奖励 +2 金币

    {:soso_e179:},赞一个
  • TA的每日心情
    开心
    2015-12-30 11:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-7-19 19:43 | 显示全部楼层
    做的不错~赞~~

    该用户从未签到

    发表于 2013-7-23 21:52 | 显示全部楼层
    源代码。。。源代码。。。源代码。。。

    该用户从未签到

     楼主| 发表于 2013-7-24 11:33 | 显示全部楼层
    Tony.K 发表于 2013-7-23 21:52
    源代码。。。源代码。。。源代码。。。

    源代码待我整理下。。。写的比较乱~

    该用户从未签到

    发表于 2013-8-2 10:04 | 显示全部楼层
    cool
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    有对屏幕了解的大神吗?
    有对屏幕了解的大神吗?
    这种屏幕可以用arduino板或者树莓派做出来吗?小白对这方面一无所知,求指点
    编写了个贪食蛇小程序
    编写了个贪食蛇小程序
    8*8双色3mm红蓝雾状发光二极管 用595驱动的
    Adruino小型自平衡机器人EVA(+硬件+源代码+3D文件)
    Adruino小型自平衡机器人E
    [*]2个月前做的小机器人,在CSDN个人博客上发了,从没接触过PID、3D打印、电机等,就
    超萌机器人  pando
    超萌机器人 pando
    ## 准备工作准备好如下材料: · DFRobot Romeo BLE mini V2.0 控制器 × 1·
    红外模块在接收时码值变动
    红外模块在接收时码值变动
    在使用arduino连接一个红外接收后,下载的红外模块的库IRremote,在使用时发现,遥控
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表