亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino + 超声波传感器打造交互式 MP3 播放器:三种模式进阶教程

项目简介

本项目结合 Catalex 串口 MP3 模块与 HC-SR04 超声波测距传感器,实现三种不同交互模式的 MP3 播放器:

  1. 简单距离触发:检测到物体靠近 50 cm 内即播放指定曲目。
  2. 扰动触发:不关心绝对距离,仅检测连续两次读数差值超过阈值 (默认 20 cm) 即播放,适合"惊吓"或互动装置。
  3. 双传感器方向感应:并排安装两个 HC-SR04,通过比较两侧距离变化先后判断移动方向,播放"你好"/"再见"等不同语音。

所有代码基于 SoftwareSerial 与 MP3 模块通信,无需额外库,极易移植。

硬件清单

接线说明

模块引脚Arduino 引脚备注
MP3 RXD5 (Arduino TX→SoftwareSerial)通过 1k/2k 分压降至 3.3V
MP3 TXD6 (Arduino RX→SoftwareSerial)直连
HC-SR04 Trig (第1个)D13
HC-SR04 Echo (第1个)D12
HC-SR04 Trig (第2个,模式3)D10
HC-SR04 Echo (第2个,模式3)D9
MP3 VCC/GND5V / GND
HC-SR04 VCC/GND5V / GND

核心代码结构

通用 MP3 指令发送函数

static int8_t Send_buf[8];
#define CMD_PLAY_WITHFOLDER 0x0F
#define DEV_TF 0x02

void sendCommand(int8_t cmd, int16_t dat) {
  delay(20);
  Send_buf[0]=0x7E; Send_buf[1]=0xFF; Send_buf[2]=0x06;
  Send_buf[3]=cmd; Send_buf[4]=0x00;
  Send_buf[5]=(int8_t)(dat>>8); Send_buf[6]=(int8_t)dat;
  Send_buf[7]=0xEF;
  for(uint8_t i=0;i<8;i++) mySerial.write(Send_buf[i]);
}

超声波测距函数 (通用)

long measureDistance(int trig, int echo) {
  digitalWrite(trig, LOW); delayMicroseconds(2);
  digitalWrite(trig, HIGH); delayMicroseconds(10);
  digitalWrite(trig, LOW);
  long dur = pulseIn(echo, HIGH);
  return (dur/2) / 29.1; // 单位 cm
}

模式 1:简单距离触发

void loop() {
  if (measureDistance(13,12) < 50) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0x0203); // 播放第2文件夹第3首
    delay(1000);
  }
  delay(300);
}

模式 2:扰动触发 (单传感器)

int firstTime=0; long Distance, auxDistance, gap=0;
void loop() {
  Distance = measureDistance(13,12);
  gap = abs(Distance - auxDistance);
  if (firstTime==0) { auxDistance=Distance; gap=0; firstTime++; delay(1000); }
  if (gap > 20) {
    sendCommand(CMD_PLAY_WITHFOLDER, 0x0201);
    firstTime=0; delay(2000);
  }
  auxDistance = Distance; delay(300);
}

模式 3:双传感器方向感应

long Distance, auxDistance, gap=0;
long Distance2, auxDistance2, gap2=0;
int firstTime=0;

void loop() {
  Distance  = measureDistance(13,12);
  Distance2 = measureDistance(10,9);
  gap  = abs(Distance  - auxDistance);
  gap2 = abs(Distance2 - auxDistance2);

  if (firstTime==0) { auxDistance=Distance; auxDistance2=Distance2; gap=gap2=0; firstTime++; delay(2000); }

  if (gap>20 && gap2<20) {  // 右侧变化大 → 物体从左向右
    sendCommand(CMD_PLAY_WITHFOLDER, 0x0201); // "Hello"
    Serial.println("RIGHT MOVEMENT DETECTED");
    firstTime=0; delay(2000);
  }
  if (gap2>20 && gap<20) {  // 左侧变化大 → 物体从右向左
    sendCommand(CMD_PLAY_WITHFOLDER, 0x0202); // "Bye"
    Serial.println("LEFT MOVEMENT DETECTED");
    firstTime=0; delay(2000);
  }
  auxDistance=Distance; auxDistance2=Distance2; delay(300);
}

调试与扩展建议

原理图

项目提供 Fritzing 格式原理图:单传感器版与双传感器版,分别对应模式 1/2 与模式 3。

制造工艺

  1. 打造低成本家庭无线传感器网络:Arduino + 树莓派 + Xively 物联网平台
  2. K30 CO₂ 传感器:室内空气质量实时监测
  3. DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
  4. DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
  5. Arduino UNO 与 DFPlayer Mini 播放音频完整指南
  6. Arduino 网页控制 MP3 播放器:浏览器实现无线点歌
  7. Arduino Cloud 传感器塔:温度、动作与气体监测
  8. 基于 Arduino Nano 的智能运动感应水枪
  9. Arduino UNO + WiFi 盾板:串口实时推送温度到网页绘图
  10. 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
  11. Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY
  12. Arduino Nano 指纹传感器项目——分步教程