DIY Arduino 安防报警系统:分步教程
本项目制作一款 Arduino 安防报警系统。可观看视频或阅读下方图文教程。 按 A 键后 10 秒进入布防。超声波传感器监测前方距离,有物体靠近(距离变化 >10cm)触发蜂鸣器报警。需输入 4 位密码解除(默认 1234,支持修改)。按 B 键进入修改密码菜单:先验证原密码,再录入新密码。密码错误提示重试。 Arduino 开发板、HC-SR04 超声波模块、LCD1602、蜂鸣器、4×4 矩阵键盘、面包板、杜邦线。 购买链接: 蜂鸣器接 PWM 引脚。4×4 键盘 8 根引脚(4 行 4 列),按键按下使对应行列短路。扫描原理:置某行低电平、其余行高,读列电平判断按键。超声波和 LCD 接法参考既往教程。 需安装 改密流程:按 B → 输入现密码(验证通过)→ 输入新密码(按 * 确认)→ 更新 完整代码见文末(含所有状态机逻辑)。 将所有元件装入塑料电工盒,接线固定,即得手持报警器成品。 项目完结。欢迎评论区提问交流!功能概述

所需元件

电路原理图


Arduino 代码详解
Keypad 库。定义引脚、状态变量、键盘映射、LCD 对象。#include <LiquidCrystal.h> #include <Keypad.h>
#define buzzer 8 #define trigPin 9 #define echoPin 10
long duration; int distance, initialDistance, currentDistance, i;
int screenOffMsg = 0;
String password = "1234"; String tempPassword;
boolean activated = false, isActivated, activateAlarm = false, alarmActivated = false;
boolean enteredPassword, passChangeMode = false, passChanged = false;
const byte ROWS = 4, COLS = 4;
char keypressed;
char keyMap[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} };
byte rowPins[ROWS] = {14,15,16,17}; // A0-A3
byte colPins[COLS] = {18,19,20,21}; // A4-A5 + 2个数字口
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
void setup() {
lcd.begin(16,2);
pinMode(buzzer, OUTPUT);
pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
}loop() 状态机三大分支:
activateAlarm): LCD 显示倒计时 9 秒,蜂鸣器滴滴响,结束后记录 initialDistance,置 alarmActivated=true。alarmActivated): 持续读取超声波距离,若 currentDistance + 10 < initialDistance 触发报警,调用 enterPassword()。!alarmActivated): 显示 "A - Activate / B - Change Pass"。按 A 进入布防,按 B 进入改密流程。void enterPassword() {
int k=5; tempPassword=""; activated=true;
lcd.clear(); lcd.setCursor(0,0); lcd.print(" *** ALARM *** ");
lcd.setCursor(0,1); lcd.print("Pass>");
while(activated) {
keypressed = myKeypad.getKey();
if (keypressed != NO_KEY) {
if (keypressed >= '0' && keypressed <= '9') {
tempPassword += keypressed; lcd.setCursor(k,1); lcd.print("*"); k++; tone(buzzer,2000,100);
}
if (k > 9 || keypressed == '#') { tempPassword=""; k=5; lcd.clear(); lcd.print(" *** ALARM *** "); lcd.setCursor(0,1); lcd.print("Pass>"); }
if (keypressed == '*') {
if (tempPassword == password) { activated=false; alarmActivated=false; noTone(buzzer); screenOffMsg=0; }
else { lcd.setCursor(0,1); lcd.print("Wrong! Try Again"); delay(2000); lcd.clear(); lcd.print(" *** ALARM *** "); lcd.setCursor(0,1); lcd.print("Pass>"); }
}
}
}
}password 变量 → 返回主菜单。// 超声波测距函数
long getDistance() {
digitalWrite(trigPin, LOW); delayMicroseconds(2);
digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2; // cm
}成品整理

制造工艺
- 基于 Arduino 与 Python 的可靠 RFID 考勤系统
- Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
- SERENA:基于 Arduino Mega 2560 与 TFT 触摸屏的多级密码报警系统
- 用 Arduino 和 433 MHz RF 模块测试报警系统安全性
- Arduino 音频频率检测:基于 FFT 测量最响亮声音峰值
- 基于 1Sheeld 的智能家居安防系统:语音/短信控制与入侵报警
- Arduino 井字棋游戏:MAX7219 点阵屏 + 纸板外壳 DIY
- Arduino DIY 电压表:Nokia 5110 屏幕显示,手把手教学
- 使用 SparkFun 7 段数码管构建可靠的 Arduino 倒计时器
- 智能地下室通风系统:Arduino 驱动的湿度自动控制
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机