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

Arduino 超声波安防系统:HC-SR04 实时测距 + 多级声光报警

项目概览

基于 Arduino UNO 与 HC-SR04 超声波测距模块,构建分级安防演示系统:绿灯(>50 cm 安全) → 黄灯(20~50 cm 警戒) → 红灯+蜂鸣器(<20 cm 入侵)。适合初学者理解超声波测距原理、pulseIn() 计时、非阻塞 LED/蜂鸣器控制。

元件清单

元件数量接线
Arduino UNO1
HC-SR04 超声波模块1VCC→5V, Trig→D2, Echo→D3, GND→GND
红/黄/绿 LED各 1阳极接 D4/D5/D6,阴极串 220 Ω 接 GND
无源蜂鸣器1正极接 D7,负极接 GND(建议串 220 Ω 降音量)
面包板、跳线1套

接线图解


       HC-SR04                    Arduino UNO
    ┌─────────┐                 ┌───────────┐
    │ VCC ────┼─────────────────│ 5V        │
    │ Trig ───┼─────────────────│ D2        │
    │ Echo ───┼─────────────────│ D3        │
    │ GND ────┼─────────────────│ GND       │
    └─────────┘                 └───────────┘

LED 阳极 → D4(红) / D5(黄) / D6(绿) → 220Ω → GND
Buzzer + → D7 → (220Ω) → GND

核心代码(已修复原文变量名错误)


#define TRIG_PIN 2
#define ECHO_PIN 3
#define LED_GREEN 4
#define LED_YELLOW 5
#define LED_RED 6
#define BUZZER_PIN 7

void setup() {
  Serial.begin(9600);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  pinMode(LED_GREEN, OUTPUT);
  pinMode(LED_YELLOW, OUTPUT);
  pinMode(LED_RED, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
}

void loop() {
  // 1. 触发测距
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // 2. 读取回波脉宽
  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // 30 ms 超时 ≈ 5 m
  float distance_cm = duration * 0.0343 / 2;      // 声速 343 m/s

  // 3. 分级逻辑
  bool inRange = (distance_cm > 0 && distance_cm <= 400); // HC-SR04 有效量程
  
  digitalWrite(LED_GREEN,  inRange && distance_cm > 50);
  digitalWrite(LED_YELLOW, inRange && distance_cm <= 50 && distance_cm > 20);
  digitalWrite(LED_RED,    inRange && distance_cm <= 20);

  // 4. 蜂鸣器:入侵区间内发声,频率随距离升高
  if (inRange && distance_cm <= 20) {
    int freq = map(distance_cm, 1, 20, 2000, 500); // 1 cm→2kHz, 20 cm→500Hz
    tone(BUZZER_PIN, freq);
  } else {
    noTone(BUZZER_PIN);
  }

  // 5. 串口调试
  if (inRange) {
    Serial.print(distance_cm); Serial.println(F(" cm"));
  } else {
    Serial.println(F("Out of range"));
  }
  delay(100); // 10 Hz 刷新率
}

关键知识点解析

  1. 超声波测距公式:distance = duration * 0.0343 / 2(单位 cm),0.0343 = 声速 343 m/s 转 cm/µs。
  2. pulseIn() 超时参数:第三个参数防止死锁,30000 µs 对应 5.14 m,超出量程直接返回 0。
  3. 分级阈值滞回:实际部署建议在 20/50 cm 增加 ±2 cm 滞回,避免临界点灯光闪烁。
  4. 蜂鸣器保护:无源蜂鸣器直驱电流大,**必须串联 220 Ω** 或用三极管驱动,否则烧毁 GPIO。
  5. 供电稳定性:HC-SR04 工作电流峰值 ~15 mA,UNO 5V 引脚可直接供电;若接多模块请外接 5V 稳压。

常见故障排查

现象可能原因对策
串口持续打印 0 / Out of rangeEcho 引脚未接触良好 / 超时检查杜邦线、焊点;增大 pulseIn 超时
读数跳变 > 10 cm供电纹波 / 多径反射模块 VCC/GND 并联 10 µF 电解 + 0.1 µF 陶瓷电容
蜂鸣器无声/极弱无源蜂鸣器极性反 / 无限流电阻确认正负极,串联 220 Ω
LED 全亮/全灭公共阴极/阳极接线错误万用表二极管档测 LED 极性

进阶扩展


安全提示:蜂鸣器音量可达 85 dB,近距离测试请佩戴耳塞;HC-SR04 盲区 < 2 cm,勿用于精密避障。

制造工艺

  1. ESP32-CAM 运动检测安防相机,推送照片到 Discord
  2. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  3. 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
  4. ATtiny85 迷你街机:贪吃蛇 — 打造掌上 OLED 游戏机
  5. 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
  6. 基于 1Sheeld 的智能家居安防系统:语音/短信控制与入侵报警
  7. Arduino Nano 驱动的智能家居植物自动浇水系统
  8. 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
  9. Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
  10. 使用 Arduino 移位寄存器创建绚丽灯光序列
  11. 智能插座:基于 Arduino 与 RTC 的 120V 定时开关插座
  12. DIY 双轴太阳能跟踪系统——基于 Arduino UNO