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

De Wiki de Projets IMA
(Gestion de l'énergie (Panneau Solaire))
(Conception informatique)
Ligne 143 : Ligne 143 :
 
 
 
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.
 
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
 
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 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.
 
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
 
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.
 
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.

Version du 19 janvier 2022 à 15:13

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.

"Modèle 3D de la mangeoire"

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.

"Modèle 3D de la mangeoire"

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.

"Modèle 3D de la mangeoire"

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.