Actualités Projets

Objets animés

Envoyé par le 21 Mar 2024 dans Projets | 0 commentaire

This entry is part 5 of 5 in the series Matériel pédagogique

Phare animé, tableau marin lumineux, oiseaux animés… De nombreux objets peuvent être conçus avec les élèves et animés grâce à de la programmation graphique, des LEDs et des servomoteurs !

Voici un exemple de phare lumineux réalisé pour des animations en classe de CM2 à Bourg Blanc (article ici) et en CM1/CM2 à Coray avec la mallette MERITE « Objets animés ».

Intérieur du phare, un pan reste amovible (non collé) pour voir les composants électroniques

la mouette est mobile grâce au servomoteur, la LED vert clignote en haut du phare

le phare réalisé par les CM2 de Bourg Blanc (réinvestissement de ce qu’ils avaient vu en arts plastiques)

Le fichier utilisé pour le phare de démonstration est disponible ici. Il a été découpé sur une plaque de CP peuplier 3mm.

La partie du haut n’est pas collé à celle du bas (pour le transport et pour montrer l’assemblage aux élèves). Une face latérale du phare reste également amovible. La LED et le servomoteur tiennent avec de la patafix. Un autre trou permet aussi de mettre le servomoteur dans la partie du haut. Les autres faces de la parties du bas sont collées à la colle à bois, de même que les faces de la partie du haut.

 

En se servant de la mallette on peut aussi aller plus loin avec des boutons poussoirs, des photorésistances… Tout dépend du projet !

Le projet avec les phares a été fait en 3h30 + 2h pour la partie programmation, plus 2h pour la partie réalisation du phare des élèves.

Shut the box

Envoyé par le 15 Mar 2024 dans Projets | 0 commentaire

This entry is part 1 of 5 in the series Matériel pédagogique

Jeu de stratégie et de dés

« Shut the box » est un jeu très simple, qui peut se jouer de 1 à 4 joueurs de préférence.

 

Objectifs pédagogiques :

– travailler la décomposition des nombres de 1 à 9

 

Règles du jeu :

Placer tous les taquets chiffrés à la verticale. Lancer les 2 dés. Choisir quel.s taquet.s baisser : la somme des chiffres sur les taquets doit correspondre à la valeur totale obtenue en ayant lancé les 2 dés.

Exemple : Si on a obtenu 5 et 1 sur les dés on pourra donc baisser les taquets 5 et 1 ou seulement le 6 ou le 2 et le 4.

Quand les taquets de 7 à 9 sont abaissés, le joueur de lance plus qu’un dé.

Le joueur ayant abaissé tous ses taquets en premier à gagné (il a « fermé la boite »). Dans la version à 1 joueur il faut abaisser tous ses taquets en un minimum de lancer de dés.

 

Fabrication du jeu

Découpe et gravure à la découpeuse laser du fichier. Fichier utilisé modifié à partir du Shut the Box with Double Score Tracks de Kap42:

(licence CC BY-NC-SA). 2 plaques de MDF 3 mm et 1 plaque de MDF 6mm de 45×30 cm.

Tetra’aides

Envoyé par le 15 Mar 2024 dans Projets | 0 commentaire

This entry is part 4 of 5 in the series Matériel pédagogique

Le Tetra’aide a été conçu par Bruce Demaugé-Bost, professeur des écoles dans le Rhône. Ce dispositif en forme de tétraèdre est posé sur la table et permet de signaler facilement :

– lorsque tout va bien avec la face verte vers le haut

– si l’élève aide ou se fait aider par quelqu’un (et donc discute en peu) avec la face bleue vers le haut

– si l’élève à une question non urgente avec la face jaune vers le haut. L’enseignant passera lorsqu’il sera disponible.

– l’élève a un besoin urgent d’aide avec la face rouge vers le haut.

 

Il existe de très nombreuses versions. En voici une sélection :

Une version en bois réalisée à la découpeuse laser puis peinte à la gouache
La version tourillons en bois permet de limiter l’impression 3D. Elle fait 11 cm de haut et nécessite 6 tourillons en bois de 9mm de diamètre et 6 cm de long.

Tetra’aide tourillon bois, thingiverse dThibault

Une version tissu réalisable avec la machine à coudre du fablab

Tetra’aide anti-stress, auteur : Mathilde Pérain

 

 

 

 

Disques des fractions et des pourcentages

Envoyé par le 15 Mar 2024 dans Projets | 0 commentaire

This entry is part 3 of 5 in the series Matériel pédagogique

Disques de fractions et des pourcentages

Ces disques des fractions réalisés en bois permettent de facilement manipuler le concept de fraction (1/1, 1/2, 1/3, 1/4, 1/5, 1/8ème).

Les disques des pourcentages (100%, 50%, 25%, 20%, 12,5%) sont de même diamètre : ils peuvent être utilisés indépendamment des disques des fractions ou ensemble.

On peut par exemple faire le lien entre 50% et 1/2 en joignant sur le support les deux demi-disques correspondants.

Les fichiers ont été utilisés sur du MDF 3 mm avec la découpeuse laser, gravure (100% puissance, 30% vitesse), découpe (100% puissance, 0,7% vitesse).

Fichier fractions

Fichier pourcentages

boite de rangement

Puzzles êtres vivants

Envoyé par le 5 Mar 2024 dans Projets | 0 commentaire

This entry is part 2 of 5 in the series Matériel pédagogique

Au départ, ce projet a été réalisé pour créer des puzzles pour un petit de 2 ans, dans la lignée des puzzles Montessori. Il est très facile de hacker les fichiers pour créer un puzzle plus complexe, abordant un autre sujet, avec davantage de pièces…

 

Les réalisation sont faites en CP peuplier 3mm : un rectangle sert de socle. Les pièces du puzzle et le rectangle dans lequel elles sont découpées sont également en CP peuplier 3 mm. Le rectangle sert de cadre pour aider l’enfant à insérer les formes. Socle et cadre sont collés ensemble avec de la colle à bois.

Différents diamètres de disques en bois ont été testés : le plus efficace à 2 ans semble être un disque de 6mm d’épaisseur et de 4 mm de diamètre. Un disque est collé par pièce pour faciliter la préhension de la pièce de puzzle.

Les pièces du puzzle sont peintes à la peinture acrylique. De la gouache + de vernis à eau peut également convenir.

Fichier svg du mandrill

Fichier svg de la grenouille

DeepBlue Tracker – Solution technique

Envoyé par le 15 Jan 2024 dans Projets, TAF CoOC | 0 commentaire

This entry is part 3 of 3 in the series DeepBlue

DeepBlue Tracker – Solution technique

par     Antoine DAGORN        Salomón OJEDA      Clément LERICHE     Théo BARTHÉLEMY     Daniel TAPIA

V2 – 15  janvier 2024

 

1. Mise en contexte du projet

Dans le cadre du projet fil rouge de la TAF Conception d’objet communicant de l’école d’ingénieur IMT Atlantique, nous avons travaillé sur un projet concernant la sécurité maritime.

Les activités nautiques solitaires sans flotteur, comme la plongée en apnée, la chasse sous-marine et la natation en eau libre en mer, offrent une expérience immersive exceptionnelle, mais présentent des défis importants en termes de sécurité. Des situations d’urgence, telles que la perte d’orientation, les changements météorologiques, les accidents ou les problèmes de santé, peuvent survenir à tout moment. Le défi consiste à assurer la sécurité de ces pratiquants en mer tout en préservant leur autonomie et leur immersion dans l’expérience. Notre problématique est de trouver un moyen d’assurer une localisation en temps réel du sportif et de lui permettre de signaler un problème à une personne de confiance, qu’il s’agisse d’un membre de sa famille, d’un ami ou d’un membre de son club sportif, par exemple.

 

2. Présentation générale de la solution

La solution proposée consiste en une balise GPS conçue à partir d’un Arduino et d’un module GPS. Cette balise se fixe facilement à la bouée du pratiquant de sport en apnée (rappelons que la bouée est un équipement obligatoire). Une fois en place, elle émet toutes les minutes un signal GPS.

Ce signal peut être récupéré et consulté par un proche via un site web, accessible depuis un ordinateur ou un téléphone. Ainsi, le proche peut suivre en temps réel la position du pratiquant de sport en apnée.

De plus, cette balise est dotée d’un bouton d’alerte. En cas de situation de détresse, lorsque ce bouton est activé, un SMS contenant les coordonnées GPS est automatiquement envoyé à un numéro préalablement défini. Cela permet de transmettre rapidement une alerte avec les informations nécessaires pour localiser le pratiquant en difficulté.

 

3. Réalisation

 

3.1 Liste du matériel utilisé

  • Arduino UNO
  • Module Gps Gy-neo6mv2
  • Powerbank 5v 
  • Shield SIM900 GSM/GPRS
  • SIM card avec du crédit (SMS et Internet)
  • Antenne
  • 2 leds
  • 1 protoboard
  • 1 bouton cliquable
  • Jumpers
  • Boite plastique

 

3.2 Récupération de la coordonnée GPS

De gauche à droite : Arduino Uno, module SIM 900 et module GPS NEO-6M

 

Pour récupérer la latitude et la longitude des modules GPS NEO-6M avec Arduino, nous avons commencé par établir la connexion physique en reliant les broches VCC, GND, RX et TX du module à notre Arduino UNO. Ensuite, dans le code Arduino, nous avons configuré la communication série en utilisant la bibliothèque SoftwareSerial et nous avons défini la vitesse de communication selon les spécifications des modules (généralement 9600 bps). Dans la boucle principale du programme, nous avons lu les trames NMEA provenant des modules GPS à l’aide de la fonction readStringUntil(‘\n’) et avons stocké ces trames. Nous avons identifié les trames pertinentes contenant des données de position, telles que « $GPGGA », et nous avons analysé l’information pour extraire la latitude et la longitude. Ensuite, nous avons utilisé des fonctions pour effectuer la conversion des données, transformant les coordonnées du format NMEA en degrés décimaux. Enfin, nous avons pu visualiser ou utiliser ces données sur le port série d’Arduino. Une LED a été ajoutée pour s’assurer que notre dispositif récupère la coordonnée GPS. Elle s’allume lorsque le module GPS reçoit les coordonnées GPS.

On peut noter qu’au début du projet, nous avions le choix entre ESP32 et Arduino. Nous avons commencé avec l’ESP32, mais nous n’arrivions pas à envoyer de SMS au début, nous sommes donc passés à l’Arduino et nous avons réussi. On a donc continué le projet avec Arduino.

 

3.3 Schéma des branchements

Montage montrant les branchements des composants de notre balise

 

3.4 Transmission de la coordonnée GPS via ThingSpeak

La première idée que nous avions était de passer par Blynk qui est une application permettant de recevoir des SMS depuis le module SIM900. Cependant, c’est une application avec des fonctionnalités payante, par exemple l’affichage de la coordonnée GPS sur une carte. Nous avons donc changé de stratégie pour finalement adopter ThingSpeak et développer notre propre site web pour afficher sur une carte la coordonnée GPS.

ThingSpeak est un logiciel open source écrit en Ruby qui permet aux utilisateurs de communiquer avec des appareils compatibles avec l’internet. L’utilisation de Thingspeak se justifie par sa gratuité et par les solutions qu’il offre. En effet, cette plateforme permet de faire la liaison entre la carte arduino et Thingspeak via le réseau GPRS (internet mobile) et ensuite de faire la liaison avec un site web.

Une fois que nous avons réussi à obtenir la latitude et la longitude des modules GPS NEO-6M avec Arduino, nous avons ensuite envoyé ces données via le module GSM/GPRS SIM900. Nous avons utilisé la bibliothèque SoftwareSerial d’Arduino pour établir la communication avec le module SIM900 à l’aide de commandes AT, configurant la connexion et les paramètres nécessaires. Afin d’accéder aux données à distance et d’établir une architecture de base de données, on utilise ThingSpeak pour collecter les données envoyées depuis l’Arduino. Cela nous a également permis de gérer les requêtes API pour les envoyer ultérieurement vers un site web. Un compte ThingSpeak a été créé avec un canal ouvert, facilitant ainsi la réception des requêtes sans complication. L’adresse de ce canal est la suivante : https://thingspeak.com/channels/2345649. Deux champs ont été configurés pour enregistrer la longitude et la latitude, bien qu’il soit possible d’inclure davantage de champs pour des propositions futures. ThingSpeak offre une haute capacité de réception de données et de stockage, ce qui en fait une solution idéale pour un projet de cette nature.

Le code associé à cette fonctionnalité est disponible ici : https://git.resel.fr/deepbluetracker/website/-/tree/arduinos/Arduino?ref_type=heads

 

3.5 Site web dynamique

Nous avons hébergé notre site internet via le fournisseur internet de l’IMT Atlantique Brest, le ResEl, qui propose un service d’hébergement de site web. Cette solution a été choisie pour sa gratuité et pour la proximité que nous avons avec les personnes en charge de ce service.

Voici une explication de la création de ce site :

Architecture logicielle :

Notre site internet est construit autour du Framework Node.js et d’un environnement docker. Nous avons trois fichiers : ‘server.js’, ‘index.html’ et ‘style.css’ qui composent l’essentiel du site internet de notre solution. L’utilisation de docker permet un déploiement facile sur un large panel de machines, le but étant d’assurer la reproductibilité du projet.

Côté server : Node.js

Au cœur de notre back-end se trouve le fichier ‘server.js’, un fichier Node.js qui met en route notre serveur, prend en charge les requêtes et y répond. Node.js est un moteur d’exécution JavaScript qui nous permet d’exécuter des scripts côté serveur afin de créer des pages de contenu dynamiques avant que celle-ci soit envoyée au navigateur web côté client.

Les fonctions clés sont les suivantes :

  • Initialiser le serveur, 
  • Définir les routes et les points d’accès des API,
  • Gérer la logique du site internet,
  • Interagir avec les services externes.

La passerelle : ‘index.html’

‘index.html’  agit comme la porte d’entrée de notre application web. C’est le premier fichier avec lequel l’utilisateur va interagir. Ce fichier définit la structure de notre page web en y incluant des liens vers les fichiers CSS et JavaScript pour améliorer l’apparence et les fonctionnalités.

Les éléments clés sont les suivants :

  • Une structure HTML5 basique ‘<!DOCTYPE html>’
  • Des références to ‘style.css’ pour le style, 
  • Un lien vers ‘script.js’ pour les éléments intéractifs.

Styliser l’expérience : ‘style.css’

Avec ‘style.css’, nous créons l’esthétique de notre application web. Le CSS nous permet de définir le style de notre page web, s’assurant que celle-ci est non seulement fonctionnelle, mais visuellement agréable.

Les éléments clés de style sont les suivants :

  • Un design s’adaptant aux différentes tailles d’écran (ordinateur, smartphone, etc), 
  • Des tailles, polices et couleurs customisées.

Lien vers le code (et explication rapide) et vers le site web :

Code du site : https://git.resel.fr/deepbluetracker/website

Lien du site : https://deepbluetracker.cooc.resel.fr/

Explication : 

Nous allons voir plus en détail les trois fichiers principaux de notre site-web : ‘index.html’, ‘server.js’ et ‘style.css’ qui se trouvent dans le dossier ‘public’  dans le git.

‘index.html’

Le fichier ‘index.html’ définit la structure générale du site web, il se compose en deux parties principales, l’en-tête avec le titre du site et le corps qui contient le contenu du site.

Dans l’en-tête se trouvent les liens vers les fichiers de style et vers les outils qui permettent d’afficher une carte interactive.

Le corps du site est composé d’une carte interactive et d’un tableau des positions.

Une section est dédiée à la carte, un bouton s’y trouve qui permet de centrer la carte sur le dernier emplacement enregistré.

Une autre section contient un tableau destiné à afficher les détails des positions suivies, comme la date, l’heure et les coordonnées géographiques, il y a aussi une option pour choisir une date et voir les positions de la journée choisie. 

À la fin de la page, il y a un pied de page avec un petit message.

Enfin, le code inclut les différents scripts qui rendent la page intéractive.

‘style.css’

Ce fichier permet de styliser et mettre en forme la page web, dans un premier temps nous réinitialiser  les styles par défauts. Annuler les marges, les paddings et définir le box sizing pour plusieurs éléments HTML, l’intérêt est d’assurer une cohérence visuelle car chaque navigateur a ses propre style par défaut.

Puis nous établissons les styles généraux de la page web  ‘body’ avec une police de caractères, sa hauteur et couleur, ce style est appliqué à l’ensemble du corps de la pahe.

Nous définissons également des ‘headers’ qui nous servent de titre dans la structure de notre site web, nous appliquons un espace sous le titre principal de chaque headers. De la même manière, nous ajoutons un espace autour de la section ‘main’ de la page.

Nous créons des styles pour la section de la carte ‘#map-section’ et ‘#map’ nous définissons les dimensions de la carte et les espaces entourant la section qui contient la carte.

Nous créons une section pour les pings ‘#ping-section h2’ avec un titre et des espacements et des bordures, nous faisons de même avec le sélecteur de dates ‘.data-selector’, ‘.table-container’ et ‘table’.

Pour le bouton nous appliquons un effet visuel au survol ‘:hover’ et enfin nous appliquons un effet de style sur le pied de page ‘footer’.

Pour que les effets de style soient réactifs sur mobile nous utilisons une requête média pour les ajuster (hauteur de la carte et les espacements dans le conteneur du tableau).

‘server.js’

Ce script visant à rendre la page web intéractive est découpé en plusieurs parties.

Dans un premier temps nous affichons un message dans la console afin de s’assurer que le site internet est bien lancé ‘console.log(« Le site web est chargé et prêt à fonctionner ! »);’.

Ensuite nous déclarons les différentes variables nécessaires au bon fonctionnement de la carte et la récupération des données de l’API ThingSpeak (map, maker, appDara, etc).

La première fonction que nous avons développée est ‘upadateDataFromAPI’. Cette fonction récupère les données depuis l’API ThingSpeak et les traite elle est appelée périodiquement pour mettre à jour les données. Elle met à jour la position du marqueur sur la carte sans changer le zoom ou le centrage de la carte.

La deuxième fonction développée est ‘filterPingsByDate’. Elle permet de filtrer les pings par la date sélectionnée dans le sélecteur de dates. Elle met à jour le tableau de pings  avec les données filtrées.

Une autre fonction est ‘updatePingTable’ qui met  à jour le tableau des pings avec les données fournies, en affichant les pings dans l’ordre décroissant de l’heure. Les heures sont ajustées au format HH:MM:SS.

La fonction ‘fillDateSelector’ remplit le sélecteur de dates avec des dates uniques et sélectionne par défaut la date la plus proche de la date actuelle. Après avoir sélectionnée la date la plus proche, cette fonction met également à jour le tableau des pings pour afficher les données correspondates.

La fonction ‘initializeMap’ initialise la carte Leaflet et la positionne sur les coordonnées du dernier ping.

La fonction ‘centerMapOnLastPing’ est appelée lorsque l’utilisateur clique sur le bouton, le zoom et le centrage sont ensuite ajustés sur le dernier ping reçu.La fonction ‘updateDataFromAPI’ est la fonction principale de notre script c’est donc cette fonction que nous appelons périodiquement avec l’instruction ‘setInterval(updateDataFromAPI, 5000);’.

3.6 Envoie SMS d’urgence

En réponse à une situation d’urgence, nous avons mis en place une fonctionnalité d’envoi de SMS d’urgence en utilisant Arduino, un bouton et le module GSM/GPRS SIM900. Lorsqu’un utilisateur appuie sur le bouton d’urgence, le code Arduino déclenche une action spécifique. Il a été nécessaire d’ajouter un numéro de téléphone destinataire auquel le message serait envoyé. À ce moment, le module GPS NEO-6M est sollicité pour récupérer instantanément la latitude et la longitude. Ces coordonnées sont ensuite intégrées dans un message d’urgence, qui inclut un lien vers Google Maps pour une localisation précise. Pour ce faire, nous avons de nouveau utilisé la bibliothèque SoftwareSerial pour communiquer avec le module GSM/GPRS SIM900 via des commandes AT.

 

3.7 Boîtier contenant le dispositif

Modélisations 3D de notre boitier

La boite a été imprimée à partir d’une modélisation 3D (fichier en annexe) sur une des imprimantes 3D du fablab. Elle a été faite sur mesure pour optimiser l’espace à l’intérieur. De plus, des trous permettent de faire sortir l’antenne (pour une meilleure transmission des données) et la module GPS (pour éviter d’avoir une couche supplémentaire entre lui et l’extérieur). Deux autres trous permettent de brancher l’arduino Uno et la batterie portable.

 

4. Résultats

4.1 Le dispositif

Une fois assemblé dans sa boite, le dispositif ressemble à ce que l’on voit sur les images suivantes : 

Images montrant la boite contenant le dispositif de notre balise

Afin de le rendre étanche, nous l’avons placé dans une pochette étanche (type pochette pour téléphone), puis nous l’avons attaché à une bouée gonflable (voir image ci-dessous), qui est obligatoire lors de la pratique de chasse sous-marine, pour qu’il flotte à la surface de l’eau. De plus, étant donné la place limitée à l’intérieur de la pochette étanche, nous avons observé que le bouton était susceptible de s’activer de manière involontaire sous la pression exercée par la pochette. Afin de remédier à ce problème, nous avons ajouté un petit cylindre creux pour prévenir ce phénomène. Le bouton reste actionnable en appuyant soi-même depuis l’extérieur.

Exemple de bouée pouvant accueillir notre balise

4.2 Le site internet

Le site internet que nous avons développé est disponible sur ce lien : https://deepbluetracker.cooc.resel.fr/

On y retrouve les fonctionnalités suivantes :

  • Une carte maritime interactive indiquant les différents pings du plongeur
  • L’historique des pings sous forme de tableau (avec la date, l’heure, la latitude et la longitude)
  • Un bouton permettant de recentrer la carte sur le dernier ping

Image du site web que nous avons developpé

4.3 Démonstration

Démonstration de notre dispositif :

 

4.4 Défauts

Lors de son utilisation, les critères de fonctionnement du dispositif qui font défaut au prototype sont : 

  • le temps qu’il faut pour obtenir la première coordonnée GPS (quelques minutes)
  • la précision du module GPS. Le constructeur annonce 30 mètres mais nous obtenons une précision de 200 mètres.

 

5. Perspectives

Dans une perspective idéale, avec davantage de temps et de ressources, nous aurions aimé intégrer plusieurs améliorations à notre balise :

  • Système attaché au nageur : Initialement, l’idée était de fixer la balise à la personne plutôt qu’à la bouée. En effet, il est ressorti des entretiens avec les pratiquants que certains chasseurs sous-marins ou apnéistes se désolidarisent parfois de la bouée (la fixant au sol avec un leste pour nager autour par exemple), ou s’en débarrassent en cas d’urgence. Cependant, la transmission des données dans l’eau posait des défis techniques trop complexes. Ce changement aurait offert une surveillance plus efficace du pratiquant de sport en apnée.
  • Boîte hermétique au lieu de la pochette : Nous aurions aimé concevoir une boîte totalement hermétique spécialement conçue pour notre dispositif. Cependant, par manque de moyen et de temps, nous n’avons pas pu mettre cela en place. Il fallait trouver une solution pour rendre étanche le bouton permettant d’envoyer l’alerte par SMS.
  • Amélioration de la précision du GPS et de l’actualisation de la position : Idéalement, une meilleure précision du GPS et une actualisation plus fréquente de la position auraient été souhaitables. Les coordonnées GPS que nous recevons ne sont en effet qu’assez peu précises, ce qui peut évidemment poser un problème dans le cadre d’une opération de sauvetage par exemple. Nous aurions par conséquent aimé améliorer ce point si nous avions plus de temps. 
  • Connexion satellitaire : Une connexion satellitaire aurait représenté une avancée significative, permettant une couverture plus large et une meilleure transmission des données même en pleine mer. Cependant, cela aurait également nécessité des moyens financiers plus importants.
  • Collecte de données de santé : Intégrer la capacité de collecter et d’envoyer des données de santé telles que le pouls ou la tension faisait partie de nos idées initiales. Elle aurait permis un suivi médical en temps réel du pratiquant, ou un envoi de messages d’alertes automatiques en fonction de certains signaux vitaux spécifiques (par exemple la tension pour la syncope).

Jardin Partagé – Solution Technique

Envoyé par le 15 Jan 2024 dans Projets, Blog, TAF CoOC | 0 commentaire

This entry is part 3 of 3 in the series SmartGarden

Les auteurs

 

Je suis Souleymane KANGOUTE, élève ingénieur en FISE A2 à IMT Atlantique par ailleurs étudiant  de la thématique d’Approfondissement (TAF) Conception d’Objets Communicants, appelée CoOC.

Je suis Cristian QUEVEDO, élève ingénieur en FISE A2 à IMT Atlantique. Par ailleurs, étudiant  de la thématique d’Approfondissement (TAF) Conception d’Objets Communicants, appelée CoOC.

Je suis Maëlys CHEVRIER, élève ingénieure en FISE A3 à IMT Atlantique. Par ailleurs, étudiante de la thématique d’Approfondissement (TAF) Conception d’Objets Communicants, appelée CoOC.

Je suis Aïna DIROU, élève ingénieure en FIP A3 à IMT Atlantique. Par ailleurs, étudiante de la thématique d’Approfondissement (TAF) Conception d’Objets Communicants, appelée CoOC.

 

Présentation de notre solution technique

 

Présentation du projet

Réalisation du projet

Perspectives

Conclusion

Annexes

 

Présentation du projet

Architecture globale du système

Contexte

Un jardin partagé est un jardin communautaire de quartier dont l’objectif global est axé sur le social et le partage. Ces jardins sont, pour la majorité, à l’initiative des citoyens. Malgré tout, il arrive parfois que leur création soit à l’initiative de collectivités. Dans ces cas, il peut être difficile de fédérer les citoyens, ce qui a des conséquences sur l’organisation et l’animation du jardin. De façon générale, les jardins possèdent un ou plusieurs référents qui vont gérer l’organisation, le fonctionnement et l’animation. Ces référents peuvent être animateur technique, bénévole du jardin ou animateur de mairie de quartier.

Lorsqu’aucun référent ne ressort des membres actifs du jardin, des répercussions peuvent être observées sur la planification à long terme, l’organisation et l’animation du jardin. Cela peut engendrer une perte de motivation chez les bénévoles et donc conduire à une perte du nombre d’adhérent.

Pour remédier à cette situation, nous proposons une solution qui permet à chaque membre du jardin de savoir quelles sont les tâches à faire au moment de sa visite. Également, afin de faciliter la prise de décision, notre application web est connectée à des capteurs qui permettent une supervision du jardin.

Ce projet se nomme Smart Garden et vise à améliorer et faciliter l’organisation au sein des jardins partagés de façon à ce que même les jardins sans référent puissent remplir leurs objectifs et avoir une vision sur le long terme. Nous avons recherché la simplicité et l’accessibilité en développant une interface web afin que cet outil soit accessible par tous les utilisateurs.

 

Solution

La solution que nous avons développée est un boîtier dans lequel est installé un système de capteurs. Cet ensemble est relié à une base de données dont les informations sont affichées sur une interface web.

[Lien de la vidéo]

Réalisation du projet

Différents outils nous ont été utiles dans la réalisation de ce projet. Afin de suivre l’avancement de notre projet, nous avons utilisé Taïga qui est un outil de gestion de projet agile. C’est grâce à cet outil que nous avons mis en place la méthode SCRUM. Dans le but de gérer les versions et la centralisation du code nous avons utilisé GIT, un système de contrôle de version open source et GitLab, une plateforme de développement collaborative open source.

Front-end

Le front-end a été fait avec la bibliothèque Javascript libre React. Notre choix s’est porté sur cette technologie car un des membres du groupe la connaissait.

 Page d’accueil du site web

 

La page web est d’abord composée d’une entête incluant une barre de navigation permettant de passer d’une page à l’autre. Nous disposons ainsi de 3 pages : Accueil, Tâches et Fiches.

La page d’accueil

Cette page récupère avec deux requêtes GET les informations relatives aux jardins et aux relevés des capteurs afin de les afficher. Pour ce faire, nous utilisons les hooks useState et useEffect. UseState permet de stocker la donnée localement et de la modifier, nous créons alors un état local. UseEffect permet de lancer des évènements et d’en choisir les déclencheurs. Dans notre cas, UseEffect nous permet de déclencher l’appel des API lors du premier rendu de la page, soit lors de son chargement avant l’affichage. Quant à useState, il nous permet de stocker les données renvoyées par le back localement afin de les exploiter. Dans notre cas, nous nous en servons uniquement pour les afficher.

Les Fiches

Onglet Fiches

Cet onglet permet à l’utilisateur de visualiser les fiches informatives sur différents plants. Les fiches sont récupérées avec un appel d’API comme présenté dans la partie précédente. L’image est dans notre cas par défaut. Sur cette page, plusieurs interactions sont possibles et exploitent chacune différentes requêtes HTTP :

  1. Nous pouvons visualiser le détail d’une tâche pour obtenir les informations de la base de données concernant la fiche. Lorsque nous cliquons sur le bouton Détails, un popup recouvre la page donnant plus d’informations.

Détails d’une fiche

    2. Nous pouvons ajouter une tâche en cliquant sur le bouton Ajouter et en remplissant le formulaire qui apparaît, dont tous les champs sont requis.

Formulaire d’ajout de fiche 

 

    3. Nous pouvons supprimer une tâche en cliquant sur l’icône Poubelle. Une demande de confirmation permet de limiter les risques de mauvaises manipulations.

4. L’icône à droite du nom de chaque fiche, indique la présence ou non de la plante dans le jardin. Ainsi, les tâches associées à une fiche seront affichées ou non en fonction de si la plante est sélectionnée. Il est possible de modifier cette sélection via le bouton dédié. Une fenêtre apparaît et nous pouvons modifier, sélectionner ou désélectionner les plantes avec des boutons switch. La modification n’est possible qu’après avoir cliqué sur le bouton Modifier la sélection pour éviter de mauvaises manipulations.

Sur cette page, la liste des fiches est mise à jour systématiquement à chaque modification.

Les Tâches

Onglet Tâches

 

Dans cet onglet, nous visualisons les tâches semaine par semaine. Elles sont de plus filtrées pour ne laisser apparaître que les tâches des fiches sélectionnées ainsi que les tâches générales. Ainsi, s’il n’y a pas de carotte dans le jardin, aucune tâche concernant les carottes n’apparaîtra.

Il est possible de naviguer d’une semaine à l’autre via les boutons Précédent et Suivant, qui modifie de +/- 7 jours la date affichée. Il est également possible de modifier directement la date en l’écrivant manuellement dans l’encadré central ou en choisissant la date en cliquant sur le calendrier.

Modification de la date via le calendrier

Comme décrit en amont pour les fiches, nous pouvons créer et supprimer des tâches. Lorsque nous ajoutons une tâche, elle s’affiche nécessairement sans être associée à une fiche. Ainsi, un référent de jardin partagé peut gérer les tâches comme il le souhaite.

Il est finalement possible de valider ou d’invalider une tâche pour savoir ce qui a été fait au sein du jardin.

Style

Le style de l’interface est dynamique afin de faciliter son utilisation. Ainsi lorsqu’un élément comme un bouton ou un onglet est survolé ou sélectionné, son style évolue pour mettre en valeur l’interaction possible.

Le style global se veut minimaliste pour ne pas perdre l’utilisateur, étant donné que nous avions établi que nos utilisateurs n’étaient pas tous à l’aise avec la technologie. Par ailleurs, l’utilisation d’un panel de vert renvoie évidemment aux végétaux.

Back-end

Le back-end de l’application se compose de trois éléments essentiels : le système d’exploitation, la base de données, et l’interface de programmation (API).

Système d’exploitation

Le cœur du système d’exploitation repose sur Docker. Docker est une plateforme qui permet de lancer des applications dans des conteneurs. L’objectif d’un conteneur est d’héberger des services sur un même serveur physique (dans notre cas nos machines personnelles) tout en les isolant les uns des autres.

Cette plateforme nous offre également un environnement uniforme pour tous les membres du projet. Cette uniformité facilite l’intégration et le regroupement des différentes composantes développées par chacun des contributeurs.

Le fonctionnement des conteneurs Docker au sein de notre infrastructure Smart Garden repose sur l’utilisation de deux composants essentiels : Docker Compose et les fichiers Dockerfile. Cette approche garantit une configuration simplifiée et une mise en œuvre efficace de l’environnement de développement.

Le fichier docker-compose.yml définit l’ensemble des services et des paramètres nécessaires à notre application. Chaque service, tel que la base de données MariaDB, l’interface PHPMyAdmin, le front-end, le back-end et le service de capteurs, est configuré de manière à interagir au sein du réseau dédié smartgarden-network. Des volumes sont utilisés pour assurer la persistance des données de la base de données, tandis que les dépendances entre les services sont gérées avec l’instruction depends_on, garantissant un démarrage ordonné.

Les fichiers Dockerfile, situés dans les répertoires ./frontend, ./backend, et ./sensor, définissent les instructions nécessaires pour construire les images Docker correspondantes. Chacun de ces fichiers permet de décrire l’environnement d’exécution, les dépendances et les étapes spécifiques à chaque composant de l’application. Ces fichiers Dockerfile sont intégrés dans le fichier docker-compose.yml pour assurer une cohérence lors du déploiement de l’ensemble de l’application.

Une fois l’application déployée dans Docker, il est possible d’accéder au front-end, à PHPMyAdmin (pour gérer et visualiser la base de données) et à la page de l’API depuis l’adresse du localhost en sélectionnant des ports dédiés. Ces ports sont configurés dans le fichier docker-compose.yml, les fichiers Dockerfile et parfois les fichiers de configuration des services.

Base de données

Pour la gestion des données, nous avons opté pour MariaDB, un système de gestion de base de données relationnelles. Cette solution est complétée par l’utilisation de PHPMyAdmin, une interface web qui simplifie la manipulation et la visualisation des données stockées.

PHPMyAdmin nous a principalement été utile au début du projet afin de mettre en place les premières versions des bases de données. Cet outil nous a permis de faire de nombreux tests avant que l’API ne soit disponible dans l’application.

Dans ce projet nous avons pensé à une base de données simple. Voici le schéma de la base de données : 

Diagramme UML de la base de données

API

L’interface de programmation (API) repose sur FastAPI, un framework Python moderne et performant. Le serveur Python s’interface avec la base de données et expose des points d’accès pour la gestion des différents éléments nécessaires dans le site web (front-end).

FastAPI utilise la librairie Pydantic pour définir les modèles de données, facilitant ainsi la validation des données entrantes et sortantes. Chaque point d’accès est défini comme une fonction asynchrone associée à une route particulière. Chaque entité (Jardin, Parcelle, Action, etc.) dispose de points d’accès spécifiques pour la création, la lecture, la mise à jour et la suppression des données.

En résumé, notre API FastAPI offre un ensemble de points d’accès structurés pour la gestion des données de notre application Smart Garden et les modèles Pydantic garantissent la validité des données.

Un serveur Python fonctionne en parallèle avec un script Python dédié à la récupération des relevés des capteurs à partir du protocole MQTT. Ces données sont ensuite intégrées de manière transparente dans la base de données, assurant ainsi une mise à jour constante et en temps réel.

Schéma représentant les interactions entre les services

Capteur

Cette partie est dédiée à la mise en place du module électronique qui va permettre de prélever les données du jardin en temps réel. Le traitement de ces données en aval du système électronique va permettre de générer les tâches à effectuer dans le jardin.   

Pour cela, nous allons d’abord présenter l’objet lui-même et les éléments intervenants à sa mise en place. Puis nous allons présenter l’architecture globale assurant la communication entre cet objet et la partie Back-end du projet.

Matériels utilisés

Divers matériels et/ou matériaux ont été utilisés dans la réalisation du projet:

  • Une carte électronique Lopy 4
  • Une antenne
  • 2 capteurs d’humidité du sol Funduino 
  • Un capteur de température DHT11
  • Des câbles mâles-femelles et mâles-males
  • Une batterie portable de 5 volts
  • 10 cm de plastique thermorétractable
  • 1 Planche de bois 3 cm x 20 cm
  • 2 Vis pour fixer la capteur de température à la planche
  • 1 Récipient en plastique rempli de terre

 

Conception du boîtier 

Nous avons choisi de concevoir le boîtier qui abritera notre dispositif électronique à l’aide du logiciel Tinkercad. Les dimensions de cette boîte dépendent de la largeur de la carte Lopy 4 et de la longueur de la batterie connectée à l’intérieur. La boîte aura des dimensions de 20×14 cm et incorpore un couvercle coulissant avec des arêtes diagonales pour obtenir une fermeture quasi-parfaite et fournir une protection efficace.

Le fichier de conception Tinkercad.

Une fois que le boîtier a été imprimé grâce à l’imprimante 3D du FabLab, nous sommes passés à la phase de post-production pour assurer la fonctionnalité et la connectivité optimale du dispositif. À cet effet, différents outils spécialisés ont été utilisés afin de réaliser des perforations précises dans le boîtier. Ces perforations ont été effectuées de manière stratégique pour loger et connecter l’antenne, garantissant ainsi une réception de signal efficace. De plus, des ouvertures spécifiques ont été créées pour faciliter l’exposition des capteurs d’humidité du sol et du capteur de température DHT11 à l’environnement extérieur.

Schéma électrique du câblage

La connexion entre la carte Lopy 4 et les capteurs s’établit comme suit :

 

 

Les capteurs d’humidité du sol, de température et d’humidité relative de l’air sont des composants essentiels dans une solution IoT (Internet des objets) conçue pour la surveillance des espaces verts. Ces capteurs jouent des rôles clés en fournissant des données environnementales permettant une gestion efficace et durable des espaces verts, que ce soit dans des jardins partagés, des parcs urbains ou des espaces communautaires.

– Capteur d’humidité du sol :

Description : Ce capteur mesure l’humidité du sol, indiquant la quantité d’eau présente dans la zone de culture.

Importance : Il facilite la surveillance de l’humidité du sol, permettant des ajustements précis dans l’irrigation. Un niveau optimal d’humidité est essentiel pour la croissance saine des plantes et des cultures.

Avantages IoT : L’intégration de ce capteur dans une solution IoT permet la surveillance à distance et en temps réel de l’état du sol. 

– Capteur de température et d’humidité relative de l’air :

Description : Ce capteur mesure à la fois la température ambiante et l’humidité relative de l’air environnant.

Importance : Il fournit des données cruciales sur les conditions climatiques, qui sont fondamentales pour la croissance et le développement des plantes. Il aide également à identifier des situations qui pourraient affecter la santé de la végétation.

Avantages IoT : La connexion IoT permet la collecte et l’analyse continue des données climatiques. Cela permet la mise en œuvre de stratégies proactives, telles que des alertes automatiques en cas de conditions climatiques extrêmes.

– Communication entre la lopy 4 et les capteurs

Pour assurer la communication avec les différents capteurs, nous avons élaboré un script python qui est disponible depuis le dépôt GitLab [lien du code].   

Architecture globale de la communication 

–Communication via LoRa 

LoRa, acronyme de Long Range, est un protocole de communication sans fil qui se distingue par sa capacité à transmettre des petits paquets de données (0,3 kbps à 5,5 kbps) à un récepteur sur de longues distances avec une consommation d’énergie remarquablement basse depuis un émetteur (node) . La couverture LoRa peut s’étendre sur plusieurs kilomètres, s’adaptant aux environnements urbains et ruraux. 

Les données émises par les capteurs sont transmises à la passerelle (gateway) LoRa qui peut gérer des centaines de nœuds LoRa en même temps. Dans notre cas, nous nous sommes servis de la passerelle Indoor (Rayon de 100m)  du Fablab de l’IMT Atlantique.

–Communication via WiFi

Le protocole WiFi sera utilisé pour la transmission des données entre la passerelle LoRa et le serveur d’application contenu dans la plateforme The Things Network (TTN).  Il faut noter que la passerelle LoRa est alimentée par le secteur et connectée à internet via le réseau 4G/5G. Dans notre cas, la passerelle était connectée au réseau local, lui-même connecté à internet.

–Communication via MQTT

MQTT est un protocole adapté aux objets contraints qui fonctionnent selon l’architecture publish and subscribe. Cette architecture est orchestrée par un broker (MQTT broker) qui est déjà implémenté sur la plateforme TTN. Nous avons implémenté le client MQTT via le langage de programmation python en utilisant la librairie paho-mqtt [Lien du code d’implémentation]. C’est ce client qui va se connecter au cloud TTN afin de récupérer les données de nos capteurs en souscrivant au nœud LoRa adéquat et en choisissant la QoS (qualité de service) appropriée selon le projet.

Avant d’utiliser la librairie paho-mqtt de python, nous avons d’abord tenté d’utiliser Node-RED, un outil d’automation de flux permettant de contrôler et d’interconnecter des services cloud ou des objets connectés entre eux. La connexion à la plateforme TTN via le protocole MQTT et l’extraction des données s’est faite sans problème. Mais, comme nous avions hébergé Node-RED sur Docker, pour un travail plus collaboratif, la création ou la modification d’un flux sur Node-RED n’était pas mis à jour chez tous les membres du groupe. Cela nous obligeait à mettre à disposition un ordinateur central faisant tourner le script. Par conséquent, nous nous sommes tournés vers l’élaboration d’un script python. Il nous a permis de connecter le client MQTT au broker de la plateforme TTN afin de récupérer et d’envoyer les données à la base de données. Rendant ainsi le code accessible à tous via GIT.

Perspectives

De nombreuses améliorations sont possibles pour notre solution. La principale est d’intégrer le script des capteurs dans Docker, c’est-à-dire, faire le lien entre le backend (API) et la plateforme TTN pour exploiter les données relevées. Actuellement, le script n’étant pas inclus dans le container Docker, il fonctionne indépendamment du projet. 

De plus, la génération automatique de tâche, en exploitant les données des relevés de capteurs, apporterait de la valeur aux utilisateurs.

D’autres améliorations mineures optimiseraient l’expérience utilisateur : 

  • Gérer l’authentification des jardins
  • Ajouter une vue calendaire offrirait une vision long terme pour les utilisateurs
  • Personnaliser les fiches avec l’ajout d’image et le stockage dans la base de donnée
  • Améliorer les formulaires (pour permettre d’associer les tâches aux fiches  par exemple)
  • Ajouter des données météorologique afin de les comparer aux tâches (la pluie influant sur le besoin en arrosage par exemple)
  • Améliorer le design du boîtier de sorte à le rendre plus ergonomique en ajoutant des trous pour indiquer l’état du fonctionnement de notre dispositif (marche, arrêt, état de chargement de la batterie).

Conclusion

Le projet Smart Garden représente une réponse innovante et technologique aux défis rencontrés par les jardins partagés, notamment en l’absence de référents. Nous avons ainsi mis en place une solution complète, allant d’une interface web simplifiée à la création d’un système de capteurs, dans le but de d’améliorer la gestion quotidienne des espaces communautaires.

Bien que de nombreuses fonctionnalités soient déjà opérationnelles, notre solution pourrait être approfondie en intégrant notamment l’automatisation de la génération de tâche, en particulier en exploitant les données des capteurs.

Annexes

Lien vers le dépôt GitLab : ici 

Lien vers la vidéo de démonstration : ici

RiverCleaner – solution technique

Envoyé par le 15 Jan 2024 dans Projets, TAF CoOC | 0 commentaire

This entry is part 3 of 3 in the series RiverCleaner

 

22/12/2023

Auteurs:
Anna Terra GOMES GUERRA, Mathieu BOURGES, Dely Catalina ARDILA MEDINA

TABLE DES MATIÈRES

  1. Introduction
    1. Objectif du projet (et les domaines/technologies qu’il couvre)
    2. Spécifications du projet
      1. Diagramme de cas d’utilisation
    3. Diagramme de blocs d’architecture
  2. Hardware
    1. Conception 3D
    2. Conception dans la découpeuse laser
    3. Environnement de test
      1. Liste matériel pour configuration
    4. Électronique (RiverCleaner)
      1. Liste du matériel
      2. Parlons bien, parlons code
  3. Software
    1. Serveur TTN
    2. Serveur base de données
    3. Monter un serveur WEB
      1. Setup de la raspberry
      2. Apache2
      3. Installation de php
      4. Installation du serveur de base de donnée
      5. phpMyAdmin, notre interface pour configurer la base de données
      6. Mise en place des utilisateurs
      7. Installation de la base de donnée
      8. Installation du site web
      9. Création de l’API MQTT de TTN
      10. Setup python sur la raspberry
      11. Script pour la récupération des données en MQTT sur la raspberry
    4. Page Web 25
      1. Fonctionnalités
  4. Perspectives et conclusiones
      1. Perspectives

     

      1. Conclusions

     

I. Introduction

A. Objectif du projet (et les domaines/technologies qu’il couvre)

Conception d’un modèle novateur de système de collecte des déchets flottants dans les rivières, conçu pour atténuer la pollution de l’eau avant d’atteindre l’océan. Ce système intègre des bouées rotatives élégantes qui dirigent avec habileté les déchets flottants vers un conteneur intelligent connecté via la technologie LoRa. Cette solution contribue non seulement à la préservation de l’environnement, mais recueille également des données précieuses dans une base de données, offrant un accès aisé pour les futures recherches et observations. De plus, elle propose une expérience interactive via une page web conviviale, permettant aux utilisateurs de visualiser de manière intuitive l’état du système grâce aux lectures précises des capteurs, soulignant ainsi notre engagement envers un avenir plus propre et durable.

 

 

B. Spécifications du projet

a. Diagramme de cas d’utilisation

 

 

Ce schéma met en lumière les caractéristiques mises en œuvre par le système et les divers acteurs associés à ces actions. Les acteurs clés qui interagissent comprennent les responsables du système de bouées, les citoyens et les responsables des déchetteries. Les responsables des bouées initient les interactions en évaluant l’adéquation environnementale, les citoyens jouent un rôle prépondérant dans le processus d’entretien du système et dans la collecte manuelle des déchets, tandis que les responsables des déchetteries se chargent du traitement des déchets au-delà des responsabilités du citoyen ordinaire. Cette collaboration dynamique entre ces acteurs crée un écosystème efficace pour la préservation de notre environnement.

 

C. Diagramme de blocs d’architecture

Ce schéma offre un aperçu captivant de la conception du système et des interconnexions qui le caractérisent. Il met en lumière les flux de données entre les capteurs, la carte Arduino avec son module Lora Groove Wio E5, les serveurs dédiés au traitement et au stockage des données, ainsi que le site Web permettant une visualisation aisée. Il illustre également le cheminement des déchets flottants, depuis les bouées rotatives jusqu’au conteneur à ordures interconnecté.

 

En résumé, ce schéma offre une vision claire des interactions entre les éléments clés du système, mettant en avant les flux de données et de déchets qui facilitent le fonctionnement harmonieux du système de collecte des déchets flottants RiverCleaner.

 

II. Hardware

A. Conception 3D

Voici une représentation 3D immersive des 3 bouées tournantes, vue sous différentes perspectives pour une appréciation maximale.

 

 

Pour la conception de la bouée rotative, l’inspiration a été puisée d’un projet existant sur https://rivercleaning.com. Le modèle a été adapté aux exigences spécifiques du système, en tenant compte des caractéristiques uniques de notre environnement d’essai. Ainsi, la décision a été prise d’équiper la bouée de pales de ventilateur pour optimiser sa rotation selon le flux d’eau des rivières, avec un diamètre réfléchi à 80 mm pour s’intégrer harmonieusement à l’environnement environnant.

De manière similaire, trois de ces bouées ont été déployées pour assurer un acheminement continu des déchets flottants vers le panier à ordures. Ces bouées sont fixées au fond grâce à un axe adaptable, offrant une flexibilité d’implémentation qui permet non seulement le passage aisé de petits bateaux si nécessaire, mais aussi le respect de la vie marine des rivières. De plus, leur adaptabilité au niveau de l’eau, sujet à des variations fréquentes au fil du temps, renforce leur efficacité dans des conditions changeantes. Cette approche ingénieuse garantit une solution robuste et adaptable pour la collecte efficace des déchets flottants.

 

B. Conception dans la découpeuse laser

Voici la conception innovante des faces du panier à ordures, pensée avec des filtres et des tiges pour garantir la rotation fluide des bouées au sein de notre environnement de test :

 

 

Initialement conçue comme une poubelle parfaite de 90x90x90 mm, la conception du panier à ordures s’est réduite au fil du processus à la mise en œuvre de seulement 4 faces, dont l’une arbore un filtre en forme de poisson pour injecter de la personnalité dans le projet et renforcer l’image de la marque. Deux barres de 14 x 274,5 mm ont été ingénieusement intégrées en tant que poutres, maintenant les bouées rotatives pour optimiser l’utilisation du matériau et assurer une adaptabilité accrue à l’environnement. Cette approche créative ajoute non seulement du caractère au projet, mais renforce également l’esthétique globale et l’attrait visuel de la marque. 

En outre, à la suite de tests visant à affiner le système de collecte des déchets, une décision innovante a été prise de remplacer l’arrière du conteneur par une structure en maille imprimée en 3D avec des trous de 6 mm x 6 mm et un espacement de 2 mm entre eux. Cette modification est conçue pour favoriser une circulation optimale de l’eau tout en améliorant la rétention des déchets dans le système.

 

 

C. Environnement de test

a. Liste matériel pour configuration

  • 1 grand conteneur
  • 1 Pompe à eau
  • 1 mur de séparation
  • Supports pour panier à ordures
  • Fil de fer
  • Ruban isolant
  • Eau

 

 

Pour la mise en œuvre de l’environnement de test, nous avons choisi un grand récipient d’eau, dans lequel une pompe à eau a été stratégiquement installée pour créer un courant simulé, imitant l’écoulement d’une rivière. En outre, un mur de séparation a été placé au centre du conteneur afin d’assurer une circulation uniforme autour de celui-ci. Cette disposition intelligente empêche tout croisement inattendu des courants, évitant ainsi tout comportement indésirable des bouées, comme des virages inattendus ou des interruptions du mouvement cinétique. Cette configuration permet une simulation réaliste et contrôlée, créant un environnement d’essai idéal pour évaluer les performances du système. Pour fixer les bouées au modèle, nous avons choisi d’utiliser des fils moulables, en les faisant passer verticalement à travers les bouées, et un fil horizontalement pour assurer la stabilité, comme l’illustrent les images. Étant donné la proximité de ces fils avec l’eau, nous avons appliqué du ruban isolant à titre préventif afin d’éviter tout problème futur.

 

 

D. Électronique (RiverCleaner)

a. Liste du matériel

  • 1 Module Lora Grove Wio E5
  • 1 Arduino Leonardo
  • 1 Capteur de niveau d’eau
  • 1 Détecteur de distance à ultrason.
  • 1 Arduino Grove Base Shield

Chacun de ces modules occupe un rôle clef dans le projet : 

  • Le capteur à ultrason, va détecter quand la poubelle est pleine
  • Le capteur de niveau d’eau, va nous donner des informations sur le niveau de la rivière (si il est supérieur ou inférieur à la normale)
  • Le buzzer, va fournir une information sonore sur l’état du système
  • Le LoRa-E5, va nous permettre d’envoyer les données en LoRa sur un serveur.

 Vous trouverez ci-dessous le schémas de montage du système :

 

 

Sur le port UART, nous retrouvon le module LoRa-E5

Sur le port D6, se trouve le Buzzer

Sur le port D7, le détecteur à ultrason (Ultrasonic Ranger)

Sur le port I2C Droit, se trouve le capteur de niveau d’eau

 

b. Parlons bien, parlons code

Notre projet est fait sur arduino, nous avons donc développé notre code sur cette plateforme. L’ensemble du code du projet se trouve sur un gitlab hébergé sur les serveurs de IMT Atlantique. Le gitlab est disponible en suivant ce lien dans la section arduino : https://gitlab.imt-atlantique.fr/m21bourg/rivercleaner
Plusieurs remarques sont à faire à cette étape :

  • Assurez-vous d’avoir une Arduino Léonardo. LE CODE NE FONCTIONNE PAS POUR D’AUTRE TYPES DE CARTES !!!!
  • Assurez-vous d’avoir une liaison série entre le PC et la carte. Le programme ne se lancera pas tant qu’il n’aura pas réussi à établir une liaison série. (Vous pouvez shunter cette sécurité en commentant la ligne 55 “while (!USB_Serial);” ).

 

  • Dans le fichier config_application.h Changez le DevEUI (mettez celui qui vous est fourni par TTN)
  • Dans le fichier config_application.h Changez l’AppKey (mettez aussi celui qui vous est fourni par TTN)

 

 

III. Software

A. Serveur TTN

Pour établir la connexion avec le serveur TTN, il est impératif de créer un « End device », dans notre cas, le module Lora Grove Wio E5, chargé de communiquer les données lues par la carte Arduino avec The Things Network.

 

 

Cette démarche permet d’obtenir les informations d’identification essentielles pour une connexion réussie et une lecture correcte des données récupérées. Ultérieurement, ces données servent également à établir des liens entre les bases de données et les serveurs qui interagissent de manière transparente avec l’utilisateur. Ce processus garantit une intégration harmonieuse et efficace des données dans l’écosystème du projet.

 

 

 

B. Serveur base de données

Dans cette étape cruciale, les données capturées sont méticuleusement archivées dans une base de données, offrant ainsi la possibilité de les consulter en fonction de divers paramètres tels que la date, l’heure, la quantité de déchets, le niveau d’eau, et bien d’autres. Cette approche réfléchie permet une analyse approfondie et une visualisation personnalisée des informations, fournissant ainsi une compréhension holistique des tendances et des schémas liés à la gestion des déchets flottants.

Pour le serveur de base de données, nous avons fait le choix d’utiliser un serveur mySQL. Ce choix présente plusieurs avantages :

  • Facilité de mise en place
  • Bonne gestion d’une grosse quantité de donnée
  • Facilité de lien avec différents autres services

La base de donnée est construit sur le schémas suivant :

 

 

user désigne les utilisateurs. Un utilisateur est représenté par :

  • Un ID (numéro d’utilisateur)
  • Name (un nom)
  • Firstname, un prénom
  • Password (un mot de passe)

tool désigne l’outil riverCleaner. Il est représenté par :

  • Un ID
  • Location, la localisation de la station
  • LoRa address : L’adresse LoRa pour contacter l’outil
  • River name : le nom de la rivière ou l’outil est installé

Etant donné qu’un utilisateur peut avoir un ou plusieurs outils nous avons une table de liaison “haveTool” qui fait le lien entre user et tool.

Enfin, vu qu’un outils peut faire des mesures, nous avons une table measurement qui contient l’ensemble des mesures des outils, une mesure est décrite par :

  • Un ID
  • L’identifiant de l’outil qui à fait la mesure
  • State : désigne l’état du système
  • Full : un boolean qui indique si la poubelle est pleine ou non
  • Water_level : donne une information sur le niveau d’eau de la rivière
  • Date : horodatage de la mesure (créé automatiquement par la base de donnée).

 

C. Monter un serveur WEB

Matériel :

  • Raspberry PI 4 B+
  • Carte micro SD (4 Go minimum requis)
  • Moniteur, clavier, souri, connexion internet

 

a. Setup de la raspberry

Dans un premier temps, nous allons préparer la raspberry. Pour cela nous allons avoir besoin d’un OS. Dans un premier temps, allez chercher une Image sur le site de raspberry (https://www.raspberrypi.com/software/operating-systems/ ). Pour vous faciliter la tâche, je vous recommande une image Raspberry Pi OS with desktop and recommended software. Bien qu’elle soit plus grosse, elle dispose de quelques outils pré-installés, qui vous aideront lors du débugage. 

Flashez la carte SD avec l’image de Raspberry PI OS avec l’outil de votre choix (je vous recommande balena Eatcher https://etcher.balena.io/ ). 

Une fois la carte SD flashée, insérée la dans la raspberry, et mettez le système sous tension. Au bout de quelques minutes, vous devriez arriver sur l’outil d’aide à l’installation.

Si cela ne fonctionne pas : 

  • Vérifiez que le moniteur est sous tension, et qu’il a la bonne source
  • Vérifiez la présence de fichier sur la carte SD (vous avez peut-être flasher autre chose, comme une clef USB)
  • Vérifiez que vous avez bien flasher un image de raspberry pi OS (non de Raspberry Pi OS for VM)

Suivez le guide d’installation, et faites les éventuelles mise à jour. Une fois la raspberry complètement installée, redémarrez la.

 

b. Apache2

Nous allons maintenant passer à la configuration de la raspberry afin de la transformer en serveur web.

Tapez ‘sudo /etc/init.d/apache2 restart’. Si vous avez un message de redémarrage, vous pouvez passer à l’étape de l’installation de php.

Sinon, nous allons installer manuellement le serveur apache.

Tapez ‘sudo apt install apache2’ Cette commande va installer un serveur apache (eq serveur web html) sur la raspberry.

Afin de vérifier si le serveur est bien installé, ouvrez un navigateur, et tapez dans la barre de recherche ‘localhost’ ou ‘127.0.0.1’. Vous devriez arriver sur une page comme celle-ci :

 

Si ce n’est pas le cas :

  • Faites une MAJ sur la carte (‘sudo apt-get update’ puis ‘sudo apt-get upgrade’, puis reboot)
  • Tentez de réinstaller le serveur (‘sudo apt-get install apache2’)
  • Essayez la commande ‘/etc/init.d/apache2 restart’
  • demandez à chatGPT de l’aide

 

c. Installation de php

Nous allons maintenant passer à l’installation de php.

Dans votre terminal, tapez la commande ‘sudo nano /var/www/html/example.php’.

Une fenêtre devrait s’ouvrir. Entrez les lignes de code suivantes : 

<!DOCTYPE html>
<html>
              <?php
                           print(“<h1>HELLO WORLD !!!!</h1>”);
               ?>
</html>

Dans votre navigateur, dans la barre d’adresse, tapez ‘localhost/example.php’. Si vous observez un HELLO WORLD !!!! marqué en très gros. Vous pouvez passer à la partie installation du serveur sql.

Si vous avez une erreur, vous avez sans doute mal recopié le code donné ci-dessus. Vérifiez bien la présence de “;” à la fin de la ligne de code. 

Si vous avez seulement une page balance, cela signifie que php n’est pas installé sur la raspberry.

Nous allons installer php à la main. Pour cela, tapez la commande ‘sudo apt-get install php’. Cette commande devrait installer automatiquement la dernière version de php. Confirmez cela en regardant la version de php (‘php -v’). Réessayez de charger la page “localhost/example.php”.

Cela ne fonctionne toujours pas : 

  • Vérifiez l’URL
  • Redémarrez le serveur apache “/etc/init.d/apache2 restart”
  • Redémarrez la raspberry
  • Renseignez vous sur internet

 

d. Installation du serveur de base de donnée

Les étapes qui vont suivre sont un peu plus complexes. Je vous recommande de suivre les documentations en ligne.

Nous allons passer à l’installation du serveur de base de données mysql. Pour cela tapez la commande ‘sudo apt-get install mysql-server’. Cette commande va permettre d’installer un serveur mysql sur la raspberry. Bien que dans une certaine mesure c’est mieux, je vous déconseille de faire la sécure installation de mysql, cela peut bloquer votre base de donnée, et vous serez obligé de flasher à nouveau la carte SD. 

Afin de vérifier sa bonne installation, tapez la commande ‘sudo mysql’. 

Si vous avez ce message (à quelques différences près), félicitation, vous avez un serveur SQL, vous pouvez passer à l’installation de phpmyadmin.

Afin de sortir du terminal mysql tapez la commande exit.

Si la commande ne fonctionne pas, regardez la documentation en ligne.

 

e. phpMyAdmin, notre interface pour configurer la base de données

Une fois votre base de données installée, nous allons procéder à l’installation de l’outil qui va la gérer : phpMyAdmin.

Pour cela, tapez la commande ‘sudo apt-get install phpmyadmin’. 

Dans un premier temps phpmyadmin vous demandera des accès à la base de donnée faites Entrée pour accepter

Ensuite, il vous demandera quel serveur web nous souhaitons reconfigurer. Faites ESPACE afin de sélectionner apache2, et appuyer sur Entrée

Normalement c’est tout bon. Allez sur la page de connexion de phpmyadmin en tapant dans votre navigateur ‘localhost/phpmyadmin/’
Si vous avez une page qui ressemble à cela, vous avez réussi à setup phpmyadmin :

Si cela ne fonctionne pas : 

 

f. Mise en place des utilisateurs

Dans cette étape, nous allons mettre en place les utilisateurs de la base de données. 

Tapez ‘sudo mysql’ Vous devriez ouvrir un terminal mysql.

Ensuite tapez la commande : 

CREATE USER ‘[username]’@’localhost’ IDENTIFIED BY ‘[password]’;

Remplacez [username] par un nom d’utilisateur ex :  ‘user’@’localhost’
Remplacez [password] par le mot de passe de votre choix ex : ‘password’
N’oubliez pas le “;” à la fin de la requête.

Ensuite, nous allons attribuer des droits à cet utilisateur. Pour cela tapez la commande :

GRANT ALL PRIVILEGES ON *.* TO ‘[username]’@’localhost’ IDENTIFIED BY ‘[password]’ WITH GRANT OPTION;

Remplacez [username] par un nom d’utilisateur ex :  ‘user’@’localhost’
Remplacez [password] par le mot de passe de votre choix ex : ‘password’
N’oubliez pas le “;” à la fin de la requête.

Retournez sur la page de connexion de phpmyadmin et entrez le couple login mot de passe que vous venez de créer. (utilisez [username] pour le login, pas besoin du @’localhost’)

Si vous êtes connecté, félicitation ! Vous avez phpmyadmin à votre disposition.

Sinon : 

  • Vérifiez que vous avez bien le bon couple login mot de passe
  • Redémarrez apache2 ‘sudo /etc/init.d/apache2 restart’
  • Redémarrez la raspberry
  • Cherchez de l’aide en ligne

 

g. Installation de la base de donnée

Nous allons maintenant passer à l’installation de la base de données. 

Dans un terminal tapez ‘sudo mysql’

Puis  : CREATE DATABASE riverCleaner;

Cette commande va créer une base de donnée dans le serveur mysql.

Retournez dans phpmyadmin et retrouvez la base de donnée rivercleaner, cliquez dessus (cela permet de la sélectionner) et importez la base de donnée river cleaner disponible sur le gitlab : https://gitlab.imt-atlantique.fr/m21bourg/rivercleaner

Maintenant, vous avez une base de données pour votre projet !

 

h. Installation du site web

Mettez sur une clef USB le code du site web disponible sur le gitlab https://gitlab.imt-atlantique.fr/m21bourg/rivercleaner

Sur la raspberry, déplacez le fichier ‘WEB’ sur le bureau

Dans un terminal taper la commande suivante : 

sudo cp -R ./Desktop/WEB/ /var/www/html/

Cette commande à pour effet de copier le dossier WEB et le coller dans le dossier /var/www/html

Dans un navigateur recherchez l’adresse ‘localhost/WEB/’. Vous devriez arriver sur la page d’accueil de riverCleaner.

Notre objectif est maintenant de réaliser le montage suivant :

 

Pour cela, nous allons avoir besoin de créer un lien entre la base de données et le serveur SQL. Cela va se faire en deux temps. Dans un premier temps nous allons faire en sorte que le serveur nous envoie les informations, puis nous allons les récupérer avec un code python

 

i. Création de l’API MQTT de TTN

Nous allons maintenant créer l’API MQTT qui servira à récupérer les informations émises en LoRa par la carte arduino. 

Pour cela connectez vous à TTN. Dans application -> tp-lora-cooc -> MQTT.

Cliquez sur “generate new API key”. Ceci va générer une clef API pour que l’on puisse se connecter en MQTT à l’ensemble du service “tp-lora-cooc”. Notez bien aussi le username “tp-lora-cooc@ttn”, celui-ci nous sera très utile pour la suite.

 

j. Setup python sur la raspberry

Pour commencer, installons pythons sur la raspberry : 

sudo apt-get install python3-full

C’est une version plus complète de python (qui intègre un peu plus d’outils dès le départ).

Ensuite nous avons besoin d’installer différentes librairies : 

  • paho-mqtt -> permet de recevoir des flux en MQTT
  • mysql-connector -> qui permet de s’interfacer facilement avec la base de donnée

Vous pouvez les installer facilement avec pip : 

pip install paho-mqtt
pip install mysql-connector

Si cela ne fonctionne pas : 

  • Redémarrez la raspberry (surtout si vous venez tout juste d’installer python)
  • Renseignez vous sur les problème de virtual environnement (les .venv)
  • Téléchargez pip (le script get-pip.py disponible sur le site officiel de pip fonctionne bien)
  • Regardez la documentation en ligne

 

k. Script pour la récupération des données en MQTT sur la raspberry

Nous allons pouvoir installer le script qui permet de faire la liaison entre le serveur TTN et la base de données SQL. Dans un premier temps récupérez le script python disponible sur le gitlab : https://gitlab.imt-atlantique.fr/m21bourg/rivercleaner.

Mettez les valeurs adéquat pour lier votre raspberry au serveur TTN.

Et à la fin du document remplissez les champs avec vos informations de connexion avec la base de données :

Une fois ceci fait, vous pouvez exécuter le script python avec la commande : 

python3 [VotreScript].py
ou [VotreScript] est le nom de votre script.

Si vous recevez des informations sur votre serveur, celles-ci seront automatiquement transmises dans le terminal, et si elles sont compatibles, elles iront dans la base de données.

 

D. Page Web

a. Functionnalités

La page web permet à l’utilisateur d’avoir une vue sur son système. Combien de polluants, il a retiré de la rivière, l’état du système, …

La page web est hébergée sur un serveur apache. Elle est liée à la base de données. La page web dispose aussi d’une API sur laquelle les scientifiques peuvent se connecter afin de recevoir des mesures des différents outils.

Bien que nous n’ayons pas eu le temps de mettre en place l’API, nous avons pu commencer à travailler sur le site web. Le site web à un front-end en html, un backend en php et bootstrap 3 pour toute la partie “CSS”.

Le site est composé de plusieurs pages : 

  • Page d’accueil
  • Page de relevé des mesures
  • Page de création de compte
  • Page de login

La page d’accueil regroupe différentes informations sur ce qu’est le projet riverCleaner, ce qu’il fait, à quoi il sert … 

La page de relevé des mesures, se contente d’afficher les mesures présentes dans la base de données. A terme, le but sera d’afficher les mesures relatives à un utilisateur, avec des options de filtrage (filtrer par appareil, filtrer par date, …)

Page de création de compte. Cette page sert à se créer un compte riverCleaner. Elle prend comme entrée Nom, Prénom et mot de passe. Il est possible de faire de l’injection de code dans la page.

Page de login, cette page sert juste à se logger sur le site. Pour l’instant elle affiche juste un message pour indiquer que l’authentification à réussi, mais à terme, il faudra mettre les mécanismes de session PHP, pour garder l’authentification.

function.php est un fichier central dans ce site. Il permet de centraliser des fonctions php communes au site web. Par exemple, il centralise les fonctions relatives au header, footer, navbar, connexion à la base de données, imports bootstrap … Si vous souhaitez récupérer le site, vous devrez passer un peu de temps pour comprendre ce fichier. 

 

IV. Perspectives et conclusiones

A. Perspectives

Les perspectives d’avenir de ce projet sont prometteuses. La technologie utilisée pour collecter les déchets flottants dans les rivières pourrait être adaptée à d’autres applications, notamment dans les grandes rivières. En outre, l’ajout de fonctionnalités, telles que la détection de la qualité de l’eau ou la surveillance de la faune, pourrait encore améliorer l’efficacité et l’impact environnemental du système. Enfin, la collaboration avec les autorités locales et les organisations environnementales pourrait permettre d’étendre le système à une plus grande échelle, contribuant ainsi à la préservation de l’environnement à l’échelle mondiale.

B. Conclusions

En conclusion, ce projet de collecte des déchets flottants dans les rivières représente une avancée significative dans la lutte contre la pollution de l’eau. La combinaison de la conception innovante des bouées rotatives, de l’utilisation de capteurs avancés et de la mise en place d’une infrastructure logicielle solide démontre l’efficacité de l’approche multidisciplinaire adoptée. Ce système offre une solution pratique et adaptable pour la collecte efficace des déchets flottants, tout en fournissant des données précieuses pour des recherches futures. Il incarne l’engagement envers un environnement plus propre et durable, tout en ouvrant la voie à de nouvelles possibilités d’amélioration et d’expansion.

PharmaBox – Solution Technique

Envoyé par le 15 Jan 2024 dans Projets, TAF CoOC | 0 commentaire

This entry is part 3 of 3 in the series PharmaBox

Auteurs

Fred NGUETTA

Michael MORENO

Romain BOINET

Adam GIOVANNI

Alexandre DERRIEN

Contexte

Au sein de la spécialité Conception d’objets communicants à IMT Atlantique, nous réalisons un projet innovant répondant à un besoin réel. Dans notre équipe, le secteur de la santé est tout de suite apparu comme un domaine qui méritait notre attention. Nous avons en effet constaté grâce à nos entourages et différents entretiens que le métier d’infirmière était sujet à une forte surcharge de travail dûe à un emploi du temps bien trop rempli ce qui fragilise grandement ce pourquoi elles font ce métier : le temps passé avec le patient. C’est de ce postulat que nous est venue l’idée de la PharmaBox.  

Il s’agit d’une armoire à médicament automatisée qui se situe dans la chambre du patient et qui, à sa demande et après une validation d’une infirmière, délivre un médicament. Ces demandes et validations s’effectuent depuis une interface web. Cela permet ainsi à l’infirmière de gagner du temps en évitant certains déplacements. Ce gain lui permet de passer plus de temps avec ses patients ce qui améliore les conditions de travail des infirmières et de vie des patients. 

Réalisation 

1) Matériel 

La boîte : 

  • 6 planches de bois de 450x300x3,5 millimètres
  • Deux “entonnoirs” imprimé en 3D
  • Deux “tourniquets” imprimé en 3D
  • Du velcro adhésif

 

Electronique : 

  • Trois leds (Une bleue, une verte, une rouge)
  • Une breadboard
  • Une carte esp32 (WROOM 32) 
  • Deux Moteur pas-à-pas + driver STP01
  • Deux batteries 9v pour les moteurs
  • Un buzzer SV4
  • Des câbles

 

Autres : 

  • Un ordinateur
  • Découpeuse laser
  • Imprimante 3D
  • Des vis

 

2) Boîte

 

Nous avons choisi de concevoir une boîte pour mettre en place notre système. Cette boîte est composée de deux compartiments distincts. Le premier, au-dessus n’est accessible que par un(e) infirmier(e). Ce compartiment sert à recevoir l’électronique ainsi que les médicaments.

Figure 1: Partie supérieure de la pharmabox

 

Le second compartiment se trouve en dessous du premier et est composé d’un tiroir coulissant dans l’armature du compartiment. Ce compartiment n’est pas scellé et le tiroir permet de recevoir les médicaments demandés.

Figure 2 : Partie inférieur de la pharmabox, intérieur du tiroir

 

Pour l’armature de la boîte, nous avons sélectionné des designs sur le site boxes.py ( https://www.festi.info/boxes.py/ ) qui permet de générer des fichiers au format SVG afin de pouvoir par la suite découper les différentes faces des deux compartiments avec une découpeuse laser. 

Pour que la découpeuse laser fonctionne correctement et découpe les différentes parties de la boîte, il faut opérer un peu sur les fichiers SVG en question. En effet, il faut mettre tous les contours de chaque élément à découper à une épaisseur de 0.05 mm et le mettre en rouge (canal rouge à 100% et 0% en bleu et vert). On peut voir sur la partie supérieure de la boite 3 LEDs qui informent le patient sur l’état de livraison de sa commande (vert : livrée, rouge : refusée, bleu : en attente). 

 

Le compartiment supérieur possède un couvercle articulé permettant de recharger les médicaments dans les entonnoirs.

Afin d’assurer la distribution des médicaments entre la partie supérieure et le tiroir de la partie inférieure, nous avons choisi de concevoir une pièce que nous appelons l’entonnoir.

Nous avons d’abord réalisé un modèle 3D de la pièce que nous avons retravaillé plusieurs fois afin d’obtenir une pièce qui nous convenait. Enfin, nous avons utilisé une imprimante 3D ultimaker 2 pour imprimer l’entonnoir.

Figure 3 : L’entonnoir

 

Cette pièce à pour but de recevoir des médicaments comme un réservoir. La forme de cette pièce vise à imiter celle d’un entonnoir “classique” afin que les médicaments s’empilent seuls et puissent être distribués de manière granulaire.

Afin d’assurer la granularité, nous avons imaginé une seconde pièce imprimée en 3D que nous appelons tourniquet.

Figure 4 : Le tourniquet

 

A l’aide de cette pièce, qui est reliée à l’arbre d’un moteur pas à pas, nous souhaitons délivrer un seul et unique médicament. Pour cela, nous faisons une rotation de 90° pour qu’un seul médicament puisse être délivré. Si nous voulons distribuer plus d’un médicament, il suffit d’opérer plusieurs rotations à la suite.

Pour assembler toutes ces parties, nous avons d’abord assemblé les deux boîtes séparément, enfin nous avons utilisé du velcro adhésif pour que les deux boîtes restent bien ensemble.

Figure 5 : Les deux compartiments assemblés

 

Pour fixer les entonnoirs et les moteurs, nous avons utilisé quatres morceaux de bois pour entourer les entonnoirs, ils ont été fixés par des vis dans la partie inférieure de la boîte afin de pouvoir fixer le moteur à ces morceaux de bois en ajoutant d’autres vis dans les trous prévus à cet effet dans les moteurs.

Figure 6 : L’entonnoir fixé

 

Pour que l’arbre du moteur puisse s’insérer dans l’entonnoir et ainsi créer la rotation du tourniquet, nous avions préalablement percé l’entonnoir, puis nous avons ensuite collé le tourniquet à l’arbre du moteur avec un pistolet à colle.

Figure 7 : Le tourniquet fixé à l’arbre moteur dans l’entonnoir

 

Enfin, pour la partie électronique dans la boîte, nous avions prévu beaucoup d’espace car nous n’étions pas sûrs de la place que cela nécessiterait, ainsi que le nombre d’entonnoirs que nous voulions mettre en place dans la pharmabox. Nous avons donc dû percer la face avant de la partie supérieure pour que l’on puisse voir les leds (comme sur la figure 2). Le reste de la partie électronique est disposé dans l’espace prévu à cet effet dans la boîte.

Figure 8 : Intérieur de la partie supérieure de la pharmabox avec l’électronique installée.

 

3) Code

 

Le code permettant la gestion de la PharmaBox a été développé avec PlatformIO, un écosystème open source dédié au développement IoT.

 

Dans notre cas, le code source se trouve ICI. Il se compose de plusieurs parties, parmi lesquelles les parties essentielles sont le dossier ‘data’, contenant notre page web et tous les éléments nécessaires à son bon fonctionnement, puis le dossier ‘src’, qui contient le code en C++ permettant les interactions de la carte ESP32 avec les différents éléments électroniques. Enfin, le fichier ‘platformio.ini’ contient les éléments de configuration de la carte électronique ainsi que les bibliothèques nécessaires.

 

4) Électronique 

 

 ESP32 (NodeMCU-32S)

Figure 9 : ESP 32

Notre système utilise 3 LEDs, un buzzer, deux moteurs pas à pas et le protocole de communication Wifi. C’est pour ce dernier aspect que nous avons fait le choix d’un microcontrôleur ESP32. 

 

Un des moteurs pas à pas est contrôlé par les broches (IN1)21, (IN2)19, (IN3)18 et (IN4)5, tandis que le deuxième moteur est commandé par les broches (IN1)26, (IN2)27, (IN3)14 et (IN4)12. Les LEDs bleue, verte et rouge sont respectivement contrôlées par les broches 22, 4 et 2. Le buzzer, quant à lui, est géré par la broche 15.

 

Pour l’hébergement de notre plateforme web et de ses images, nous avons opté pour des librairies spécialisées.

ESPsyncWebServer assure un serveur web asynchrone pour la carte, facilitant la gestion des requêtes web entrantes. Par ailleurs, SPIFFS a été utilisé pour stocker les données, incluant notre page web et nos images, en exploitant la mémoire flash disponible sur la carte.

 

LED 8mm

Figure 10 : LED

 

Les LEDs sont utilisées pour informer le patient de l’état de sa demande et de la livraison de la façon suivante : 

 

  • Bleu =  Demande en attente de réponse
  • Rouge = demande refusée
  • Vert = produit délivré

Caractéristiques : 

  • Alimentation: 5 Vcc
  • Diamètre: 8 mm

 

Buzzer SV4

Figure 11 : Buzzer

 

Le buzzer est utilisé afin d’informer le patient de l’état de sa demande et livraison. En effet, 1 BIP prolongé (3s) signale la livraison du médicament et 3 BIPs rapides et successifs signalent un refus de la demande. 

 

Caractéristiques : 

  • Tension: 5 Vcc​
  • Fréquence: 2,5 kHz​
  • Intensité: 25 mA
  • Niveau sonore: 95 dB sous 12 Vcc à 30 cm
  • Diamètre: 23 mm
  • Hauteur: 18 mm

 

Moteur pas-à-pas + driver STP01

Figure 12 : Moteur pas-à-pas + driver

Le couple moteur pas-à-pas et driver est utilisé afin de créer la rotation du tourniquet. Il a été calibré pour délivrer la quantité demandée de médicament. En effet, le,moteur pas-à-pas permet d’imposer une rotation précise d’un angle θ. Nous avons imposé une rotation θ adaptée à la distribution d’une pilule. Il suffit de multiplier θ par le nombre de pilule demandée pour obtenir la distribution voulue. 

 

La  librairie utilisée pour contrôler les moteurs pas à pas est Stepper.

 

Caractéristiques : 

  • Alimentation : 5 Vcc
  • Résistance: 50 Ω
  • Intensité: 25 mA
  • Réduction: 1/64
  • Couple: 300 gf.cm

 

Schéma des branchements

Figure 13 : Schéma de l’installation

5) Interface Web

 

Cette interface est une « Single-page application » ou SPA. Cela signifie que toutes les fonctionnalités sont sur la même page, ce qui permet d’être fluide pour l’utilisateur.

 

Fonctionnalités

Cette application a de multiples fonctionnalités:

– Elle permet au patient de commander en autonomie des médicaments qui ne requièrent pas de prescription.

– Elle permet au personnel infirmier de valider et refuser les commandes de tout les patients.

– Elle permet au personnel infirmier de regarder l’historique de demandes de chaque patient, et leur statut.

– Elle permet au patient d’avoir un traitement plus rapide et indépendant.

Fonctions principales dans le code

Pour pouvoir rester avec l’architecture d’un SPA, chaque interface est présente dans l’écran, mais une seule est visible à l’utilisateur. Pour changer ce qui est visible pour l’utilisateur, nous utilisons les fonctions show<Nom d’Interface>.

Selon le type d’utilisateur chaque interface est différente donc un infirmier peut voir les options qu’un patient peut ne pas voir. Quand tous les utilisateurs peuvent recevoir la même information, on utilise la même fonction pour les deux, donc nous évitons de répéter le code, par exemple la fonction pour montrer l’historique des patients.

 

Tout est dans un seul fichier html, la structure, le style et la fonctionnalité. Seulement les images sont en dehors du fichier. Nous n’avons pas utilisé des frameworks ou libraires. Nous avons créé chaque partie dans le code, chaque fonctionnalité et chaque style avec l’aide d’intelligence artificielle et connaissances déjà acquises. 

 

Démonstration d’utilisation de l’interface web

 

Dans un premier temps, l’utilisateur, qu’il s’agisse d’un patient ou du personnel infirmier, doit se connecter à la plateforme. Pour cette première version les comptes ont été créés en dur dans le code. 

Figure 14 : Page d’identification de l’application

En tant que patient, vous pouvez demander n’importe quelle quantité de médicaments, pour chaque médicament depuis l’onglet  « Accueil ».

Figure 15 : Sélection de médicaments

Une fois que vous avez sélectionné la quantité de médicaments que vous souhaitez commander, vous devez appuyer sur le bouton « commander ». Un message apparaît indiquant les médicaments demandés. Lorsqu’un médicament est commandé, une nouvelle commande est générée, et celle-ci est visible depuis l’onglet « mes demandes ».

Figure 16 : Visualisation de mes demandes en tant que patient 

En tant qu’infirmier, vous pouvez valider ou refuser la commande en cours du client depuis l’onglet « Mes demandes ».

Figure 18 : Visualisation d’une demande d’un patient 

Une fois cette décision prise, la commande du patient est mise à jour. Toutes les commandes de chaque patient sont visibles depuis l’onglet « Mes patients”, en cliquant sur le patient concerné. 

Figure 19 : Historique des demandes d’un patients

6) Protocole de communication

 

Les différents échanges d’informations entre les smartphones utilisant l’interface WEB et la PharmaBox se font grâce à la technologie Wifi, directement intégrée à l’ESP32. Cela présente l’inconvénient de devoir disposer d’une connexion Wifi partout au sein de l’hôpital ou d’une connexion 4G venant du même opérateur que celui qui fournit la connexion Wifi. Nous considérons dans ce projet que tous les utilisateurs sont connectés au Wifi de l’hôpital.

Cet échange est rendu possible grâce à la librairie Wifi qui a permis à notre ESP32 de se connecter à un réseau wifi et d’obtenir ainsi une adresse IP pour notre carte.

 

Résultats 

Nous avons bien réussi à intégrer ensemble les différentes parties de notre solution. En effet nous possédons une vidéo illustrant l’utilisation typique de notre pharmabox. Cependant au moment de la phase de test nous nous sommes rendu compte du potentiel problème lié au design de notre solution. 

 

Par exemple, les tourniquets ne peuvent pas épouser parfaitement la forme de l’arbre du moteur, nous avons relié les entonnoirs aux moteurs grâce à un pistolet à colle. Le problème de cette solution est qu’elle crée pour le moteur une résistance additionnelle qui a rendu le calibrage des moteurs plus compliqué et la solution moins résiliente.

 

Nous avons aussi fait face à un autre souci, celui des batteries, ces dernières se déchargeant de manière très rapide (en seulement une ou deux commandes moteur) nous n’avons pas pu démontrer notre solution en classe. 

 

Hormis ces problèmes, nous n’avons pas rencontré d’autres problèmes sur les autres parties de la solution (site web et affichage des LED). 

 

Perspectives 

 

De nombreuses fonctionnalités nous sont venues à l’idée durant tout le déroulement du projet. Celles que nous avons choisies de réaliser effectivement dans le temps imparti constituent le résultat de celui-ci. Néanmoins, la PharmaBox peut encore être améliorée, voici quelques pistes : 

 

  • Ajout d’une base de données dynamique

Dans l’état actuel du prototype, les différentes variables, patient ou infirmière par exemple, sont créées en local. La création d’une base de données serait la meilleure solution pour ajouter/supprimer/modifier ces variables. L’idéal serait même d’accorder cette base de données au système d’information de l’hôpital.  

 

  • La modification de demande 

L’infirmière pourrait modifier une demande reçue, par exemple, le type ou le nombre de médicaments mais aussi la posologie. Elle pourrait également ajouter un commentaire à sa réponse.  

 

  • La suggestion de médicaments par l’infirmière 

L’infirmière pourrait suggérer à distance depuis l’interface web  la prise d’un médicament à un patient qui pourrait accepter ou refuser cette suggestion. 

 

  • La suggestion automatique IA d’un médicament 

Le patient rentrerait depuis l’interface web un niveau de douleur ainsi qu’une description de celle-ci. L’interface web passerait par une IA pour lui suggérer un médicament. 

 

  • La présence d’un tutoriel d’utilisation 

Pour rendre l’utilisation du dispositif plus simple pour le patient, il serait possible d’ajouter un tutoriel qui expliquerait les différentes fonctionnalités de la PharmaBox. 

 

  • Ajout d’entonnoirs supplémentaires 

Dans l’état actuel du prototype de la PharmaBox, seulement 2 entonnoirs sont présents pour stocker des médicaments. La présence de plus de 2 entonnoirs permettraient d’augmenter le choix de médicaments possible. Il faudrait ainsi adapter la liste de médicaments dans l’interface web.

 

  • Ouverture à distance de la partie supérieure de la boîte

Dans l’état actuel du prototype de la PharmaBox, l’ouverture de la partie supérieure de la boîte, utile au renouvellement de stock, n’est pas sécurisée, or il ne faut pas que cette partie puisse être accessible au patient. Il serait possible de déverrouiller la partie supérieure grâce à un cadenas électronique que l’infirmière peut déclencher à distance depuis l’interface web. 

 

  • Adaptation médicaments / clients 

Le patient aurait une liste de médicaments auxquels il aurait le droit, certains d’entre eux seront présents dans la pharmaBox. L’interface web doit être adaptée, c’est-à-dire proposer seulement ces médicaments.

 

  • Ajout de notifications 

 

Dans l’état actuel du dispositif, le seul moyen pour l’infirmière de recevoir des informations est de se connecter à l’interface web. Le patient est quant à lui informé de l’état de ces demandes par des LEDs et un buzzer. On pourrait ajouter des notifications pour chaque échange d’informations, autant pour les fonctionnalités déjà présentes que pour les fonctionnalités énoncées dans cette section qui pourraient bénéficier de notifications. 

 

Vidéo de fonctionnement du système :

Annexe :

Sources :

Figure 9

Figure 10

Figure 11

Figure 12

Fichiers complémentaires :

Fichiers nécessaires au montage de la pharmabox.

 

LoRa-E5

Envoyé par le 6 Déc 2023 dans Trucs & astuces | 0 commentaire

La carte LoRa-E5 pour communiquer en LoRaWAN

Il existe pleins de dépôts GitHub qui concerne l’utilisation de la carte LoRa-E5 de Grove [1].

La LoRa-E5 doit être utilisée conjointement avec une carte de développement ESP32 ou arduino. Elle permet de communiquer en LoRa-MAC ou en LoRaWAN [2]. LoRa-MAC permet de communiquer en peer to peer entre 2 noeuds LoRa-MAC, seule la modulation LoRa est mise en oeuvre. LoRaWAN est le protocole réseau qui permet de communiquer avec des opérateurs IoT telles que The Things Network [3].

Pour utiliser la carte LoRa-E5 avec un arduino Leonardo en LoRaWAN, consultez le dépôt GitHub de Sylvain Montagny de l’Université Savoie-MontBlanc [4]. On trouve également une page hacker.io permettant de faire du peer to peer [7].

Les commandes dites AT permettent de contrôler le modem de la LoRa-E5 via la connexion UART de la carte de développement (arduino par exemple) [5]. La liste des commandes AT permettant de commander la carte LoRa-E5 est disponible ici [6].

Références

[1] « Module LoRa-E5 Grove 113020091 », GO TRONIC. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://www.gotronic.fr/art-module-lora-e5-grove-113020091-33673.htm
[2] « What are LoRa and LoRaWAN? », The Things Network. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://www.thethingsnetwork.org/docs/lorawan/what-is-lorawan/
[3] « The Things Network », The Things Network. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://www.thethingsnetwork.org/
[4] S. Montagny, « LoRa-E5 ». 6 décembre 2023. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://github.com/SylvainMontagny/LoRaE5
[5] J. Tan, « What are AT Commands? », Latest Open Tech From Seeed. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://www.seeedstudio.com/blog/2021/01/20/at-commands-what-why-how/
[6] « Specifications of AT commands for LoRa-E5 ». Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://files.seeedstudio.com/products/317990687/res/LoRa-E5+AT+Command+Specification_V1.0+.pdf
[7] « LoRa-E5 communication without LoRaWAN », Hackster.io. Consulté le: 6 décembre 2023. [En ligne]. Disponible sur: https://www.hackster.io/sufiankaki/lora-e5-communication-without-lorawan-9fbddc