当前位置: 首页 » 资讯 » 设计空间 » 创意构思 » 正文

制作炫酷的多彩LED留声机

放大字体  缩小字体 发布日期:2014-09-04 来源:雷锋网浏览次数:22









       在创客马拉松深圳站,来自SZDIY社区的just4fun团队打造一款多彩LED留声机,具有本地录音和“网络传音”功能。比较悲催的是,当时他们把发音芯片烧坏了,所以评选当天未能拿个好名次。这个炫酷的东西是怎么打造出来的呢?来看看just4fun团队的分享。

       像是很多人小时候都幻想拥有哆啦A梦的道具一样,这个灵感也来源于此。我们也制造了这个设备——时光留声机。它的功能简单说来,像是一台带有网络和蓝牙功能的录音机,又因为它只有一个按钮,所以我们又起了个名字给它——One Button。

       在生活中有这样的情景:家里只有一辆摩托车,有人有急事要骑车出门,又不必告诉家中的每一个人。离开前,他只要对着盒子录一段话,盒子的颜色就从蓝色变成了红色。别人看到后,点一点按钮就知道了原因。用灯光来提醒不同时间到来的人,这是留声机的第一个功能。

       留声机的第二个功能是通过蓝牙来遥控发声,它的应用场景或许是开不了口的道歉。文字通过手机发送到盒子,合成语音来帮你说出那句说不出口的抱歉,或许会让你轻松一些,也少一些尴尬。

       留声机的第三个功能是可以通过网络来留言,我们希望它变成一个礼物,在送出去以后,你还可以源源不断的送上祝福。WiFi模块可以帮助设备从网络上获取微信信息。微信客户端可以通过向该设备留言,将数据发送到网络,同时会返回哪些发出的信息已被读取,而哪些尚未被读到。

       我们是这样完成它的制作的:

       使用的材料有:

       Arduino UNO

       ISD1820录音模块

       SYN6658TTS语音模块

       蓝牙模块

       WiFi模块

       RGB LED灯带及其它

       首先,是将Arduino和录音模块连接起来,使用数字端口8号来播放声音,使用9号端口来录制声音,再单独制作按钮连接在12号端口上。因为TTS语音模块是通过串口通讯的,所以我们把它的RX和TX分别连接在Arduino的2、3号端口,蓝牙模块的RX和TX连接在4、5号端口。因为RGB LED灯带的三色要使用PWM控制,所以红绿蓝三色的控制分别连接在了6、10、11号端口。串口的WiFi模块可以连接在7、13号端口。

       实际的制作过程中,我们是一个部分一个部分调试成功后再进行整合。部分代码如下:

       //端口定义

       int buttonPin = 12;

       int recordPin = 9;

       int playPin = 8;

       #define REDPIN 6

       #define GREENPIN 10

       #define BLUEPIN 11

       #include

       SoftwareSerial portOne(2, 3);

       SoftwareSerial portTwo(4, 5);

       ........

       //TTS字符处理

       void parser(unsigned char c)

       {

       unsigned int len;

       if (gSerialBufIndex == 0)

       {

       if (c == 0xFD)

       {

       gSerialBuf[0] = 0xFD;

       gSerialBufIndex = 1;

       } else {

       return;

       }

       } else if (gSerialBufIndex < 3)

       {

       gSerialBuf[gSerialBufIndex ] = c;

       } else if (gSerialBufIndex >= 3)

       {

       len = gSerialBuf[1] << 8 | gSerialBuf[2];

       if (len > 200)

       return;

       if ((gSerialBufIndex - 3 1 ) <= len)

       {

       gSerialBuf[gSerialBufIndex ] = c;

       if ((gSerialBufIndex - 3 1 ) > len)

       {

       gSerialBuf[gSerialBufIndex] = '\0';

       portOne.write(gSerialBuf[0]);

       portOne.write(gSerialBuf[1]);

       portOne.write(gSerialBuf[2]);

       portOne.write(gSerialBuf 3);

       gSerialBufIndex = 0;

       return;

       }

       }

       }

       }

       .......

       //蓝牙数据转发TTS模块

       while (portTwo.available() > 0) {

       analogWrite(GREENPIN,255);

       delay(50);

       analogWrite(GREENPIN,0);

       char inByte = portTwo.read();

       parser(inByte);

       电路连接的部分结束后,我们使用3D打印制作了留声机的外壳,并将电路部分固定在了里面。

       关于通过android端手机蓝牙控制的发声过程,首先发现蓝牙设备,并且连接上去。

       输入你要说的话,点击发送就可以让发声模块发声。还可以通过点击男声和女生来变换声音的语调。

       蓝牙连接流程:

       下面是蓝牙的连接原理图,首先通过界面GUI点击连接按钮通过连接按钮的事件hitConnectButton()来发出连接命令,命令ACTION_CONNECT发送给后台服务Background Service通过checkAddressFormat来检查地址格式,然后通过initBuletoothDevice()来调用蓝牙连接库BlueTooth Library来初始化蓝牙连接。当蓝牙连接库返ready()的时候Background Service开始启动连接线程startConnectThread(),接着打开蓝牙连接socket,当返回socketOpen时启动socket连接池管理socket。然后Background Service返回给GUI命令ACTION_CONNECTED,表示连接成功。同时通过updateButtonState()来更新界面的显示状态。

       数据格式生成代码:

       下面是从android手机端发送给发声模块的数据帧结构。下面的代码就是怎么样在android上用java代码生成这样的数据格式。经调试该发声模块目前能接受的是GBK的数据编码格式,所以我们用message.getBytes(“GBK”)来生成该编码格式。Msg_byte_len是数据帧总长度,byteHead代表帧头,byteLen代表数据区长度,byteType代表命令字和命令参数,然后将这些数据组合在destArray中,发送到发声模块上,发声即可。

       稍加调试,留声机就基本能工作起来了。对我们最具挑战的第三个功能——网络留言功能,也使用微信的API测试成功。当它被作为礼物送给对方的时候,你还可以在后面的日子里访问它,很喜欢为它设计的广告语:每一份爱都应该得到礼物,每一份礼物都应该持续不断地得到祝福。

 
【版权声明】本网站所刊原创内容之著作权为「中国半导体照明网」网站所有,如需转载,请注明文章来源——中国半导体照明网;如未正确注明文章来源,任何人不得以任何形式重制、复制、转载、散布、引用、变更、播送或出版该内容之全部或局部。
 
[ 资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 关闭窗口 ]

 
0条 [查看全部]  相关评论

 
推荐图文
点击排行
关于我们 | 联系方式 | 使用协议 | 版权隐私 | 诚聘英才 | 广告服务 | 意见反馈 | 网站地图 | RSS订阅