Projet d'Exploration Informatique Index du Forum
Projet d'Exploration Informatique
Les élèves de 6TT Informatique vous présentent leurs projets de fin d'études
 
Projet d'Exploration Informatique Index du ForumFAQRechercherS’enregistrerConnexion

:: PEI - #26 FIN ! Alarme fonctionnelle ! ::

 
Poster un nouveau sujet   Répondre au sujet    Projet d'Exploration Informatique Index du Forum -> Les projets de l'année 2017-2018 ->
Sujet précédent :: Sujet suivant  
Auteur Message
Haytam
6TT-2017

Hors ligne

Inscrit le: 09 Jan 2017
Messages: 31
Localisation: Bxl
Masculin

MessagePosté le: Lun 28 Mai - 20:43 (2018)    Sujet du message: PEI - #26 FIN ! Alarme fonctionnelle ! Répondre en citant

Bonjour,


Cette semaine, j'ai terminé le développement de mon alarme !
Tout est fonctionnel pour la présentation dans une semaine.


Il ne me manque plus que la boite.










Voici le code en entier :


 
Code:






  /*
* Alarme Anti-Intrusion
* d'Haytam Oulad Omar
*/

//Importation des deux librairies pour l'écran ainsi que le clavier.
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

//On définit le port de l'écran et la taille de l'écran
LiquidCrystal_I2C lcd(0x3F,16,2);

//On définit les pins pour nous faciliter la tâche plus tard.
#define buzzer 8
#define trigPin 9
#define echoPin 10

//On définit les différentes variables pour les capteurs, l'écran etc...
long temps;
int distance, initialDistance, currentDistance, i;
int ecranAccueil =0;
String password="1234";
String tempPassword;
boolean activated = false; // Variable booléenne qui définit si l'alarme est activée ou non
boolean isActivated; // Moment durant lequel l'alarme est activée
boolean activerAlarme = false;
boolean alarmeActive = false;
boolean entrerPassword; // Moment durant lequel on tape son mot de passe
boolean passChangerMode = false;
boolean passChanger = false;

//On définit les colonnes et les lignes du clavier
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keypressed;
//On définit les touches du clavier
char keyMap[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {3, 2, 1, 0}; //Ce sont les pins des lignes
byte colPins[COLS] = {7, 6, 5, 4}; //Ce sont les pins des colonnes

//Cette variable sert à reprendre la touche appuyé
Keypad myKeypad = Keypad( makeKeymap(keyMap), rowPins, colPins, ROWS, COLS);

void setup() {
  lcd.init();     //On initialise l'écran LCD              
  lcd.init();
  lcd.backlight(); //On éteint l'écran et on le rallume
  pinMode(buzzer, OUTPUT); // On définit le buzzer ainsi que le trigpin en OUTPUT (Sortie)
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT); // On définit le echopin en INPUT (Entrée)
}

void loop() {
  if (activerAlarme) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("L'alarme va");
    lcd.setCursor(0,1);
    lcd.print("s'activer dans");
   
    int declencheur = 9; // Déclencheur sur 9 secondes.
    while (declencheur != 0) { //Tant que la variable declencheur n'est pas égale à 0
      lcd.setCursor(15,1); //On écrit à la caractère 15, ligne 1
      lcd.print(declencheur); //Le nombre sur lequel declencheur est
      declencheur--; //On soustrait 1 de la variable declencheur
      tone(buzzer, 700, 100); //On fait un petit bruit avec le buzzer. (Esthétique)
      delay(1000); //On attend une seconde avant que le code recommence.
    }
    lcd.clear(); //On efface tout ce qu'il se trouve sur l'écran
    lcd.setCursor(0,0); //On écrit sur la caractère 0, ligne 0
    lcd.print("Alarme Activé !"); //Alarme Activé !
    lcd.setCursor(0,1);
    lcd.print("Recherche...");
    initialDistance = getDistance(); //On lance la fonction getDistance pour savoir la distance entre l'alarme et le prochain obstacle fixe
    activerAlarme = false; //On met la variable en false pour dire que l'alarme ne peut pas être activer 2 fois en même temps.
    alarmeActive = true; //On met la variable en true pour dire que l'alarme est activée.
  }

  if (alarmeActive == true){
      currentDistance = getDistance() + 10;
      if ( currentDistance < initialDistance) {
        tone(buzzer, 1000); // Le buzzer va faire un son de 1khz
        lcd.clear();
        entrerMDP();
      }
    }

  if (!alarmeActive) {
    if (ecranAccueil == 0 ){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("A> Activ. Alarme");
      lcd.setCursor(0,1);
      lcd.print("B> Changer MDP");
      ecranAccueil = 1;
    }
    keypressed = myKeypad.getKey();
     if (keypressed =='A'){       
      tone(buzzer, 1000, 200);
      activerAlarme = true;            
    }
    else if (keypressed =='B') {
      lcd.clear();
      int i=1;
      tone(buzzer, 2000, 100);
      tempPassword = "";
      lcd.setCursor(0,0);
      lcd.print("MDP Actuel :");
      lcd.setCursor(0,1);
      lcd.print(">");
      passChangerMode = true;
      passChanger = true;   
      while(passChanger) {      
      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("MDP Actuel :");
        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("Définir nv MDP :");
          lcd.setCursor(0,1);
          lcd.print(">");
          while(passChangerMode) {
            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("Définir nv MDP :");
              lcd.setCursor(0,1);
              lcd.print(">");
            }
            if ( keypressed == '*') {
              i=1;
              tone(buzzer, 2000, 100);
              password = tempPassword;
              passChangerMode = false;
              passChanger = false;
              ecranAccueil = 0;
            }            
          }
        }
      }
    }
   }
 }
}

void entrerMDP() {
  int k=5;
  tempPassword = "";
  activated = true;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(" > Mouvement < ");
  lcd.setCursor(0,1);
  lcd.print("MDP>");
      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(" > Mouvement < ");
        lcd.setCursor(0,1);
        lcd.print("MDP>");
      }
      if ( keypressed == '*') {
        if ( tempPassword == password ) {
          activated = false;
          alarmeActive = false;
          noTone(buzzer);
          ecranAccueil = 0;
        }
        else if (tempPassword != password) {
          lcd.setCursor(0,1);
          lcd.print("Faux ! Retry");
          delay(2000);
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print(" > Mouvement < ");
          lcd.setCursor(0,1);
          lcd.print("MDP>");
        }
      }    
    }
}

//Fonction getDistance (pour connaître la distance d'un objet en mouvement.
long getDistance(){

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);

  // On active le trigpin pendant 10 microsecondes et on le désactive.
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // On lit les données recus par le trigpin par le echopin
  temps = pulseIn(echoPin, HIGH);

  // On calcule la distance
  distance = temps*0.034/2;

  return distance;
}






Comme vous le constatez, il est très long.
J'ai 2 fonctions, une pour taper le mot de passe lorsqu'un mouvement est détecté pour désactiver l'alarme. Et l'autre fonction est celle qui permet de calculer la distance entre un obstacle et lui par rapport à la distance initiale.


J'ai ajuster le menu pour activer l'alarme ou désactiver l'alarme.


PS : J'ai acheté un lot de keypad sur amazon qui est censé arriver demain !






Voici le résultat en vidéo :






Bien à vous.
_________________
~Haytam
Revenir en haut
Skype
Publicité






MessagePosté le: Lun 28 Mai - 20:43 (2018)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Projet d'Exploration Informatique Index du Forum -> Les projets de l'année 2017-2018 -> Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Portail | Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Texno x0.3 © theme by Larme D'Ange 2006
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com