Borne Oenologique

De Wiki d'activités IMA

Le Projet

Tout d'abord le projet de la Borne Oenologique provient du laboratoire Lifl, via Yvan Peter. Ce projet a été proposé par Auchan afin de mieux guider ses clients dans le choix de leur vin.

Ebauche 3D de la future borne

Matériel Requis

-Tablette Android 10 (Compatible OTG et NFC Incorporer)

-Arduino Mega ADK (permettant de communiquer avec la tablette)

-Shield RFID (x2)

-Antenne NFC externe, permettant de déporter le signal NFC émis par la tablette. Du type : NFC Band-Aid de Flomio

-Borne permettant l'intégration des composants (Prévision de conception par le département mécanique)

-Plexiglas permettant la réalisation de la borne

-Moteur pour plateau à bouteille (x2)

-LED pour éclairage des bouteilles

Fonctionalités

Liste de Séances

Semaine 1

La première semaine a été consacrée à la rencontre des différents interlocuteurs du projets ainsi qu'à la rédaction du cahier des charges, celui-ci étant primordial au développement du produit.

Semaine 2

Rédaction du cahier des charges : Fichier:CahierdesCharges.pdf

La deuxième semaine a été consacrée à la rencontre des différents interlocuteurs du projets, ainsi qu'à la prospection de solutions. Après recherches, deux principales solutions s'offrent à nous concernant l'architecture du système : soit articuler le système autour d'une tablette Android, soit l'articuler autour d'un mini PC.

La première solution a l'avantage de bénéficier des atouts des tablettes tactiles actuelles, à savoir : très hautes définition de l'écran, bon comportement tactile, communication Android Beam (via le NFC). Cependant, la liaison avec les capteurs RFID sera plus dure à réaliser. Tandis que la solution à base de mini PC a comme principal atout une gestion du bas niveau plus aisée, notamment concernant la communication avec les modules RFID.

Après réflexion, nous avons choisis la solution à base d'Android, principalement pour bénéficier de la qualité des tablettes actuelles. Cela nous permettra également d'approfondir nos connaissances vis à vis de la programmation Android.

Semaine 3

Réalisation des tests des solutions techniques retenues, à savoir :

  • Test de la platine Arduino + Shield RFID : Test Réussi
  • Test de dialogue Application Android + Arduino : Test Réussi


D'un point de vue applicatif, nous avons commencé à réfléchir au différentes fonctionnalités ainsi qu'à l'ergonomie de certaines vues.

Nous avons notamment réalisé le prototypage de certaines interfaces, grâce à l'application web fluidui : https://fluidui.com

Voici le prototype de l'interface permettant de comparer 2 vins entre eux :

Prototype de l'interface de comparaison de 2 vins

Semaine 4

L'Arduino est capable de lire une puce RFID via le Shield PN532. La lecture se fait sur le secteur 4. Ainsi un numéro de série est récupéré, comme un code barre. Il est composé de 12 chiffres. Les données stockées sur la carte RFID sont en hexadécimale, du type uint8_t (8bits maximum).

L'Arduino est aussi capable via la librairie "USB Host Shield library Version 2.0" de communiquer la référence (équivalent à un code barre) vers l'appareil Android. Les tests sont effectués avec un Sony Xperia Sola en attendant l'utilisation d'une tablette tactile de type Nexus. La transmission des données entre l'Arduino et Android se fait via un protocole série. La transmission effectuée est un tableau de 12 cases mémoires du type uint8-t.

      uint8_t CODE[12];


Concernant l'application Android embarquée sur la tablette de la borne, son développement a commencé.

Nous avons dans un premier temps débuté par conceptualiser la base de données embarquée dans l'application.

Une fois l'implémentation de la base de données finie, nous avons développé un ensemble de fonctions permettant de gérer et d'accéder à la BDD. Cette BDD permet pour l'instant de caractériser les vins ainsi que les plats recommandés pour certains vins. Voici la représentation UML de la BDD :

Représentation UML de la BDD

A chaque table de la BDD correspond un objet Java, qui est directement instancié après récupération dans la BDD grâce à une fonction que nous avons développé.


Parallèlement à cela, nous avons établit les grandes lignes de l'interface d'accueil, nous permettant également de vérifier le bon fonctionnement de la communication entre la tablette et l'Arduino :

Page d'accueil fonctionnelle de l'application

Semaine 5

Mise en place du second lecteur RFID:

Après réception du deuxième lecteur RFID PN532, nous avons lancé le développement matériel pour la détection de 2 bouteilles. Le choix du BUS I2C n'est pas compatible, en effet le Shield comporte la même adresse que l'autre carte. Nous avons alors essayé de scruter chaque carte, en alimentant une carte sur deux. Cette solution n'étant pas viable à cause d'un problème de puissance de sortie sur les DigitalOupPut de l'Arduino. Un test sur le BUS SPI fut alors tenté, mais aucune librairie n'existe pour ce Shield.

La solution la plus adaptée, c'est à dire qui ne nécessite pas d'alimentation extérieure en rajout, est d'utiliser un lecteur RFID MFRC522 d'un autre constructeur spécialement conçu pour le BUS SPI. Ce qui nous permet de contourner les problèmes de compatibilité entre les cartes sur un même BUS.


Réflexion sur l'interface de recherche de vin:

- Création de la base du layout


Nous pouvons voir dans le schéma ci-dessous, un réseau de Petri montrant l'évolution du système en fonction des différents cas possibles. Le réseau de Petri ne prend, pour le moment, pas en compte le transfert vers le mobile utilisateur.

Réseau de Petri du système, cours IMA4 SA


Parallèlement, l'application Android côté client (installée sur le smartphone du client) a commencé à être développée. Cette application reprendra en grande partie les fonctionnalités développées pour l'application de la borne. Elle permettra ainsi au client d'emmener avec lui certaines possibilités offertes par la borne. Elle permettra également de communiquer grâce à l'Android beam, qui est une communication NFC facilitée entre périphériques Android. L'application contiendra la liste de fonctionnalités suivantes :

  • Possibilité de rechercher un vin selon différents critères (type, prix, etc.)
  • Possibilité d'ajouter des vins à ses favoris
  • Possibilité de scanner un tag RFID d'un vin afin d'obtenir des informations le concernant

Semaine 6

La solution de 2 Shields basé sur des BUS différents ayant été retenu, après réception du Shield RC522 fonctionnant en SPI, nous avons pu commencer l'implémentation du code du deuxième capteur RFID dans le microcontrôleur. Les bytes fournis par l'Arduino à la tablette sont contenus dans un tableau de 24 cases. Les 12 premières cases correspondent au code barre capté par le Shield 1 et les 12 dernières corresponde au Shield 2. Le protocole de transmission est le suivant:

1 Bouteille sur le Shield 1       ===> XXXXXXXXXXXX000000000000
1 Bouteille sur le Shield 2       ===> 000000000000XXXXXXXXXXXX
1 Bouteilles sur les Shield 1 & 2 ===> xxxxxxxxxxxxXXXXXXXXXXXX

L'application Android peut donc générer une page contenant le descriptif d'une bouteille, ou la comparaison des 2 bouteilles.


Nous scrutons en permanence le Shield 2 (RC522), pour déterminer la présence ou non d'une puce RFID. Ce qui nous permet de compléter en temps réel la variable globale transmise. Le Shield 1 (PN522) fonctionne autrement ; lorsqu'une puce RFID est détectée, une interruption IRQ est envoyée sur la broche (n° 2) de l'Arduino. L'interruption se répète à chaque tour de la boucle principale du programme (celui-ci étant synchronisé avec la puce PN522), ce qui nous permet ici aussi de compléter en temps réel la variable globale transmise.


L'application client a avancé, l'interface de recherche de vin est terminée. Cette interface permet de filtrer les vins par type, par plage de prix, et enfin par affinité avec certains plats.

Concernant le widget de sélection de la plage de prix, celui ci n'existe pas dans le Android SDK. Il a par contre été réalisé par un développeur indépendant, le widget se trouve ici : https://code.google.com/p/range-seek-bar/

L'interface est visible sur la capture d'écran suivante :

Interface de recherche de vins

Bien que l'interface soit crée, elle n'est pas encore fonctionnelle, en effet la recherche n'est pas encore finalisée.

L'implémentation de la base de données sur l'application cliente a également été réalisée.

Semaine 7

Durant cette semaine, nous avons poussé le développement matériel de la borne avec les CM5. Nous avons donc pu en tirer différents plans pour une fabrication de la borne. Avant de lancer celle-ci, certains points sont encore à définir, tel que le design définitif. La fabrication de la borne n'est prévue que pour Janvier 2014.

Borne3.PNG


Borne.PNG

Concernant le développement des applications, peu de nouvelles fonctionnalités ont été implémentées.

Nous avons également commencé à établir un document regroupant et caractérisant les vins que nous allons inclure dans les bases de données des applications.


Semaine 8

Durant cette semaine, nous avons mis en place un diagramme de Gantt, permettant de gérer notre projet jusqu'aux dernières semaines. Cette semaine a aussi été utilisée afin de commencer le lien entre les 2 parties du développement de l'application sur la borne.

GANTT du Projet


Semaine 9

La partie électronique du montage a maintenant aboutie. L'application dialogue correctement avec l'Arduino et celui-ci renvoie les informations correctement dans leur intégralité.

Voici le plan du montage de la partie électronique:

Plan de montage de la partie électrique


L'intégration des différentes parties de l'application Android a nécessité quelques améliorations du code source de l'application de la borne:

- Modification de la gestion de détection des différents éléments situés sur les détecteurs

- Modification des éléments permettant le passage d'information entre les "Activity" (sur Android chaque page d'une application est nommée Activity)


Semaine 10

Suite à l'avancé du projet et à la caractérisation de certains vins que nous avons ajoutés à la base de données, nous avons remarqué que notre base de données était insuffisant pour caractériser convenablement les vins.

Nous avons donc entrepris une refonte de la base de données, en tenant compte des remarques suivantes :

  • Les avis d'un expert seront visible dans la fiche d'un vin.
  • Les plats conseillés et les avis des expert ne seront pas assignés de façon individuel à un vin, mais pour un type de vins.
  • Etant donné qu'il existe plusieurs plats conseillés pour un même type de vin, nous avons ajouté une table de liaison entre la table "type" et la table "plat".


Voici un schéma UML de notre nouvelle base de données :

Représentation de la BDD


Semaine 11

Durant cette semaine, nous avons reçu un tablette Android. Nous allons pouvoir adapter le design de l'application Borne en fonction de la taille de l'écran. De plus nous avons commencé à penser à la technique utilisé pour faire communiquer la tablette et le téléphone du client.


Schema du process de communication Borne - Application


2 méthodes sont à l'étude:

- Liaison Bluetooth

- Liaison Wifi P2P

Les 2 méthodes ont leurs avantages et leurs inconvénients. La première est conçue pour les liaisons directes, mais les débits sont faibles. La seconde possède des débits bien plus rapides et une porté supérieure. La liaison Bluetooth possède un désavantage, pour le moment ne ne voyons pas de connexion sans une UNIQUE autorisation de l'utilisateur. Ce qui réduit la simplicité d'utilisation.

 Connexion par WIFI: http://developer.android.com/guide/topics/connectivity/wifip2p.html
 Connexion par Bluetooth : http://developer.android.com/guide/topics/connectivity/bluetooth.html

Semaine 12

Lors de cette semaine, nous avons pensé à l'intégration de diodes blanches au niveau de la borne pour donner un rendu meilleur à la bouteille, ainsi que pour révéler la robe du vin. Pour cela, nous nous sommes orienté vers des diodes ULTRA BRIGHT CMS. Les caractéristiques des diodes sont les suivantes :

Puissance: 2-Watt
Longueur d'ondes: 280-780 nm
Couleur: 6000~7000K
Angle d'éclairage: 140°
Courant: 700-750 mA
Tension d'alimentation: 5V

Ces diodes sont utilisées dans l'automobile pour certains phares à LED, ainsi que certains type d'éclairage à diode, ou même les flash de téléphone portable.

module diode utilisé


L'alimentation de l'Arduino étant à fortiori insuffisante, nous devrons surement prévoir une dérivation de l'alimentation 5V pour leur usage, le module LED s'activant par le biais d'une entrée digitale.

Nous avons également finis l'implémentation de la nouvelle base de données, avec notamment la création d'une classe DAO pour chaque table, chacune de ces classes contiennent l'ensemble des méthodes nécessaires à la gestion de la table, comme l'accès aux données.

A cette échéance nous avons listé une partie des éléments à intégrer à l'application:

  • Finir d’implémenter BDD
  • Système de favoris sur le smartphone du client
  • Partage Facebook
  • Remplir la BDD avec des données
  • Finir l’implémentation de la filtration des vins en fonction des plats


Puis, à partir de Janvier

  • Gestion connexion avec le smartphone du client (NFC, bluetooh, wifi ?)
  • Mettre en place les LED dans la borne
  • Lecture correcte des tags RFID des bouteilles via rotation de la bouteille
  • Système de mise à jour de la BDD simplifié

Semaine 13

Création de la carte de contrôle des LED et des moteurs car maximum du courant fournit par l'Arduino = 500mA sur sortie 5V (750mA max sur Arduino ADK)

Afin de pouvoir aisément peupler la base de données, nous avons décidé d'utiliser un logiciel nous offrant une interface graphique afin d'ajouter des entrées, ce logiciel se nomme "SQLite Database Browser" (http://sourceforge.net/projects/sqlitebrowser/). Ce logiciel nous fournit en sortie une base de données au format SQLite. En complément de cela, nous utilisons dans notre application Android une librairie tiers permettant d'importer au démarrage de l'application notre fichier de base de données. Cette librairie est disponible ici : https://github.com/jgilfelt/android-sqlite-asset-helper

SQLite Database Browser, avec notre table 'type' ouverte

Semaine 14

La semaine à été réservée à la réalisation du rapport de mi-projet, ainsi qu'a la préparation de la présentation.

Semaine 15

Réception des moteurs Pas-à-Pas, intégration du code de contrôle de ceux-ci dans l'Arduino.

La solution des moteurs Pas-à-Pas est liée au fait que ceux-ci sont réversibles, et permettent de contrôler le sens de rotation. Nous avons dû intégrer les fonctions de contrôle des moteurs via une interruption RTI (Real Time Interrupt) car les moteur Pas-à-Pas doivent être contrôlés avec précision, ceux-ci sans interruption ne fonctionnant pas.

Les caractéristiques moteurs sont:

  • 7 Phases
  • Alimentation 5-12v


Nous avons également effectué quelques modifications mineures sur la base de données, nous avons ajouté les champs suivants dans la table "vin" :

  • Appellation
  • Cépage (Chardonay, Saumur, etc ...)
  • Température de service (10c etc...)
  • Garde ( 2 ans etc ...)

Semaine 16

Nous avons commencé a développer la communication entre le smartphone et la borne. Nous avons pour cela opté pour le protocole Wifi Peer to Peer, qui permet de facilement établir une connexion wifi entre 2 dispositifs tout en ayant de bons débits et une bonne portée.

Cependant, après développement de la solution, certains inconvénient de ce type de connexion nous semblent rédhibitoires. En effet, la connexion n'est pas stable. De plus, d'un point de vue ergonomique, l'utilisateur doit activer manuellement ce type de connexion dans les paramètres avancés de son smartphone, puis autoriser manuellement la connexion, ce qui serait une véritable perte de temps pour le client.

C'est pourquoi nous avons décidé d'essayer un autre protocole : le Bluetooth. Le développement de la connexion est encore en cours de réalisation, mais ce type de connexion à l'air davantage en adéquation avec ce que nous recherchons. En effet, il est possible de rendre l'établissement de la connexion entièrement automatisé sans qu'une quelconque action soit demandée à l'utilisateur.

Semaine 17

Page de recherche V1
Page de recherche V2

Durant cette semaine nous avons modifié le design de l'application, pour ce qui est de la page de recherche de vin en fonction du plat. A droite la première version, ayant un rendu vieillot et non pertinent pour une borne en magasin. A droite la nouvelle page permettant un attrait visuel.

Au niveau de l'application pour client, nous avons implémenté la filtration des vins par affinité de vins, et nous avons complété la fonctionnalité permettant d'ajouter des vins à ses favoris.

Nous avons aussi mis en place la liaison Bluetooth.

Protocol de transfert des favoris

Semaine 18

La semaine a principalement été consacrée à la réalisation de la borne physique.

Initialement, nous avions prévu de réaliser la borne entièrement en plexiglas, il s'est malheureusement avéré qu'en plus du coup élevé de la matière première, l'atelier mécanique de l'école était incapable d'usiner les pièces. De même, les matières plastiques posaient différents soucis. Après prospection de différentes solutions, nous avons donc choisi de réaliser nous même la borne en bois.

Pour cela, le LIFR nous a fournis différents matériaux restant d'anciens projets :

  • 2 planche de bois 120*60*1,5 cm
  • 1 planche de bois 120*60*0,5 cm
  • 1 plaque de plexiglass 100*50*0,5 cm
  • Peintures, pinceaux, etc.

Etant donné le changement de situation, les plans crées deviennent inutilisables. Nous avons donc dû remanier les plans afin que nous puissions facilement usiner la borne. En l'état actuel, l'assemblage de la borne a déjà commencé.

Semaine 19

Nous avons continué à usiner les différentes pièces constituant la borne, et complété l'assemblage. Nous avons également mis au point le système de plateau tournant, permettant aux bouteilles de tourner sur elles mêmes afin que le tag RFID soit scanné à coup sûr.

Les plateaux sont réalisés en plexiglas, afin de laisser passer la lumière des diodes (s'allumant lorsqu'une bouteille est détectée). Ces plateaux sont reliés à des moteurs pas à pas se situant quelques centimètres en dessous, invisibles pour l'utilisateur. La transmission du mouvement se fait grâce à une combinaison d'engrenage, améliorant de plus le couple afin de faire correctement les bouteilles.

Semaine 20

Nous avons durant cette semaine presque finis d'assembler les différentes pièces de la borne et mis en peinture les différentes pièces.

Nous avons également mis au point et réalisé une carte d'alimentation.

Enfin, nous avons effectué les derniers perfectionnements concernant la partie software de la borne.

Semaine 21

Résolution de léger bugs d'affichage. Perfectionnement des différents services. Réalisation du rapport.

Semaine 22

Code Arduino: Télécharger le ZIP

Fichier APK signé, de l'application borne: Télécharger le ZIP

Rapport PFE: Voir le PDF


La vidéo: | Voir la Vidéo