Machine à café "sourire" : Machine connecté qui offre des cafés aux personnes souriantes

De fablab
Aller à : navigation, rechercher

Informations générales

  • Encadrants: Jérôme Maisonnasse
  • Partenaires: Sylvie Blanco, GEM

Ce projet est pour un groupe de 2 à 4 étudiants intéressés par la programmation en C/C++ et "hacking".

Contexte

Avec notre partenaire GEM, et dans le cadre d'une expérimentation sur la plateforme Plexus, nous travaillons aux mieux êtres des individus. Pour cela une équipe de GEM a inventé le concept de la machine à café qui distribue un café gratuit à la centième personne qui sourit.

Sujet

L'essentiel de ce projet consiste à détecter l'expression du visage des personnes qui se présentent à la machine à café. Pour le reste, il s'agira de réaliser le programme qui déclenchera la distribution du café. Vous aurez à "hacker" une machine à café pour la démonstration.

Pour la détection du sourire, vous utiliserez la librairies de vision par ordinateur opencv. Vous proposerez des algorithmes et la méthode la plus efficace pour détecter les sourires. Nous vous demanderons de réaliser un prototype fonctionnel qui peut être déployé sur la plateforme Plexus et à l'ENSIMAG.

Equipe

  • BETMONT Guillaume (MMIS)
  • LOCHNER Raymond (ERASMUS)
  • MALLET Guillaume (ISI)
  • MORIN Isabelle (MMIS)


Travail réalisé

Notre projet s'est articulé autour de différentes étapes, réalisées plus ou moins en parallèle afin d'obtenir un prototype fonctionnel à la fin du temps imparti.

Cadrage du projet et objectifs

Suite à des réunions avec notre partenaire GEM ainsi qu'avec les membres de l'équipe d'Amiqual4Home de l'INRIA, qui étaient eux aussi intéressés par la réalisation d'une machine à café connectée, nous avons pu définir différents objectifs à atteindre durant ce projet :

  • Contrairement à l'idée de départ, utiliser une machine de type distributeur n'était pas possible, dû à l'impossibilité de se procurer une telle machine. En revanche utiliser une machine commercialisée et facilement accessible au grand public nous a semblé le meilleur compromis. Nous avons donc travaillé sur une machine de type Saeco Intelia Evo
    Machine à café utilisée.jpeg
    , disponible auprès des membres de Amiqual4Home. Cette machine étant utilisée quotidiennement par ces personnes, une des contraintes a été qu'il fallait qu'elle soit fonctionnelle tout au long du projet, ce qui nous empêchait par exemple de la démonter entièrement.
  • La possibilité d'offrir un café à la centième personne qui sourit n'était plus intéressante puisque le café n'étais plus payant, nous avons donc choisit d'utiliser la détection de sourire à d'autres fins : d'une part, ne servir le café qu'à une personne souriante et d'autre part relier la machine à Twitter et permettre la diffusion de photo des personnes qui sourient en prenant leur café.
  • La machine à café devait être esthétique et utilisable à la fin du projet, ce qui a induit des contraintes de taille des composants, de gestion des fils et des matériaux, et la création d'un boîtier.

Matériel Utilisé

Afin de mener à bien notre projet, nous avons choisi d'utiliser trois composants majeurs :

Implémentation logicielle

Détection du sourire par OpenCV

Pour la partie détection de sourire, nous avons décidé d'utiliser la bibliothèque graphique OpenCV (toutes les informations disponibles ici et de nombreux tuto d'installations pour tout type de machines ) car celle-ci contient de nombreuses fonctions utiles pour la manipulation d'images et est simple d'installation et d'utilisation. L'algorithme utilisé nous permet de détecter tous les visages sur l'image, de sélectionner le plus grand des visages et de détecter si celui-ci sourit ou non.
Le code est disponible dans l'archive en fin de page.
Cet algorithme permet d'extraire la bouche d'un visage d'une image et de la comparer, après traitements, à 2 images (ou plus) tests, dont une moitié correspond à des images de sourires et l'autre moitié à des expressions tristes ou neutres.

Test sourire.gif

Serveur MQTT et lien avec les réseaux sociaux

Afin de permettre au Raspberry de communiquer avec le Nodemcu, nous sommes passé par un serveur MQTT, qui nous permet de stocker les images recueillies par le Raspberry pour les envoyer sur Twitter ou pour transmettre la détection d'un sourire aux commandes de la machine à café. Toutes les informations d'installation sont disponibles ici

L'utilisation du serveur est gérée dans les fichiers client.cpp / client.h. Ceux-ci, aidés par la librairie mosquittopp.h, permettent la connexion au serveur, l'envoi et la récupération de fichiers. Afin de pouvoir envoyer des images sur le serveur qui ne gère que les images en base 64, un fichier de conversion en base 64 a également été écrit et est disponible dans l'archive en annexe.

Les fichiers relatifs à la publication de photos sur les réseaux sociaux sont disponibles et commentés sur le github ici
Le code arduino pour le Nodemcu est disponible sur le github
Les différents messages circulant sur les réseaux lors du fonctionnement de la machine sont schématisés ci-dessous :

Chemin exec.png

Le résultat du premier poste sur twitter est le suivant :

Twitter cafe.png


WARNING : l'utilisation est impossible sur les réseaux tels que eduroam ou wifi-campus, dû à des problèmes de sécurité. Pour que le tout fonctionne, il faut se placer sur un réseau privé.

Messages MQTT

L'ensemble des messages MQTT sont préfixés par : /amiqual4home/machine_place/saeco_intelia/. Les différentes actions possibles sont :

  • power -> allume ou éteint la machine
  • small_cup -> verse un petit café si la machine est allumée
  • big_cup -> verse un grand café si la machine est allumée
  • brew -> augmente la quantité de grain utilisée si la machine est allumée

Les différents callbacks sont préfixés par on_button_press et ont pour suffixe :

  • powerButton
  • smallCoffee
  • Coffee

Les différentes photos sont envoyée sur le topic sourire

Utilisation du code

Le code python relatif à l'écoute des boutons est disponibles sur le raspberry utilisé dans le dossier ~/button. Il se lance par la commande sudo python strandtest.py
Le code c++ se compile à l'aide de make, puis la detection de sourire se lance par ./smile_detect
Un serveur mosquitto doit être disponible et les adresses doivent être changées en conséquences

Conception du PCB et assemblage des composants

Les premiers tests ont été effectués à l'aide d'une plaque externe, et une fois le bon circuit trouvé, nous avons décidé de l'imprimer directement à l'aide du logiciel kicad (tutoriel d'utilisation ici) qui nous a permis de réaliser le circuit suivant :


Pcb cafe.jpg .

Nous avions au préalable pensé n'utiliser qu'une ESP8266, sans le Nodemcu, mais des problèmes d'alimentation nous ont empêché de mener à bien cette implémentation. Nous nous sommes donc rabattus sur l'utilisation d'un Nodemcu, qui est certes plus gros et consomme plus, mais qui nous a permis de répondre aux besoins du projet.
On commence par souder le Nodemcu à la plaque :

Pcb cafe soude.png .


Puis on soude le reste des composants en suivant le schéma electrique suivant (toutes les résistances font 1 kΩ):


Shema elec cafe.png .

On obtient le résultat :

Pcb final cafe.jpg .


Modélisation et impression 3D du boîtier

La machine à café devant être esthétique, nous avons choisi d'imprimer notre propre boîtier modélisé en 3D grâce à Cinema4D. Ce boîtier contient le Raspberry Pi et le module caméra. Il n'est relié par aucun fil à l'intérieur de la machine comme le demande les contraintes, mais permet tout de même l'alimentation du Raspberry. Le modèle Cinéma4D est le suivant.


Boitier 3D.png

Trois boîtiers différents ont été imprimés : un pour le Rasberry, un pour la caméra qui est collé au Raspberry, et un pour les boutons de commandes de la machine et une LED.

Malheureusement, à l'impression, une partie du boitier supérieur du Raspberry ne s'est pas correctement imprimée, ce qui fait que nous avons dû retoucher légèrement le produit. Pour remplacer les couches qui ne se sont pas imprimées, nous avons découpé une plaque de Plexiglas de 3mm d'épaisseur à l'aide d'une machine à découpe laser, que nous avons collé au boitier. De plus, le boitier annexe n'était pas exactement aux dimensions et nous avons dû passer quelques coups de ponceuse afin d'arranger le travail. Voici le résultat final :

Boitier final.jpg Lumiere.jpg


Montage et tests sur la machine à café

Montage :

Une fois l'ensemble des composants créés et fonctionnels, il ne reste plus qu'à assembler le tout avec la machine à café.
On commence par démonter celle-ci

Machine demontee.jpg


Puis on soude les fils du pcb aux différentes commandes de la machine

Soudure pcb machine.png



Premiers tests :


Test 1 cafe.gif


Un bouton permet de lancer la détection de sourire qui, une fois détecté, fait démarrer la machine.

Les tests finaux ont été effectués en soutenance.

Problèmes rencontrés, solutions et voies d'amélioration

  • Le premier problème rencontré lors du projet a été le temps assez long de prise en main du sujet, dû au fait que les objectifs n'étaient pas clairs dès le début. Le côté innovant de notre projet était en effet à la fois un avantage mais également une source d'indécisions. Il a fallu rencontrer les différents acteurs (FabLab, GEM, INRIA) et décider en connaissance de cause quels seraient les objectifs à atteindre. Cela nous a conduit à devoir aller travailler dans l'Atelier du Numérique de l'INRIA avec l'équipe d'Amiqual4Home. Si cela présentait bien des avantages en terme de machines à disposition et d'avis éclairés de membres de l'équipe, il a fallu en revanche trouver un moyen de se rendre dans les locaux, ce qui a compliqué le travail de notre équipe.
  • Nous avions d'abord opté pour l'utilisation d'un ESP8266 sans le nodemcu, cependant le manque d'alimentation stable (même en passant par un régulateur) et d'un connecteur UART fonctionnel nous empêchait de flasher correctement l'ESP8266.
  • Le Nodemcu a pour particularité de démarrer en mode flash lorsque le gpio 0 est à down ce qui était le cas une fois branché à la machine à café. Un fil placé entre l'alimentation et le gpio 0 a permis de forcer le démarrage normal au détriment de la simulation d'un bouton sur la broche 0.
  • Lors des étapes de notre hacking, nous avons été amenés à utiliser différentes technologies, comme l'impression d'un PCB, l'impression 3D ou la découpe laser. Cela nous a permis de mener à bien notre projet, mais chaque étape a comporté son lot de problèmes. Par exemple lors de l'impression 3D du boîtier qui a été interrompue avant la fin, nous avons choisi de remédier à cela par une solution plus "bricolage" en ajoutant une bande de Plexiglas. Ceci rejoint très largement l'esprit FabLab du projet et nous a beaucoup appris.
  • Les soudures dans le boitier annexe sont fragiles, réaliser un autre pcb aurait été plus judicieux mais le manque de temps nous a forcé à rester dans cette configuration.
  • Le pcb situé dans la machine est soumis à une température élevée et à une humidité importante, ce qui peut peut-être l’endommager sur du long terme. La mise en place d'un isolant autour de celui-ci peut être intéressante.
  • La mise en place logicielle effectuée est telle que on peut facilement ajouter tout type de nouvelles fonctionnalités (reconnaissance faciale, communication avec d'autres appareils sur le serveur, déploiement dans l'appartement connecté à l'INRIA etc... )

Conclusion

Ce projet innovant nous a permis à tous de mettre nos compétences personnelles au service d'un objectif commun, mais surtout de découvrir de nouvelles technologies et techniques. Que ce soit le côté algorithmique, micro-électronique, impression 3D et "bricolage", chacun a beaucoup appris. L'aspect FabLab du projet était également une nouveauté pour nous, sauf pour l'un des membres qui avait fait un projet en cours d'année.
Au terme de ces quatre semaines de projet, nous avons réalisé nos objectifs et permis à notre machine de faire partie d'un ensemble plus vaste d'objets connectés, ainsi que de recevoir de nouvelles fonctionnalités.
Travailler sur un projet totalement nouveau, dans un cadre d'innovation, avec des objectifs fixes mais également une vision plus large dans le futur, avec une équipe motivée et des encadrants disponibles, nous a tous beaucoup plu et a fait de ce projet un véritable entrainement pour l'avenir.

Victoire.jpg Equipe.jpeg

Annexe

Fichier:Archive.tgz