Cadenas connecté : Différence entre versions

De Wiki d'activités IMA
(6ème séance)
(6ème séance)
Ligne 77 : Ligne 77 :
  
 
Notre code final fonctionne donc sans l'envoi de SMS (code mis en commentaire). De plus, nous n'avons pas de carte SIM pour tester le programme final.
 
Notre code final fonctionne donc sans l'envoi de SMS (code mis en commentaire). De plus, nous n'avons pas de carte SIM pour tester le programme final.
 +
  
 
Voici le code de notre programme principal :
 
Voici le code de notre programme principal :

Version du 21 janvier 2019 à 17:43

Présentation du sujet

Contexte

L'option Internet des Objets est un module qui se place dans le cadre de notre formation Ingénieur.

Le but du projet est de réaliser un objet connecté en 24h.

Description du projet

Nous avons choisi de créer un cadenas connecté. Pour le déverrouiller, il faut indiquer le bon mot de passe composé de 4 chiffres.

Il sera possible de localiser le cadenas ainsi donc la valise qui porte le cadenas par localisation GPS.

De plus, au bout de la 3ème tentative ratée, le cadenas se bloque et envoit un message au propriétaire pour lui indiquer que quelqu'un essaye de déverrouiller le cadenas.

Réalisation

Matériel utilisé

  • Cadenas
  • Puce GPS
  • Module GSM
  • Carte Arduino
  • Servomoteur

1ère séance

Nous avons commencé par chercher l'objet connecté à réaliser. Dans un premier temps, nous sommes partis sur un stylo connecté permettant de connaître le niveau d'encre.

Cependant, la réalisation est bien trop compliquée : si le stylo est vide, que faire ? Si nous le jetons, nous jetons toute la technologie, ce qui n'est pas envisageable. De plus, le niveau d'encre est connu seulement en regarder le stylo qui peut-être transparant. Ainsi, l'idée en question est mauvaise.

Par la suite, nous avons décidé de créer un cadenas connecté.


Pour réaliser le projet, nous avons besoin de plusieurs matériels :

  • cadenas
  • puce GPS, deux antennes (émetteur et récepteur) pour la localisation du cadenas.
  • carte Arduino, batterie et capteur de position pour déterminer si le code est bon ou non et envoyer un message au bout de la 3ème tentative ratée.

2ème séance

Nous avons commencé par créer un site web pour recevoir les alertes et la localisation du cadenas.

Cependant, après discussion avec les tuteurs, le site web n'est pas adapté à cette situation. En effet, le mieux est d'envoyer à l'utilisateur un SMS sur son téléphone portable. Avec un site web, l'utilisateur devra impérativement le consulter afin de voir si une alerte est présente. Nous avons donc besoin d'un module GSM pour envoyer les SMS.

Ainsi, l'envoie des données : GPS et alerte se feront par SMS. Par la suite, l'envoi de la localisation GPS sera fait en fonction du accéléromètre. En effet, si l'arduino est constamment en attente du message pour envoyer les coordonnées, cela risque d'utiliser trop rapidement la batterie et ce qui n'est pas adaptée dans notre cas. Nous avons donc choisi d'envoyer les coordonnées à chaque fois que le cadenas sera en mouvement (en utilisant l'accéléromètre).

Pour la conception de l'ouverture d'un cadenas, nous utiliserons un servomoteur qui sera connecté à la carte Arduino. Si le code est bon, le servomoteur sera actionné et ouvrira le verrou.

3ème séance

Dans cette séance nous avons pu déterminer tous les composants nécessaires pour concevoir notre objet connecté.

Ainsi le tuteur nous a fait parvenir du matériel.

Après avoir récupéré toutes les pieces, nous avons entamé à tester ces composants en utilisant des programmes existants sur Arduino, ou des programmes trouvés sur internet.

Nous avons commencé par les plus simples à tester notamment la carte Arduino, la plaque ensuite le servmoteur, la puce GPS, le module GSM et pour finir l'afficheur à sept segments.

4ème séance

Lors de cette séance, nous avons commencé à programmer sur Arduino. Nous avons testé les composants si tout fonctionner.

Nous avons commencé par tester le servomoteur. Nous avons donc utilisé des exemples de code (fournis par l'IDE Arduino) et branché le servomoteur sur le pin 9.

Puis nous avons décidé par continuer avec le GPS. Cependant, celui-ci ne fonctionnait plus et il était nécessaire de le changer (ainsi que le modèle du GPS). Par la suite, nous avons testé le GPS avec un code de Adafruit_GPS (une librairie trouvée sur internet).

Ensuite, il ne reste plus que le module GSM et l'afficheur 7-segment. Concernant le GSM, il est nécessaire d'avoir une carte SIM pour le tester. Nous avons donc passé au 7-segment.

Avec un code trouvé sur internet, nous avons pu tester l'afficheur. Il fonctionnait correctement.

5ème séance

Lors de cette séance, il ne restait plus qu'à tester le GSM mais nous n'avons pas de carte SIM. De plus, il était nécessaire aussi de programmer et monter les boutons poussoirs pour l'afficheur 7-segment. Ainsi nous avons commencé par cela.

Ensuite, nous nous sommes occupés avec le programme finale ainsi que le montage de tous les composants sur la carte Arduino.

A la fin de la séance, nous avons réussi à connecter tous les composants mais aussi à programmer le servomoteur, les boutons poussoirs ainsi que l'afficheur 7-segment. Il ne reste plus qu'à programmer le GPS et GSM.

6ème séance

Dans cette dernière séance, nous avons programmé le reste du programme principal. Nous avons détecté un problème : la compatibilité des librairies. En effet, les librairies Adafruit_GPS, GSM et SoftwareSerial sont imcompatibles car GSM redéfinit SoftwareSerial et ainsi le redéfinit.

Notre code final fonctionne donc sans l'envoi de SMS (code mis en commentaire). De plus, nous n'avons pas de carte SIM pour tester le programme final.


Voici le code de notre programme principal :

 //#include <GSM.h>
 #include <Adafruit_GPS.h>
 #include <Servo.h>
 #include <SoftwareSerial.h>
 
 #define NOMBRE_ESSAI_MAX (3)
 #define NUMTEL ""
 #define GPSSerial Serial1
 
 String buffer1;
 String buffer2;
 String buffer3;
 String buffer4;
 String tempString;
 String codeString;
 int nombreEssaiEnCours;
 const String CODE = "1011";
 int code[4];
 
 // BP
 const int BP1 = 2;
 const int BP2 = 3;
 const int BP3 = 4;
 const int BP4 = 5;
 const int BPV = 6;
 
 //s7s
 const int softwareTx = 8;
 const int softwareRx = 7;
 SoftwareSerial s7s(7,8);
 
 //servomoteur
 const int servo = 9;
 Servo myservo;
 
 //GSM
 #define PINNUMBER "0000"
 /*
 // initialize the library instance
 GSM gsmAccess;
 GSM_SMS sms;*/
 
 //GPS
 Adafruit_GPS GPS(&GPSSerial);
 
 void setup() {
   nombreEssaiEnCours = 0;
   Serial.begin(9600);
 
   /* Initialisation s7s */
   s7s.begin(9600);
   s7s.print("0000");
   
   /* Initialisation BP */
   pinMode(BP1, INPUT_PULLUP);
   pinMode(BP2, INPUT_PULLUP);
   pinMode(BP3, INPUT_PULLUP);
   pinMode(BP4, INPUT_PULLUP);
   pinMode(BPV, INPUT_PULLUP);
   
   /* Initialisation servomoteur */
   myservo.attach(9);
   
   /* Initialisation GSM *//*
   // initialize serial communications and wait for port to open:
   
   while (!Serial) {
     ; // wait for serial port to connect. Needed for native USB port only
   }
   
   Serial.println("SMS Messages Sender");
   
   // connection state
   boolean notConnected = true;
   
   // Start GSM shield
   // If your SIM has PIN, pass it as a parameter of begin() in quotes
   while (notConnected) {
     if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
       notConnected = false;
     } else {
       Serial.println("Not connected");
       delay(1000);
     }
   }
   
   Serial.println("GSM initialized");
   */
   
   /* Initialisation GPS */
   GPS.begin(9600);
   GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
   GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
   GPS.sendCommand(PGCMD_ANTENNA);
   delay(1000);
   GPSSerial.println(PMTK_Q_RELEASE);    
 }
 
 void loop() {
   if(!digitalRead(BPV)) {
     if(codeString.equals(CODE)) {
        Serial.println("cadenas ouvert");
        int pos;
        for (pos = 0; pos <= 180; pos += 1) { 
          myservo.write(pos);              // tell servo to go to position in variable 'pos'
          delay(15);                       // waits 15ms for the servo to reach the position
        }
     }
     else {
       if(nombreEssaiEnCours<NOMBRE_ESSAI_MAX) {
         nombreEssaiEnCours = nombreEssaiEnCours+1;
         Serial.println(nombreEssaiEnCours);
         delay(200);
       }
       else if(nombreEssaiEnCours==NOMBRE_ESSAI_MAX) {
         s7s.print("0000");
         // envoi MSM
         String txtMsg = "";
         char c = GPS.read();
         if (GPS.newNMEAreceived()) {
           if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
             return;
         }
         Serial.println("cadenas verrouille");
         if (GPS.fix) {
           txtMsg = "Localisation:\n" + 
           txtMsg = "Latitude: " + String(GPS.latitude) + "\n";
           txtMsg = "Longitude: " + String(GPS.longitude) + "\n";
           txtMsg = "Altitude: " + String(GPS.altitude) + "\n";
           Serial.println(txtMsg);
           /* Envoi du message */
           /*sms.beginSMS(NUMTEL);
           sms.print(txtMsg);
           sms.endSMS();*/
         }
         while(1) {};
        }
     }
   }
   else {
     if(!digitalRead(BP1)) { 
       if(code[0]==9)
         code[0]=0;
       else
         code[0]++;
     }
     else if(!digitalRead(BP2)) { 
       if(code[1]==9)
         code[1]=0;
       else
         code[1]++;
     else if(!digitalRead(BP3)) {
       if(code[2]==9)
         code[2]=0;
       else
         code[2]++;
     }
     else if(!digitalRead(BP4)) {
       if(code[3]==9)
         code[3]=0;
       else
         code[3]++;
     }
   }
   buffer1 = String(code[0]);
   buffer2 = String(code[1]);
   buffer3 = String(code[2]);
   buffer4 = String(code[3]);
   tempString = buffer3 + buffer4 +buffer1 +buffer2;
   codeString = buffer1 + buffer2 + buffer3 + buffer4;
   s7s.print(tempString);
   delay(200);
 }


Ainsi que le montage :

50474545 218648039087498 4010548213697216512 n.jpg 50271434 540525579779853 4212485794859843584 n.jpg


Nous avons fini avec la création du poster :

Poster Cadenas.png