Borne Oenologique

De Wiki de Projets IMA
Révision datée du 24 février 2014 à 10:52 par Cvanderm (discussion | contributions) (Le Projet)

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éance

Semaine 1

La première semaine à été consacrée à la rencontre des différents interlocuteurs du projets ainsi qu'a 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 à é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 à 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 dur à 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 certaine vue.

Nous avons notamment réalisé le prototypages de certaines interface, 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 stocker 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é 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, sont développement a commencée.

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 finis, 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é.


Parrallèlement à cela, nous avons établit les grande ligne 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 essayer de scruter chaque carte, en alimentant une carte sur deux. Cette solution n'étant pas viable à cause d'un problème de puissance de sorti sur les DigitalOupPut de l'Arduino. Un test sur le BUS SPI fût alors tenté, mais aucune librairie n'existe pour ce Shield.

La solution la plus adapté, c'est à dire qui ne nécessite pas d'alimentation extérieur 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.


Reflexion sur l'interface de recherche de vin:

- Creation 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 possible. 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 offerte 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 contenu dans un tableau de 24 cases. Les 12 premières cases corresponde 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 peux 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 global transmise. Le Shield 1 (PN522), fonctionne autrement, lorsqu'une puce RFID est détecté une interruption IRQ est envoyer 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 global transmise.


L'application client a avancée, 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 a par contre été réalisé par un développeur indépendant, le widget peut 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 est crée, elle n'est pas encore fonctionelle, 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é.

Semaine 7

Durant cette semaine, nous avons pousser 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 le design définitif. La fabrication de la borne n'est prévu que pour Janvier 2014.

Borne3.PNG


Borne.PNG

Concernant le développement des application, 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 à aussi été utiliser afin de commencer le lien entre les 2 parties du developpement de l'application sur la borne.

GANTT du Projet


Semaine 9

La partie électronique du montage est maintenant abouti. 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 à nécessité quelques amélioration du code source de l'application de la borne:

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

- Modification des éléments permettant le passage d'information entre les "Activity" (Sur Android chaques pages 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çu pour les liaison directes, mais les débits sont faibles. La seconde possède des débits bien plus rapide et une porté supérieur. 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.

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

Semaine 12

Lors de cette semaine, nous avons pensé à l'intégration de diode blanche au niveau de la borne pour donner un rendu meilleur à la bouteille, ainsi que pour révélé 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é dans l'automobile pour certain phare à 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 n'étant à forciori insuffisente, nous devrons surement prévoir une dérivation de l'alimentation 5V pour leurs 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 ses classes contiennent l'ensemble des méthodes nécessaire à la gestion de la table, comme l'accès aux données.

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

  • Finir d’implémenter BDD
  • Système de favori 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 dasn 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 sorti 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é à 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é au fait que ceux-ci sont réversible, 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ôler avec précision, ceux-ci sans interruption ne fonctionnait 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 suivant dans la table "vin" :

  • Appelation
  • 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 semble rédhibitoire. 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é 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 modifier 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 pertinant 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 plexiglass, 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 plastique posées différents soucis. Après prospections 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 inutilisable. Nous avons donc dû remanier les plans afin que nous puissions facilement usiner la borne. En l'état actuelle, l'assemblage de la borne a déjà commencé.

Semaine 19

Nous avons continuer à 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 au bouteilles de tourner sur elles mêmes afin que le tag RFID soit scanné à coup sur.

Les plateaux sont réalisé en plexiglass, afin de laisser passer la lumière des diode (s'allumant lorsqu'une bouteille est détecté). Ces plateaux sont reliés à des moteurs pas à pas ce situant quelque centimètre en dessous, invisible 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

Semaine 22