FabLab : espaces de créativités ouverts

Étiquette : python

  • Création d’un simulateur de thermomètre, d’hémocue et de glucomètre pour une immersion complète lors des simulation en santé

    Équipe Santé!  :

    Heliote Zaouly, étudiant en deuxième année à IMT Atlantique.

    Lucas Genin, étudiant en deuxième année à IMT Atlantique.

    M D, étudiant en troisième année à IMT Atlantique.

    I) Contexte

    Dans le cadre de la thématique d’approfondissement « conception d’objets communicants », les étudiants d’IMT Atlantique doivent proposer une solution innovante pour répondre à un problème. Notre projet est de développer un appareil électronique recouvert d’une coque, capable d’afficher sur son écran, une valeur entrée sur un site web. Le but de ce projet est d’aider les enseignants dans les centres de simulation pour étudiants en Santé à transmettre des données d’appareil de mesure (température, taux d’hémoglobine et taux de glycémie) à un étudiant qui s’entraîne à une distance de quelques mètres.

     

    II) Réalisation

    -Une coque imprimée au FABLAB à l’aide de l’imprimante 3D

    -Écran LCD TFT HD de 1.8 pouces, 128×160, Port série SPI, Module ST7735, lecteur IC

    -Un bouton poussoir

    -Une carte Raspberry pi zéro W

    -Une batterie lithium-polymère TURNIGY 1000mAh trois cellules de 11.1 v

    -Des câbles (fils et câble d’alimentation micro USB)

     

    1) Electronique

    a) Raspberry pi zero WH

    Le Raspberry Pi Zero WH est une version miniature de la carte Raspberry Pi classique. Ce modèle WH est basé sur un processeur ARM à 1GHz accompagné de 512 Mo de RAM.Il intègre un port GPIO déjà soudé à la carte mère et dispose d’interfaces WiFi et Bluetooth.

    Cette version petit format diffère de la version classique des cartes Raspberry Pi (Pi2, Pi3, Pi3B+, etc…) en adoptant un port mini-HDMI nécessitant un cordon adapté ainsi que deux ports micro-USB:

    • 1 x port micro-USB pour l’alimentation USB 5 Vcc/1 A .
    • 1 x port micro-USB nécessitant un HUB micro-USB vers USB permettant de raccorder différents périphériques (clavier, souris, manette, afficheur tactile, disque dur, etc).

    Ce mini-ordinateur fonctionne depuis une carte micro-SD préparée avec une distribution Linux Raspberry Pi OS.

    Caractéristiques:

    • Alimentation à prévoir: 5 Vcc via adaptateur USB
    • Puissance maxi: 180 mA (adaptateur secteur 1 A recommandé en fonction des périphériques raccordés)
    • CPU: ARM1176JZF-S ARM11 1 GHz
    • ​GPU: Broadcom VideoCore IV
    • WiFi: 2,4 GHz, 802.11n (Broadcom BCM43438)
    • Bluetooth 4.1 (Broadcom BCM43438)
    • Mémoire: 512 MB LPDDR2 (partagé avec le GPU)
    • Interfaces:
      – 1 x port micro-USB 2.0
      – bus: SPI, I2C, série, I2S
      – support pour cartes micro-SD
      – sortie audio: mini-HDMI
      – sortie vidéo: mini-HDMI
      – connecteur mini-CSI
    • Dimensions: 65 x 31 x 13 mm
    • Poids: 12 g

    b) Écran LCD TFT HD de 1.8 pouces, 128 x 160

    Nous avons utilisé ce module pour l’affichage des données (température, taux d’hémoglobine, taux de glycémie). Il comporte 11 broches, mais seulement 7 de ces broches seront utilisées. Le branchement de ce module aux broches du Raspberry Pi se fait comme représenté ci-dessous :

     

    Ecran TFT 1.8” Raspberry Pi zero W GPIO

    BOARD

    Raspberry Pi zero W GPIO

    BCM

    VCC GPIO 4 PIN 07
    GND GND PIN 06
    SCL SCLK PIN 23
    SDA MOSI PIN 19
    RS/DC GPIO 24 PIN 18
    RES GPIO 25 PIN 22
    CS CE0 PIN 24

     

    Pour pouvoir manipuler ce module, nous aurons besoin des bibliothèques python suivantes:

    ST7735 et PIL

    c) Bouton Poussoir

    Ce bouton nous permet de mettre la Raspberry Pi en mode veille et de l’allumer lorsqu’on l’appuie pendant 2 secondes minimum. A cet effet, il est branché comme suit:

    Une broche est reliée au GPIO3 (PIN 05) et une autre au niveau du GND (PIN 09).

    Pour rendre le bouton d’allumage opérationnel, il faut ouvrir le shell de votre raspberry Pi et exécuter la commande suivante:

    sudo nano /boot/config.txt

    A la fin de ce fichier, ajoutez ceci : dtoverlay = gpio-shutdown

    Une fois cette configuration faite, vous pouvez utiliser votre bouton pour allumer et mettre la Raspberry Pi en veille.

     

    d) Schéma des branchements

    2) Code du projet

    Comme le projet contient à la fois une application web et un programme pour afficher de l’information sur un écran nous avons choisi de programmer le site web en utilisant le combo HTML+CSS+PHP+JS+MYSQL et concernant l’affichage sur l’écran nous avons décidé de le faire à partir d’un programme python.

    Le principe est le suivant:

    -Le code python est lancé en arrière-plan et tourne continuellement sur la carte Raspberry Pi et lit le contenu d’un fichier texte en permanence et affiche le contenu de celui-ci.

    -Le site web étant hébergé sur la Raspberry Pi transmettra des données au code python à travers le fichier texte. Il se base sur des fichiers json pour afficher un historique de données transmis. Les fichiers json sont le résultat d’une requête exécutée sur une base de données MySQL.

    -La base de données est réinitialisée automatiquement à chaque nouveau jour

    Le code est présent sur le GitHub ici.

    Aussi si vous voulez que le programme se lance au démarrage de la Raspberry Pi, vous pouvez copier ceci dans le fichier /etc/rc.local juste avant la ligne ‘exit 0’:

    /usr/bin/python3 /home/pi/Desktop/on_off.py &

    /usr/bin/python3 /home/pi/Desktop/affichage.py &

     

    3) Interface Web

    Afin de pouvoir échanger des informations avec l’appareil, nous avons créé une application web avec VS Code. Elle est hébergée sur l’appareil. L’application et l’appareil communique par fichier, cependant pour avoir accès à l’application web il faut être dans le même réseau WIFI que l’appareil.

    Une fois dans le même réseau WIFI que l’appareil, il suffit d’ouvrir un navigateur et d’entrer l’adresse IP de l’appareil. Après cela, on se retrouvera sur la page de connexion du site web.

    Après s’être connecté (par défaut entrez “root” et “root” comme identifiants de connexion), vous serez redirigé vers une page d’accueil. A partir de cette page vous pouvez envoyer des données de température, d’hémoglobine et de glycémie.

     

    Il y a aussi les pages Aide et À propos où trouve nos informations.

     

     

    N’ayant pas eu assez de temps, nous n’avons pas pu bien rédiger le contenu de ces pages et nous n’avons pu donner la possibilité de changer le mot de passe directement sur la page web.

     

    4) Protocole de communication et architecture

    Grâce à la technologie WIFI, l’opérateur pourra accéder au site web hébergé sur le produit et transmettre des données pour que celles-ci soient affichées. Pour ce faire, il devra se connecter au même réseau WIFI de l’objet, ouvrir un navigateur web et écrire l’adresse IP de l’appareil.

    La communication entre le code python et le site web se fait par un fichier texte. En effet, lorsqu’on souhaite envoyer une donnée à l’objet, le site web écrit une information dans un fichier texte. Toutes les informations suivent le format suivant : ” données  type ».

    Les champs ‘type’ et ‘données’ varient selon le type de donnée envoyée. Par exemple, si on transmet “37.5 T” cela signifie qu’on voudrait afficher une température (T) de 37.5 degrés Celsius.

    L’objet, de son côté, lit le contenu du même fichier et affiche la donnée sur l’écran.

    L’architecture de fonctionnement est le suivant:

    5) Coque

    L’appareil est recouvert d’une coque faite en deux morceaux qui se glissent l’un dans l’autre. Les modèles de la coque ont été réalisés sur le logiciel SOLIDWORKS puis imprimés à l’aide d’une imprimante 3D Ultimaker 2 présente au fablab.

    Après une première production de coque, nous avons réduit sa taille et nous y avons ajouté des creux pour le passage du câble d’alimentation par le bas et le passage des fils du bouton au-dessus. Nous avons également ajouté le système de fermeture.

    La couleur de la coque correspond à celles disponibles au moment de l’impression au fablab.

     

    III) Résultats

    Notre projet se termine par la réalisation d’un appareil électronique placé dans un boîtier, saisissable d’une main, capable d’afficher les valeurs entrées sur un site web ouvert sur un ordinateur à quelques mètres.

    Par rapport aux critères de fonctionnement, le système développé a pour défaut que la coque semble manquer légèrement de solidité par sa finesse, et que le circuit à l’intérieur de la coque impose une pression sur les parois qui peut l’abimer sur le long terme. La coque pourrait avoir un creux plus grand pour le passage des fils du bouton afin que ce dernier reste collé à la paroi sans que ses fils sortent.

    Finalement, il semble que le projet puisse être amélioré par l’optimisation des dimensions de la coque et par l’ajout de la possibilité pour l’utilisateur de modifier le mot de passe pour se connecter au site web.

  • Projet CoOC : Robot de suivi automatique des stocks

     

     

    Equipe:

    • Apia Moya
    • Hoang Duong
    • Tanguy De Lanversin

    I. Contexte:

    L’industrie textile s’est transformée depuis quelques décennies. Innovations, scandales, nouvelles collections de sandales se succèdent à un rythme toujours plus rapide, fast fashion oblige! Une innovation particulière qui conquiert des parts de marché toujours plus nombreuses a particulièrement retenue notre attention: la RFID. Les étiquettes RFID ont peu à peu trouvé leur place dans le magasins, elles permettent de superviser les stocks plus facilement et rapidement, d’avoir une meilleure traçabilité sur les produits (provenance, authenticité…) et tout cela à des prix qui ne font que diminuer.

    Dans le cadre de notre projet CoOC de 2e année, nous avons donc réalisé un objet communicant en lien avec cette technologie RFID, répondant à un besoin concret de l’industrie textile. Nos enquêtes terrains nous ont en effet menées sur un sujet que l’on ne pensait pas aborder: la gestion des stocks. En interrogeant des salariés de magasins de vêtements et notamment suite à une entrevue avec une responsable de rayon chez Decathlon, nous nous sommes aperçus que tout le potentiel des étiquettes RFID n’était pas encore pleinement exploité. Aujourd’hui les salariés vont encore dans les rayons et les réserves pour scanner manuellement à l’aide d’une raquette RFID les produits en stock. C’est ce constat qui nous a poussé à réfléchir à une manière innovante, fiable et précise de gérer les stocks.

    Nous avons alors conçu un robot capable de suivre un chemin prédéfini (ici une bande au sol) pour parcourir des rayons, une réserve, un entrepôt tout en scannant les étiquettes RFID à proximité pour alimenter et mettre à jour la base de données où figurent les stocks de l’entreprise. Ce suivi automatisé des stocks permettraient d’éliminer la tâche rébarbative de scan et mise à jour des stocks pour les opérateurs, leur permettant ainsi de consacrer plus de temps sur le terrain pour conseiller les clients, arranger les rayons ou contribuer à d’autres tâches moins ingrates.

    Dans l’industrie textile, les entreprises utilisent très majoritairement des étiquettes équipées d’antennes RFID UHF passives, cette technologie alliant robustesse, finesse et surtout une capacité de détection de l’ordre de plusieurs mètres (selon la puissance du lecteur). Pénurie de composants oblige, nous n’avons pu travailler sur du RFID UHF et nous sommes donc tournés vers du RFID NFC dont le matériel était disponible au fablab de l’école.

    II. Notre robot en détails

    A. Vidéo explicative du fonctionnement du robot | Mise en situation

    B. Construction de la coque

    Nous avons décidé de concevoir la coque du robot à l'aide de la découpe laser du fablab. Certaines parties avaient été designées avec Tinkercad pour être imprimées en 3D (charnières) mais les délais pour imprimer en 3D étaient trop longs à cause d'une forte demande de la part des élèves. Nous avons donc construit toute la coque en contreplaqué avec la découpe laser, nous avons utilisé des serre-joints pour les pièces mobiles.

    La coque se devait d'être suffisamment rigide pour résister à des chocs minimes et pour maintenir certains composants électroniques bien en place. Certaines parties de la coque s'emboîtaient, d'autres nécessitaient d'utiliser de la colle à bois (pour renforcer la liaison ou maintenir 2 surfaces lisses ensembles)

    La découpe laser est une Rayjet Trotec pilotée par le logiciel Corel Draw 2018. La coque a été conçue avec le logiciel Inkscape (version 1.1), le fichier a été exporté au format SVG pour la découpe.

    Les lignes doivent respecter ces propriétés pour préparer les fichiers de dessin [1]:

    • Découpe: tracer des lignes rouges (épaisseur: Ligne Très fine ou 0,05mm / rouge pur RGB 255;0;0)
    • Gravure: Formes/Lignes/Dessins (vectorisés de préférence) en noir ou en niveau de gris.

    La taille du plateau de la Rayjet (donc de découpe max) : 457 x 305 mm

    Les dessins de la coque et des charnières ont été déposés sur un drive ouvert à tous avec le lien suivant: https://drive.google.com/drive/folders/1_IyIeHGhq1p6IS1zDbmX_LJn9qIRJx86?usp=share_link

    C. Diagramme d’architecture matérielle/logicielle:

    D’architecture matérielle

    Organigramme du Robot, RFID et Application

    D. Matériel utilisé et montage électronique

    Liste des matériels:

    • 2 arduino UNO, 1 shield I/O (Basic IO shield), 1 shield de moteur (Rotoshield Motor Driver Shield for Arduino)
    • 2 capteurs IR : MH FC-51 (Breakout Receiver IR)
    • 1 capteur ultrasons : HC-SR04
    • 2 modules Bluetooth HC-05 (Silver Mate Bluetooth)
    • 1 lecture RFID : RC522
    • 1 servomoteur
    • batterie 9V, 4 pilles 1.5V

    Le schéma de robot:

    En fait, on a combiné 3 cartes: Arduino + I/O Shield (Augmenter des ports) + Motor Shield.

    Le schéma de RFID lecture:

    E. Plus informations sur Github: le lien de Github inclut le code source

    III. Perspectives:

    Nous avons pu identifier plusieurs perspectives d’amélioration de notre prototype:

    1. Monter et adapter un lecteur RFID UHF à notre robot pour envisager des tests à plus grande échelle sur le terrain
    2. Améliorer l’autonomie du robot et monter un système de batterie rechargeable plutôt que de changer les piles. Il est important de noter qu’en passant sur une technologie RFID UHF, le robot aura besoin de bien plus de puissance pour fonctionner, il faudra sans doute redimensionner toute l’alimentation du robot.
    3. Alimenter la base de données où figure nos stocks en passant pas un réseau wifi (et non une antenne bluetooth) pour augmenter la portée et pouvoir déployer le robot dans des magasins, entrepôts pouvant atteindre plusieurs milliers de mètres carrés de surface au sol
    4. Simplifier l’architecture électronique du robot, nous avons utilisé 2 cartes Arduino, 2 modules bluetooth pour des raisons pratiques de développement. On pourrait supprimer certains composants redondants pour réaliser une nouvelle architecture plus sobre et efficiente.

    Références:

    [1]Telefab IMT Atlantique : https://hub.imt-atlantique.fr/fablab/les-machines/decoupe-laser/

    [2]Guidage RFID: https://www.electronique-mixte.fr/microcontrolleurs/rfid-controle-dacces-par-badge-avec-arduino/

    [3]Building an easy Line Follower Robot using Arduino UNO: https://circuitdigest.com/microcontroller-projects/arduino-uno-line-follower-robot

    [4]A line follower robot from design to implementation: Technical issues and problems: https://www.researchgate.net/publication/224132741_A_line_follower_robot_from_design_to_implementation_Technical_issues_and_problems

    [5]Designing and Building a Line Following Robot: https://www.cs.york.ac.uk/micromouse/Papers/Building-a-line-following-robot.pdf

    [6]Line Follower and Obstacle Avoiding Robot: https://create.arduino.cc/projecthub/embeddedlab786/line-follower-and-obstacle-avoiding-robot-baa2bb

    Lien de la vidéo explicative du fonctionnement de notre robot: https://www.canva.com/design/DAFU3gN9cAY/KLp6XCv7cG02qRxa4Pgxzg/watch?utm_content=DAFU3gN9cAY&utm_campaign=designshare&utm_medium=link&utm_source=publishsharelink

    Lien du code git: le lien de Github inclut le code source

    Lien du drive contenant les dessins de la coque et des charnières: https://drive.google.com/drive/folders/1_IyIeHGhq1p6IS1zDbmX_LJn9qIRJx86?usp=share_link