基于 Arduino 和超声波传感器的自动门控制系统
组件与物料
| Adafruit RGB 背光 LCD - 16x2 | ×1 |
| 超声波传感器 HC-SR04 (通用) | ×1 |
| 蜂鸣器 | ×1 |
| 直流电机 | ×1 |
| Arduino UNO | ×1 |
| 电机扩展板 (L293D) | ×1 |
| 杜邦线 (通用) | ×1 |
应用与在线服务
| Arduino IDE |
项目简介
如何使用超声波传感器 HR-SC04 实现自动开关门
本项目实现一套自动门开关系统。系统包含用于感应人或物体靠近门口的传感器。此类系统广泛应用于商场、超市等场所的自动门控制。
系统由 Arduino 单片机控制,包含直流电机(通过齿条齿轮驱动门扇滑动)、LCD 显示门状态、蜂鸣器在开门期间发声、以及控制器根据传感器检测结果控制门的开合。整套系统是一个运用机电一体化设计七步法设计的机电系统。
步骤 1:准备硬件材料与工具
LCD 和蜂鸣器非强制要求,仅为视觉和听觉提示门的开关状态。
材料清单:
- 安装有 Arduino IDE 的电脑
- Arduino 控制器(UNO、MEGA 均可,本项目选用低成本 UNO R3 用于学习及课程作业)
- HR-SC04 超声波传感器(作为接近传感器感应人/物到达门口)
工作原理:IO 口触发至少 10μs 高电平 → 模块自动发送 8 个 40kHz 方波并检测回波 → 若有回波,IO 输出高电平,高电平持续时间即为超声波往返时间 → 测试距离 = (高电平时间 × 声速 340m/s) / 2 - 12V 直流电机(额定电流 70mA,最大 250mA,工作电压 3-12V,扭矩 1.9 Kgf.cm,空载转速 170RPM,减速比 1:48)
- LCD:16×2 点阵
- 压电蜂鸣器
- 电机扩展板:L293D(四路大电流半 H 桥驱动器)
使用原因:直接用 9-12V 供电驱动电机会抽取大电流,若直连 Arduino 5V 引脚易烧毁单片机。电机扩展板相当于功率放大器,保护单片机。 - 机械结构件:用亚克力板制作带滑动门的房屋模型
- 杜邦线
- 电源
工具:万用表、电烙铁(非必需但推荐)
步骤 2:Arduino 程序
可下载附件 .ino 文件直接编译上传。


步骤 3:硬件连接
按原理图将所有硬件连接到 Arduino。附件原理图仅供参考,可根据实际板载引脚调整。最好参考我的程序确定引脚分配,如有疑问可联系我。



步骤 4:烧录程序并供电
将教程提供的 Arduino 草图上传至控制器。观看视频查看系统运行效果。
代码
Arduino 代码
#includeLiquidCrystal lcd(12, 11, 5, 8, 9, 1); const int trigPin = 7; const int echoPin = 4; const int mt_En_Pin1 = 2; const int mt_IN1_Pin2 = 3; const int mt_IN2_Pin3 = 6; int buzz = 10; long duration; int distance; void setup() { lcd.clear(); lcd.begin(16, 2); lcd.print("WELCOME"); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(mt_En_Pin1, OUTPUT); pinMode(mt_IN1_Pin2, OUTPUT); pinMode(mt_IN2_Pin3, OUTPUT); Serial.begin(9600); pinMode(buzz, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; if (distance <= 5) { digitalWrite(13, HIGH); delay(1000); digitalWrite(mt_En_Pin1, HIGH); analogWrite(mt_IN1_Pin2, 50); analogWrite(mt_IN2_Pin3, 0); delay(2000); analogWrite(mt_IN1_Pin2, 0); analogWrite(mt_IN2_Pin3, 0); delay(1000); tone(buzz, 1000); delay(1000); tone(buzz, 1000); delay(1000); noTone(buzz); delay(3000); lcd.clear(); lcd.setCursor(0,1); lcd.print("Please Enter"); delay(1000); analogWrite(mt_IN1_Pin2, 0); analogWrite(mt_IN2_Pin3, 50); delay(3000); } else { digitalWrite(13, LOW); digitalWrite(mt_En_Pin1, LOW); analogWrite(mt_IN1_Pin2, 50); analogWrite(mt_IN2_Pin3, 0); } }
自定义零件与外壳
连接硬件示意图

原理图
连接硬件原理图

制造工艺
- 用 Arduino 制作万能红外遥控器:分步指南
- DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- 自制可拳击的可编程键盘按钮:基于 Arduino 与压电元件的分步指南
- 互动 LED 矩阵门显:PIR 触发节日问候 + 待机特效
- 用 Arduino 测量地球质量:DIY 分步指南
- 非接触测温自动开门器:Arduino + 红外测温 + 舵机驱动
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- 手把手打造Arduino Nano喂食机器人
- 智能无钥匙门锁:Arduino + Android 蓝牙密码控制舵机开锁
- Arduino 实时数字罗盘:HMC5883L + Processing 可视化教程