查看: 4873|回复: 7

使用超声波用手势控制arduino音乐播放

[复制链接]
  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-9-19 14:48:17 | 显示全部楼层 |阅读模式
    分享到:
    手势控制音乐.jpg

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

    需要用到的配件:

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

    实物硬件连接如下:

    音乐4.jpg

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

    音乐2.jpg

    烧写以下代码到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扩展板读取的时候好像是相反的,切换上下首的顺序相反。如果介意的话可以把程序里的上下首切换的距离反过来。

    音乐3.jpg

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

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

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-21 11:32
  • 签到天数: 409 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-19 16:09:19 | 显示全部楼层
    沙发,欣赏一下~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-7-16 10:04
  • 签到天数: 530 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-20 00:34:30 | 显示全部楼层
    不错啊,学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-9-20 10:00:35 | 显示全部楼层
    newbobde163 发表于 2014-9-20 00:34
    不错啊,学习一下

    万能的超声波
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-7-16 10:04
  • 签到天数: 530 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-20 22:35:42 | 显示全部楼层
    ITEAD创易工作室 发表于 2014-9-20 10:00
    万能的超声波

    我还是想利用两个超声波分别组成一个xy坐标系,当手在特定的操作区域的时间才能触发控制
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-7-18 09:38
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-9-22 09:15:09 | 显示全部楼层
    newbobde163 发表于 2014-9-20 22:35
    我还是想利用两个超声波分别组成一个xy坐标系,当手在特定的操作区域的时间才能触发控制 ...

    当然可以的。教小朋友变魔术倒是不错的。
    超声波精度方面还要考虑下。
    可以参考这个帖子:(HC-SR04对比SDM-IO)串口LCD1602显示超声波测距
    https://www.cirmall.com/bbs/foru ... 6&fromuid=63583

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-7-16 10:04
  • 签到天数: 530 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-22 23:58:06 | 显示全部楼层
    ITEAD创易工作室 发表于 2014-9-22 09:15
    当然可以的。教小朋友变魔术倒是不错的。
    超声波精度方面还要考虑下。
    可以参考这个帖子:(HC-SR04对 ...

    看了楼主的对比测试,另外一个确实是好一点,以后可以考虑一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-4-16 13:43:30 | 显示全部楼层
    你好,我有问题想请教一下,方便把QQ号给我么?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-26 09:50 , Processed in 0.176261 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.