Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino beveiligings- en alarmsysteemproject

In dit project leren we hoe we een Arduino-beveiligings- en alarmsysteem kunnen maken. Je kunt de volgende video bekijken of de schriftelijke tutorial hieronder lezen.

Overzicht

Het alarm wordt geactiveerd in 10 seconden na het indrukken van de A-knop. Voor het detecteren van objecten gebruikt het een ultrasone sensor, en zodra het alarm iets detecteert, begint een zoemer een geluid af te geven. Om het alarm te stoppen, moeten we een wachtwoord van 4 cijfers invoeren. Het vooraf ingestelde wachtwoord is 1234, maar we hebben ook de mogelijkheid om het te wijzigen.

Door op de B-knop te drukken, gaan we naar het wachtwoordwijzigingsmenu waar we eerst het huidige wachtwoord moeten invoeren om door te gaan en vervolgens het nieuwe 4-cijferige wachtwoord invoeren. Zodra het wachtwoord is gewijzigd, kunnen we de volgende keer dat we het alarm activeren het alarm alleen stoppen door het nieuwe wachtwoord in te voeren. Als we een verkeerd wachtwoord invoeren, krijgen we een bericht dat we het opnieuw moeten proberen.

Vereiste componenten

Laten we nu de vereiste componenten voor dit project bekijken. Uiteraard hebben we een Arduino-bord, een ultrasone sensor, een LCD-scherm, een zoemer en een 4×4-toetsenbord nodig.

U kunt de benodigde componenten voor dit Arduino-project vinden via de onderstaande links:

  • Toetsenblok ………………………………….. 
  • LCD 16×2 ………………………………….
  • Ultrasone sensor ……………………… 
  • Zoemer ……………………………………
  • Arduino-bord …………………………..
  • Broodplank en springdraden ……… 

Arduino alarmsysteem circuitschema's


Hier zijn de circuitschema's.

Dus voor de zoemer hebben we slechts één pin nodig, maar wel één met PWM-ondersteuning. Het 4×4 toetsenbord heeft 8 pinnen, waarvan 4 voor de rijen en 4 voor de kolommen van het toetsenbord. Elke knop is eigenlijk een drukknopschakelaar die een kortsluiting maakt tussen een rij en een kolom wanneer erop wordt gedrukt.

Als we bijvoorbeeld rij 1 regel laag zetten en alle kolomregels hoog, wanneer we bijvoorbeeld op knop 3 drukken, vanwege de kortheid tussen de twee regels, zal kolom 3 regel naar laag zakken, dus in zo'n geval kunnen we registreren dat de knop 3 is ingedrukt.

Wat betreft de andere twee componenten van dit project, de ultrasone sensor en het LCD-scherm, kun je mijn eerdere gedetailleerde tutorials bekijken over hoe je ze kunt aansluiten en gebruiken.

Arduino Alarmsysteem Broncode


Laten we vervolgens de Arduino-code bekijken. Omdat de code wat langer is, zal ik voor een beter begrip de broncode van het programma in secties plaatsen met een beschrijving voor elke sectie. En aan het einde van dit artikel zal ik de volledige broncode posten.

We moeten dus de standaard LiquidCrystal-bibliotheek voor het LCD-scherm en de toetsenbordbibliotheek opnemen die bovendien moet worden geïnstalleerd. Vervolgens moeten we de zoemer en de pinnen van de ultrasone sensor definiëren, enkele variabelen definiëren die nodig zijn voor het programma, de toetsen van het toetsenbord definiëren en de twee objecten voor het toetsenbord en het LCD-scherm maken.

#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
}Code language: Arduino (arduino)

In het setup-gedeelte hoeven we alleen het LCD-scherm te initialiseren en de pin-modi voor de zoemer en de ultrasone sensor te definiëren.

In het lusgedeelte controleren we eerst of het alarm is geactiveerd of niet. Dus als het alarm niet is geactiveerd, hebben we op het LCD-scherm het startscherm van het programma dat twee opties biedt, A voor het activeren van het alarm en B voor het wijzigen van het wachtwoord. Vervolgens lezen we met de functie myKeypad.getKey() op welke knop van het toetsenbord is gedrukt en als dat knop A is, produceert de zoemer een geluid van 200 milliseconden en wordt de variabele activeAlarm waar.

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;            
    }Code language: Arduino (arduino)

In dat geval zullen we op het LCD-scherm het bericht "Alarm wordt geactiveerd in" afdrukken en met behulp van een while-lus tellen we af van 9 seconden voordat het alarm wordt geactiveerd. Dan verschijnt het bericht "Alarm geactiveerd" en meten we de initiële afstand van ons alarmapparaat tot de objecten er tegenover.

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;
  }Code language: Arduino (arduino)

De volgende stap is dus dat de ultrasone sensor constant zal controleren of de momenteel gemeten afstand kleiner is dan de initiële afstand, gecorrigeerd met een waarde van 10 cms, en als dat waar is, betekent dit dat er een object voor de sensor en het alarm is verschenen zal worden geactiveerd. De functie tune() activeert de zoemer en de aangepaste functie enterPassword() wordt aangeroepen.

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

Deze aangepaste functie drukt een bericht af dat het alarm is geactiveerd en dat we een wachtwoord moeten invoeren om het alarm te stoppen. Dus met behulp van de volgende while-lus controleren we constant of we op een knop op het toetsenbord hebben gedrukt, en elke druk op de knop wordt toegevoegd aan de tempPassword-variabele. Als we meer dan 4 cijfers invoeren of op de scherpe toets drukken, worden de eerder ingevoerde cijfers gewist, zodat we ze vanaf het begin opnieuw kunnen typen.

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>");
        }
      }    
    }
}Code language: Arduino (arduino)

Aan de andere kant, als we op de asterisk-knop drukken, controleren we of het momenteel ingevoerde wachtwoord hetzelfde is als het oorspronkelijk ingestelde wachtwoord. Als dat waar is, wordt het alarm gedeactiveerd, stopt de zoemer met het produceren van geluid en gaan we terug naar het startscherm. Maar als we het wachtwoord verkeerd hebben ingevoerd, verschijnt het bericht "Fout! Probeer het nog eens!" verschijnt en we zullen opnieuw moeten proberen het juiste wachtwoord in te voeren.

Voor het wijzigen van het wachtwoord gebruiken we een vergelijkbare methode. Hier moeten we eerst het huidige wachtwoord invoeren om een ​​nieuw wachtwoord in te kunnen stellen.

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;
            }            
          }
        }
      }
    }
   }Code language: Arduino (arduino)

Hier is de volledige broncode van het Arduino Alarmsysteem:

/*
* 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;

}
Code language: Arduino (arduino)

Laatste aanraking


Voor de afwerking van het project heb ik een plastic elektriciteitskast gebruikt waarin ik alle componenten heb gemonteerd en met elkaar in contact heb gebracht.

Dat is alles, ik hoop dat je genoten hebt van dit project en voel je vrij om elke vraag te stellen in de opmerkingen hieronder.


Productieproces

  1. Aanwezigheidssysteem met Arduino en RFID met Python
  2. LCD-animatie en gaming
  3. Arduino Alarmsysteem:SERENA
  4. Alarmsysteembeveiliging op de proef gesteld
  5. Audiofrequentiedetector
  6. Smart Home Automation en beveiligingssysteem met 1Sheeld
  7. Tech-TicTacToe
  8. DIY voltmeter met Arduino en een Nokia 5110-display
  9. Arduino Countdown Timer
  10. Kelder/kruipruimte ventilatiesysteem
  11. Python3- en Arduino-communicatie