Distributeur nourriture

De fablab
Aller à : navigation, rechercher

Introduction

Description du projet

Ce projet est un distributeur automatique de nourriture pour les animaux de compagnie. Le distributeur se déclenche aux heures spécifiées par l'utilisateur via une application mobile.

Membres de l’équipe

  • Pedro ERNESTO
  • Mathis LAVIGNE
  • Matthieu PETIT
  • Hugo PONS

Problématique

Actuellement, presque tout le monde a un animal domestique, souvent un chat ou un chien. En maître indignes que nous sommes, nous passons la plupart de nos journées loin de chez nous et de nos animaux pour travailler, étudier, s’amuser, etc. Ces animaux peuvent avoir faim et il n'y aura personne pour les nourrir.

Notre distributeur automatique de nourriture permettrait de garder nos animaux de compagnie nourris et heureux.

À l'aide d'une application mobile, il est possible de configurer les heures auxquelles nourrir nos animaux, et même de déclencher instantanément le distributeur, tout cela en étant n'importe où dans le monde.

Ce distributeur automatique ne doit pas être complètement dépendant d’APIs ou d’un serveur distant, qui pourraient tomber en panne et bloquer l’activation du distributeur. Une solution, que nous avons implémentée, serait de sauvegarder en local la configuration la plus récente afin que le distributeur puisse fonctionner même sans accès à internet.

Nous voulons créer un distributeur automatique peu cher et facile à fabriquer chez soi, à la manière des low-techs.

Matériel utilisé

Voir le Matériel ci-dessous

Scénario d’utilisation

Schéma d'utilisation du petfeeder

"Diagramme d'utilisation"

Schéma temporel

"Diagramme"

On peut voir sur ce diagramme de séquence que l'ESP à droite effectue une requête toutes les X secondes vers le serveur, afin de récupérer la configuration la plus récente.

L'utilisateur, via l'application web, soumet une modification de configuration. Cette nouvelle configuration écrase la précédente sur le serveur. Ainsi, l'ESP la récupère lors de la requête suivante, puis la remplace dans sa mémoire.

Ce mécanisme permet à l'ESP de continuer de fonctionner avec la configuration la plus récente, même si le serveur tombe en panne.

Démonstration vidéo

Nourrir à l'heure

Fichier(YouTube):PetFeeder - Feed on Time.mp4

Nourrir instantanément

Fichier(YouTube):PetFeeder - Instant Feed.mp4

Démonstration vidéo de l'interface du point d'accès Wi-Fi (pour se connecter internet)

Fichier:Petfeeder hotspot.mp4

Application

Page d'accueil

"Accueil"

Sur la page d’accueil, il est possible de :

  • Déclencher le petfeeder instantanément (au prochain réveil de l’ESP)
  • Voir l’heure de la dernière mise à jour de la configuration
  • Voir la liste des horaires programmés, dans un ordre croissant
  • Naviguer vers la page d’édition

Modification des horaires

"Modification"

Sur cet écran, l'utilisateur peut voir la liste des heures à laquelle le distributeur se déclenche. Si la configuration est vide, cet écran comporte uniquement le bouton d'ajout. Sinon, il est possible de :

  • Voir la liste des horaires programmées sur la configuration actuelle
  • Ajouter un horaire
  • Supprimer un horaire
  • Supprimer tous les horaires
  • Modifier un horaire
  • Soumettre les modifications
  • Revenir à l'accueil

Module embarqué

Première connexion

Pour initialiser l'ESP et lui permettre de récupérer les configurations via internet, il faut le connecter à un réseau Wi-Fi. Voici la marche à suivre :

  • Tout d'abord, il faut branche le module.
  • Ensuite, il faut se connecter au point d'accès généré par le module sur un smartphone ou un ordinateur.
  • Il faut alors charger la page à l'adresse 192.168.4.1 dans un navigateur.
  • Enfin, il faut renseigner les identifiants d'un réseau Wi-Fi accessible dans le formulaire sur la page.

Une fois ceci fait, l'ESP va automatiquement synchroniser son horloge et rechercher la dernière configuration disponible sur le serveur cloud.

Crash proof

En cas de redémarrage, de coupure de courant ou de crash de l'application, il n'est pas nécessaire de re-renseigner les identifiants Wi-Fi via l'interface web. En effet, ceux-ci sont sauvegardés en mémoire de masse et ils sont tous essayés à chaque redémarrage. Il est notamment possible de changer d'endroits le module sans avoir à tout reconfigurer à chaque fois.

Scénario de changement de configuration

Imaginons que l'utilisateur change la configuration sur l'interface web.

  • La page petfeeder-website.vercel.app/api/config (qui est en json) va changer, notamment le champ __v qui décrit un changement de version de la configuration.
  • Toutes les 10 secondes, le module va charger la configuration en cours disponible sur le serveur. Si le champ __v a changé depuis la dernière configuration stockée sur l'ESP, celle-ci est mise à jour.
  • Seules les distributions de nourriture postérieures à la récupération de la configuration sont prises en compte pour la journée actuelle. I.e s'il y a une distribution de nourriture à 12h34 dans la nouvelle configuration et qu'il est 12h35, la distribution est ignorée pour la journée et ne sera effective que le lendemain.

Instant feed

Un événement spécial appelé "instant feed" est possible via l'interface web. Demander un instant feed provoque une distribution de nourriture dès la prochaine récupération de configuration par l'ESP. Elle disparait dans le endpoint api/config dès qu'elle a été récupérée par l'ESP (dès que celui-ci effectue une requête vers la page, user-agent à l'appui).

Budget approximatif

Matériel

  • ESP8266 (microcontrôleur avec carte Wi-Fi) : 5€
  • Moteur pas à pas : 5€
  • Contenant : Gratuit (contenant du moteur)
  • Hélice imprimée en 3D : < 1€
  • Breadboard (utilisée pour le prototype mais pas nécessaire) : 5€
  • Jumping Wires : Coût négligeable

Total : 16€

Temps de travail

  • Temps passé en cours : 15h

En dehors des cours

  • La partie application embarquée sur l'ESP8266 nous a pris environ 30h
  • La partie application web nous a pris environ 15h.
  • La partie mécanique nous a pris environ 6h.

Le temps de travail total est donc d'environ 66h.

Bilan

Avec un coût total de 16 euros et du matériel facile à se procurer, notre prototype répond à notre problématique initiale.

Pistes d'amélioration

Piste 1

Prise en compte des fuseaux horaires du distributeur et de l'utilisateur. En effet, pour le moment le fuseau horaire est hard-codé dans le programme source (GMT+1), et il est donc impossible de le modifier sans tout recompiler. Cela peut poser problème dans le cas où l'utilisateur n'est pas sur le même fuseau horaire que le distributeur. Il serait utile de pouvoir le modifier dans le site local accessible via le point d'accès du petfeeder par exemple.

Piste 2

Les croquettes se coincent facilement dans le dispositif. Nous pensons que c'est dû premièrement à notre moteur qui n'est pas très puissant, et deuxièmement à la forme de l'embouchure par lequel les croquettes passent du réservoir à l'hélice permettant de les distribuer. Une des pistes d'amélioration serait donc de changer le moteur et de retravailler la forme de l'embouchure pour éviter que les croquettes ne se coincent.

Piste 3

La première configuration du petfeeder (le fait de se connecter au point d'accès Petfeeder, puis d'aller à la page 192.168.4.1, pour enfin mettre ses identifiants) n'est pas une procédure forcément très simple pour un utilisateur qui n'est pas très à l'aise avec ces choses là. Une dernière piste d'amélioration serait de rendre cette procédure plus simple. Nous n'avons malheureusement pas d'idée pour la rendre plus logique, les fonctionnalités de l'ESP8266 à ce niveau là étant assez restreintes.

Piste 4

Une possibilité d'extension de ce projet serait la détection des puces RFID présentes dans les colliers des animaux, afin d'ouvrir une trappe en fonction de quel animal se trouve devant le distributeur. Une autre possibilité auquel nous avions pensé au début du projet, serait l'ajout d'une balance afin de ne pas distribuer plus de nourriture si le bol est déjà plein, afin de ne pas abîmer le distributeur.

Sources

https://github.com/matthieu994/petfeeder-website

https://github.com/MathisLav/petfeeder-esp8266

https://arduino-esp8266.readthedocs.io/en/latest/index.html

https://docs.platformio.org/en/latest/