PAE 2021 Vol de ruche 1
Sommaire
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
- Comparatif prix
- Fréquence d'acquisition
- Prise en main Arduino Yun/ ADXL335
- Test de L'ADXL sur 1/2/3 axe(s)
- Calibration de l’accéléromètre lors de la mise en place
- Test de vibrations
- Test de chocs
- Mesure du bruit
- Calibration du Delta (Seuil détection vol)
- 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 :
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
- Comparatif prix
- Fréquence d'acquisition
- Calibration de l’accéléromètre lors de la mise en place
- Test de vibrations
- Test de chocs
- Mesure du bruit
- Calibration du Delta (Seuil détection vol)
- 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 :
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 :
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 :
- Voler la ruche entièrement
- 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 :
- Le vent: un vent important pourrait éventuellement entrainer un mouvement ou des vibrations
- Un animal qui se frotte
- Une branche ou un élément frappant sur la ruche
- La ruche est déplacée
- 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.
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 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
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
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. [|Téléchargement Putty]
- Relier le capteur à la carte selon le schéma suivant :
Brancher la carte au PC afin de l'alimenter et par la suite lui transférer le code. - Faire un reset de le configuration réseaux de la carte en appuyant sur le bouton "wlan-rst" pendant au minimum 30 secondes.
- 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.
- Via un navigateur se rendre à l'adresse "arduino.local". Le mot de passe par défaut est "arduino".
- Une fois connecté, appuyer sur le bouton "Configure".

- La fenêtre suivante apparait, remplir les champs puis cliquer sur le bouton "configure & restart". La carte va donc redémarrer et se connecter au réseau spécifié.(Il est préférable de prendre un réseau personnel ou un point d'accès mobile via votre smartphone).

- 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".

- Se logger en tant que 'root' (l'administrateur), attention le mot de passe est celui spécifié lors de la configuration. Il est normal que rien ne s'affiche lors de la saisie du mot de passe.

- Dans la fenêtre de commande taper :
opkg update
, cela permet de rafraîchir la liste de tous les paquets de la carte. - Il est nécessaire d'installer un serveur SSMTP pour envoyer des mails, taper la commande :
opkg install ssmtp
. - 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. - Installer un éditeur de texte simplifié, nous choisirons ici d'utiliser "nano". Pour l'installer, taper :
opkg install nano
. - Créer un nouveau fichier de configuration via la commande :
nano /etc/ssmtp/ssmtp.conf
. - Copier le code suivant dans votre presse papier:
# The user that gets all the mails (UID < 1000, usually the admin) root=alerte.bzzbzz@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=alerte.bzzbzz@gmail.com AuthPass=abeilles # 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.
- Modifier les droits du fichier de configuration par la commande :
chmod 640 /etc/ssmtp/ssmtp.conf
- 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 il faut créer le second type de mailnano 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.
- A présent nous en avons terminé avec la configuration de la partie Linux. Lancez l'environnement de développement Arduino, "Arduino IDE" disponible sur windows, Linux, et Mac : https://www.arduino.cc/en/software
- Vérifier dans l'onglet outils d'avoir le bon type de carte : "Arduino Yun".

- La carte doit également être reconnu sur un des port COM de l'ordinateur.

- Voici le code à copier/coller dans Arduino IDE :
#include<Process.h> #include<FileIO.h> #include<Arduino.h> //Temps nécessaire laissé à l'installation soit 15 min const int installms=900000; //Renseignement des pins sur lesquels les axes du capteur sont branchés const int xpin=A0; const int ypin=A1; const int zpin=A2; //Références prisent pour la calibration int ref_x; int ref_y; int ref_z; //nombre d'échantillons pris pour effectuer les tests const int nb_echantillons=10; //tableau renseignant les valeurs des trois axes x, y et z int valeur[nb_echantillons][3]; //compteur permettant de faire les mesures par rapport aux valeurs stockées dans le tableau int compteur; //Défintion des seuils en fonction de l'alerte qu'il faut renvoyer const int seuil_critique2 =15; const int seuil_critique1=10; //Booléen permettant de savoir si un mail a été envoyé bool alerte; void attente (){ // Fonction faisant une attente pour ne pas envoyer de trop de mails pour la même alerte delay (300000); //Attente de 5min alerte=false; } void calibration(){ //Fonction sauvegardant les valeurs sur les 3axes lors de la mise sous tension 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; } } } //Fonction qui s'effectue une seule fois lors de la mise sous tension void setup() { Serial.begin(115200); //Appel de fonctions permettant la mise en place delay(installms); calibration(); remplissage_tableau(); compteur=0; alerte=false; //Nécessaire à l'envoie des mails Bridge.begin(); FileSystem.begin(); } void loop() { if(compteur==nb_echantillons-1){compteur=0;}//Remet le compteur à 0 else{//Si le compteur n'est pas à 9 int* temp =difference();//Récupération des valeurs de la différence entre les accélérations actuelle et celles //prise lors de la qualibration valeur[compteur][0]=temp[0];//Remplis les données sur le tableau "valeur" cette ligne correspond à l'axe x valeur[compteur][1]=temp[1];//Remplis les données sur le tableau "valeur" cette ligne correspond à l'axe y valeur[compteur][2]=temp[2];//Remplis les données sur le tableau "valeur" cette ligne correspond à l'axe z delete[] temp;//Désaloue la mémoire du vecteur temp int seuil=0;//Initialisation du seuil if(compteur==1){//Une fois toute les 10 valeurs for (int i=0;i<nb_echantillons;i++){//Boucle sur le tableau "valeur" contenant les échantillons for (int u=0;u<3;u++){//Boucle sur les 3 axes seuil=seuil+ abs(valeur[i][u]);//Somme les valeurs des 3 axes } } seuil=seuil/nb_echantillons;//Divise le seuil obtenu par 10 pour obtenir une moyenne sur 1 seconde if(seuil>seuil_critique2){//Si le seuil dépasse le seuil 2 le plus important on envoie une alerte de vol if(alerte==false){//Uniquement si un mail n'a pas été envoyé dans les 5 min précédentes Process p; p.runShellCommand("cat /root/mail1.txt | ssmtp adressemailadefinir@gmail.com"); alerte=true; attente();//Attente de 5 min puis remise de alerte à false } } else if(seuil> seuil_critique1 && seuil < seuil_critique2){ //Si le seuil dépasse le seuil 1 et est inférieur au seuil 2 on envoie une alerte de dérangement (animaux, // vent important, branche qui tape,...) if(alerte==false){//Uniquement si un mail n'a pas été envoyé dans les 5 min précédentes Process p; p.runShellCommand("cat /root/mail2.txt | ssmtp adressemailadefinir@gmail.com"); alerte=true; attente();//Attente de 5 min puis remise de alerte à false } } } compteur++; } delay(100);//Attente de 0.1 secondes } - Changer l'adresse mail "adressemailadefinir@gmail.com" par votre adresse mail personnelle. Attention le changement est à effectuer 2 fois.
- Cliquer sur le bouton "Téléverser"(flèche) :

Vous avez maintenant terminé la configuration de carte. Vous disposez de 15 minutes pour mettre en place la carte après mise sous tension avant qu'elle ne prenne sa référence et commence la détection de vol.

