PAE 2021 Vol de ruche 1 : Différence entre versions

De Learning Lab Environnements Connectés
Sauter à la navigation Sauter à la recherche
(Mise en place du matériel)
(Mise en place du matériel)
Ligne 347 : Ligne 347 :
 
</pre></li>
 
</pre></li>
 
<li>Changez l'adresse mail "adressemailadefinir@gmail.com" par votre adresse mail. Attention le changement est à effectuer 2 fois.</li>
 
<li>Changez l'adresse mail "adressemailadefinir@gmail.com" par votre adresse mail. Attention le changement est à effectuer 2 fois.</li>
<li>Cliquez sur le bouton "Téléverser"(flèche) : </li>
+
<li>Cliquez sur le bouton "Téléverser"(flèche) :
 +
<br>[[File:flecheteleverser.png  |frameless|1200px]]<br></li>
 
</ol>
 
</ol>
 
Vous avez maintenant terminé la configuration de carte.
 
Vous avez maintenant terminé la configuration de carte.

Version du 18 mai 2021 à 10:36

Séance 15/03/2021

Travail réalisé

Réalisation d'un premier schéma fonctionnel avec des blocs : alt

Documentation sur l’accéléromètre ADXL335 : [|Datasheet ADXL335]

Choix de la carte Arduino Yun pour ce projet, utilisation de 2 bus série ( Un pour le capteur d'accélération, un pour communiquer avec le processeur linux )
et le bus bridge pour communiquer entre les processeurs. La carte Yun à deux processeurs un utilisé pour le traitement dans notre cas et un autre sous linux que l'on utilisera pour envoyer un mail lors d'une alerte de vol.

Comparatif avec les produits existants :

  • Détecteur de vol permettant d'alerter et de géolocaliser (134 euro) [|Lien]
  • Capteur de poids (290 euro) [|Lien]
  • Capteur de présence et appareil photo (228 euro) [|Lien]
  • Alarme sonore 120 dB DIY (5-20 euro) [|Lien]

Objectifs prochaine séance

Terminer le point 1 et commencer les points 3 et 4.


Travail restant

  1. Comparatif prix
  2. Fréquence d'acquisition
  3. Prise en main Arduino Yun/ ADXL335
  4. Test de L'ADXL sur 1/2/3 axe(s)
  5. Calibration de l’accéléromètre lors de la mise en place
  6. Test de vibrations
  7. Test de chocs
  8. Mesure du bruit
  9. Calibration du Delta (Seuil détection vol)
  10. Utilisation du serveur Web pour l'envoi d'un mail

Séance 22/03/2021

Travail réalisé

[Tutoriel ADXL335]
Base du code pour utiliser l'ADXL335 et principe de calibration. [YouTube Arduino Yun et ADXL335]
L'objectif de cette séance est donc de prendre en main la carte Arduino Yun et de mettre en place le fonctionnement de l'ADXL335. Etant donné que nous avons choisi la solution arduino, la mise en place du capteur avec la carte est simple et guidée par différent tutoriaux sur internet.
Le branchement se fait comme suit :
alt
Actuellement le capteur renvoie des données sur les 3 axes, nous avons pu en sortir nos premières courbes qui montre l'évolution de l'état des 3axes lorsque l'on fait des secousses.

Objectifs prochaine séance

Travail restant

  1. Comparatif prix
  2. Fréquence d'acquisition
  3. Calibration de l’accéléromètre lors de la mise en place
  4. Test de vibrations
  5. Test de chocs
  6. Mesure du bruit
  7. Calibration du Delta (Seuil détection vol)
  8. Utilisation du serveur Web pour l'envoi d'un mail

Séance 01/04/2021

Travail réalisé

Création de courbes représentant les différentes perturbations qu'une ruche pourrait subir. Nous avons fait 3 mesures selon des critères différents :

  1. Statique
  2. Sans bouger.png
  3. Vibration, choc sur le support de la carte
  4. Vibration.png
  5. Mouvement de la carte et de l'ADXL
  6. Bouger.png


Ces mesures ont été effectuée grâce à une soustraction entre la mesure de référence prise à l'initialisation du dispositif (lorsque le dispositif est installé et ne sera plus amené à bouger) et le mesure en cours.

Sur les diagrammes 1 on peut observer des petits pics de l'ordre de 5 unité(unité du capteur) ce qui indique que même dans un environnement stable, immobile le capteur peut générer des valeurs différentes de 0.

Sur les diagrammes 2 on peut observer des zones où les perturbations sont plus importante nous avons simuler les vibrations en tapant avec le poing sur la table, cela nous permet de simuler un animal qui se frotte à une ruche ou encore des rafales de vents assez importantes. Grâce à ces mesures nous avons pût ajuster notre seuil, en prenant en compte que d'importants pics peuvent survenir sans raison apparentes.

Sur les diagrammes 3 nous avons déplacer le capteur, sur les différents axes et donc observer l'augmentation du signal qui peut être importante et donc nous avons développer un seuillage sur un nombre d'échantillons qui correspond à une prise sur une durée de temps.

Ces mesures sont très intéressantes car elles nous permettent de caractériser la réponse de notre système en fonction de la perturbation reçue.
De cette manière nous allons pouvoir déterminer une valeur de seuil pour laquelle on considérera que la ruche se fait voler.
Pour éviter les fausses alarmes, l'utilisation des 3 axes proposés par le capteur en simultané est une bonne solution.
Les tests ne se feront pas sur un seul axe car un problème d'ordre technique peut très bien renvoyer une valeur incohérente alors que la ruche ne subit aucune perturbation.

Séance 08/04/2021

Travail réalisé

Mise en place d'un serveur 'ssmtp' sur la carte arduino Yun permettant l'envoie de mail automatisé depuis une adresse spécifique vers une autre.
La mise en place ne demande pas énormément de manipulation, il suffit de suivre le tutoriel suivant : [|Tutoriel serveur ssmtp arduino]
A l'heure actuel le système est capable de détecter un mouvement brusque ou bien un mouvement très lent, par la suite il envoie un seul mail pour éviter le spam.
Détecter un mouvement brusque permet de savoir si la ruche est embarquée soudainement. Alors que détecter un mouvement très lent permet de savoir si le voleur prend le temps pour éviter de se faire repérer.
A ce jour le code ainsi que les fichiers de configurations du serveur ssmtp: Fichier:Code confsstmp.zip

Séance 04/05/2021

Travail réalisé

Recherche d'information pour mise en situation pour le terrain: La détection d'un mouvement lent s'est avéré inutile, en effet les abeilles sécrètent une substance très collante dans la ruche. Il est donc nécessaire de décoller les cadres ce qui entraine d'importantes variations sur l'accéléromètre. On peut également exclure la possibilité de soulever la ruche entière lentement car celle-ci pèse plus de 60kg. Ces deux raisons rendent donc un tel mouvement impossible a réalisé dans la pratique.

Détection d'un vol de ruche

Contexte

Le capteur de vol de ruche doit être un équipement qui soit en mesure de détecter le vol d’une ruche. Une ruche est le lieu de vie des abeilles où celles-ci produisent le miel que cultive l’apiculteur. Ces ruches peuvent être construites de différentes façons mais voici la plus commune :

Ruche.jpg

Il s'agit donc d'une boîte contenant plusieurs éléments. Nous nous intéresserons principalement aux cadres qui composent la ruche. On note également que les ruches sont installées sur des dispositifs stables (palette de bois, plateforme en ciment). Après quelques recherches et discussions, les vols de ruches s’opèrent de deux manières :

  1. Voler la ruche entièrement
  2. Voler uniquement les cadres de la ruche

Les cadres de la ruche sont à l’intérieur de celle-ci et représente l’endroit idéal pour cacher le dispositif antivol. L'objectif est donc de pouvoir détecter les deux cas de vols cités précédemment. Une telle chose est réalisable si l'équipement est assez bien intégré ou caché au sein de la ruche. Le dispositif doit être capable de répondre à différentes perturbations que pourrait subir la ruche. A la suite de cette détection, le propriétaire est averti de la situation par mail. Voici une liste de perturbations qu'une ruche peut rencontrer :

  1. Le vent: un vent important pourrait éventuellement entrainer un mouvement ou des vibrations
  2. Un animal qui se frotte
  3. Une branche ou un élément frappant sur la ruche
  4. La ruche est déplacée
  5. Un cadre est déplacé

Une discussion avec le professeur en charge Mr Verney nous a éclairé sur les cas à traiter ou non. Dans les faits il est intéressant de déclencher une alerte dans tous les cas présentés ci dessus. L’apiculteur peut être intéressé par ces informations. En effet les abeilles hibernent durant l'hiver et ne doivent pas être dérangées. Leur instinct les force à ne pas sortir de la ruche si la météo ne le permet pas, de ce fait elles continueront à vivre à l'intérieur de celle-ci. Le comportement de l'abeille fait qu'elle ne fait pas ses besoins à l'intérieur de la ruche. Un séjour prolongé sans sortir de la ruche peut donc conduire au décès des abeilles. Ces informations démontrent l'importance de savoir si les abeilles sont dérangées par un élément extérieur. En prenant l'exemple d'une branche frappant la ruche, cet évènement empêchera les abeilles de sortir bien que la météo le permet.

Capteur

Pour réaliser le détecteur de vol nous utiliseront un capteur de type accéléromètre, l’ADXL335.

alt

C’est un capteur qui comme son nom l’indique mesure une accélération mesurée sur 3 axes : x, y et z. Ce capteur mesure une accélération et la converti en tension qui sera ensuite interprétée dans le code que nous verrons plus tard. Si vous souhaitez vous familiariser à ce capteur voici une page pour débuter : [Tutoriel ADXL335]

Pour des caractéristiques techniques plus poussées nous vous invitons à consulter sa datasheet : [|Datasheet ADXL335]

La plage de mesure nous ait donnée par la datasheet et est de +- 3,6g. Soit une plage de mesure globale de 7,2g. On peut également retrouver par le calcul, la sensibilité du capteur sur chaque axe, qui est de 300mV/g.

Etude des signaux

Afin de nous approcher au mieux de la réalité nous avons fait quelques tests. De cette manière on souhaite connaitre le plus fidèlement possible le comportement de l'accéléromètre en condition réelle, au sein d'une ruche. Pour cela nous avons codé quelques données des informations que vous verrez résulte de la soustraction de la mesure faite par le capteur à l’instant t moins la mesure faire à l’instant t=0. On constate qu'une accélération est toujours présente, c’est la gravité terrestre.

Sans mouvement

Sans bouger.png

Sans perturbations ce qui correspondrait à un environnement calme, on constate quelques vacillements mais de très petites amplitudes. Après mesure au maximum un vacillement peut atteindre les 5 unités.

Vibration, choc sur le support de la carte

Vibration.png

Avec des vibrations, qui sont censées mettre en application un objet tapant ou un animal se frottant sur/à la ruche. On peut observer de grandes variations sur les axes mais principalement sur l’axe z, ce qui est logique car le capteur est posé sur la table. Les pics les plus importants peuvent atteindre les 50 unités.

Mouvement de la carte et de l'ADXL

Bouger.png Avec des mouvements d’accélération moyenne, le capteur nous donne des valeurs assez régulières pouvant quand même atteindre les 50 unités pour les plus rapides.



Ces mesures sont très intéressantes car elles nous permettent de caractériser la réponse de notre système en fonction de la perturbation reçue.
De cette manière nous allons pouvoir déterminer une valeur de seuil pour laquelle on considérera que la ruche se fait voler.
Pour éviter les fausses alarmes, l'utilisation des 3 axes proposés par le capteur en simultané est une bonne solution.
Les tests ne se feront pas sur un seul axe car un problème d'ordre technique peut très bien renvoyer une valeur incohérente alors que la ruche ne subit aucune perturbation.

Mise en place du matériel

Afin de mettre en place toute la configuration de la carte arduino Yun, vous trouverez par la suite les étapes à suivre pour paramétrer la carte dans un mode détection de vol de ruche. Dotez-vous d'un logiciel permettant d'accéder à la partie Linux de la carte, nous utiliserons Putty.

  1. Reliez le capteur à la carte selon le schéma suivant :
    alt
    Branchez la carte afin de l'alimenter et par la suite lui transférer le code.
  2. Faire un reset de le configuration réseaux de la carte en appuyant sur le bouton "wlan-rst" pendant au minimum 30 secondes.
  3. La carte une fois réinitialisée génère un réseau wifi(Par défaut Arduino Yun-XXX). Il faut s'y connecter.
  4. Via un navigateur se rendre à l'adresse "arduino.local". Le mot de passe par défaut est "arduino".
  5. Une fois connecter appuyer sur le bouton "Configure".
    PageAccueil.png
  6. La fenêtre suivante apparait, veuillez remplir les champs puis cliquez sur le bouton "configure & restart". La carte va donc redémarrer et se connecter au réseau spécifié.(Il est préférable un réseau personnel ou un point d'accès mobile via votre smartphone).
    ArduinoConf.png
  7. Lancer Putty et se connecter à la carte via son adresse Ip, vous pouvez accéder à l'adresse IP de la carte via votre smartphone en consultant les appareils connectés. Appuyer sur le bouton "Open".
    ArduinoPut.png
  8. Se logger en tant que root(l'administrateur), attention le mot de passe est celui spécifié lors de la configuration.
    ArduinoPutty.png
  9. Dans la fenêtre de commande taper
    opkg update
    , cela permet de rafraîchir la liste de tout les paquets.
  10. Il est nécessaire d'installer un serveur SSMTP pour envoyer des mails, tapez la commande
    opkg install ssmtp
    .
  11. Il faut faire une sauvegarde du fichier de configuration par défaut. Pour cela taper la commande
    mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.bkp
    .Dans les faits on le renomme.
  12. Installez un éditeur de texte simplifier, nous choisirons ici d'utiliser "nano". Pour l'installer tapez
    opkg install nano
    .
  13. Créez un nouveau fichier de configuration via la commande
    nano /etc/ssmtp/ssmtp.conf
    .
  14. Copiez le code suivant dans votre presse papier:
     # The user that gets all the mails (UID < 1000, usually the admin)
    root=starf.spam@gmail.com
    
    # The mail server (where the mail is sent to), both port 465 or 587 should be acceptable
    # See also http://mail.google.com/support/bin/answer.py?answer=78799
    mailhub=smtp.gmail.com:587
    
    # The address where the mail appears to come from for user authentication.
    rewriteDomain=gmail.com
    
    # The full hostname
    hostname=BzzBzz
    
    # Use SSL/TLS before starting negotiation
    UseTLS=Yes
    UseSTARTTLS=Yes
    
    # Username/Password
    AuthUser=balekdefou@gmail.com
    AuthPass=balek26!
    
    # Email 'From header's can override the default domain?
    FromLineOverride=no

    Pour le coller dans nano il faut faire un clique droit souris.Puis faire "ctrl +x" pour quitter l'éditeur, appuyer sur Y pour sauvegarder, enfin appuyer sur "Entré" pour quitter l'éditeur et revenir sur la fenêtre de commande.

  15. Modifiez les droits du fichier de configuration par la commande :
    chmod 640 /etc/ssmtp/ssmtp.conf
  16. De la même manière nous allons créer les fichiers textes qui renseignerons les contenus des mails.
    nano mail1.txt
    Voici le contenu du mail n°1: (Collez le dans le nano)
    Subject: Alerte Bzz Bzz
    Détection d'un mouvement important, suspicion de vol. 
    

    Le Subject : renseigne le titre du mail. Puis en dessous c'est le corps du mail.

    Maintenant créez le second type de mail
    nano mail2.txt
    Voici le contenu du mail n°2: (Collez le dans le nano)
    Subject: Alerte Bzz Bzz
    Détection d'un faible mouvement, suspicion de présence animal ou dérangement des abeilles.
    
  17. A présent nous en avons terminé avec le setup de la partie Linux de la configuration. Lancez l'environnement de développement Arduino, "Arduino IDE" disponible sur windows, Linux, et Mac : https://www.arduino.cc/en/software
  18. Verifiez dans l'onglet outils d'avoir le bon type de carte "Arduino Yun".
    VerifYun.png
  19. Ainsi que le la carte soit bien reconnu sur un des port COM de l'ordinateur.
    VerifCOM.png
  20. Voici le code à copier coller dans Arduino IDE :
    #include<Process.h>
    #include<FileIO.h>
    #include<Arduino.h>
    //const int installms=900000; //Temps nécessaire à l'installation
    const int xpin=A0;
    const int ypin=A1;
    const int zpin=A2;
    int ref_x;
    int ref_y;
    int ref_z;
    const int nb_echantillons=10;//nombre d'échantillon pour determiner notre seuil
    int valeur[nb_echantillons][3];
    int compteur;
    const int seuil_critique2 =20;
    const int seuil_critique1=10;
    bool alerte;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(115200);
    calibration();
    remplissage_tableau();
    compteur=0;
    alerte=false;
    Bridge.begin();
    FileSystem.begin();
    //delay(installms);
    }
    
    void attente (){
      Serial.print("Attente de 10sec");
      delay (300000); 
      //alerte=false;
    }
    
    void affichage(){
      
      for (int i=0;i<nb_echantillons;i++){
      Serial.print(valeur[i][0]);
      Serial.print(";");
      Serial.print(valeur[i][1]);
      Serial.print(";");
      Serial.print(valeur[i][2]);
      Serial.print("\n");
      
      }
    }
    void calibration(){
      ref_x=analogRead(xpin);
      ref_y=analogRead(ypin);
      ref_z=analogRead(zpin);
    }
    int* difference(){
      int* tableau_diff=new int [3];
      tableau_diff[0]=ref_x-analogRead(xpin);
      tableau_diff[1]=ref_y-analogRead(ypin);
      tableau_diff[2]=ref_z-analogRead(zpin);
      
      return tableau_diff;
      delete[] tableau_diff;
    }
    void remplissage_tableau(){
      for(int i=0;i<nb_echantillons;i++){
        for(int u=0;u<3;u++){
          valeur[i][u]=0;
          }
        }
     }
    
    void loop() {
    // put your main code here, to run repeatedly:
    
    if(compteur==nb_echantillons-1){compteur=0;}//Remet le compteur à 0
    else{
      int* temp =difference();
      valeur[compteur][0]=temp[0];
      valeur[compteur][1]=temp[1];
      valeur[compteur][2]=temp[2];
      delete[] temp;
      int seuil=0;
      if(compteur==1){  
      for (int i=0;i<nb_echantillons;i++){
          for (int u=0;u<3;u++){
          seuil=seuil+ abs(valeur[i][u]);
          }
        }
        
      seuil=seuil/nb_echantillons;
      if(seuil>seuil_critique2){
        //if(alerte==false){
        Serial.print("Wallah cavale chakal on te vole tes miel pops bzz bzz");
        Serial.print("\n");
        Process p;
        p.runShellCommand("cat /root/mail1.txt | ssmtp adressemailadefinir@gmail.com");
        //alerte=true;
        attente();
        //}
        }
      else if(seuil> seuil_critique1 && seuil < seuil_critique2){
        //if(alerte==false){
        Serial.print("Les abeilles sont dérangées, les miel pops seront pas ouf bzz bzz");
        Serial.print("\n");
        Process p;
        p.runShellCommand("cat /root/mail2.txt | ssmtp adressemailadefinir@gmail.com");
        //alerte=true;
        attente();
       // }      
        }
        affichage();
      }
      compteur++;
    }
    delay(100);
    
    }
    
    
  21. Changez l'adresse mail "adressemailadefinir@gmail.com" par votre adresse mail. Attention le changement est à effectuer 2 fois.
  22. Cliquez sur le bouton "Téléverser"(flèche) :
    Flecheteleverser.png

Vous avez maintenant terminé la configuration de carte.

Principe de fonctionnement du code

Tests finaux

Rajouter justification utilisation matériel (température...)

Aspect personnalisable du dispositif (Choisir le texte du mail)