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

DIY Arduino 安防报警系统:分步教程

本项目制作一款 Arduino 安防报警系统。可观看视频或阅读下方图文教程。

功能概述

按 A 键后 10 秒进入布防。超声波传感器监测前方距离,有物体靠近(距离变化 >10cm)触发蜂鸣器报警。需输入 4 位密码解除(默认 1234,支持修改)。按 B 键进入修改密码菜单:先验证原密码,再录入新密码。密码错误提示重试。

DIY Arduino 安防报警系统:分步教程

所需元件

Arduino 开发板、HC-SR04 超声波模块、LCD1602、蜂鸣器、4×4 矩阵键盘、面包板、杜邦线。

DIY Arduino 安防报警系统:分步教程

购买链接:

  • 矩阵键盘…………………
  • LCD 16×2…………………
  • 超声波传感器……………
  • 蜂鸣器………………………
  • Arduino 开发板……………
  • 面包板与杜邦线…………

电路原理图


DIY Arduino 安防报警系统:分步教程

蜂鸣器接 PWM 引脚。4×4 键盘 8 根引脚(4 行 4 列),按键按下使对应行列短路。扫描原理:置某行低电平、其余行高,读列电平判断按键。超声波和 LCD 接法参考既往教程。

DIY Arduino 安防报警系统:分步教程

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() 状态机三大分支:

  1. 布防倒计时(activateAlarm): LCD 显示倒计时 9 秒,蜂鸣器滴滴响,结束后记录 initialDistance,置 alarmActivated=true。
  2. 布防监测(alarmActivated): 持续读取超声波距离,若 currentDistance + 10 < initialDistance 触发报警,调用 enterPassword()。
  3. 待机菜单(!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>"); }
      }
    }
  }
}

改密流程:按 B → 输入现密码(验证通过)→ 输入新密码(按 * 确认)→ 更新 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
}

完整代码见文末(含所有状态机逻辑)。

成品整理


将所有元件装入塑料电工盒,接线固定,即得手持报警器成品。

DIY Arduino 安防报警系统:分步教程

项目完结。欢迎评论区提问交流!

制造工艺

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