极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 29621|回复: 7

【教程】使用超声波用手势控制arduino音乐播放

[复制链接]
发表于 2014-9-19 14:45:52 | 显示全部楼层 |阅读模式


Hi,long time no see!今天给小伙伴们带来一个真正可以提升逼格的教程,手势控制音乐!

需要用到的配件:


ITEAD的这个MP3音乐扩展板可以播放内存卡或者U盘里面的MP3音乐文件,输出是标准的耳机接口,可以接耳机、音响(额外供电)等。详细资料和库下载:http://pan.baidu.com/s/1eQnFEqI

实物硬件连接如下:



MP3音乐扩展板直接叠加到UNO,HC-SR04的接线如下图:



烧写以下代码到UNO:
  1. const int EchoPin = 2; //超声波信号输入
  2. const int TrigPin = 3; //超声波控制信号输出
  3. int currDist = 0;
  4. void setup(){
  5.   pinMode(EchoPin, INPUT);
  6.   for (int pinindex = 3; pinindex < 8; pinindex++) {
  7.     pinMode(pinindex, OUTPUT); // set pins 3 to 10 as outputs
  8.   }
  9. pinMode(A0,OUTPUT);
  10. pinMode(A1,OUTPUT);
  11. pinMode(A2,OUTPUT);
  12. pinMode(A3,OUTPUT);
  13. digitalWrite(A0,LOW);
  14. digitalWrite(A1,LOW);
  15. digitalWrite(A2,LOW);
  16. digitalWrite(A3,LOW);
  17. Serial.begin(9600);
  18. }

  19. void loop(){

  20. currDist = MeasuringDistance(); //读取前端距离
  21. //Serial.println(currDist);
  22.   if(currDist > 25){
  23.    
  24.   }
  25. //power开关看个人需要,这里没有启用
  26.   //else if(currDist < 8){
  27.    
  28.    // mpower();
  29. // }
  30.    else if(currDist < 7){
  31.    
  32.     mpause();
  33.   }
  34.     else if(currDist < 15){
  35.   
  36.     mnext();
  37.    
  38.   }
  39.     else if(currDist < 25){
  40.    
  41.     mprev();
  42.    
  43.   }
  44.   
  45.   
  46. }
  47. long MeasuringDistance() {
  48.   long duration;

  49.   digitalWrite(TrigPin, LOW);
  50.   delayMicroseconds(2);
  51.   digitalWrite(TrigPin, HIGH);
  52.   delayMicroseconds(10);
  53.   digitalWrite(TrigPin, LOW);

  54.   
  55.   duration = pulseIn(EchoPin, HIGH);

  56.   return duration / 29 / 2;
  57. }
  58. //mplay播放
  59. void mplay() {
  60.   digitalWrite(A0, HIGH);
  61.   delay(100);
  62. digitalWrite(A0, LOW);
  63. Serial.println("mplay");
  64. }  

  65. //mprev上一首
  66. void mprev() {
  67.   digitalWrite(A1, HIGH);
  68.   delay(1000);
  69.   digitalWrite(A1, LOW);
  70. Serial.println("mprev");
  71. }

  72. //mnext下一首
  73. void mnext() {
  74.   digitalWrite(A2, HIGH);
  75.   //return;
  76.   delay(1000);
  77.   digitalWrite(A2, LOW);
  78. Serial.println("mnext");
  79. }  

  80. //mpause暂停
  81. void mpause() {
  82.   digitalWrite(A0, HIGH);
  83.   delay(1000);
  84. digitalWrite(A0, LOW);
  85.    Serial.println("mpause");
  86. }  
  87. //mpower
  88. //void mpower() {
  89. // digitalWrite(A3, HIGH);
  90. // delay(500);
  91. //digitalWrite(A3, LOW);
  92.   // Serial.println("mpower");
  93. //}  

复制代码


控制的原理就是通过超声波检测到不同距离的范围值来控制音乐扩展板上的A0-A3四个信号脚。因为HC-SR04有盲区,最低检测距离最好是在7cm以上,可以自己多调试。

另外内存卡里面的音乐文件排序在music扩展板读取的时候好像是相反的,切换上下首的顺序相反。如果介意的话可以把程序里的上下首切换的距离反过来。



因为这个music扩展板只占用了4个引脚,小伙伴们可以添加跟多的传感器来控制音乐播放:再加一个超声波模块控制音量;使用人体红外传感器制作音乐门铃等等。大开脑洞吧!

最后,演示视频如下:

PS: 手机拍的,拿反了,用格式工厂旋转后视频会变形,不太懂怎么弄,有懂行的小伙伴可以帮我弄下吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-9-19 18:03:57 | 显示全部楼层
本帖最后由 hi55234 于 2014-9-19 18:06 编辑

这不是手势控制,而是距离控制吧~~~~~~~·

障碍物距离决定具体动作~~~

粗看逼格甚高,实际操作甚糟~~~~

真手势,至少也得模仿所谓魔术棒遥控的方式啊~~~~

如果用超声波,极限也就是节拍控制······
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 09:31:09 | 显示全部楼层
hi55234 发表于 2014-9-19 18:03
这不是手势控制,而是距离控制吧~~~~~~~·

障碍物距离决定具体动作~~~

哈哈~粗看逼格甚高,实际操作甚糟~~完美的解释了这个教程!

DIY的东西纯属娱乐,感兴趣的朋友可以互相学习交流下。
回复 支持 反对

使用道具 举报

发表于 2015-3-28 19:13:13 | 显示全部楼层
不用音乐扩展版    用MP3音乐播放模块怎么连线呢?
回复 支持 反对

使用道具 举报

发表于 2015-4-17 12:20:45 | 显示全部楼层
楼主 问一下 这个音箱是怎么连接到板子上的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-17 15:13:11 | 显示全部楼层
蓝色骨骨头 发表于 2015-4-17 12:20
楼主 问一下 这个音箱是怎么连接到板子上的

板子上已经带有音频输出接口了。直接捅上即可。
回复 支持 反对

使用道具 举报

发表于 2015-4-21 08:46:55 | 显示全部楼层
ITEAD创易工作室 发表于 2015-4-17 15:13
板子上已经带有音频输出接口了。直接捅上即可。

可是音箱的插口不是类似耳机孔那样的么 是不是还要转接线之类的 还有大神 如果想用按键控制音乐播放怎么做到啊
回复 支持 反对

使用道具 举报

发表于 2017-6-19 18:12:00 | 显示全部楼层
请问楼主,这个MP3板具体的型号是什么
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 12:17 , Processed in 0.056534 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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