查看: 907|回复: 0

【《美好生活》好搭拍客】手势控制MP3播放器&万能遥控器

[复制链接]

5

主题

5

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2020-6-11 12:43:32 | 显示全部楼层 |阅读模式
本帖最后由 zmg 于 2020-6-11 16:57 编辑

00.jpg

01.jpg

视频演示
手势控制MP3播放器

手势控制七彩灯

手势控制电视机

       音乐似乎已经是我们生活的一部分,只要是有人的地方就有音乐的伴随,音乐是人们抒发感情、表现感情、寄托感情的艺术,不论是唱或奏或听,都内涵着及关联着人们千丝万缕的情感因素。当心情消沉时,听上一曲悠扬婉转轻音乐,那种犹如进入人间仙境般的感觉,让人感到心旷神怡,心情也会随着音乐的流淌而瞬间好转,音乐带给我的是心情舒畅和陶冶情操,这就是音乐的魔力,也印证了“生命因音乐而美丽”这句话。
       我们平常听音乐采用最多是方式就是利用MP3播放器、手机APP以及天猫精灵、小爱同学、小度在家等智能音箱来收听音乐,这些设备的控制方式一般有两种,一种是用手点击选择音乐及播放,另一种还可以通过语音来控制。市面上还很少有利用手势来控制的MP3播放器。自从DF推出了多款手势控制模块后,就诞生了制作一个手势控制MP3播放器的想法,如果能用手势控制MP3播放器,那能不能用手势来控制电视机、空调、电风扇以及电灯等家用电器呢?
       想到就干,马上入手了相关的开源硬件及电子模块,经过捣鼓,一款手势控制MP3播放器及万能遥控器作品就诞生了。

硬件清单
        Arduino Mega2560 R3           1
        DF手势识别带触摸传感器         1
        OLED显示屏                            1
        8*8 RGB LED点阵模块             1
        角度传感器模块                       1
        Gravity: UART MP3语音模块   1
        红外发射模块                          1
        3W喇叭                                  2
        六角铜螺丝、螺帽、垫片等
        接线柱              
       杜邦线、电源线
        激光切割件

结构设计与搭建
        1、激光切割件设计
        利用CorelDRAW软件在电脑中设计出其外壳,并用激光切割机切割出来,这里的板材采用3MM的椴木板和2MM的白色亚克力板。
设计图.jpg

       2、用8颗4MM的铜螺丝及16粒4MM的铜螺母把两个3W的喇叭固定在相应的椴木板上,其中8粒螺母放在喇叭与椴木板之间,这样可以避免喇叭在发出声音时由于纸盆可能会碰到椴木板而影响声音质量。
1.JPG

2.JPG

       3、利用热熔胶把角度传感器固定在两个喇叭中间的位置上,固定时注意角度传感器的方向,使角度传感器的旋转范围在面板刻度的0和9之间。这里角度传感器的作用是控制设备的切换,旋转到不同的位置控制不同的设备。
3.JPG

4.JPG

       4、把导线及杜邦线焊接在喇叭和角度传感器的相应位置。
5.JPG
   
       5、把5根导线分别焊接在手势识别带触摸传感器的5个触摸点上,并接好4P杜邦线。
6.JPG

       6、用热熔胶把手势识别带触摸传感器、8*8RGB LED点阵及OLED显示屏固定在面板上。固定时注意各个模块的放置方向,特别是LED点阵的方向,固定好后它的第1盏灯的位置应该在左上角,然后横着排是第2盏、第3盏……最后焊接好8*8RGB LED点阵的引线,在焊接处用热熔胶再固定一下,以免在安装过程中不小心造成接触不良及避免触碰造成短路。
7.JPG

8.JPG

       7、把5颗5M的铜螺丝及螺母安装在面板下面的5个孔中,安装时把从手势识别带触摸传感器上触摸点引出的5根导线分别接在5个铜螺丝上,接时要注意线序,1号触摸点上的导线接在正面最左边这颗螺丝上,2号触摸点上的导线接在正面左边第2颗螺丝上,以这样的顺序全部接好。这里采用铜螺丝是因为铜螺丝导电性能更好,最终只要我们用手触摸不同的铜螺丝就相当于触摸手势识别带触摸传感器上不同的触摸点。
9.JPG

10.JPG

       8、把上面的面板与四周的侧板组合起来,并用热熔胶固定好,安装时特别要注意前后侧板的位置,前侧板也就是有喇叭的侧板要安装在上面板5个铜螺丝这一边。
12.JPG

13.JPG

       9、把ArduinoMega2560 R3主控板、红外发射模块、Gravity: UART MP3语音模块及一个2位的接线柱固定在底板上,它们固定的位置要与后侧板对应起来。
11.JPG

       10、把各个模块与主控板连接起来,具体接线方法见后面的电路连接图,接好后再把底板合上固定。
14.JPG

15.JPG

       11、把亚克力面板和触摸功能指示条安装上,面板采用2MM的白色亚克力板主要作用是为了使8*8 RGB LED点阵显示效果更加的漂亮。这里的固定可以用502胶水来固定,这样整个作品安装部分就完成了。
16.jpg

17.jpg


电路连接图
接线图.jpg


程序编写
       1、程序编写思路。
       1.1这个作品的主要功能是利用手势及触摸功能来遥控MP3播放器或电视机、空调等设备,我们可以利用一个变量“遥控类别”来判断所要遥控的设备,而“遥控类别”变量的值我们可以通过角度传感器来获取,角度传感器旋转到相应的范围,赋于变量“遥控类别”一个值,我们在程序中设定当变量“遥控类别”等于某一值时就执行遥控某一设备的程序,这样就实现了遥控多种设备的功能。
       2.2为了使操作者比较清晰的了解到手势或触摸有没有被接收,可以通过在面板中间下方安装的8*8RGB LED点阵显示不同的图形来告诉操作者刚才所做的动作,主要有向左、向右、向上、向下的箭头及暂停、播放等图形,在程序中这些图形显示我们可以分别用不同的函数来实现,要使用其显示效果,只要调用相应的函数就行了。
       1.3面板左边的OLED显示屏主要用于显示当前控制的设备名称及相应的一些操作说明,特别是切换到MP3设备时,OLED显示屏可以显示当前播放的歌曲名称、当前的歌曲属于第几首歌以及当前的音量等,方便操作者了解详细信息。
       1.4对于遥控其它红外接收的电子设备时,我们可以先把原设备的遥控器各个常用按键的编码读取出来,再在程序中编写当检测到相应的手势时就让红外发射模块发射原遥控器中相对应的编码,从而实现手势或触摸控制的效果,比如控制电视机时,手势向左就让红外发射模块发送电视遥控器中频道-的编码,手势向右就发送频道+的编码,手势向上发送音量+的编码,手势向下发送音量-的编码,手势按压就发身开关机的编码,从而实现利用手势控制电视机的效果。
       2、程序编写的软件是Mind+,打开Mind+软件后,我们先要在扩展中添加相应的主控板等。
       在主控板选项卡中选择Mega2560主控板。
18.png

       在执行器选项卡中选择串口MP3模块。
19.png

       在通讯模块选项卡中选择红外发射模块。
20.png

       在显示器选项卡中选择OLED-12864显示屏和WS2812RGB灯。
21.png

       进入到用户库选项卡中,在搜索栏中输入手势,点查找,在查询到的列表中选择手势识别触摸传感器。
22.png

23.png

       这样,主板及相关的模块都选择好了,下面可以开始编写程序了。
       3、相关程序。
       3.1程序开始时我们先建一些变量,并对这些变量进行初始化赋值,对部分传感器进行初始化设置。
程序图01.jpg

       3.2 这个作品目前只设置了控制3个不同设备的功能,可以通过旋转角度传感器来选择相应的控制设备,所以在写程序时通过读取角度传感器的取值范围来切换到相应的设备,角度传感器的值为0—179,OLED显示屏显示选择菜单;181—549范围执行MP3播放器的相应程序;551—879范围执行七彩台灯的相应程序;角度传感器的值大于880的就执行遥控电视机的相应程序。当然如果设备比较多,我们可以对角度传感器的取值范围多划分几个,理论上来说可以划分1024个。在循环执行中调用了相关的自定义函数,这样一来可以循环执行中积木的长度,二来可以把功能分块进行编写,方便调试和修改。
程序图02.jpg

       3.3根据不同的操作,面板下面的8*8LED点阵分别显示不同的图形来提示操作者,有向左向右箭头、向上向下箭头等图形,这些图形的程序也写在不同的自定义函数中,下面展示的是向左和向上箭头的两个自定义函数的程序。
程序图03.jpg

程序图04.jpg

       3.4 我们控制各个设备的运行主要是通过手势识别触摸传感器来实现的,比如控制MP3播放前一首歌曲,我们可以通过手势向左划动或触摸第2个触摸点来实现;播放下一首歌曲可以通过手势向右划动或触摸第4个触摸点来实现,程序如下:
程序图05.png

       3.5 在MP3播放器函数中也调用了相关的函数,实现了手势与触摸两种方法实现MP3的播放暂停、上下首切换,音量的增加与减少等效果,部分程序如下:
程序图06.png

       3.6 我们在控制电视机及七彩台灯时主要是发送相应的红外编码来实现控制的目的,所以事先我们要读取遥控器上的相应红外编码,这样我们在写程序时针对不同的功能就发送不同的红外编码来达到控制的目的。比如电视机,我们先读取电视机遥控器中频道+、频道-、音量+、音量-开机机的编码,再在程序中让红外发射模块发射相对就的编码就可以了,电视机函数中的程序如下:
由于程序比较长,上面只列举了一小部分程序进行说明。
程序图07.jpg

问题及改进
       在制作这个作品的过程中,碰到了一些问题,也得到了一些朋友的帮助,在这里特别要感谢DF的小伙伴们,特别是李亮工程师,刚开始我采用的主板是Arduino UNO,但随着功能的不断叠加,出现的问题越来越多,不是OLED显示屏不能正常显示相关的信息,就是8*8RGB LED点阵显示出错,折腾了好几天,也找不到原因所在,后来咨询了李亮工程师,李亮与DF的一些技术人员帮忙测试,最后发现问题出现的原因是由于程序比较复杂,加上OLED显示屏,串口MP3播放器、LED点阵、串口手势触摸传感器等同时使用,造成内存占用过大而出错,后来他们又帮忙利用Mega2560主控板进行测试,结果一切能正常运行,于是最终就采用了Mega2560主控板。
       在测试播放MP3功能时,刚开始加大音量时总会出现一些杂音,有时会偶尔会卡顿一下,经过反复调试,发现利用两节18650的电池供电就没问题(原来一直用电脑的数据线供电)。
       本作品中采用的是Gravity: UART MP3语音模块,它自带8M的内存,8M的内存放不了几首MP3歌曲,如果想存放更多的歌曲,我们可以采用DFPlayer Mini 播放器模块,它也集成了MP3、WAV、WMA的硬解码,同时支持TF卡驱动,支持FAT16、FAT32文件系统。

相关附件

       程序.rar (637.55 KB, 下载次数: 4)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-3-28 19:30 , Processed in 0.815747 second(s), 25 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表