Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Projet de système de sécurité et d'alarme Arduino

Dans ce projet, nous apprendrons comment créer un système de sécurité et d'alarme Arduino. Vous pouvez regarder la vidéo suivante ou lire le didacticiel écrit ci-dessous.

Aperçu

L'alarme s'active 10 secondes après avoir appuyé sur le bouton A. Pour détecter des objets, il utilise un capteur à ultrasons, et une fois que l'alarme détecte quelque chose, un buzzer commence à émettre un son. Pour arrêter l'alarme, nous devons insérer un mot de passe à 4 chiffres. Le mot de passe prédéfini est 1234 mais nous avons également la possibilité de le modifier.

En appuyant sur le bouton B, nous entrons dans le menu de changement de mot de passe où nous devons d'abord entrer le mot de passe actuel afin de continuer, puis entrer le nouveau mot de passe à 4 chiffres. Une fois le mot de passe modifié, la prochaine fois que nous activerons l'alarme, nous ne pourrons arrêter l'alarme qu'en entrant le nouveau mot de passe. Si nous saisissons un mauvais mot de passe, nous recevrons un message indiquant que nous devons réessayer.

Composants requis

Voyons maintenant les composants requis pour ce projet. Évidemment, nous avons besoin d'une carte Arduino, d'un capteur à ultrasons, d'un écran LCD, d'un buzzer et d'un clavier 4×4.

Vous pouvez obtenir les composants nécessaires pour ce projet Arduino à partir des liens ci-dessous :

  • Clavier …………………………………….. 
  • LCD 16×2 ………………………………………….
  • Capteur à ultrasons ……………………… 
  • Sonnerie ………………………………………
  • Carte Arduino …………………………..
  • Breadboard et Jump Wires ……… 

Schémas du circuit du système d'alarme Arduino


Voici les schémas du circuit.

Donc, pour le buzzer, nous n'avons besoin que d'une seule broche, mais une avec le support PWM. Le clavier 4 × 4 a 8 broches, 4 d'entre elles sont pour les lignes et 4 pour les colonnes du clavier. Chaque bouton est en fait un interrupteur à bouton-poussoir qui crée un court-circuit entre une ligne et une colonne lorsqu'il est enfoncé.

Ainsi, par exemple, si nous définissons la ligne 1 en bas et toutes les lignes de colonne en haut, lorsque nous appuierons, par exemple, sur le bouton 3, en raison du court entre les deux lignes, la ligne de la colonne 3 tombera en bas donc dans un tel cas, nous pouvons enregistrer que le bouton 3 a été enfoncé.

En ce qui concerne les deux autres composants de ce projet, le capteur à ultrasons et l'écran LCD, vous pouvez consulter mes précédents tutoriels détaillés sur la façon de les connecter et de les utiliser.

Code source du système d'alarme Arduino


Voyons ensuite le code Arduino. Comme le code est un peu plus long, pour une meilleure compréhension, je posterai le code source du programme dans des sections avec une description pour chaque section. Et à la fin de cet article, je publierai le code source complet.

Nous devons donc inclure la bibliothèque LiquidCrystal standard pour l'écran LCD et la bibliothèque du clavier qui doit être installée en plus. Ensuite, nous devons définir le buzzer et les broches du capteur à ultrasons, définir certaines variables nécessaires au programme, définir les touches du clavier, ainsi que créer les deux objets pour le clavier et l'écran LCD.

#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)

Dans la section de configuration, nous avons juste besoin d'initialiser l'écran LCD et de définir les modes de broche pour le buzzer et le capteur à ultrasons.

Dans la section boucle, nous vérifions d'abord si l'alarme est activée ou non. Donc, si l'alarme n'est pas activée, sur l'écran LCD, nous aurons l'écran d'accueil du programme qui propose deux options, A pour activer l'alarme et B pour changer le mot de passe. Ensuite, en utilisant la fonction myKeypad.getKey(), nous lisons quel bouton du clavier a été enfoncé et si c'est le bouton A, le buzzer produira un son de 200 millisecondes et la variable activateAlarm deviendra vraie.

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)

Dans ce cas, sur l'écran LCD, nous imprimerons le message "L'alarme sera activée dans", et en utilisant une boucle while, nous ferons un compte à rebours de 9 secondes avant que l'alarme ne soit activée. Ensuite, le message "Alarme activée" apparaîtra et nous mesurerons la distance initiale entre notre dispositif d'alarme et les objets en face de lui.

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)

Donc, la prochaine étape est que le capteur à ultrasons vérifiera en permanence si la distance actuellement mesurée est inférieure à la distance initiale, corrigée d'une valeur de 10 cm, et si c'est vrai, cela signifie qu'un objet est apparu devant le capteur et l'alarme sera activé. La fonction tune() activera le buzzer et la fonction personnalisée enterPassword() sera appelée.

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

Cette fonction personnalisée imprimera un message indiquant que l'alarme est activée et que nous devons entrer un mot de passe pour arrêter l'alarme. Ainsi, en utilisant la boucle while suivante, nous vérifions constamment si nous avons appuyé sur un bouton du clavier, et chaque pression sur un bouton est ajoutée à la variable tempPassword. Si nous entrons plus de 4 chiffres ou si nous appuyons sur le bouton dièse, les chiffres saisis précédemment seront effacés afin que nous puissions les retaper depuis le début.

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)

D'autre part, si nous appuyons sur le bouton astérisque, nous vérifierons si le mot de passe actuellement saisi est le même que le mot de passe initialement défini. Si c'est vrai, l'alarme sera désactivée, le buzzer cessera de produire du son et nous reviendrons à l'écran d'accueil. Mais si nous avons entré un mot de passe erroné, le message «Wrong! Réessayer!" apparaîtra et nous devrons réessayer de saisir le mot de passe correct.

Pour changer le mot de passe, nous utilisons une méthode similaire. Ici, nous devons d'abord entrer le mot de passe actuel afin de pouvoir définir un nouveau mot de passe.

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)

Voici le code source complet du système d'alarme Arduino :

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

Touche finale


Pour terminer le projet, j'ai utilisé une boîte électrique en plastique dans laquelle j'ai installé tous les composants et les ai mis en contact ensemble.

C'est tout, j'espère que vous avez apprécié ce projet et n'hésitez pas à poser toute question dans la section des commentaires ci-dessous.


Processus de fabrication

  1. Système de présence utilisant Arduino et RFID avec Python
  2. Animation LCD et jeux
  3. Système d'alarme Arduino :SERENA
  4. La sécurité du système d'alarme mise à l'épreuve
  5. Détecteur de fréquence audio
  6. Système de domotique et de sécurité intelligent utilisant 1Sheeld
  7. Tech-TicTacToe
  8. Voltmètre DIY avec Arduino et un écran Nokia 5110
  9. compte à rebours Arduino