IMA4 2016/2017 P37

De Wiki d'activités IMA
Révision datée du 20 mars 2017 à 22:14 par Ldamiens (discussion | contributions) (Semaine 5)

Cahier des charges

Présentation générale du projet

L’objectif de ce projet est de fabriquer une gamelle pour animaux connectée. Pour ce faire, trois grands axes sont à dégager : une partie informatique, électronique et mécanique.

Partie mécanique

Structure du système

  • Le réservoir. Deux systèmes peuvent être réalisés :
    • Un système de trappes pour le distributeur : deux trappes l’une en dessous de l’autre.
    • Un système de vis sans fin qui permettrait d’alimenter la gamelle.
  • La gamelle. Deux méthodes sont possibles :
    • Mesure du poids en prenant une balance déjà existante et en récupérant et en traitant les sorties.
    • Passer par un système d’estimation de volumes. Dans la gamelle, il y aurait des capteurs permettant de connaître la quantité en volume présente dans la gamelle.

Globalement, ces systèmes sont susceptibles de changer suivant l'état de l'art qui sera réalisé par la suite.

Partie électronique

  • Alimentation. Deux systèmes sont envisagés pour l’alimentation : Un système nomade avec une batterie pour permettre d’avoir une gamelle déplaçable ou un système fixe alimenté par le secteur ou en usb.
    • Batterie : Nous avons besoin d’une batterie qui peut garder l’énergie suffisamment longtemps pour éviter de devoir recharger la gamelle trop souvent. Une durée de vie d’une semaine est envisagée au minimum.
    • Secteur
  • Interface Homme/machine
    • Capteurs
      • Des LEDs couplées à un phototransistor pourraient permettre de connaître la présence ou l’absence de croquettes dans la gamelle.
      • Ultrason pour connaître la présence ou non de l'animal devant la gamelle
      • Autres.
    • Indicateurs : Des indicateurs peuvent être implantés sur le système physique : des LEDS indicatrices de l’état de batterie (si l'alimentation nomade est privilégiée) ou de l’état du réservoir (plein ou vide) sont envisagés.

Partie informatique

  • Unité de contrôle
    • Utilisation d’un arduino avec un module wifi dans le but de réaliser une communication externe via une application mobile Androïd par exemple.
    • Utilisation d’un raspberry avec création d’un serveur Apache pour permettre de communiquer avec l’utilisateur.
    • Utilisation d'un module communiquant autre que les deux cités précédemment.
  • En bonus :
    • Création d’un système de contrôle à distance en mettant en place une caméra afin que l’utilisateur puisse avoir des images à distance, ou simplement une caméra série afin d'obtenir des images de contrôle. Ce système n’aura pas besoin d’être temps réel. Il pourra être implémenté grâce au serveur apache de la raspberry, si l’utilisation de celle-ci est retenue.
    • Des actionneurs pour permettre à l’utilisateur interagir avec son chat à distance (Buzzer, laser, son, …).

Choix techniques : matériel et logiciel

Tout d'abord, nous avons réalisé l'état de l'art des gamelles connectées déjà réalisées et commercialisées. Voici le lien PDF permettant d’accéder à ce fichier.

Fichier:Etat de l art.pdf

Finalement, nos choix techniques sont les suivants :

  • Matériel
    • Mécanique
      • Un système d’hélice contrôlée par un moteur permettant de déverser des croquettes en quantités connues. (Un schéma du système sera réalisé rapidement).
    • Électronique
      • Un adaptateur capable de générer une tension de 5V à partir du réseau.
      • Des LEDs infrarouges couplées à des photodiodes afin de contrôler l'état de la gamelle et du réservoir.
      • Un servomoteur 360° afin de faire tourner le système d'hélice et permettant ainsi de déverser une dose de croquettes dans la gamelle.
      • Des LEDs permettant de visualiser l'état du système (alimentation du circuit, réservoir vide,...) et les résistances qui vont de pair.
      • Un capteur Ultrason afin de pouvoir vérifier la présence ou non d'un animal devant la gamelle.
    • Informatique
      • Un arduino Méga car l'arduino Uno sera limité lorsque nous communiquerons entre le module wifi et l'application mobile.
      • Un module Wifi ESP8266.
      • Une carte shield SD afin de stocker toutes les variables de l'utilisateur et de son chat.
      • Un module horloge temps réel (RTC) afin de pouvoir programmer en fonction de l'heure qu'il est si le choix de l'utilisateur porte sur le réapprovisionnement de la gamelle de cette manière là.

En solution de secours :

  • Un rapsberry
  • Une balance à modifier manuellement
  • Logiciel
    • Solidworks afin de pouvoir concevoir les différentes parties du système mécanique.
    • Les logiciels de programmation (Sublime, vim, emacs, gcc...)
  • Autres
    • Utilisation des machines mises à disposition des étudiants au Fablab : découpeuse laser et imprimante 3D pour la conception de prototypes.

Tableau

Composant Quantité requise Disponible (M. Redon) ? À commander Commentaires
Émetteur et récepteur infrarouge/photodiode Entre 6 et 7 au minimum Une partie Oui 1 LED infrarouge et 1 photodiode ont été empruntés
Adaptateur PS512S 1 Non Oui Lien Gotronic : [1]
Shield carte SD 1 Oui Non Nous avons eu une carte shield Ethernet - SD ainsi que la carte SD.
Module horloge temps réel (RTC) 1 Non Oui Lien Gotronic : [2]
Capteur Ultrason 1 Oui Non Emprunté
LEDs minimum 3 Oui Non Plusieurs empruntées
Résistances Une vingtaine Oui (C205) Non Plusieurs empruntées
Arduino méga 1 Oui Non Un arduino méga et un arduino uno (pour les tests) ont été empruntés
ESP8266 1 Oui Non La version 012 a été empruntée
Servomoteur 360 1 Oui Non Emprunté
Solution de secours : Rapsberry 1 Oui Non Pas encore emprunté, solution de secours
Solution de secours : Balance 1 Non Non Pas encore emprunté, solution de secours

Calendrier prévisionnel

Liste des tâches à effectuer

  • Étude et réalisation d'un système à base de LEDs infrarouges et de photodiodes afin de pouvoir estimer si la gamelle est vide ou pleine. De même pour le réservoir.
    • Circuit d'émission : LED Infrarouge
    • Circuit de réception : Photodiode
    • Étude des emplacements stratégiques dans la gamelle et le réservoir
  • Réalisation d'un prototype de gamelle
    • Conception 3D de l'hélice sur laquelle le servomoteur va venir se greffer
    • Conception 3D de la gamelle complète
    • Découpage/impression de prototypes
  • Étude de l'ESP8266
  • Tests d'écriture et de lecture sur la carte SD depuis l'arduino
  • Étude du module d'horloge temps réel (RTC)
  • Contrôle des différents capteurs en incluant le servomoteur
  • Création de l'application mobile
  • Mise en relation des différentes parties informatiques du système

Calendrier

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Définition cahier des charges 3H
Écriture du wiki 3H00 4H00
Réalisation de l'état de l'art 5H
Échange quant aux technologies et au système mécanique à choisir 2H30
Établissement de la liste et de la répartition des tâches 2H
Recherches quant aux échelles de dosage (Quelles quantités de nourriture consomment les chats en fonction de leur poids ?) 1H30
Établissement de la liste de matériel et établissement des besoins (meilleur rapport besoin/prix étudié) 4H00
Modèle 3D de l'hélice 3H00
Modèle 3D du réservoir 1H30
Étude des LEDs Infrarouge et des photodiodes 4H00
Tests sur le module wifi ESP8266 4H00 8H00 3H00
Tests de lecture et écriture sur la carte SD 6H00 6H00 2H00
Étude du servomoteur et réalisation d'un programme le contrôlant en C 4H00
Prototype de l'hélice et du réservoir 6H00
Achat de planches pour la réalisation des prototypes de la gamelle en bois 4H00
Étude du capteur Infrarouge et réalisation d'un programme le contrôlant en C 3H00
Prise en main d'androïd studio et réalisation d'une ébauche d'application mobile pour notre gamelle connectée 10H00
Étude du capteur ultrason et réalisation d'un programme le contrôlant en C 4H00

Avancement du Projet

Préambule

L’internet des objets (IoT) représente l’extension d’internet à des choses et à des lieux du monde physique (wikipédia). Les objets connectés en l’occurrence sont aujourd’hui un enjeu important. De plus en plus d’objets initialement banals se voient être connectés afin d’en améliorer l’utilisation. Lors de ce projet, nous nous intéressons aux animaux domestiques. Lorsque nous nous absentons, nous n’avons aucun contrôle sur ce qui se passe à la maison. Ainsi, nous ne pouvons pas savoir si notre animal mange ou se porte bien. De plus, nous n’avons aucun retour sur ce que notre chien ou chat notamment a consommé. Est-ce qu’il se nourrit bien ? À quelle fréquence ? Dès lors, il est impensable de s’absenter sur le long terme ou un week-end sans faire intervenir un tiers pour nourrir notre cher animal. Nous pouvons également penser à des animaux qui seraient dangereusement en surpoids. Nous voudrions surveiller leur alimentation mais cela demande une surveillance constante qui n’est pas forcément envisageable. L’objectif de ce projet est de répondre à ces questions et besoins. Et si nous connections une gamelle à une application ?

Gamelle-inox-couleur-antiderapante-6-tailles.jpg
.

Semaine 1

L’objectif de la première semaine a été tout d’abord de lister les différentes tâches à réaliser tout au long du projet. Cette liste sera bien sûr modifiable en fonctions des difficultés ou contraintes rencontrées au cours du projet. Cette liste a été rajoutée à la suite du cahier des charges. Ensuite, un état de l’art a été réalisé. Nous avons ainsi pu clairement définir le schéma de principe de notre gamelle et le mécanisme de réapprovisionnement choisi. Voici de nouveau le lien vers notre état de l'art : Fichier:Etat de l art.pdf

Faisons un point rapide sur ces choix. Un système d’ « hélice » est privilégié afin de réapprovisionner la gamelle. Il s’agit en fait d’un cylindre plat qui sera placé en sortie du réservoir. Le réservoir sera moins large en sortie vers la gamelle qu’à son sommet, en entrée des croquettes. Cela permettra aux croquettes de s’introduire facilement dans notre système d’ « hélice ». Ce cylindre serait troué de part et d’autre afin de pouvoir contenir une certaine dose de croquettes. Ainsi, nous pouvons réapprovisionner la gamelle en fonction de ce dosage. Enfin, nous nous sommes attardés sur l’organisation et la répartition de ces tâches afin de pouvoir détailler une liste de matériel. Cette dernière a été ajoutée au wiki à la suite de la liste des tâches.

Semaine 2

  • Lors de cette deuxième semaine, plusieurs tâches ont été réalisées. Tout d’abord, un début de modélisation du système a été effectué sous Solidworks. Pour ce faire, nous avons dû décider de combien de grammes de croquettes à la fois nous pouvons réapprovisionner la gamelle. Ainsi, nous avons effectué des recherches quant à la consommation de nourriture journalière d’un chat. Étant donné qu’un chien consomme davantage de croquettes qu’un chat, nous nous basons sur la consommation de ce dernier, quitte à donner plusieurs doses si l’animal est un chien. Voici un tableau sur lequel nous allons nous baser :
Tableau de référence
Poids du chat adulte 1-3 kg 4 kg 5 kg 6 kg
Quantités journalières (en grammes) 15-50g 50-65g 65-70g 70-90g
Quantités journalières (avec un bol doseur de 300 mL) x 0.1 - 0.3 x 0.3 - 0.4 x 0.4 x 0.4 - 0.6

Ce tableau marche pour les croquettes Ultra premium direct en particulier.

Grâce à ce tableau, nous pensons que réapprovisionner la gamelle par dose de 15g est approprié. Or,Formule1.png.

Maintenant, il est nécessaire de calculer le rayon de l’hélice permettant au système de doser 15g à la fois.

Nous voulons pouvoir doser 15g : Formule2.png.

Posons n = 4 car nous souhaitons avec 2 doseurs, un de chaque côté de l’hélice : Formule3.png.

Prenons à présent h = 4 cm ; h étant la largeur de l’ouverture conduisant à la gamelle. Nous avons alors :

Formule4.png
.

Voici une image de l'hélice modélisée en conséquent :

Modélisation de l'hélice en 3D.
.
  • D’un autre côté, des tests ont été réalisés en ce qui concerne le dispositif LED infrarouge-phototransistor.

Présentation de l'expérimentation :

Nous utilisons une LED IR SFH 4554 pour l’émission et une pour la réception. Pour des raisons de simplicité de fonctionnement, l'allumage des LEDs ne sera pas piloté. Elles seront continuellement allumées (aucune information n'est à transmettre).

À la réception, nous utilisons une photodiode en pull-down avec une résistance pour contrôler l'intensité dans cette dernière. Nous relions ce montage à un arduino pour vérifier jusqu'à quelle portée nous détectons le signal de la led émettrice. Grâce à cela, nous serons à même de définir les emplacements des émetteurs/récepteurs dans la gamelle et dans le réservoir ainsi que la taille de ces derniers. Voici le schéma de principe :

Schéma de principe.
.

Test rapide de la portée :

Calcul des résistances :

Réception : une résistance de 4.7 kΩ est placée.

Émission : nous alimentons la LED en 5 V. Elle possède un courant U_d = 1.2 V pour 20 mA et supporte 100 mA continue. À 100 mA, U_d = 1.4 V. Pour être certains d'avoir la meilleure portée possible, nous nous rapprochons des 100 mA. Ainsi, pour le dimensionnement de R nous obtenons :

Formule5.png

1. A.N. : V_{CC} = 5V  ; U_d = 1.4V  ; I_f = 0.1A

R = 36Ω. Soit, en normalisant, R = 47Ω.

Avec ces données, nous obtenons une portée maximale de 30 cm.

2. Nous faisons un autre test avec une intensité plus basse : A.N. : V_{CC} = 5V  ; U_d = 1.2V  ; I_f = 001A R = 380Ω. Soit, en normalisant, R = 330Ω. Avec ces données, nous obtenons une portée maximale de 22 cm.

L'intérêt de connaître cette portée est que nous allons pouvoir adapter la taille du réservoir et de la gamelle en elle même afin de rendre notre dispositif réalisable. À titre de rappel, nous utilisons ce système afin de savoir si la gamelle est vide (Ce système fonctionnant en tout ou rien) et également afin de connaître le niveau approximatif des croquettes dans le réservoir.

  • Enfin, pour travailler, nous avons à notre disposition deux arduino : un arduino uno et un arduino méga. L’utilisation du module wifi ESP8266 nous impose de travailler avec un arduino méga. Cependant, les tests tels que pour le système LED infrarouge-phototransistor peuvent être réalisés indépendamment sur l’arduino uno. Ainsi, nous pouvons travailler à deux en parallèle sur des arduino différents. Cependant, il a fallu réadapter le makefile permettant de flasher l’arduino à un arduino méga car celui que nous possédions ne fonctionnait que pour un arduino uno. (Un « -D » étant nécessaire dans la ligne de commande pour flasher l’arduino dans le cas d’un méga, qui ne l’était pas pour l’arduino uno.)

Semaine 3

Lors de cette troisième semaine, nous réalisé des tests sur les deux arduinos.

Le servomoteur et sa PWM

Tout d’abord, le premier test porte sur le servomoteur prévu pour faire tourner le système d’hélice et réapprovisionner la gamelle.

Le servomoteur que nous utilisons est un servomoteur à courant continue. Il a l’avantage de pouvoir être contrôlé en vitesse et de pouvoir tourner à plus de 180°.

Pour alimenter un servomoteur, il faut brancher ses trois connectiques sur l’alimentation 5V de l’arduino, sur la masse et sur une broche PWM.

En effet, la consigne envoyée à un servomoteur est de type PWM (Pulse Width Modulation). Ce signal permet de faire varier la durée en état « haut » du signal grâce à la consigne que nous lui donnons. Voici un schéma montrant quelques exemples de modifications de la durée d’un état « haut » :

PWM explications.png
.

La difficulté a été de programmer ce servomoteur en passant par le langage C. En effet, arduino IDE, il est plus aisé de le faire puisqu’il existe une bibliothèque servo.h permettant de programmer des servomoteurs facilement. En C, il a fallu se pencher sur le fonctionnement et le contrôle d’une PWM grâce aux différents registres de l’arduino.

Dans un premier temps, il faut configurer les registres TCCR1A et TCCR1B afin d’activer la PWM en mode non-inversé et à fréquence élevée.

Enfin, il faut activer la PIN5 du port B en sortie (Pin PWM).

Rentrons un peu plus dans le détail quant à la configuration des deux registres TCCR1A et TCCR1B. TCCR0A = 1000 0001 = 0x81 et TCCR0B = 0000 0101 = 0x05

TCCR0A.png
.
TCCR0B.png
.

TCCR0A :

  COM0A1 = 1 COM0A0 = 0 => non-inverting mode
  COM0B1 = 0 COM0B0 = 0 => mode standard
  WGM01 = 0 WGM00 = 1 => PWM mode


TCCR0B :

  FOC0A = 0 FOC0B = 0 => car PWM mode
  WGM02 = 0 => PWM mode
  SC02 = 1 CS01 = 0 CS00 = 1 => clk (entrée/sortie) /1024

Pour connaître ces résultats, les tableaux descriptifs sont disponibles dans la datasheet de l'arduino méga, disponible dans les références à la fin du wiki.

Dans un deuxième temps, en modifiant directement le registre OCR0A, nous envoyons directement une commande au servomoteur. La durée en état « haut » est ainsi proportionnelle à la consigne saisie dans OCR0A.

Le servomoteur tourne bien différemment en fonction de la valeur saisie dans OCR0A. Maintenant, il reste à comprendre comment contrôler de manière précise le servomoteur et sa position en fonction de la consigne.

Le capteur ultrason

Présentation

Nous pensons utiliser le module HC-SR04 couplé à un arduino pour détecter la présence de l’animal devant la gamelle. Cela servira à ne pas prendre en considération le contenu de la gamelle pour savoir si elle est vide ou non lorsque l’animal se nourrit. Ou encore, cela aidera afin de pouvoir réaliser un suivi à savoir : à quel moment le chat a-t-il été manger ?

En lisant la documentation technique du HC -SR04, nous en tirons ceci :

US data.png
.

Le fonctionnement du système est simple et qu’il suffit d'envoyer un message de 10µs minimum avec une écart de 60 ms minimum pour recevoir une réponse du capteur.

Le capteur renvoi un signal qui a un temps proportionnel à sa distance par rapport à l’obstacle.

Expérimentation

Nous rajoutons des LESs afin d’avoir une indication lorsqu’un signal est envoyé. La valeur reçue est visualisée à l’aide de l’outil minicom, la valeur était envoyé sur le port série. Nous remarquons que le système fonctionne même si des imperfections de de mesure subsistent (dues notamment au programme). La précision du système suffit néanmoins à la détection du chat devant la gamelle.

Problème lié à l'étude

Le module utilise une fréquence de 40khz. Suite à des vérifications, les chats et les chiens entendent des sons pouvant aller jusqu'à 60khz. Une recherche a été effectuée sur les barrières repoussant les chiens et les chats. Malgré le peu de documentation technique que nous avons trouvé, nous remarquons que les fréquences utilisées sont de l'ordre de 25 khz. Ces fréquences sont bien loin des 40khz de notre système. Cependant, une petite expérimentation a été réalisée sur un chat de 6 ans à l’aide d’une application smartphone générant des ultrasons. Il s’avère que le chat est dérangé par ces fréquences, le chat s'en va au bout de 10 minutes d’expérience.

Conclusion

Même si le module HC-SR04 est très simple d’utilisation, nous ne pouvons continuer à nous en servir pour notre projet de gamelle connectée.

Autre alternative
  • Tapis de jauge de contrainte → couvre une surface trop petite
  • Détecteur de présence infrarouge → convient pour des objets de taille supérieure à 15 cm

Notre choix se porte donc sur le capteur infrarouge, que nous programmerons dans une séance ultérieure.

Semaine 4

La semaine a été en grande partie consacrée à la réalisation d’un prototype pour le système d’hélice et le réservoir. Tout d’abord, nous avons dû faire plusieurs aller-retour au magasin afin d’acheter des planches pour la réalisation des différents prototypes. La première planche qui a été acheté était une medium, matériel qui n’est plus accepté dans la découpeuse laser puisqu’elle encrasse le filtre et la lentille de l’appareil. Nous avons donc du aller acheter les bonnes planches. De plus, il a fallu réserver des créneaux au fabricarium et apprendre à se servir de la découpeuse laser. Le prototype final n’est pas encore assemblé puisque nous réfléchissons à un système de « pied à coulisse » afin de pouvoir choisir le dosage unitaire que peut servir l’hélice.

Semaine 5 et semaine 6

Création d’un programme contrôlant la lecture et l’écriture sur la carte SD

  • Présentation

Pour rendre notre projet innovant par rapport aux autres gamelles connectées proposées sur le marché, nous avons décidé de faire un suivi lié à l'alimentation du chat. Par exemple, nous souhaitons savoir à quels moments de la journée l’animal va manger, pendant combien de temps, en quelles quantités etc… Pour cela, nous devons stocker ces différentes données. Pour ce faire, nous utiliserons le shield sd/ethernet suivant :

  • Code arduino shield Sd/ethernet

Pour commencer, l’expérimentation du shield a été effectuée à l’aide d’arduino IDE afin de réaliser un prototype rapide et tester si le shield est efficace et permet de répondre à nos besoins.

Nous nous basons sur l'exemple proposé par arduino IDE suivant :



Nous remarquons que nous écrivons facilement sur la carte SD grâce à la bibliothèque disponible. En ajoutant quelques boutons et en modifiant légèrement le code, nous arrivons à sauvegarder la durée de maintien du bouton ainsi que la fréquence d’actionnement.

  • Code C Shield SD/ethernet

Une fois le prototype fait et fonctionnel, nous décidons d’écrire le code en C. Pour cela, nous utilisons en particulier deux bibliothèques fournies par Monsieur REDON : Sd2Card et spi. Après de multiples tentatives, nous arrivons toujours à l'erreur suivante : “SD_CARD_ERROR_CMD0”. Cette dernière est liée à un timeout qui persiste malgré la modification de paramètres dépendants.

  • Changement de matériel

Monsieur REDON nous a fourni un nouveau shield uniquement SD cette fois-ci pour tester si le problème est matériel. En voici la photographie :

  • Code C Shield SD

En recompilant le code sur le nouveau shield, nous remarquons qu'il n'y a pu d'erreur liée à l'initialisation de la carte SD. Suite à des expérimentations liées à la prise en main du code exemple donné, nous arrivons maintenant à écrire une information dans un bloc est à relire cette information plus tard.

Voici un extrait lu depuis l’utilitaire minicom lors de la lecture de la carte SD :


Le shield fonctionne comme désiré et nous pourrons ainsi enregistrer des informations afin de les traiter plus tard.

Semaine 6

Semaine 7

Semaine 8

Semaine 9

Semaine 10

Fichiers Rendus

Références

Datasheet

ESP8266 Adafruit breakout : https://cdn-learn.adafruit.com/downloads/pdf/adafruit-huzzah-esp8266-breakout.pdf

Arduino méga 2560 : http://www.atmel.com/Images/Atmel-2549-8-bit-AVR-Microcontroller-ATmega640-1280-1281-2560-2561_datasheet.pdf

L'ultrason HC-SR04 : http://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf