FabLab et Innovation : "Smart Case"

De fablab
Aller à : navigation, rechercher

Composition de l'équipe

  • Thomas Bombrun
  • Gina-Adriana Dobrescu
  • Hugo Locteau
  • Maxime Meignan

Description

Smart Campus est un projet qui a comme but l'échange des objets culturels (bande dessiné, dvd, carte de jeux vidéos, biblo) et utilitaires (fer à repasser, perceuse, lampe, couverture, etc.)dans une manière facile et attractive. Cette alternative permet aux gens de ne pas jeter les objets qu'ils n'utilisent plus, ainsi que de découvrir de nouvelles possibilités d'obtenir un objet avec une bonne condition matérielle, sans payer.

Présentation Smart Case

User Stories Réalisées

Côté user

  • En tant qu'utilisateur, je souhaite pouvoir m'identifier avec un login/mot de passe
  • En tant qu'utilisateur, je souhaite pouvoir déposer un objet dans un casier afin de gagner un crédit
  • En tant qu'utilisateur, je souhaite pouvoir consulter mon solde
  • En tant qu'utilisateur, je souhaite pouvoir échanger un objet contre un autre
  • En tant qu'utilisateur, je souhaite pouvoir retirer un objet
  • En tant qu'utilisateur, je souhaite pouvoir signaler un contenu douteux
  • En tant qu'utilisateur, je souhaite pouvoir rapporter un objet et le signaler comme douteux
  • En tant qu'utilisateur, je souhaite que les objets présents depuis une certaine durée soient retirés

Côté administrateur

  • En tant qu'administrateur, je souhaite que toutes les interactions avec SmartCase soient enregistrées (Date, User, Nature de l'action, ...)
  • En tant qu'administrateur, je souhaite pouvoir accéder a l'interface d'administration depuis l'Internet
  • En tant qu'administrateur, je souhaite vérifier que les utilisateurs ont bien déposé un objet

Détails techniques

  • Du côté de l’application web, la programmation a été faite en Java en utilisant le framework Play.
  • Du côté électronique, la programmation de l’Arduino a été faite en C++ pour le contrôle des serrures et la lecture des capteurs.

La liaison entre ces deux parties a été réalisée grâce a une communication série(par USB) entre l’Arduino et la tablette.

Architecture système

Archi.png

Application

Play Framework

Play framework est un web framework open source qui permet d'écrire rapidement des applications web en Java. Une application Play utilise le modèle architectural MVC appliqué à l'architecture Web.

Play nous permet de connecter notre code Java avec les concepts classiques de web : le protocole HTTP, ainsi que le traitement et la production des formats qu’interprètent nativement les navigateurs (HTML, CSS, JavaScript,...). Play framework est stateless(ne conserve pas d'états entre les requêtes) ceci nous permet d’éviter les mauvaises pratiques de gestion des sessions.

  • Nous allons présenter maintenant le cycle de vie d’une requête dans l’application:
  1. L’utilisateur fait une action qui envoie une requête HTTP vers le framework
  2. Le framework reçoit la requête
  3. Les ressources de l’application sont identifiées de manière unique et prédéfinies grâce au système de gestion de routes, ce qui favorise la communication naturelle avec ces requêtes . Dans ce cas, le navigateur est mis à contribution en exploitant ses capacités de stockage locales.
  4. Le code de l’application est exécuté
  5. Si une vue plus complexe doit être générée, un <<template>> est rendu.
  6. Le résultat du traitement est renvoyé sous la forme d’une <<HTTP Response>>

RequestPathWiki.png

Architecture application web

Architecture base de données

Nous utilisons pour ce projet une base de données SQL ce qui nous as permis d'avoir un grand contrôle sur ce que nous faisions. Play proposais des solutions de persistance de données mais nous avons préféré utiliser une base de données SQL. Voici l'analyse de nos bsoins :

Schéma Entité Association

Schéma Entité Association.jpg

Cela nous a amené utiliser la structure de base de données suivante : CREATE TABLE utilisateurs (

   adresseMail     varchar(32) NOT NULL,
   prenom           varchar(32) NOT NULL,
   nom              varchar(32) NOT NULL,
   hashPassword    varchar(256) NOT NULL,
   credit           int DEFAULT 0,
   PRIMARY KEY (adresseMail)

);

CREATE TABLE casiers (

   idCasier        int GENERATED BY DEFAULT ON NULL AS IDENTITY,
   largeur          int DEFAULT 30,
   hauteur          int DEFAULT 30,
   estPlein        int DEFAULT 0,
   poids            int DEFAULT 0, 
   PRIMARY KEY (idCasier)

);

CREATE TABLE transactions (

   idTransaction    int GENERATED BY DEFAULT ON NULL AS IDENTITY,
   dateTrans        date NOT NULL,
   typeTrans        char(11) NOT NULL,
   utilisateur      varchar(32),
   idCasier         int,
   PRIMARY KEY(idTransaction),
   CONSTRAINT enum_type_trans
       CHECK (typeTrans='depot' 
           OR typeTrans='retrait' 
           OR typeTrans='connexion' 
           OR typeTrans='deconnexion'
           OR typeTrans='echange'
           OR typeTrans='inscription'
           OR typeTrans='signaler'),
   CONSTRAINT transactions_casier
       FOREIGN KEY (idCasier) REFERENCES casiers (idCasier),
   CONSTRAINT transactions_utilisateur
       FOREIGN KEY (utilisateur) REFERENCES utilisateurs (adresseMail)

);

Électronique

Arduino

L'Arduino est un circuit imprimé qui comporte un microcontrôleur. Ce dernier peut-être programmé pour recevoir et émettre des signaux électriques. Dans ce projet il nous sert à détecter la présence d'un objet dans un casier et à actionner les serrures. Il est donc connecté à la tablette (par câble USB) pour communiquer avec l'application.
ArduinoMega.jpg

Activation des serrures

Les serrures sont alimentées en courant à l'aide d'une alimentation 12V.
Pour activer les serrures nous utilisons des cartes 4 relais. Chaque serrure est reliée à un relais. Lorsqu'un utilisateur demande l'ouverture d'un casier, l'Arduino envoie un signal au relais qui commute ce qui enclenche la serrure. Une fois l'objet déposé, l'utilisateur appuie sur le bouton "c'est fait" de l'application, l'Arduino n'envoie plus de signal au relais et la serrure se referme.
Une breadbord fait l'interface entre l'Arduino et les relais d'une part, et entre les serrures, les relais et l'alimentation d'autre part.
Serrures.jpg
Aucun multiplexage n'a été effectué pour les relais. Chaque relais est relié à l'un des pins 30 à 41 de l'Arduino.

Détection d'objets

Principe

Lorsqu'un utilisateur choisit de procéder à un dépôt ou un échange, il faut vérifier qu'il dépose réellement un objet dans un casier. Cette vérification se fait à l'aide de capteurs composés de papier Logik :
Schema capteur.png
Le capteur est composé de deux couches de papier "électrode" de faible résistivité séparées par un papier "sensible" de résistivité élevée. Sur chaque électrode est collé un connecteur en cuivre conducteur qui permet de souder des fils pour faire circuler un courant électrique qui devra traverser les différentes couches de papier. Le tout se comporte comme une résistance variable dont la valeur diminue si la pression exercée augmente. Le capteur doit être utilisé sur une surface rigide pour obtenir une réponse uniforme. Dans notre cas il repose sur une étagère en bois. Il est de plus recouvert par une plaque rigide (elle aussi en bois) pour que la force soit répartie sur tout le capteur. Ainsi la forme, la taille et la position de l'objet n'a pas d'impact sur la réponse du capteur
Eclaté d'un capteur:
Capteur.jpg

Réponse du capteur

On considère le montage suivant :
Sc.png
où Rv est une résistance variable qui représente un capteur et R est une résistance constante. La valeur de R permet d'élargir l'étendue des valeurs de réponses envoyées par l'arduino (donc la précision de ces réponses). Le calcul de la valeur optimale de R sera détaillé plus bas.
L'Arduino permet d'appliquer au moment voulu (lorsqu'une détection d'objet est nécessaire) une tension aux bornes de Rv et R. Il se comporte de plus comme un voltmètre qui mesure la tension aux bornes de R.
Les lois de l'électronique nous donnent les équations suivantes:
5 = (Rv+R)*I
Ur= R*I avec Ur la tension aux bornes de R
Lorsqu'un objet est déposé, Rv diminue. Puisque R est constante, on conclut que I et Ur augmentent.
On peut donc détecter la présence d'un objet en comparant la valeur instantanée de Ur avec sa valeur si rien n'est déposé sur le capteur.

Calcul de R

Pour obtenir une précision maximale, on cherche a maximiser Umaxumin.gif, ce qui est équivalent à maximiser Rminrmax.gif. On trouve après calcul que l'on doit avoir Sqrtr.gif, soit 470 Ohms pour les valeurs de résistance de nos capteurs.Pour cette valeur de R on obtient la courbe suivante :
Graphique valeurs arduino poids.png
On remarque une saturation pour des poids supérieurs à 1 Kg. Les capteurs nous permettent donc de détecter la présence d'un objet mais pas d'estimer correctement son poids.

Multiplexage

L'Arduino MEGA comporte suffisamment d'entrées/sorties pour gérer 12 casiers.
Cependant d'autres microcontrôleurs en possèdent moins, il peut donc être utile de trouver une solution qui minimise le nombre d'entrées/sorties utilisées.
Pour les capteurs nous avons choisi d'utiliser 4 pins de sortie et 3 pins de lecture. On peut lire la valeur renvoyée par un capteur en mettant à 5V le pin de sortie correspondant et en lisant sur le bon pin d'entrée.
Schemamult.png
Par exemple, pour détecter un objet sur le capteur C, il faut activer les pins 22 et A1.
En réalité les pins de sortie sont les pins 22,23,24,25 et non 22,28,34,40 comme laisse penser le schéma. Ceci permet d'avoir un code plus propre.

Casiers

Les casiers mesurent tous 30cm de hauteur, 30cm de largeur et 50cm de longueur.
Les portes des casiers, en plexiglas, sont découpées par découpe laser. Les charnières et les réceptions de gâche sont imprimées à l'aide d'une imprimante 3D. Pour le prototype, une porte, deux charnières et une réception de gâche ont été réalisées.
Porte.jpg
12 casiers sont mis à la disposition des utilisateurs (le prototype réalisé n'en comporte qu'un). La tablette est déposée au centre du meuble.

Améliorations possibles

  • En tant qu'utilisateur, je souhaite pouvoir m'identifier avec ma carte Crous
  • En tant qu'utilisateur, je souhaite que les objets déposés de plus grande valeur me rapportent plus de crédits
  • En tant qu'utilisateur, je souhaite que mes dépôts soient publiés sur Facebook
  • En tant qu'utilisateur, je souhaite pouvoir choisir le casier dans lequel je dépose mon objet
  • En tant qu'utilisateur, je souhaite pouvoir consulter a distance le contenu des casier
  • En tant qu’utilisateur, je souhaite pouvoir donner un objet a une personne en particulier (droits + casier occulté)
  • En tant qu'administrateur, je souhaite interdire certains type de dépôts (argent, nourriture...)

Bilan

Ce projet nous a permis de développer nos compétences dans les domaines de l'électronique et du développement d'applications web en découvrant le framework Play. Nous avons pu nous rendre compte de la complexité d'un tel projet et de l'organisation qu'il faut adopter. Nous remercions notre encadrant Jérôme Maisonnasse pour son aide tout au long du projet.

Notes et références

Pour plus d'informations sur le papier Logik :
http://www.papierlogik.com/fr/technologie/fabrication/capteur-de-force