工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

概要

Arduinoでセキュリティアラームシステムを構築します。Aボタン押下後10秒で警戒開始。超音波センサーで物体検知するとブザー鳴動。4桁パスワード(初期値1234)入力で解除可能。Bボタンでパスワード変更モード(現在のパスワード入力後、新パスワード設定)。

Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

パスワード間違い時は「Wrong! Try Again」表示で再入力待ち。電池駆動も可能なコンパクトな防犯デバイスです。

必要な部品

Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

回路図


Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

ブザーはPWM対応ピン1本で駆動。4×4キーパッドは8ピン(行4、列4)。各キーは行と列をショートさせるタクトスイッチ。例えば行1をLOW、全列をHIGHにし、キー「3」押下で列3がLOWになるのを検出する方式。

Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

超音波センサーとLCDの接続詳細は過去の詳細チュートリアルを参照してください。

Arduinoコード解説

LiquidCrystal標準ライブラリと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;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean passChangeMode = false;
boolean passChanged = false;

const byte ROWS = 4; const byte 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,3等
Keypad myKeypad = Keypad(makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // (rs, en, d4, d5, d6, d7)

void setup() {
  lcd.begin(16,2);
  pinMode(buzzer, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

loop()メインフロー:

1. アラーム非作動時:ホーム画面表示

「A - Activate」「B - Change Pass」表示。キーパッド読み取りで'A'ならブザー短音、activateAlarm=true。


if (!alarmActivated) {
  if (screenOffMsg == 0) {
    lcd.clear(); lcd.setCursor(0,0); lcd.print("A - Activate");
    lcd.setCursor(0,1); lcd.print("B - Change Pass");
    screenOffMsg = 1;
  }
  keypressed = myKeypad.getKey();
  if (keypressed == 'A') { tone(buzzer, 1000, 200); activateAlarm = true; }
}

2. 作動カウントダウン(9秒)

activateAlarm=trueなら「Alarm will be activated in」表示、9→1秒カウントダウン(ブザー短音付き)。完了で「Alarm Activated!」、初期距離取得、alarmActivated=true。


if (activateAlarm) {
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Alarm will be");
  lcd.setCursor(0,1); lcd.print("activated in");
  int countdown = 9;
  while (countdown != 0) {
    lcd.setCursor(13,1); lcd.print(countdown); countdown--;
    tone(buzzer, 700, 100); delay(1000);
  }
  lcd.clear(); lcd.setCursor(0,0); lcd.print("Alarm Activated!");
  initialDistance = getDistance();
  activateAlarm = false; alarmActivated = true;
}

3. 警戒中:超音波センサー監視

現在距離+10cm補正 < 初期距離 なら物体検知と判定。ブザー連続鳴動、enterPassword()呼び出し。


if (alarmActivated) {
  currentDistance = getDistance() + 10;
  if (currentDistance < initialDistance) {
    tone(buzzer, 1000); lcd.clear(); enterPassword();
  }
}

4. パスワード入力画面

「*** ALARM *** / Pass>」表示。キーパッドで数字入力(画面は*表示)。4桁超えや'#'でクリア。'*'押下で照合:一致ならアラーム解除(noTone、フラグリセット、ホーム画面戻り)、不一致なら「Wrong! Try Again」2秒表示後再入力待ち。


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++;
      }
    }
    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>"); }
    }
  }
}

5. パスワード変更モード(Bボタン)

現在のパスワード入力→一致なら新パスワード入力→'*'で確定・保存。入力桁数オーバーや'#'でクリア。同じくブザー音でフィードバック。


else if (keypressed == 'B') {
  lcd.clear(); int i=1; tone(buzzer,2000,100); tempPassword="";
  lcd.setCursor(0,0); lcd.print("Current Password"); lcd.setCursor(0,1); lcd.print(">");
  passChangeMode=true; passChanged=true;
  while(passChanged) {
    keypressed = myKeypad.getKey();
    if (keypressed != NO_KEY) {
      if (keypressed >= '0' && keypressed <= '9') { tempPassword+=keypressed; lcd.setCursor(i,1); lcd.print("*"); i++; tone(buzzer,2000,100); }
    }
    if (i>5 || keypressed=='#') { tempPassword=""; i=1; lcd.clear(); lcd.print("Current Password"); lcd.setCursor(0,1); lcd.print(">"); }
    if (keypressed=='*') {
      i=1; tone(buzzer,2000,100);
      if (password == tempPassword) {
        tempPassword=""; lcd.clear(); lcd.print("Set New Password"); lcd.setCursor(0,1); lcd.print(">");
        while(passChangeMode) {
          keypressed = myKeypad.getKey();
          if (keypressed != NO_KEY) {
            if (keypressed >= '0' && keypressed <= '9') { tempPassword+=keypressed; lcd.setCursor(i,1); lcd.print("*"); i++; tone(buzzer,2000,100); }
          }
          if (i>5 || keypressed=='#') { tempPassword=""; i=1; tone(buzzer,2000,100); lcd.clear(); lcd.print("Set New Password"); lcd.setCursor(0,1); lcd.print(">"); }
          if (keypressed=='*') { i=1; tone(buzzer,2000,100); password=tempPassword; passChangeMode=false; passChanged=false; screenOffMsg=0; }
        }
      }
    }
  }
}

超音波距離測定関数


long getDistance() {
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = duration * 0.034 / 2;
  return distance;
}

完全なソースコード

記事末尾に完全版コード掲載(上記全セクション統合版)

仕上げ


プラスチック電気ボックスに全部品を収納・配線して完成。

Arduinoセキュリティ&アラームシステムの自作:ステップバイステップチュートリアル

シンプルですが実用的なアラームシステムです。質問はコメント欄へどうぞ。

製造プロセス

  1. Python連携で信頼性向上: Arduino RFID勤怠管理システム
  2. Arduino UNOで作るLCDアニメーション&ゲーム入門
  3. SERENA:Arduino Mega 2560とTFT LCDタッチスクリーン搭載カスタムアラームシステム
  4. ArduinoとRFモジュールでアラームシステムのセキュリティを評価する
  5. Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
  6. 1Sheeldで作るスマートホーム自動化&セキュリティシステム
  7. Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
  8. ArduinoとNokia 5110ディスプレイで自作電圧計:ステップバイステップガイド
  9. SparkFun 7セグメントディスプレイで作る信頼性の高いArduinoカウントダウンタイマー
  10. スマート地下室換気システム:Arduinoで湿度制御
  11. Python 3からArduino UNOを制御 – シリアル通信でLED点滅デモ