{"id":8993,"date":"2024-01-15T17:08:16","date_gmt":"2024-01-15T16:08:16","guid":{"rendered":"https:\/\/telefab.fr\/?p=8993"},"modified":"2026-04-30T17:33:30","modified_gmt":"2026-04-30T15:33:30","slug":"deepblue-tracker-solution-technique","status":"publish","type":"post","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/deepblue-tracker-solution-technique\/","title":{"rendered":"DeepBlue Tracker &#8211; Solution technique"},"content":{"rendered":"<h1 style=\"text-align: center;\">DeepBlue Tracker &#8211; Solution technique<\/h1>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/10\/logo3_nu.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8647 \" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/10\/logo3_nu-300x300.png\" alt=\"\" width=\"231\" height=\"231\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">par \u00a0 \u00a0 Antoine DAGORN\u00a0 \u00a0 \u00a0 \u00a0 Salom\u00f3n OJEDA\u00a0 \u00a0 \u00a0 Cl\u00e9ment LERICHE \u00a0 \u00a0 Th\u00e9o BARTH\u00c9LEMY \u00a0 \u00a0 Daniel TAPIA<\/span><\/p>\n<p><span style=\"font-weight: 400;\">V2 &#8211; 15\u00a0 janvier 2024<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>1. Mise en contexte du projet<\/strong><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Dans le cadre du projet fil rouge de la TAF Conception d\u2019objet communicant de l\u2019\u00e9cole d\u2019ing\u00e9nieur IMT Atlantique, nous avons travaill\u00e9 sur un projet concernant la s\u00e9curit\u00e9 maritime.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Les activit\u00e9s nautiques solitaires sans flotteur, comme la plong\u00e9e en apn\u00e9e, la chasse sous-marine et la natation en eau libre en mer, offrent une exp\u00e9rience immersive exceptionnelle, mais pr\u00e9sentent des d\u00e9fis importants en termes de s\u00e9curit\u00e9. Des situations d\u2019urgence, telles que la perte d\u2019orientation, les changements m\u00e9t\u00e9orologiques, les accidents ou les probl\u00e8mes de sant\u00e9, peuvent survenir \u00e0 tout moment. Le d\u00e9fi consiste \u00e0 assurer la s\u00e9curit\u00e9 de ces pratiquants en mer tout en pr\u00e9servant leur autonomie et leur immersion dans l\u2019exp\u00e9rience. Notre probl\u00e9matique est de trouver un moyen d\u2019assurer une localisation en temps r\u00e9el du sportif et de lui permettre de signaler un probl\u00e8me \u00e0 une personne de confiance, qu\u2019il s\u2019agisse d\u2019un membre de sa famille, d\u2019un ami ou d\u2019un membre de son club sportif, par exemple.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>2. Pr\u00e9sentation g\u00e9n\u00e9rale de la solution<\/strong><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La solution propos\u00e9e consiste en une balise GPS con\u00e7ue \u00e0 partir d&rsquo;un Arduino et d&rsquo;un module GPS. Cette balise se fixe facilement \u00e0 la bou\u00e9e du pratiquant de sport en apn\u00e9e (rappelons que la bou\u00e9e est un \u00e9quipement obligatoire). Une fois en place, elle \u00e9met toutes les minutes un signal GPS.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Ce signal peut \u00eatre r\u00e9cup\u00e9r\u00e9 et consult\u00e9 par un proche via un site web, accessible depuis un ordinateur ou un t\u00e9l\u00e9phone. Ainsi, le proche peut suivre en temps r\u00e9el la position du pratiquant de sport en apn\u00e9e.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">De plus, cette balise est dot\u00e9e d&rsquo;un bouton d&rsquo;alerte. En cas de situation de d\u00e9tresse, lorsque ce bouton est activ\u00e9, un SMS contenant les coordonn\u00e9es GPS est automatiquement envoy\u00e9 \u00e0 un num\u00e9ro pr\u00e9alablement d\u00e9fini. Cela permet de transmettre rapidement une alerte avec les informations n\u00e9cessaires pour localiser le pratiquant en difficult\u00e9.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><strong>3. R\u00e9alisation<\/strong><\/h2>\n<p>&nbsp;<\/p>\n<h3>3.1 Liste du mat\u00e9riel utilis\u00e9<\/h3>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Arduino UNO<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Module Gps Gy-neo6mv2<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Powerbank 5v\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Shield SIM900 GSM\/GPRS<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">SIM card avec du cr\u00e9dit (SMS et Internet)<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Antenne<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">2 leds<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">1 protoboard<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">1 bouton cliquable<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Jumpers<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Boite plastique<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>3.2 R\u00e9cup\u00e9ration de la coordonn\u00e9e GPS<\/h3>\n<figure id=\"attachment_9015\" aria-describedby=\"caption-attachment-9015\" style=\"width: 1391px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/arduino.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9015 size-full\" title=\"De gauche \u00e0 droite : Arduino Uno, module SIM 900 et module GPS NEO-6M\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/arduino.jpg\" alt=\"\" width=\"1391\" height=\"561\" \/><\/a><figcaption id=\"caption-attachment-9015\" class=\"wp-caption-text\">De gauche \u00e0 droite : Arduino Uno, module SIM 900 et module GPS NEO-6M<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Pour r\u00e9cup\u00e9rer la latitude et la longitude des modules GPS NEO-6M avec Arduino, nous avons commenc\u00e9 par \u00e9tablir la connexion physique en reliant les broches VCC, GND, RX et TX du module \u00e0 notre Arduino UNO. Ensuite, dans le code Arduino, nous avons configur\u00e9 la communication s\u00e9rie en utilisant la biblioth\u00e8que SoftwareSerial et nous avons d\u00e9fini la vitesse de communication selon les sp\u00e9cifications des modules (g\u00e9n\u00e9ralement 9600 bps). Dans la boucle principale du programme, nous avons lu les trames NMEA provenant des modules GPS \u00e0 l&rsquo;aide de la fonction readStringUntil(&lsquo;\\n&rsquo;) et avons stock\u00e9 ces trames. Nous avons identifi\u00e9 les trames pertinentes contenant des donn\u00e9es de position, telles que \u00ab\u00a0$GPGGA\u00a0\u00bb, et nous avons analys\u00e9 l&rsquo;information pour extraire la latitude et la longitude. Ensuite, nous avons utilis\u00e9 des fonctions pour effectuer la conversion des donn\u00e9es, transformant les coordonn\u00e9es du format NMEA en degr\u00e9s d\u00e9cimaux. Enfin, nous avons pu visualiser ou utiliser ces donn\u00e9es sur le port s\u00e9rie d&rsquo;Arduino. Une LED a \u00e9t\u00e9 ajout\u00e9e pour s\u2019assurer que notre dispositif r\u00e9cup\u00e8re la coordonn\u00e9e GPS. Elle s\u2019allume lorsque le module GPS re\u00e7oit les coordonn\u00e9es GPS.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">On peut noter qu\u2019au d\u00e9but du projet, nous avions le choix entre ESP32 et Arduino. Nous avons commenc\u00e9 avec l&rsquo;ESP32, mais nous n&rsquo;arrivions pas \u00e0 envoyer de SMS au d\u00e9but, nous sommes donc pass\u00e9s \u00e0 l&rsquo;Arduino et nous avons r\u00e9ussi. On a donc continu\u00e9 le projet avec Arduino.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3>3.3 Sch\u00e9ma des branchements<\/h3>\n<figure id=\"attachment_9003\" aria-describedby=\"caption-attachment-9003\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/schema.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9003 size-full\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/schema.jpg\" alt=\"\" width=\"1280\" height=\"877\" \/><\/a><figcaption id=\"caption-attachment-9003\" class=\"wp-caption-text\">Montage montrant les branchements des composants de notre balise<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<h3>3.4 Transmission de la coordonn\u00e9e GPS via ThingSpeak<\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La premi\u00e8re id\u00e9e que nous avions \u00e9tait de passer par Blynk qui est une application permettant de recevoir des SMS depuis le module SIM900. Cependant, c\u2019est une application avec des fonctionnalit\u00e9s payante, par exemple l\u2019affichage de la coordonn\u00e9e GPS sur une carte. Nous avons donc chang\u00e9 de strat\u00e9gie pour finalement adopter ThingSpeak et d\u00e9velopper notre propre site web pour afficher sur une carte la coordonn\u00e9e GPS.<\/span><\/p>\n<p>ThingSpeak est un logiciel open source \u00e9crit en Ruby qui permet aux utilisateurs de communiquer avec des appareils compatibles avec l&rsquo;internet. L&rsquo;utilisation de Thingspeak se justifie par sa gratuit\u00e9 et par les solutions qu&rsquo;il offre. En effet, cette plateforme permet de faire la liaison entre la carte arduino et Thingspeak via le r\u00e9seau GPRS (internet mobile) et ensuite de faire la liaison avec un site web.<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Une fois que nous avons r\u00e9ussi \u00e0 obtenir la latitude et la longitude des modules GPS NEO-6M avec Arduino, nous avons ensuite envoy\u00e9 ces donn\u00e9es via le module GSM\/GPRS SIM900. Nous avons utilis\u00e9 la biblioth\u00e8que SoftwareSerial d&rsquo;Arduino pour \u00e9tablir la communication avec le module SIM900 \u00e0 l&rsquo;aide de commandes AT, configurant la connexion et les param\u00e8tres n\u00e9cessaires. Afin d&rsquo;acc\u00e9der aux donn\u00e9es \u00e0 distance et d&rsquo;\u00e9tablir une architecture de base de donn\u00e9es, on utilise ThingSpeak pour collecter les donn\u00e9es envoy\u00e9es depuis l&rsquo;Arduino. Cela nous a \u00e9galement permis de g\u00e9rer les requ\u00eates API pour les envoyer ult\u00e9rieurement vers un site web. Un compte ThingSpeak a \u00e9t\u00e9 cr\u00e9\u00e9 avec un canal ouvert, facilitant ainsi la r\u00e9ception des requ\u00eates sans complication. L&rsquo;adresse de ce canal est la suivante : <a href=\"https:\/\/thingspeak.com\/channels\/2345649\">https:\/\/thingspeak.com\/channels\/2345649<\/a>. Deux champs ont \u00e9t\u00e9 configur\u00e9s pour enregistrer la longitude et la latitude, bien qu&rsquo;il soit possible d&rsquo;inclure davantage de champs pour des propositions futures. ThingSpeak offre une haute capacit\u00e9 de r\u00e9ception de donn\u00e9es et de stockage, ce qui en fait une solution id\u00e9ale pour un projet de cette nature.<\/span><\/p>\n<p>Le code associ\u00e9 \u00e0 cette fonctionnalit\u00e9 est disponible ici : <a href=\"https:\/\/git.resel.fr\/deepbluetracker\/website\/-\/tree\/arduinos\/Arduino?ref_type=heads\">https:\/\/git.resel.fr\/deepbluetracker\/website\/-\/tree\/arduinos\/Arduino?ref_type=heads<\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>3.5 Site web dynamique<\/h3>\n<p>Nous avons h\u00e9berg\u00e9 notre site internet via le fournisseur internet de l&rsquo;IMT Atlantique Brest, le ResEl, qui propose un service d&rsquo;h\u00e9bergement de site web. Cette solution a \u00e9t\u00e9 choisie pour sa gratuit\u00e9 et pour la proximit\u00e9 que nous avons avec les personnes en charge de ce service.<\/p>\n<p>Voici une explication de la cr\u00e9ation de ce site :<\/p>\n<p style=\"text-align: justify;\"><b>Architecture logicielle :<\/b><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Notre site internet est construit autour du Framework Node.js et d\u2019un environnement docker. Nous avons trois fichiers : \u2018server.js\u2019, \u2018index.html\u2019 et \u2018style.css\u2019 qui composent l\u2019essentiel du site internet de notre solution. L\u2019utilisation de docker permet un d\u00e9ploiement facile sur un large panel de machines, le but \u00e9tant d\u2019assurer la reproductibilit\u00e9 du projet.<\/span><\/p>\n<p style=\"text-align: justify;\"><b>C\u00f4t\u00e9 server : Node.js<\/b><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Au c\u0153ur de notre back-end se trouve le fichier <\/span><b>\u2018server.js\u2019<\/b><span style=\"font-weight: 400;\">, un fichier Node.js qui met en route notre serveur, prend en charge les requ\u00eates et y r\u00e9pond. Node.js est un moteur d&rsquo;ex\u00e9cution JavaScript qui nous permet d&rsquo;ex\u00e9cuter des scripts c\u00f4t\u00e9 serveur afin de cr\u00e9er des pages de contenu dynamiques avant que celle-ci soit envoy\u00e9e au navigateur web c\u00f4t\u00e9 client.<\/span><\/p>\n<p style=\"text-align: justify;\"><b>Les fonctions cl\u00e9s sont les suivantes :<\/b><\/p>\n<ul style=\"text-align: justify;\">\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Initialiser le serveur,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">D\u00e9finir les routes et les points d\u2019acc\u00e8s des API,<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">G\u00e9rer la logique du site internet,<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Interagir avec les services externes.<\/span><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><b>La passerelle : \u2018index.html\u2019<\/b><\/p>\n<p style=\"text-align: justify;\"><b>\u2018index.html\u2019 <\/b><span style=\"font-weight: 400;\">\u00a0agit comme la porte d\u2019entr\u00e9e de notre application web. C\u2019est le premier fichier avec lequel l\u2019utilisateur va interagir. Ce fichier d\u00e9finit la structure de notre page web en y incluant des liens vers les fichiers CSS et JavaScript pour am\u00e9liorer l\u2019apparence et les fonctionnalit\u00e9s.<\/span><\/p>\n<p style=\"text-align: justify;\"><b>Les \u00e9l\u00e9ments cl\u00e9s sont les suivants :<\/b><\/p>\n<ul style=\"text-align: justify;\">\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une structure HTML5 basique <\/span><b>\u2018&lt;!DOCTYPE html&gt;\u2019<\/b><span style=\"font-weight: 400;\">,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Des r\u00e9f\u00e9rences to <\/span><b>\u2018style.css\u2019<\/b><span style=\"font-weight: 400;\"> pour le style,\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Un lien vers <\/span><b>\u2018script.js\u2019<\/b><span style=\"font-weight: 400;\"> pour les \u00e9l\u00e9ments int\u00e9ractifs.<\/span><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><b>Styliser l\u2019exp\u00e9rience : \u2018style.css\u2019<\/b><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Avec <\/span><b>\u2018style.css\u2019<\/b><span style=\"font-weight: 400;\">, nous cr\u00e9ons l\u2019esth\u00e9tique de notre application web. Le CSS nous permet de d\u00e9finir le style de notre page web, s\u2019assurant que celle-ci est non seulement fonctionnelle, mais visuellement agr\u00e9able.<\/span><\/p>\n<p style=\"text-align: justify;\"><b>Les \u00e9l\u00e9ments cl\u00e9s de style sont les suivants :<\/b><\/p>\n<ul style=\"text-align: justify;\">\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Un design s&rsquo;adaptant aux diff\u00e9rentes tailles d\u2019\u00e9cran (ordinateur, smartphone, etc),\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Des tailles, polices et couleurs customis\u00e9es.<\/span><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><b>Lien vers le code (et explication rapide) et vers le site web :<\/b><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Code du site\u00a0: <\/span><a href=\"https:\/\/git.resel.fr\/deepbluetracker\/website\"><span style=\"font-weight: 400;\">https:\/\/git.resel.fr\/deepbluetracker\/website<\/span><\/a><\/p>\n<p>Lien du site : <a href=\"https:\/\/deepbluetracker.cooc.resel.fr\/\">https:\/\/deepbluetracker.cooc.resel.fr\/<\/a><\/p>\n<p style=\"text-align: justify;\"><strong><span style=\"text-decoration: underline;\">Explication\u00a0:<\/span>\u00a0<\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Nous allons voir plus en d\u00e9tail les trois fichiers principaux de notre site-web : <b>\u2018index.html\u2019,<\/b> <\/span><b>\u2018server.js\u2019 <\/b><span style=\"font-weight: 400;\">et <\/span><b>\u2018style.css\u2019<\/b><span style=\"font-weight: 400;\"> qui se trouvent dans le dossier <\/span><b>\u2018public\u2019 <\/b><span style=\"font-weight: 400;\">\u00a0dans le git.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><b>\u2018index.html\u2019<\/b><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Le fichier <\/span><b>\u2018index.html\u2019<\/b><span style=\"font-weight: 400;\"> d\u00e9finit la structure g\u00e9n\u00e9rale du site web, il se compose en deux parties principales, l\u2019en-t\u00eate avec le titre du site et le corps qui contient le contenu du site.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Dans l&rsquo;en-t\u00eate se trouvent les liens vers les fichiers de style et vers les outils qui permettent d\u2019afficher une carte interactive.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Le corps du site est compos\u00e9 d\u2019une carte interactive et d\u2019un tableau des positions.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Une section est d\u00e9di\u00e9e \u00e0 la carte, un bouton s\u2019y trouve qui permet de centrer la carte sur le dernier emplacement enregistr\u00e9.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Une autre section contient un tableau destin\u00e9 \u00e0 afficher les d\u00e9tails des positions suivies, comme la date, l\u2019heure et les coordonn\u00e9es g\u00e9ographiques, il y a aussi une option pour choisir une date et voir les positions de la journ\u00e9e choisie.\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">\u00c0 la fin de la page, il y a un pied de page avec un petit message.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Enfin, le code inclut les diff\u00e9rents scripts qui rendent la page int\u00e9ractive.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><b>\u2018style.css\u2019<\/b><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Ce fichier permet de styliser et mettre en forme la page web, dans un premier temps nous r\u00e9initialiser\u00a0 les styles par d\u00e9fauts. Annuler les marges, les paddings et d\u00e9finir le box sizing pour plusieurs \u00e9l\u00e9ments HTML, l&rsquo;int\u00e9r\u00eat est d\u2019assurer une coh\u00e9rence visuelle car chaque navigateur a ses propre style par d\u00e9faut.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Puis nous \u00e9tablissons les styles g\u00e9n\u00e9raux de la page web\u00a0 <\/span><b>\u2018body\u2019<\/b><span style=\"font-weight: 400;\"> avec une police de caract\u00e8res, sa hauteur et couleur, ce style est appliqu\u00e9 \u00e0 l\u2019ensemble du corps de la pahe.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Nous d\u00e9finissons \u00e9galement des <\/span><b>\u2018headers\u2019<\/b><span style=\"font-weight: 400;\"> 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\u00eame mani\u00e8re, nous ajoutons un espace autour de la section <\/span><b>\u2018main\u2019<\/b><span style=\"font-weight: 400;\"> de la page.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Nous cr\u00e9ons des styles pour la section de la carte <\/span><b>\u2018#map-section\u2019<\/b><span style=\"font-weight: 400;\"> et <\/span><b>\u2018#map\u2019<\/b><span style=\"font-weight: 400;\"> nous d\u00e9finissons les dimensions de la carte et les espaces entourant la section qui contient la carte.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Nous cr\u00e9ons une section pour les pings <\/span><b>\u2018#ping-section h2\u2019<\/b><span style=\"font-weight: 400;\"> avec un titre et des espacements et des bordures, nous faisons de m\u00eame avec le s\u00e9lecteur de dates <\/span><b>\u2018.data-selector\u2019<\/b><span style=\"font-weight: 400;\">, <\/span><b>\u2018.table-container\u2019<\/b><span style=\"font-weight: 400;\"> et <\/span><b>\u2018table\u2019<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Pour le bouton nous appliquons un effet visuel au survol <\/span><b>\u2018:hover\u2019<\/b><span style=\"font-weight: 400;\"> et enfin nous appliquons un effet de style sur le pied de page <\/span><b>\u2018footer\u2019<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Pour que les effets de style soient r\u00e9actifs sur mobile nous utilisons une requ\u00eate m\u00e9dia pour les ajuster (hauteur de la carte et les espacements dans le conteneur du tableau).<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"text-decoration: underline;\"><b>\u2018server.js\u2019<\/b><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Ce script visant \u00e0 rendre la page web int\u00e9ractive est d\u00e9coup\u00e9 en plusieurs parties.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Dans un premier temps nous affichons un message dans la console afin de s\u2019assurer que le site internet est bien lanc\u00e9 <\/span><b>\u2018console.log(\u00ab\u00a0Le site web est charg\u00e9 et pr\u00eat \u00e0 fonctionner !\u00a0\u00bb);\u2019<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Ensuite nous d\u00e9clarons les diff\u00e9rentes variables n\u00e9cessaires au bon fonctionnement de la carte et la r\u00e9cup\u00e9ration des donn\u00e9es de l\u2019API ThingSpeak (map, maker, appDara, etc).<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La premi\u00e8re fonction que nous avons d\u00e9velopp\u00e9e est \u2018upadateDataFromAPI\u2019. Cette fonction r\u00e9cup\u00e8re les donn\u00e9es depuis l&rsquo;API ThingSpeak et les traite elle est appel\u00e9e p\u00e9riodiquement pour mettre \u00e0 jour les donn\u00e9es. Elle met \u00e0 jour la position du marqueur sur la carte sans changer le zoom ou le centrage de la carte.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La deuxi\u00e8me fonction d\u00e9velopp\u00e9e est <\/span><b>\u2018filterPingsByDate\u2019<\/b><span style=\"font-weight: 400;\">. Elle permet de filtrer les pings par la date s\u00e9lectionn\u00e9e dans le s\u00e9lecteur de dates. Elle met \u00e0 jour le tableau de pings\u00a0 avec les donn\u00e9es filtr\u00e9es.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Une autre fonction est <\/span><b>\u2018updatePingTable\u2019<\/b><span style=\"font-weight: 400;\"> qui met\u00a0 \u00e0 jour le tableau des pings avec les donn\u00e9es fournies, en affichant les pings dans l&rsquo;ordre d\u00e9croissant de l&rsquo;heure. Les heures sont ajust\u00e9es au format HH:MM:SS.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La fonction <\/span><b>\u2018fillDateSelector\u2019<\/b><span style=\"font-weight: 400;\"> remplit le s\u00e9lecteur de dates avec des dates uniques et s\u00e9lectionne par d\u00e9faut la date la plus proche de la date actuelle. Apr\u00e8s avoir s\u00e9lectionn\u00e9e la date la plus proche, cette fonction met \u00e9galement \u00e0 jour le tableau des pings pour afficher les donn\u00e9es correspondates.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La fonction <\/span><b>\u2018initializeMap\u2019<\/b><span style=\"font-weight: 400;\"> initialise la carte Leaflet et la positionne sur les coordonn\u00e9es du dernier ping.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La fonction <\/span><b>\u2018centerMapOnLastPing\u2019<\/b><span style=\"font-weight: 400;\"> est appel\u00e9e lorsque l&rsquo;utilisateur clique sur le bouton, le zoom et le centrage sont ensuite ajust\u00e9s sur le dernier ping re\u00e7u.<\/span><span style=\"font-weight: 400;\">La fonction <\/span><b>\u2018updateDataFromAPI\u2019 <\/b><span style=\"font-weight: 400;\">est la fonction principale de notre script c\u2019est donc cette fonction que nous appelons p\u00e9riodiquement avec l\u2019instruction <\/span><b>\u2018setInterval(updateDataFromAPI, 5000);\u2019<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h3>3.6 Envoie SMS d\u2019urgence<\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">En r\u00e9ponse \u00e0 une situation d&rsquo;urgence, nous avons mis en place une fonctionnalit\u00e9 d&rsquo;envoi de SMS d&rsquo;urgence en utilisant Arduino, un bouton et le module GSM\/GPRS SIM900. Lorsqu&rsquo;un utilisateur appuie sur le bouton d&rsquo;urgence, le code Arduino d\u00e9clenche une action sp\u00e9cifique. Il a \u00e9t\u00e9 n\u00e9cessaire d&rsquo;ajouter un num\u00e9ro de t\u00e9l\u00e9phone destinataire auquel le message serait envoy\u00e9. \u00c0 ce moment, le module GPS NEO-6M est sollicit\u00e9 pour r\u00e9cup\u00e9rer instantan\u00e9ment la latitude et la longitude. Ces coordonn\u00e9es sont ensuite int\u00e9gr\u00e9es dans un message d&rsquo;urgence, qui inclut un lien vers Google Maps pour une localisation pr\u00e9cise. Pour ce faire, nous avons de nouveau utilis\u00e9 la biblioth\u00e8que SoftwareSerial pour communiquer avec le module GSM\/GPRS SIM900 via des commandes AT.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3>3.7 Bo\u00eetier contenant le dispositif<\/h3>\n<figure id=\"attachment_9057\" aria-describedby=\"caption-attachment-9057\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/3D.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9057 size-full\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/3D.png\" alt=\"\" width=\"1920\" height=\"1080\" \/><\/a><figcaption id=\"caption-attachment-9057\" class=\"wp-caption-text\">Mod\u00e9lisations 3D de notre boitier<\/figcaption><\/figure>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">La boite a \u00e9t\u00e9 imprim\u00e9e \u00e0 partir d\u2019une mod\u00e9lisation 3D (fichier en annexe) sur une des imprimantes 3D du fablab. Elle a \u00e9t\u00e9 faite sur mesure pour optimiser l\u2019espace \u00e0 l\u2019int\u00e9rieur. De plus, des trous permettent de faire sortir l\u2019antenne (pour une meilleure transmission des donn\u00e9es) et la module GPS (pour \u00e9viter d\u2019avoir une couche suppl\u00e9mentaire entre lui et l\u2019ext\u00e9rieur). Deux autres trous permettent de brancher l\u2019arduino Uno et la batterie portable.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><b>4. R\u00e9sultats<\/b><\/h2>\n<h3>4.1 Le dispositif<\/h3>\n<p><span style=\"font-weight: 400;\">Une fois assembl\u00e9 dans sa boite, le dispositif ressemble \u00e0 ce que l\u2019on voit sur les images suivantes :\u00a0<\/span><\/p>\n<figure id=\"attachment_9053\" aria-describedby=\"caption-attachment-9053\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/faces.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9053 size-full\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/faces.png\" alt=\"\" width=\"1920\" height=\"768\" \/><\/a><figcaption id=\"caption-attachment-9053\" class=\"wp-caption-text\">Images montrant la boite contenant le dispositif de notre balise<\/figcaption><\/figure>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Afin de le rendre \u00e9tanche, nous l\u2019avons plac\u00e9 dans une pochette \u00e9tanche (type pochette pour t\u00e9l\u00e9phone), puis nous l\u2019avons attach\u00e9 \u00e0 une bou\u00e9e gonflable (voir image ci-dessous), qui est obligatoire lors de la pratique de chasse sous-marine, pour qu\u2019il flotte \u00e0 la surface de l\u2019eau. De plus, \u00e9tant donn\u00e9 la place limit\u00e9e \u00e0 l&rsquo;int\u00e9rieur de la pochette \u00e9tanche, nous avons observ\u00e9 que le bouton \u00e9tait susceptible de s&rsquo;activer de mani\u00e8re involontaire sous la pression exerc\u00e9e par la pochette. Afin de rem\u00e9dier \u00e0 ce probl\u00e8me, nous avons ajout\u00e9 un petit cylindre creux pour pr\u00e9venir ce ph\u00e9nom\u00e8ne. Le bouton reste actionnable en appuyant soi-m\u00eame depuis l&rsquo;ext\u00e9rieur.<\/span><\/p>\n<figure id=\"attachment_9063\" aria-describedby=\"caption-attachment-9063\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/bouee.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9063 size-medium\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2023\/12\/bouee-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" \/><\/a><figcaption id=\"caption-attachment-9063\" class=\"wp-caption-text\">Exemple de bou\u00e9e pouvant accueillir notre balise<\/figcaption><\/figure>\n<h3><\/h3>\n<h3>4.2 Le site internet<\/h3>\n<p>Le site internet que nous avons d\u00e9velopp\u00e9 est disponible sur ce lien : <a href=\"https:\/\/deepbluetracker.cooc.resel.fr\/\">https:\/\/deepbluetracker.cooc.resel.fr\/<\/a><\/p>\n<p>On y retrouve les fonctionnalit\u00e9s suivantes :<\/p>\n<ul>\n<li>Une carte maritime interactive indiquant les diff\u00e9rents pings du plongeur<\/li>\n<li>L&rsquo;historique des pings sous forme de tableau (avec la date, l&rsquo;heure, la latitude et la longitude)<\/li>\n<li>Un bouton permettant de recentrer la carte sur le dernier ping<\/li>\n<\/ul>\n<figure id=\"attachment_9137\" aria-describedby=\"caption-attachment-9137\" style=\"width: 1899px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/01\/Capture-de%CC%81cran-2024-01-15-a%CC%80-18.41.35.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9137 size-full\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/2024\/01\/Capture-de%CC%81cran-2024-01-15-a%CC%80-18.41.35.png\" alt=\"\" width=\"1899\" height=\"917\" \/><\/a><figcaption id=\"caption-attachment-9137\" class=\"wp-caption-text\">Image du site web que nous avons developp\u00e9<\/figcaption><\/figure>\n<h3><\/h3>\n<h3>4.3 D\u00e9monstration<\/h3>\n<p>D\u00e9monstration de notre dispositif :<\/p>\n\n<h3><\/h3>\n<p>&nbsp;<\/p>\n<h3>4.4 D\u00e9fauts<\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Lors de son utilisation, les crit\u00e8res de fonctionnement du dispositif qui font d\u00e9faut au prototype sont :\u00a0<\/span><\/p>\n<ul>\n<li style=\"text-align: justify;\"><span style=\"font-weight: 400;\">le temps qu\u2019il faut pour obtenir la premi\u00e8re coordonn\u00e9e GPS (quelques minutes)<\/span><\/li>\n<li style=\"font-weight: 400; text-align: justify;\"><span style=\"font-weight: 400;\">la pr\u00e9cision du module GPS. Le constructeur annonce 30 m\u00e8tres mais nous obtenons une pr\u00e9cision de 200 m\u00e8tres.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><b>5. Perspectives<\/b><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-weight: 400;\">Dans une perspective id\u00e9ale, avec davantage de temps et de ressources, nous aurions aim\u00e9 int\u00e9grer plusieurs am\u00e9liorations \u00e0 notre balise :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400; text-align: justify;\"><b>Syst\u00e8me attach\u00e9 au nageur<\/b><span style=\"font-weight: 400;\"> : Initialement, l&rsquo;id\u00e9e \u00e9tait de fixer la balise \u00e0 la personne plut\u00f4t qu&rsquo;\u00e0 la bou\u00e9e. En effet, il est ressorti des entretiens avec les pratiquants que certains chasseurs sous-marins ou apn\u00e9istes se d\u00e9solidarisent parfois de la bou\u00e9e (la fixant au sol avec un leste pour nager autour par exemple), ou s\u2019en d\u00e9barrassent en cas d\u2019urgence. Cependant, la transmission des donn\u00e9es dans l&rsquo;eau posait des d\u00e9fis techniques trop complexes. Ce changement aurait offert une surveillance plus efficace du pratiquant de sport en apn\u00e9e.<\/span><\/li>\n<li style=\"font-weight: 400; text-align: justify;\"><b>Bo\u00eete herm\u00e9tique au lieu de la pochette<\/b><span style=\"font-weight: 400;\"> : Nous aurions aim\u00e9 concevoir une bo\u00eete totalement herm\u00e9tique sp\u00e9cialement con\u00e7ue pour notre dispositif. Cependant, par manque de moyen et de temps, nous n\u2019avons pas pu mettre cela en place. Il fallait trouver une solution pour rendre \u00e9tanche le bouton permettant d\u2019envoyer l\u2019alerte par SMS.<\/span><\/li>\n<li style=\"font-weight: 400; text-align: justify;\"><b>Am\u00e9lioration de la pr\u00e9cision du GPS et de l&rsquo;actualisation de la position<\/b><span style=\"font-weight: 400;\"> : Id\u00e9alement, une meilleure pr\u00e9cision du GPS et une actualisation plus fr\u00e9quente de la position auraient \u00e9t\u00e9 souhaitables. Les coordonn\u00e9es GPS que nous recevons ne sont en effet qu\u2019assez peu pr\u00e9cises, ce qui peut \u00e9videmment poser un probl\u00e8me dans le cadre d\u2019une op\u00e9ration de sauvetage par exemple. Nous aurions par cons\u00e9quent aim\u00e9 am\u00e9liorer ce point si nous avions plus de temps.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400; text-align: justify;\"><b>Connexion satellitaire<\/b><span style=\"font-weight: 400;\"> : Une connexion satellitaire aurait repr\u00e9sent\u00e9 une avanc\u00e9e significative, permettant une couverture plus large et une meilleure transmission des donn\u00e9es m\u00eame en pleine mer. Cependant, cela aurait \u00e9galement n\u00e9cessit\u00e9 des moyens financiers plus importants.<\/span><\/li>\n<li style=\"font-weight: 400; text-align: justify;\"><b>Collecte de donn\u00e9es de sant\u00e9<\/b><span style=\"font-weight: 400;\"> : Int\u00e9grer la capacit\u00e9 de collecter et d&rsquo;envoyer des donn\u00e9es de sant\u00e9 telles que le pouls ou la tension faisait partie de nos id\u00e9es initiales. Elle aurait permis un suivi m\u00e9dical en temps r\u00e9el du pratiquant, ou un envoi de messages d\u2019alertes automatiques en fonction de certains signaux vitaux sp\u00e9cifiques (par exemple la tension pour la syncope).<\/span><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Article d\u00e9taillant la solution technique de notre projet de balise connect\u00e9e permettant d&rsquo;assurer la s\u00e9curit\u00e9 des pratiquants d&rsquo;activit\u00e9 nautique solitaire (plong\u00e9e en apn\u00e9e, chasse sous-marine, nage en eau libre etc.)<\/p>\n","protected":false},"author":1,"featured_media":9053,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[113],"tags":[],"class_list":["post-8993","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couad"],"acf":{"article_projet":[10614]},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/8993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/comments?post=8993"}],"version-history":[{"count":2,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/8993\/revisions"}],"predecessor-version":[{"id":10616,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/8993\/revisions\/10616"}],"acf:post":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/10614"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=8993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=8993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tags?post=8993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}