Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Sicherheits- und Alarmsystemprojekt

In diesem Projekt lernen wir, wie man ein Arduino-Sicherheits- und Alarmsystem herstellt. Sie können sich das folgende Video ansehen oder das schriftliche Tutorial unten lesen.

Übersicht

Der Alarm wird 10 Sekunden nach dem Drücken der A-Taste aktiviert. Zur Erkennung von Objekten wird ein Ultraschallsensor verwendet, und sobald der Alarm etwas erkennt, beginnt ein Summer, einen Ton abzugeben. Um den Alarm zu stoppen, müssen wir ein 4-stelliges Passwort eingeben. Das voreingestellte Passwort ist 1234, aber wir haben auch die Möglichkeit, es zu ändern.

Durch Drücken der B-Taste gelangen wir in das Passwortänderungsmenü, wo wir zuerst das aktuelle Passwort eingeben müssen, um fortzufahren, und dann das neue 4-stellige Passwort eingeben. Sobald das Passwort geändert wurde, können wir bei der nächsten Aktivierung des Alarms den Alarm nur durch Eingabe des neuen Passworts stoppen. Wenn wir ein falsches Passwort eingeben, erhalten wir eine Nachricht, dass wir es erneut versuchen müssen.

Erforderliche Komponenten

Sehen wir uns nun die erforderlichen Komponenten für dieses Projekt an. Offensichtlich brauchen wir ein Arduino-Board, einen Ultraschallsensor, ein LCD-Display, einen Summer und eine 4×4-Tastatur.

Die für dieses Arduino-Projekt benötigten Komponenten erhalten Sie über die folgenden Links:

  • Tastatur …………………………………….. 
  • LCD 16×2 ………………………………….
  • Ultraschallsensor ……………………… 
  • Summer ………………………………………
  • Arduino-Board …………………………..
  • Steckbrett und Schaltdrähte ……… 

Schaltpläne des Arduino-Alarmsystems


Hier ist der Schaltplan.

Für den Summer brauchen wir also nur einen einzigen Pin, aber einen mit PWM-Unterstützung. Die 4×4-Tastatur hat 8 Pins, 4 davon sind für die Zeilen und 4 davon für die Spalten der Tastatur. Jede Taste ist eigentlich ein Drucktastenschalter, der beim Drücken einen Kurzschluss zwischen einer Zeile und einer Spalte herstellt.

Wenn wir zum Beispiel die Zeile 1 niedrig und alle Spaltenzeilen hoch setzen, wenn wir zum Beispiel die Taste 3 drücken, wird die Zeile 3 aufgrund des Kurzschlusses zwischen den beiden Zeilen auf niedrig fallen in einem solchen Fall können wir registrieren, dass die Taste 3 gedrückt wurde.

Was die anderen beiden Komponenten in diesem Projekt betrifft, den Ultraschallsensor und das LCD-Display, können Sie meine vorherigen detaillierten Tutorials zum Anschließen und Verwenden dieser nachlesen.

Quellcode des Arduino-Alarmsystems


Als nächstes sehen wir uns den Arduino-Code an. Da der Code etwas länger ist, werde ich zum besseren Verständnis den Quellcode des Programms in Abschnitten mit Beschreibung für jeden Abschnitt veröffentlichen. Und am Ende dieses Artikels werde ich den vollständigen Quellcode posten.

Wir müssen also die Standard-LiquidCrystal-Bibliothek für das LCD und die Keypad-Bibliothek einbinden, die zusätzlich installiert werden muss. Dann müssen wir den Summer und die Pins des Ultraschallsensors definieren, einige Variablen definieren, die für das Programm benötigt werden, die Tasten der Tastatur definieren sowie die beiden Objekte für die Tastatur und das LCD erstellen.

#include <LiquidCrystal.h> // includes the LiquidCrystal Library #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; // State of the alarm boolean isActivated; boolean activateAlarm = false; boolean alarmActivated = false; boolean enteredPassword; // State of the entered password to stop the alarm boolean passChangeMode = false; boolean passChanged = false; const byte ROWS = 4; //four rows const byte COLS = 4; //four columns char keypressed; //define the cymbols on the buttons of the keypads 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}; //Row pinouts of the keypad byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) void setup() { lcd.begin(16,2); pinMode(buzzer, OUTPUT); // Set buzzer as an output pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input } Codesprache:Arduino (arduino)

Im Setup-Bereich müssen wir nur das LCD initialisieren und die Pin-Modi für den Summer und den Ultraschallsensor definieren.

Im Schleifenabschnitt prüfen wir zuerst, ob der Alarm aktiviert ist oder nicht. Wenn also der Alarm nicht aktiviert ist, haben wir auf dem LCD den Startbildschirm des Programms, das zwei Optionen bietet, A zum Aktivieren des Alarms und B zum Ändern des Passworts. Dann lesen wir mit der Funktion myKeypad.getKey(), welche Taste auf der Tastatur gedrückt wurde, und wenn dies die Taste A ist, erzeugt der Summer einen 200-Millisekunden-Ton und die activateAlarm-Variable wird wahr.

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'){        //If A is pressed, activate the alarm
      tone(buzzer, 1000, 200);
      activateAlarm = true;            
    } Codesprache:Arduino (arduino) 

In diesem Fall drucken wir auf dem LCD die Meldung „Alarm wird aktiviert in“, und mit einer While-Schleife führen wir einen Countdown von 9 Sekunden durch, bevor der Alarm aktiviert wird. Dann erscheint die Meldung „Alarm aktiviert“ und wir messen die Anfangsentfernung von unserem Alarmgerät zu den gegenüberliegenden Objekten.

if (activateAlarm) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm will be");
    lcd.setCursor(0,1);
    lcd.print("activated in");
   
    int countdown = 9; // 9 seconds count down before activating the alarm
    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;
  } Codesprache:Arduino (arduino) 

Im nächsten Schritt prüft der Ultraschallsensor also ständig, ob der aktuell gemessene Abstand kleiner ist als der um 10 cm korrigierte Anfangsabstand, und wenn das stimmt, ist ein Objekt vor dem Sensor und dem Alarm aufgetaucht wird aktiviert. Die Funktion tune() aktiviert den Summer und die benutzerdefinierte Funktion enterPassword() wird aufgerufen.

if (alarmActivated == true){
      currentDistance = getDistance() + 10;
      if ( currentDistance < initialDistance) {
        tone(buzzer, 1000); // Send 1KHz sound signal 
        lcd.clear();
        enterPassword();
      }
    } Codesprache:Arduino (arduino) 

Diese benutzerdefinierte Funktion druckt eine Nachricht, dass der Alarm aktiviert ist und dass wir ein Passwort eingeben müssen, um den Alarm zu stoppen. Mit der nächsten While-Schleife prüfen wir also ständig, ob wir eine Taste auf der Tastatur gedrückt haben, und jeder Tastendruck wird der Variable tempPassword hinzugefügt. Wenn wir mehr als 4 Ziffern eingeben oder die Kreuztaste drücken, werden die zuvor eingegebenen Ziffern gelöscht, sodass wir sie erneut von Anfang an eingeben können.

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 == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
          tempPassword += keypressed;
          lcd.setCursor(k,1);
          lcd.print("*");
          k++;
        }
      }
      if (k > 9 || keypressed == '#') {
        tempPassword = "";
        k=5;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(" *** ALARM *** ");
        lcd.setCursor(0,1);
        lcd.print("Pass>");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmActivated = false;
          noTone(buzzer);
          screenOffMsg = 0; 
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("Wrong! Try Again");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print(" *** ALARM *** ");
          lcd.setCursor(0,1);
          lcd.print("Pass>");
        }
      }    
    }
} Codesprache:Arduino (arduino) 

Wenn wir andererseits die Sternchen-Taste drücken, prüfen wir, ob das aktuell eingegebene Passwort mit dem ursprünglich festgelegten Passwort übereinstimmt. Wenn dies zutrifft, wird der Alarm deaktiviert, der Summer hört auf zu tönen und wir kehren zum Startbildschirm zurück. Aber wenn wir ein falsches Passwort eingegeben haben, wird die Meldung „Falsch! Versuch es noch einmal!" erscheint und wir müssen erneut versuchen, das richtige Passwort einzugeben.

Zum Ändern des Passworts verwenden wir eine ähnliche Methode. Hier müssen wir zuerst das aktuelle Passwort eingeben, um ein neues Passwort setzen zu können.

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 == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || 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.setCursor(0,0);
        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.setCursor(0,0);
          lcd.print("Set New Password");
          lcd.setCursor(0,1);
          lcd.print(">");
          while(passChangeMode) {
            keypressed = myKeypad.getKey();
            if (keypressed != NO_KEY){
              if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                  keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                  keypressed == '8' || 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.setCursor(0,0);
              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;
            }            
          }
        }
      }
    }
   } Codesprache:Arduino (arduino) 

Hier ist der vollständige Quellcode des Arduino-Alarmsystems:

/*
* Arduino Security and Alarm System
*
* by Dejan Nedelkovski,
* www.HowToMechatronics.com
*
*/

#include <LiquidCrystal.h> // includes the LiquidCrystal Library 
#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; // State of the alarm
boolean isActivated;
boolean activateAlarm = false;
boolean alarmActivated = false;
boolean enteredPassword; // State of the entered password to stop the alarm
boolean passChangeMode = false;
boolean passChanged = false;

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//define the cymbols on the buttons of the keypads
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}; //Row pinouts of the keypad
byte colPins[COLS] = {18, 19, 20, 21}; //Column pinouts of the keypad

Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS); 
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 

void setup() { 
  lcd.begin(16,2); 
  pinMode(buzzer, OUTPUT); // Set buzzer as an output
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}

void loop() {
  if (activateAlarm) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Alarm will be");
    lcd.setCursor(0,1);
    lcd.print("activated in");
   
    int countdown = 9; // 9 seconds count down before activating the alarm
    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;
  }

  if (alarmActivated == true){
      currentDistance = getDistance() + 10;
      if ( currentDistance < initialDistance) {
        tone(buzzer, 1000); // Send 1KHz sound signal 
        lcd.clear();
        enterPassword();
      }
    }

  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'){        //If A is pressed, activate the alarm
      tone(buzzer, 1000, 200);
      activateAlarm = true;            
    }
    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 == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || 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.setCursor(0,0);
        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.setCursor(0,0);
          lcd.print("Set New Password");
          lcd.setCursor(0,1);
          lcd.print(">");
          while(passChangeMode) {
            keypressed = myKeypad.getKey();
            if (keypressed != NO_KEY){
              if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' ||
                  keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
                  keypressed == '8' || 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.setCursor(0,0);
              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;
            }            
          }
        }
      }
    }
   }
 }
}

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 == '1' || keypressed == '2' || keypressed == '3' ||
            keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' ||
            keypressed == '8' || keypressed == '9' ) {
          tempPassword += keypressed;
          lcd.setCursor(k,1);
          lcd.print("*");
          k++;
        }
      }
      if (k > 9 || keypressed == '#') {
        tempPassword = "";
        k=5;
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print(" *** ALARM *** ");
        lcd.setCursor(0,1);
        lcd.print("Pass>");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmActivated = false;
          noTone(buzzer);
          screenOffMsg = 0; 
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("Wrong! Try Again");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print(" *** ALARM *** ");
          lcd.setCursor(0,1);
          lcd.print("Pass>");
        }
      }    
    }
}
// Custom function for the Ultrasonic sensor
long getDistance(){
  //int i=10;
  
  //while( i<=10 ) {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);

  // Calculating the distance
  distance = duration*0.034/2;
  //sumDistance += distance;
  //}
  //int averageDistance= sumDistance/10;
  return distance;

}
 Codesprache:Arduino (arduino) 

Letzter Schliff


Zur Fertigstellung des Projekts habe ich eine elektrische Kunststoffbox verwendet, in der ich alle Komponenten montiert und miteinander kontaktiert habe.

Das ist alles, ich hoffe, Ihnen hat dieses Projekt gefallen, und Sie können gerne Fragen im Kommentarbereich unten stellen.


Herstellungsprozess

  1. Anwesenheitssystem mit Arduino und RFID mit Python
  2. LCD-Animation und -Spiele
  3. Arduino-Alarmsystem:SERENA
  4. Alarmsystemsicherheit auf dem Prüfstand
  5. Audiofrequenzdetektor
  6. Smart Home Automation und Sicherheitssystem mit 1Sheeld
  7. Tech-TicTacToe
  8. DIY Voltmeter mit Arduino und einem Nokia 5110 Display
  9. Arduino-Countdown-Timer
  10. Keller-/Kriechraum-Lüftungssystem