大连林海 发表于 2015-2-8 09:37:06

【转载】基于arduino 控制的语音控制调节台灯

本帖最后由 大连林海 于 2015-2-8 09:40 编辑

语音控制调节台灯实现了全语音控制,它可以根据不同的语音命令作出开关和不同的动作,我们的台灯可以完成上、下、左、右、开、关、摇头、点头、跳舞的动作。其次,为了实现台灯的功能我们需要机械臂,一个Arduino控制板,一个扩展板,一个语音控制模块,一个升压模块,一个LED灯和电池。最后就是将这些零零散散的东西组装起来并编写程序,反复调试,直至它可以根据我们的命令准确无误的完成各种动作。
硬件完成的总效果图http://www.arduino.cn/data/attachment/forum/201307/17/112421goc5djocdwpsrrov.jpg

换个角度http://www.arduino.cn/data/attachment/forum/201307/17/112548o3pqy0s9qnnysymt.jpg
霸气的灯头部分http://www.arduino.cn/data/attachment/forum/201307/17/112610e802z9nqze899q9x.jpg
使用的是DFROBORT的mega1280和语音控制模块,最上面是V5扩展模块http://www.arduino.cn/data/attachment/forum/201307/17/112627k039w4lggt013190.jpg
使用的升压模块,给12V的LED供电http://www.arduino.cn/data/attachment/forum/201307/17/112723ciemi5ihe8544di7.jpg
关灯后~http://www.arduino.cn/data/attachment/forum/201307/17/112811ma2xva2222arx22a.jpg
测试实际使用时的照明效果http://www.arduino.cn/data/attachment/forum/201307/17/113842mtp48t2aju4qp8av.jpg
一个比较“销魂”的角度http://www.arduino.cn/data/attachment/forum/201307/17/114343tqlluu6w6bhwup7t.jpg
最后是程序源代码~
#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 =    //定义识别单词“拼音”内容的数组
{"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
}
接下来是上视频短片~



http://v.youku.com/v_show/id_XNTg0MDMxMzI0.html





Eric 发表于 2015-2-8 19:04:48

我觉得稍微改动一下,把语音识别改成蓝牙模块,然后用手机自带的语音识别功能,再用蓝牙传输给arduino,这就更能耍酷了,哈哈哈哈

大连林海 发表于 2015-2-8 19:17:59

Eric 发表于 2015-2-8 19:04
我觉得稍微改动一下,把语音识别改成蓝牙模块,然后用手机自带的语音识别功能,再用蓝牙传输给arduino,这就更 ...

用一个APP 像蓝牙小车那样的控制 速度快点的话 还可以跳舞 不过要把下边固定住

Eric 发表于 2015-2-8 19:22:39

大连林海 发表于 2015-2-8 19:17
用一个APP 像蓝牙小车那样的控制 速度快点的话 还可以跳舞 不过要把下边固定住 ...

对滴对滴~打孔上螺丝,简单粗暴

大连林海 发表于 2015-2-8 19:26:24

Eric 发表于 2015-2-8 19:22
对滴对滴~打孔上螺丝,简单粗暴

怎么感脚固定上之后变成 探照灯呢{:3_43:}

Eric 发表于 2015-2-8 19:28:51

大连林海 发表于 2015-2-8 19:26
怎么感脚固定上之后变成 探照灯呢

哈哈哈,在DIY眼里就这玩意,放到别的领域,那些大牛们就能用更多的思维为它来重新定义名称喽~

大连林海 发表于 2015-2-8 19:29:51

Eric 发表于 2015-2-8 19:28
哈哈哈,在DIY眼里就这玩意,放到别的领域,那些大牛们就能用更多的思维为它来重新定义名称喽~ ...

diy我们玩得开心 放在应用上 我们这名字略显不前卫

大连林海 发表于 2015-2-8 19:29:53

Eric 发表于 2015-2-8 19:28
哈哈哈,在DIY眼里就这玩意,放到别的领域,那些大牛们就能用更多的思维为它来重新定义名称喽~ ...

diy我们玩得开心 放在应用上 我们这名字略显不前卫

Youyou 发表于 2015-2-8 22:32:41

不太推荐LED当台灯,毕竟这种冷光源和我们习惯的生物光相差太多,久而久之,必定对眼睛有一定损伤。

大连林海 发表于 2015-2-8 22:34:30

Youyou 发表于 2015-2-8 22:32
不太推荐LED当台灯,毕竟这种冷光源和我们习惯的生物光相差太多,久而久之,必定对眼睛有一定损伤。 ...

那就让他改一个名字 钟楼上的探照灯{:3_48:}

Youyou 发表于 2015-2-8 22:38:08

大连林海 发表于 2015-2-8 22:34
那就让他改一个名字 钟楼上的探照灯

这个好{:3_48:}

大连林海 发表于 2015-2-8 22:38:59

Youyou 发表于 2015-2-8 22:38
这个好

用远程app控制 就不用在前面看着移动了 可以暖暖的在屋里看了

Ricky 发表于 2015-2-8 23:24:08

加个leapmotion,控制效果更佳。

大连林海 发表于 2015-2-8 23:24:46

Ricky 发表于 2015-2-8 23:24
加个leapmotion,控制效果更佳。

这是什么?分享讲解一下

Phoebe 发表于 2015-2-9 18:04:48

哈哈,皮克斯台灯,还能语音控制,挺逗;P

大连林海 发表于 2015-2-9 18:15:14

Phoebe 发表于 2015-2-9 18:04
哈哈,皮克斯台灯,还能语音控制,挺逗

一切尽在 do it{:3_61:}

hnyzcj 发表于 2015-2-9 19:40:43

大连林海 发表于 2015-2-8 23:24
这是什么?分享讲解一下

http://baike.baidu.com/link?url=UBnWf2Sa0gTmyKYt2nWded3-hIak3G5N3NbfVW71supEFLX0FEYorVsyrw1IrZRaFegUJe42tblHM0e7tDDsq_

大连林海 发表于 2015-2-9 20:17:45

hnyzcj 发表于 2015-2-9 19:40
http://baike.baidu.com/link?url=UBnWf2Sa0gTmyKYt2nWded3-hIak3G5N3NbfVW71supEFLX0FEYorVsyrw1IrZRaFe ...

学习啦 陈老师什么时候做一个
页: [1]
查看完整版本: 【转载】基于arduino 控制的语音控制调节台灯