IMA3/IMA4 2020/2022 P7 : Différence entre versions

De Wiki de Projets IMA
(Conception informatique)
(Amélioration du modèle de mangeoire)
Ligne 191 : Ligne 191 :
 
Par la suite, nous avons rassemblé toutes les parties en respectant un ordre et un sens bien précis nous permettant de fixer au fur et à mesure. L’assemblage s’est réalisé correctement car les dimensions ont été respectées et les encoches correspondaient parfaitement.
 
Par la suite, nous avons rassemblé toutes les parties en respectant un ordre et un sens bien précis nous permettant de fixer au fur et à mesure. L’assemblage s’est réalisé correctement car les dimensions ont été respectées et les encoches correspondaient parfaitement.
 
Seul souci concernant certaines planches pour lesquelles nous avions pris en compte l’épaisseur d’une planche de bois (environ 1 cm d’épaisseur) pour au final utiliser du carton (3 mm d’épaisseur).
 
Seul souci concernant certaines planches pour lesquelles nous avions pris en compte l’épaisseur d’une planche de bois (environ 1 cm d’épaisseur) pour au final utiliser du carton (3 mm d’épaisseur).
 +
 +
=Travail effectué au S8=
 +
 +
==Autonomie de la mangeoire avec arduino uno==
 +
 +
 +
 +
==Conception du PCB (remplacement de l’Arduino)==

Version du 5 mai 2022 à 22:22

Présentation générale

Introduction

Notre projet de mangeoire connectée s’insère dans une optique d’observation et d’étude de la faune aviaire. Une mangeoire classique permet simplement d’observer à un moment précis les animaux, par le biais de nourriture qui permet de les attirer. Notre projet de mangeoire connectée, permettra à ses utilisateurs de visualiser en continu, l’activité extérieure et journalière de ces petits mammifères locaux. Elle permettra également de récolter des données afin d’en apprendre plus sur le mode de vie des animaux sauvages.

Ce projet se déroule pendant les deux premières années de notre cycle ingénieur en Systèmes Embarqués. Il nous permettra de mieux appréhender les travaux de groupes à venir lors de notre stage, ou encore lors de notre carrière professionnelle.

Notre projet se découpe en 2 axes distincts. Premièrement, la partie conception et réalisation de la mangeoire, en prévoyant des espaces de stockage conséquents pour l’eau, la nourriture ainsi que les composants. Deuxièmement, une partie informatique qui regroupe la réalisation d’une IA qui permettra de reconnaître les oiseaux qui se présenteront via leurs aspects physiques, ainsi qu’une partie programmation de cartes électroniques (Arduino et Raspberry Pi) qui commanderont les capteurs.

Contexte

Réalisation d’une mangeoire connectée pour un particulier, capable de fournir des photos et des enregistrements sonores des oiseaux, ainsi que des statistiques de la mangeoire et une détection des niveaux d'eau et de nourriture restants. Ce projet rentre dans le cadre de nos études de par le fait de la partie programmation et réalisation. De plus, la partie supplémentaire concerne l’installation de panneaux solaires permettant de rendre autonome la mangeoire. Ce projet nous permet de nous investir dans de nombreux domaines qui sont : la programmation informatique, l’organisation d’un projet de groupe, l’étude des oiseaux dans leur milieu naturel, la réalisation de différents prototypes, l’étude de différentes solutions.

Description des fonctionnalirés

 - Prise de photos et de vidéos  (caméra infrarouge 180° pour RaspBerry Pi)
 - Enregistrement des chants d’oiseaux (micro pour RaspBerry Pi)
 - Détection du niveau d’eau (sonde de niveau) et de nourriture dans la mangeoire (capteur laser)
 - Pesée des oiseaux pour évaluer leur état de santé et de potentiellement permettre de différencier les individus (capteur de poids arduino)
 - Température et humidité (capteur de température et d’humidité)
 - Utilisation de panneaux solaires pour alimenter les éléments (panneaux solaires)
 - Reconnaissance des espèces d’oiseaux

Les données seront récupérées au travers d’un réseau wifi puis stockées dans une base de données accessible via le web ou peut être une application. La base du projet sera sur une Raspberry pi.

Matériel

"Capteur de température"
  • Un capteur de température qui permettra de recevoir la température ainsi que le niveau d’humidité. Il fonctionne en 3.3V ou 5V et il nécessite une pin de DATA pour transmettre l’information à l'arduino et il fonctionne à l'aide d’un programme coder en C.
"Arduino"
  • La carte arduino est un des composants majeurs pour notre projet car elle permet grâce à ses ports et son microprocesseur de faire fonctionner les capteurs à l'aide d’un programme codé en C plus précisément en langage arduino. Les fonctionnalités de l’arduino nous permettront d’utiliser les capteurs spécifiques à arduino comme le capteur de pression, les capteurs infrarouge,...
"Caméra infrarouge"
  • Une caméra infra-rouge qui fonctionne avec une raspberry. Elle possède une résolution HD. Cette caméra de vision nocturne Raspberry Pi est capable d’obtenir des images statiques de 2592 x 1944 pixels, et prend également en charge l’enregistrement vidéo 1080p 30 images par seconde, 720p 60 images par seconde et 640x480p.
"Capteur infrarouge"
  • Des capteurs infrarouge qui permettent de détecter des objets ou des obstacles quand ils passent devant les capteurs. Il fonctionne en envoyant un rayon grâce au transmetteur, renvoyé quand il est confronté à un obstacle vers un récepteur. En fonction du temps d’attente pour recevoir le rayon on peut calculer la distance.
"Capteur de mouvement"
  • Un capteur de mouvement PIR qui nous permettra de détecter les mouvements et ce bloque pendant 15 secondes une fois un objet détecté.
"Capteur de niveau d'eau"
  • Un capteur de niveau d’eau qui permet lorsqu’il est en contact de l’eau d'envoyer un signal qui mesure l'humidité ainsi que la température ce qui nous permettra de savoir s’il y a de l’eau dans le réservoir. Le capteur fonctionne avec arduino et nécessite une pin analogique.
"Raspberry Pi"
  • La carte Raspberry Pi est également un élément majeur du projet car elle va avoir la même utilité que la carte arduino mais elle utilisera elle d’autres capteurs propre à raspberry, et servira également à la reconnaissance faciale des oiseaux avec une IA.

Travail effectué au S6

Conception informatique

1. Calibrage des différents capteurs sur Arduino

Notre arduino et son code comportent pour le moment 5 capteurs dont deux principaux. Un capteur PIR détecteur de mouvement et un capteur de proximité. Nous avons pour le moment décider de travailler par scrutation. Nous avons essayé de travailler par interruption et avec une fonction d'économie d'énergie sleep. Mais n'ayant pas réussi, nous approfondirons ultérieurement pour la réalisation finale du projet. Nous avons articulé ces capteurs grâce à un code arduino avec la logique suivante (cette structure de code et sa logique nous permettra par la suite de travailler plus facilement par interruption) . Nous savons que lorsque le capteur infrarouge PIR capte un mouvement, il lui faut 15 secondes pour qu’il puisse être réactivable et qu’il est capable de détecter un mouvement jusqu’à 7 m. Ne voulant détecter que les oiseaux qui entrent dans la mangeoire pour cela nous avons couplé ce détecteur à un capteur de distance. Lorsque le détecteur de mouvement reçoit un signal, nous testons pendant 15 secondes si le capteur de distance capte un objet à moins de 15 cm. Si c’est le cas alors nous envoyons sur le port série l’ordre de prendre des photos et d’envoyer les différentes valeurs de nos capteurs (température , humidité, luminosité), et nous vérifions le niveau d’eau et de nourriture .

2. Communication entre raspberry Pi et arduino et prise de photos

La communication entre la raspberry Pi et l’arduino se fait via l’un des ports USB. C Tout d’abord nous importons les bibliothèques qui nous seront utiles. Puis nous configurons et initialisons plusieurs variables que nous utilisons dans la suite du programme. Nous avons firebaseConfig qui nous permet de nous connecter à une base de données en ligne, nous permettant de stocker toutes les informations de chaque oiseau et de chaque capteur en temps réel. Nous initialisons aussi la caméra ainsi que toutes les variables permettant de récupérer les données de l’arduino. “ser” nous permettra de lire sur le port USB.

Ensuite, nous entrons dans une boucle infinie, permettant au programme de tourner en continu. Nous récupérons le nombre d’oiseaux dans la base de données pour rendre tout cela dynamique et pour renommer les photos. Puis nous attendons que l’arduino nous envoie l’information “Photo”, nous permettant de savoir qu’un oiseau s’est posé sur la mangeoire. Nous récupérons les données envoyées par l’arduino, la date et l’heure actuelle et nous prenons une photo avec la caméra qui elle est sauvegardée dans le répertoire courant.

Une fois la photo prise, nous l’enregistrons dans la base de données, dans une partie qui s’appelle “storage” où nous pouvons stocker n’importe quel fichier. Nous récupérons ensuite le lien de la photo et nous créons une variable data contenant les informations de l’oiseau que nous envoyons sur la base de données et que nous retrouverons sur l’application. Pour finir, nous faisons le même processus pour les données des capteurs.

3. Communication entre la raspberry Pi et l’utilisateur

L’utilisateur aura accès aux photos et informations de la mangeoire via une application. Pour faire cela, nous avons décidé d’utiliser Android Studio permettant de créer des applications facilement et d’avoir un accès à une base de données gratuite (firebase).

Voici à quoi ressemble l’application. Pour l’instant, nous pouvons y voir les photos des oiseau, les détails de chaque oiseau et les statistiques de la mangeoire (température, nombres d’oiseaux passés, …), Le but étant à l’avenir d’améliorer cette application avec la mangeoire pour avoir plus de fonctionnalités comme des statistiques plus poussées ou des détails plus précis sur les oiseaux.

4. Lancement automatique

Afin de rendre la mangeoire autonome, nous avons automatisé le lancement de nos programmes. Nous avons utilisé “crontab” qui permet de lancer des programmes automatiquement à un moment précis. Dans notre cas, nous avons lancé le programme 1 minute après le démarrage de la Raspberry Pi afin de lui laisser le temps de se connecter au wifi.

Nous avons donc ajouté cette commande :

@reboot sleep $((60)); /home/pi/.local/lib/python3.7/site-packages python3.7 /home/pi/Desktop/img/envoie_donnee_database.py > /home/pi/logs/logs.txt 2>&1

En cas d’erreur, nous enregistrons les messages dans le fichier logs.txt.

Conception du modèle de mangeoire

1. Maquette 3D sur SketchUp

  • Recherche de la disposition optimale

Notre réflexion sur la disposition de chaque élément à débuté par des recherches internet afin d’observer les différentes dispositions déjà réalisées. Après avoir analysé de nombreux projets, nous avions tous en tête quelque chose de relativement concret et similaire : un objet relativement grand pour faciliter la disposition de tous les éléments, nos capteurs et caméra disposés au centre de la mangeoire et face à la zone de breuvage et d’alimentation pour avoir la meilleure visibilité possible. Les réservoirs d’eau et de graines seront donc disposés à gauche et à droite de la mangeoire, les composants auront un espace dédié et relativement éloigné de la réserve d’eau. Le principe de toit s’ouvrant sur le devant et permettant d’une part de remplir les réservoirs mais également d’atteindre l’emplacement des composants. L’utilisation de plexiglas nous permettra de récupérer un maximum de luminosité sur l’objectif de la caméra mais également d’avoir une meilleure visibilité des réservoirs d’eau et de graines.

  • Dimensionnement

Dans un premier temps, nous avons commencé par des schémas sur papier libre avec des dimensions qui nous semblaient raisonnables. Celles-ci étaient donc relativement raisonnables étant donné l’utilisation de notre mangeoire. En effet, notre mangeoire sera utilisée dans un jardin de campagne, cela implique qu’il n’y aura que des oiseaux de petites tailles qui viendront se nourrir et s’abreuver. C’est donc pour cela que nous avons revu à la baisse.

En résumé, la base de notre mangeoire mesure 40cm * 50cm. Celle-ci mesure également 30cm de hauteur. Nous avons décidé de réaliser des parois permettant de séparer chaque compartiment : eau, graines, composants et cartes électroniques. Les capteurs sont placés à distances égales afin de rendre plus esthétique visuellement notre mangeoire. La capacité maximum de notre réservoir d’eau sera de 2.6 dm3 et il sera possible de mettre plusieurs kilogrammes de graines dans le réservoir opposé.

"Modèle 3D de la mangeoire"

2. Réalisation d’une maquette en carton à taille réelle

L’utilisation de bois et de plexiglas nous permettra de réaliser la mangeoire finale. Pour le moment nous avons réalisé, à taille réelle, une mangeoire avec des feuilles de plastique permettant de remplacer le plexiglas. De même pour le carton qui remplace le bois. Ce prototype nous permettra de confirmer nos plans, de vérifier si la visibilité de la caméra est bonne mais également peut-être de réaliser un test par beau temps, pas de pluie pour ne pas abîmer le carton. Afin de faire tenir au mieux chaque pièce de notre mangeoire, nous avons utilisé un pistolet à colle mais également du scotch double face.

"Prototype en carton de la mangeoire"

Travail effectué au S7

Gestion de l'énergie (Panneau Solaire)

L’un des objectifs de la mangeoire était de la rendre autonome en énergie, nous avons donc alors réfléchi à la consommation de notre Arduino et de notre Raspberry pi. Nous trouvons pour notre Raspberry une consommation de l'ordre de 350mA - 400 mA heure. Néanmoins il doit être alimenté en 5V /1.5A ce qui peut être fourni par notre module MPPT et pour une Arduino Uno avec une consommation de 35 mA mesurer à l’aide d’un ampèremètre USB semblable à celui ci. L’Arduino fonctionne en 5V branché au Raspberry.

"Ampèremètre USB"

On à donc en totalité besoin au maximum de 500mAh à 5V soit 2.5W/h. On prendra 6 batteries de 3.6 V en série d’une capacité de 3.5A chacune. au final nous avons donc 21A soit 8.4h de fonctionnement (On soudra nos batteries par point). Dans un budget raisonnable on à décidé de prendre un panneau solaire 10W sachant que la journée, le panneau solaire est en considérant que la panneau génère 4W ce qui n’est pas aberrant avec un faible ensoleillement on rechargera sur 8h 12A de batterie. Si nous arrivons à réduire au maximum la consommation la nuit et la journée quand il ne se passe rien nous serions dans la possibilité de tenir sur batterie au minimum 2 Jours.

"Panneau solaire 10 W SOL10P 17,6 V/610 mA"

Nos trois éléments, panneau solaire, batterie et Raspberry seront reliés grâce à un module MPPT. Ce module nous permettra de récupérer une puissance optimale du panneau solaire puis de charger la batterie en lui fournissant la puissance, selon la méthode adaptée pour des li-ion (générateur de courant constant et tension constante).Ce qui protège la batterie ( rôle d’un BMS ) et abaisser / remonter la tension de la batterie à 5 V pour le Raspberry.

"Module SunFlower 3,3/5/9/12 Vcc "

Conception informatique

Pour la partie informatique nous avons essayé d’élaborer une intelligence artificielle afin de pouvoir reconnaître l’espèce des oiseaux. Pour cela nous avons fait des recherches sur le deep learning et la reconnaissance faciale.


1. Recherche de dataset d’oiseau

Pour apprendre à notre IA à reconnaître les oiseaux, il nous fallait avoir une dataset contenant des dossiers de chaque espèce avec de nombreuses photos. Pour cela nous avons fait des recherches sur des dataset déjà existantes. Nous avons trouvé une dataset contenant 325 espèces du monde. Ce dossier contient des sous-dossiers pour l'entraînement, la validation et les tests de notre modèle. Dans ce dossier, nous avons fait un tri car il y avait des espèces non désirées. Nous avons fini avec une dataset de 65 espèces. Pour avoir une dataset plus complète, nous avons pensé la créer nous même. En effet, nous avons fait des recherches sur des programmes pouvant télécharger les images automatiquement. Cependant, par manque de temps nous n’avons pas pu tester cette solution. Nous ferons cet essai lors du prochain semestre.

2. Le deep Learning

C’était la première fois que nous apprenions à faire du deep learning. Nous avons tout d’abord fait des recherches afin de comprendre comment cela fonctionne et comment apprendre à notre modèle à faire de la reconnaissance aviaire. Pour réaliser l’entraînement de IA nous avons codé un programme en python avec les librairies TensorFlow et keras. Ci-dessous notre programme qui s’inspire d’un code existant provenant de la chaîne youtube TensorFlow. Nous allons maintenant l’expliquer.

Nous allons créer des images pour l’apprentissage et la validation à partir de la dataset téléchargées. Puis nous créons des générateurs d’entraînement et de validation qui permettent de créer des données d’apprentissage et de validation.

Ensuite, nous définissons nos réseaux neuronaux. Comme nous avons des images complexes et volumineuses, nous avons plusieurs couches de neurones afin de bien traiter les images et d’obtenir de meilleurs résultats lors de la reconnaissance des oiseaux. Nous utilisons pour l’entraînement des images de 150 par 150. et nous avons à une sortie de 65 neurones correspondant aux 65 espèces apprises par le modèle. Nous pouvons voir dans le sequencial que nous avons 4 couches de convolution. Nous lui fournissons une image en entrée et lui demandons de créer 65 et 128 filtres pour chaque image. Puis, à chaque entraînement il va déterminer les meilleurs filtres pour associer au mieux les images aux étiquettes voulues. Ces couches de convolutions étant empiler les unes sur les autres permettent d’améliorer l'apprentissage des caractéristiques de chaque espèce. Nous allons ensuite compiler ce modèle et lui faire effectuer 200 entraînements afin d’avoir un taux de réussite élevé.

Pour l’instant notre modèle n’est pas encore implémenté dans le programme de la mangeoire connecté. Nous voulons d'abord obtenir le meilleur modèle possible. Afin de tester notre modèle, nous utilisons un programme dont une partie sera utilisée dans le programme de la mangeoire.

Nous appelons notre modèle, ainsi que l’image que nous voulons tester. Puis nous utilisons la fonction predict() de notre modèle et nous affichons le résultat. Nous devrons ensuite parcourir ce tableau afin de trouver l’espèce prédit pour récupérer son nom.

Amélioration du modèle de mangeoire

Après avoir bien analysé notre besoin, nous avons décidé de modifier plusieurs choses dans la conception de notre mangeoire connectée. Premièrement la disposition des capteurs : nous avons décidé de mettre le capteur de présence IR dans le toit de notre mangeoire car ce sera plus simple pour détecter tout oiseau entrant au niveau de l’avant de la mangeoire. Les capteurs de force situés sous le réservoir de graines, ainsi que celui permettant de peser les oiseaux ont été enlevés de la maquette par simplification de fonctionnement et de réalisation. Maquette 3D sur Fusion 360 Nous avons décidé de modifier la taille de notre mangeoire car elle était bien trop grande par rapport aux oiseaux typiques de notre région. De plus, nous avons également repensé le toit de notre mangeoire pour pouvoir y insérer un panneau solaire nous avons donc un côté du toit beaucoup plus grand que l’autre pour pouvoir y poser un panneau solaire. Dans la partie réservée aux composants, nous allons réaliser des fixations pour que chaque carte (Arduino et Raspberry) ainsi que la batterie, pour qu’elles aient leur place respective pour simplifier les branchements. En ce qui concerne les verseurs de nourriture et d’eau nous avons gardé le même principe (jsp ce qu’on dit vu qu’on ne l’a pas fait)


Pour ce faire, nous avons réalisé une nouvelle modélisation 3D sur le logiciel « FUSION 360 » en faisant toujours attention à l’emplacement des capteurs et des réservoirs de nourriture.


1. Dimensionnement

Comme dit précédemment, nous avons décidé de réduire très largement la taille de la mangeoire. En effet, nous sommes passés d’une base mesurant 50 cm x 40 cm à une base mesurant 30 cm x 25 cm. De même, en ce qui concerne la hauteur qui n’est plus de 33 cm mais de 21 cm sans la hauteur du toit et 26 cm en considérant le toit. Le toit à également dû être modifié mais lui a été agrandi. Nous avons pris la décision de réaliser un pan qui mesure précisément la taille du panneau solaire qui permettra d’alimenter tous nos composants. Ce panneau solaire mesure 35.5 cm x 26 cm. Ces réductions de dimensions ne changent que l’espace de stockage des graines et de l’eau car nous avions calculé l’espace nécessaire pour le rangement de nos composants à l’arrière de la mangeoire.

2. Réalisation d’une maquette en carton à taille réelle

L’utilisation de bois et de plexiglas nous permettra de réaliser la mangeoire finale. Pour réaliser le prototype, nous avons choisi d’utiliser du carton, diminuant les frais. Contrairement à l’année passée, nous avons utilisé le logiciel InkScape pour réaliser des modèles 2D de chacune des planches constituant notre mangeoire. Ce logiciel nous a permis d’envoyer directement les schémas sur l’imprimante laser. Les découpes sont donc plus nettes et nous avons également utilisé le principe d’encoches pour fixer les planches entre elles. L’utilisation de scotch a été nécessaire pour assurer la fixation et le maintien.

Nous avons donc réalisé deux “feuilles” InkScape, l’une nous permettant de découper le toit en trois parties et une autre pour découper toutes les parties du cube principal Pour la découpeuse laser, nous avons utilisé un système de couleur (bleu et vert) permettant de donner l’ordre à la découpeuse de d’abord découper la couleur bleu (les contours) avant de découper les encoches (en vert).

Par la suite, nous avons rassemblé toutes les parties en respectant un ordre et un sens bien précis nous permettant de fixer au fur et à mesure. L’assemblage s’est réalisé correctement car les dimensions ont été respectées et les encoches correspondaient parfaitement. Seul souci concernant certaines planches pour lesquelles nous avions pris en compte l’épaisseur d’une planche de bois (environ 1 cm d’épaisseur) pour au final utiliser du carton (3 mm d’épaisseur).

Travail effectué au S8

Autonomie de la mangeoire avec arduino uno

Conception du PCB (remplacement de l’Arduino)