{"id":5842,"date":"2019-12-20T16:38:29","date_gmt":"2019-12-20T15:38:29","guid":{"rendered":"https:\/\/telefab.fr\/?p=5842"},"modified":"2026-04-30T17:33:32","modified_gmt":"2026-04-30T15:33:32","slug":"stil-solution-technique","status":"publish","type":"post","link":"https:\/\/hub.imt-atlantique.fr\/fablab\/stil-solution-technique\/","title":{"rendered":"STiL &#8211; Solution Technique"},"content":{"rendered":"<h1><span style=\"font-weight: 400;\">Introduction<\/span><\/h1>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">L\u2019id\u00e9e de travailler sur le trafic routier nous est venue suite \u00e0 de simples observations de l\u2019\u00e9tat actuel du trafic dans la ville de Brest. En effet, Brest pr\u00e9sente plusieurs points d\u2019engorgement notamment \u00e0 proximit\u00e9 des ponts permettant de passer de la rive gauche \u00e0 la rive droite de la ville. Nous avons aussi constat\u00e9 que ces conditions de circulation difficiles avaient de nombreuses cons\u00e9quences notamment psychologiques (\u00e9tat d\u2019\u00e9nervement et de stress) \u2026 Il nous a donc sembl\u00e9 pertinent d\u2019essayer de trouver des solutions pour fluidifier le trafic urbain. Nous allons dans cet article vous exposer notre solution, justifier nos choix techniques et les perspectives du projet.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Le projet STiL (Smart Traffic Light) consiste \u00e0 la fluidification du trafic routier par la mise en r\u00e9seau des feux de circulation.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Les feux tricolores sont source d\u2019embouteillages et de ralentissements inutiles souvent parce qu\u2019ils se basent sur un plan de feux \u00e9tabli \u00e0 l\u2019avance fixe qui ne s\u2019adapte pas aux conditions de circulation en temps r\u00e9el. Notre solution STiL devrait permettre de connecter ces feux entre eux et de les rendre \u201cintelligents\u201d afin de trouver une configuration plus efficace et ainsi r\u00e9duire les embouteillages dans une agglom\u00e9ration donn\u00e9e.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">STiL devrait impl\u00e9menter deux mod\u00e8les d\u2019intelligence :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une intelligence locale. Celle-ci se base sur l\u2019\u00e9tat de l\u2019intersection \u00e0 un instant donn\u00e9 et fait passer le feu de l\u2019axe vide au rouge afin de faire passer le plus de v\u00e9hicules possibles. Ainsi, la situation o\u00f9 un conducteur attend \u00e0 un feu alors que personne ne passe sur l\u2019axe perpendiculaire n\u2019existera plus.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une intelligence globale. L\u2019objectif est ici de trouver la meilleure configuration des feux au niveau d\u2019un quartier, d\u2019une ville \u2026 Ceci peut \u00eatre fait par l\u2019utilisation d\u2019une intelligence artificielle qui compile toutes les donn\u00e9es de tous les feux afin de d\u00e9terminer la configuration qui permettra de r\u00e9duire les embouteillages au maximum sur la zone choisie.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Ces deux mod\u00e8les d\u2019intelligence ne se basent pas sur l\u2019exp\u00e9rience des r\u00e9gisseurs de feux qui est pourtant primordiale dans ce contexte. C\u2019est pour cela que STiL devrait permettre \u00e0 la r\u00e9gie d\u2019intervenir sur le fonctionnement de l\u2019algorithme en configurant certains param\u00e8tres manuellement afin d\u2019assurer un contr\u00f4le humain du dispositif. Les diff\u00e9rents param\u00e8tres pouvant \u00eatre configur\u00e9s incluent notamment :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Un temps d\u2019attente minimal pour un v\u00e9hicule motoris\u00e9 \u00e0 une intersection. Cela permet de ne pas faire attendre un automobiliste ind\u00e9finiment devant un feu si l\u2019axe perpendiculaire est satur\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une dur\u00e9e maximale de feu rouge. Le syst\u00e8me STiL ne permet pas la d\u00e9tection des petits v\u00e9hicules (comme les v\u00e9los) cependant, ceux-ci doivent quand m\u00eame pouvoir traverser l\u2019intersection. Ceci peut se faire en imposant une dur\u00e9e maximale de feu rouge. Quand ce temps sera \u00e9coul\u00e9, le feu passera au vert et le cycliste pourra traverser.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">D\u2019un point de vue technologique, STiL se base sur un syst\u00e8me de r\u00e9seaux de capteurs, une unit\u00e9 centrale et une interface utilisateur. Le r\u00e9seau de capteurs devrait se d\u00e9ployer sur des feux de circulation d\u00e9j\u00e0 install\u00e9s et consisterait en un petit boitier et un capteur de pr\u00e9sence de v\u00e9hicule. Ces boitiers communiquent en LoRa avec l\u2019unit\u00e9 centrale qui traite les donn\u00e9es de tous ces capteurs et leur renvoie le plan de feux \u00e0 appliquer. L\u2019unit\u00e9 centrale est aussi en charge du traitement des donn\u00e9es pour que celles-ci soient visualisables sur l\u2019interface utilisateur. Cette interface prend la forme d\u2019un client local \u00e0 installer sur un ordinateur quelconque qui permet \u00e0 la fois de visualiser l\u2019\u00e9tat du trafic et des feux sur chaque intersection mais aussi d&rsquo;interagir avec l\u2019unit\u00e9 centrale pour lui envoyer les nouveaux param\u00e8tres de configuration (temps d\u2019attente minimal \u2026) \u00e0 utiliser.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">En quelques mots, on peut dire qu\u2019avec STiL, <\/span><b>les feux rouge ne vont plus faire long feu.<\/b><\/p>\n<h1><span style=\"font-weight: 400;\">Pr\u00e9sentation de la solution technique<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">Photos globales de la maquette<\/span><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/photo-maquette.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5852\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/photo-maquette.png\" alt=\"\" width=\"1\" height=\"1\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">D\u00e9finition des diff\u00e9rents cas d\u2019\u00e9tude et visualisation du r\u00e9sultat sur la maquette<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Pour tester le bon fonctionnement de la maquette, nous avons d\u00e9fini dix cas d\u2019usage \u00e0 valider physiquement.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Fonctionnement classique d\u2019un feu tricolore\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Le feu reste X secondes au vert puis passe au rouge pendant X secondes.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Cette situation se produit lorsqu\u2019il n\u2019y a pas de voiture d\u00e9tect\u00e9e aux l\u2019intersection pendant les X secondes.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Voiture sur axe principal et personne sur axe secondaire\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Lorsqu\u2019une voiture arrive sur l\u2019axe principal et qu\u2019il n\u2019y a aucun v\u00e9hicule sur l\u2019axe secondaire, le feu tricolore de l\u2019axe principal passe au vert.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Voiture sur axe secondaire et personne sur axe principal\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Lorsqu\u2019une voiture arrive sur l\u2019axe secondaire et qu\u2019il n\u2019y a aucun v\u00e9hicule sur l\u2019axe principal, le feu tricolore de l\u2019axe secondaire passe au vert.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\u00a0Voiture sur axe principal d\u00e9tect\u00e9 par le capteur lointain et voiture sur axe secondaire d\u00e9tect\u00e9 pendant la travers\u00e9e de la voiture de l\u2019axe principal.\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Si une voiture A est d\u00e9tect\u00e9e sur l\u2019axe principal par le capteur lointain et qu\u2019une voiture B est d\u00e9tect\u00e9e ensuite par le capteur de l\u2019axe secondaire, il faut laisser le temps \u00e0 la voiture A de franchir le feu. Puis le feu secondaire passe au vert pour laisser passer la voiture B.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">\u00a0Voiture sur axe secondaire d\u00e9tect\u00e9 par le capteur de proximit\u00e9 et voiture sur axe principal d\u00e9tect\u00e9 pendant la travers\u00e9 de la voiture secondaire.\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Si une voiture A est d\u00e9tect\u00e9e sur l\u2019axe secondaire et qu\u2019une voiture B est d\u00e9tect\u00e9e ensuite par un capteur de l\u2019axe principal, il faut laisser le temps \u00e0 la voiture A de franchir le feu. Puis le feu principal passe au vert pour laisser passer la voiture B.<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Embouteillage sur axe principal et une voiture d\u00e9tect\u00e9e sur axe secondaire.<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">On est dans le cas d\u2019un fonctionnement normal, les voitures de l\u2019axe principal passent pendant Y secondes puis la voiture de l\u2019axe secondaire passe (feu vert sur l\u2019axe secondaire). Il n\u2019y a ensuite plus de voiture sur l\u2019axe secondaire donc l\u2019axe principal doit repasser au vert (voiture d\u00e9tect\u00e9e sur l\u2019axe principal).\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Embouteillage sur axe secondaire et une voiture d\u00e9tect\u00e9e sur axe principal.\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">On est dans le cas d\u2019un fonctionnement normal, les voitures de l\u2019axe secondaire passent pendant Y secondes puis la voiture de l\u2019axe principal passe (feu vert sur l\u2019axe principal). Il n\u2019y a ensuite plus de voiture sur l\u2019axe principal donc l\u2019axe secondaire doit repasser au vert.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Embouteillage sur l\u2019axe principal et sur l\u2019axe secondaire\u00a0<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">On est dans le cas d\u2019un fonctionnement normal, les feux changent d\u2019\u00e9tat toutes les Y secondes.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une voiture est capt\u00e9e sur l\u2019intersection principale et le feu passe au vert sur la maquette physique (led verte) et sur l\u2019interface utilisateur.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Ce test nous permet de v\u00e9rifier le bon fonctionnement de la connexion entre la maquette physique et l\u2019interface utilisateur.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Une voiture est capt\u00e9e sur l\u2019intersection principale n\u00b01 et une autre est capt\u00e9e sur l\u2019intersection principale n\u00b02, les diff\u00e9rents feux doivent passer au vert ou au rouge sur la maquette et sur l\u2019interface utilisateur.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400;\">Ce test nous permet de v\u00e9rifier que l\u2019interface utilisateur prend bien en compte simultan\u00e9ment des changements d&rsquo;\u00e9tat de plusieurs feux sur diff\u00e9rentes intersections.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Pr\u00e9sentation de la solution de mani\u00e8re d\u00e9taill\u00e9e<\/span><\/h1>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400;\">Architecture mat\u00e9rielle<\/span><\/h2>\n<p>&nbsp;<\/p>\n<h2><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/Archi-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5847\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/Archi-2-188x300.png\" alt=\"\" width=\"188\" height=\"300\" \/><\/a><\/h2>\n<h2><span style=\"font-weight: 400;\">Architecture logicielle<\/span><\/h2>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/diagramme-d-etat-intersection-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5848\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/diagramme-d-etat-intersection-1-300x269.png\" alt=\"\" width=\"300\" height=\"269\" \/><\/a><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/LogiquePython.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5851\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/LogiquePython-181x300.png\" alt=\"\" width=\"181\" height=\"300\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Lien Github : https:\/\/github.com\/yohanpeuziat\/STiL-project<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Mat\u00e9riel utilis\u00e9 et montage \u00e9lectronique\u00a0<\/span><\/h2>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/electric-schema-intersection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5850\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/electric-schema-intersection-300x237.png\" alt=\"\" width=\"300\" height=\"237\" \/><\/a><\/p>\n<p><a href=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/electric-schema-central-unit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5849\" src=\"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-content\/uploads\/archives\/2019\/12\/electric-schema-central-unit-300x89.png\" alt=\"\" width=\"300\" height=\"89\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Technologies utilis\u00e9es : justification<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Comme nous l\u2019avons vu dans la partie pr\u00e9c\u00e9dente, plusieurs technologies ont \u00e9t\u00e9 utilis\u00e9es (standard de communication, langages de programmation, technologie de captation \u2026). Nous allons dans cette partie justifier ces diff\u00e9rents choix techniques.\u00a0<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Standard de communication et cartes programmables<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Nous avons d\u00e9cid\u00e9 d\u2019utiliser la technologie LoRa pour les communications entre les diff\u00e9rentes cartes programmables. LoRa poss\u00e8de de nombreux avantages qui nous ont pouss\u00e9 \u00e0 faire ce choix technique :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Utilisation des bandes libres ISM ;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Faible consommation d\u2019\u00e9nergie ;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Communication possible sur de longues distances. Ce point est crucial pour notre syst\u00e8me de feux qui devrait couvrir une ville enti\u00e8re ;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Possibilit\u00e9 de faire un r\u00e9seau maill\u00e9. L\u2019int\u00e9r\u00eat est que si le serveur n\u2019est &#8211; malgr\u00e9 la tr\u00e8s longue distance de propagation &#8211; pas joignable par un feu, alors un autre feu peut servir de passerelle vers le serveur. Il suffit pour cela de programmer une table de routage sur les cartes \u00e9lectroniques ;<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Facilit\u00e9 d\u2019utilisation et disponibilit\u00e9 du mat\u00e9riel. Au contraire de Sigfox (qui poss\u00e8de des caract\u00e9ristiques techniques similaires), du mat\u00e9riel \u00e9tait disponible au t\u00e9l\u00e9fab.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Les modules LoRa pr\u00e9sents au Fablab \u00e9taient des modules Grove LoRa. Ceux-ci fonctionnent ais\u00e9ment sur les cartes Seeeduino \u00e0 condition de t\u00e9l\u00e9charger la librairie adapt\u00e9e disponible ici : <\/span><a href=\"https:\/\/www.seeedstudio.com\/blog\/2019\/11\/18\/lora-and-lorawan-for-arduino-and-raspberry-pi\/\"><span style=\"font-weight: 400;\">lien vers la librairie LoRa pour Seeeduino<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">C\u2019est pour cela que nous avons choisi d\u2019utiliser des cartes Seeeduino et non des cartes Arduino \u201cclassiques\u201d.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Technologie de captation<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Le choix de la technologie des capteurs s\u2019est port\u00e9 sur un capteur infrarouge puisque ceux-ci \u00e9taient particuli\u00e8rement bien adapt\u00e9s \u00e0 notre besoin pour la maquette &#8211; captation pr\u00e9cise des distances (n\u00e9cessaire pour d\u00e9terminer si une voiture se trouve du bon c\u00f4t\u00e9 de la chauss\u00e9e) et champ angulaire correct &#8211; et que le fablab pr\u00e9sentait un grand nombre de ces capteurs.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Quant \u00e0 la configuration du syst\u00e8me de captation (autrement dit, la disposition des capteurs dans l\u2019espace), plusieurs solutions \u00e9taient possibles. Celles-ci sont r\u00e9sum\u00e9es dans le tableau suivant :<\/span><\/p>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Configuration de la captation<\/b><\/td>\n<td><b>Avantages<\/b><\/td>\n<td><b>Inconv\u00e9nients<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Uniquement en amont de l\u2019intersection<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Les donn\u00e9es peuvent \u00eatre trait\u00e9es avant que le v\u00e9hicule n\u2019atteigne l\u2019intersection.<\/span><\/td>\n<td><span style=\"font-weight: 400;\">On ne sait pas si le v\u00e9hicule a franchi l\u2019intersection ou non impliquant des prises de d\u00e9cision inefficaces.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Uniquement au niveau du feu<\/span><\/td>\n<td><span style=\"font-weight: 400;\">On sait que le v\u00e9hicule attend \u00e0 l\u2019intersection.<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Le v\u00e9hicule doit attendre avant que les donn\u00e9es soient trait\u00e9es.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">En amont de l\u2019intersection et au niveau du feu<\/span><\/td>\n<td><span style=\"font-weight: 400;\">On peut traiter les donn\u00e9es avant que le v\u00e9hicule n\u2019arrive \u00e0 l\u2019intersection et l\u2019on sait s\u2019il l\u2019a pass\u00e9e ou non.<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Il faut deux capteurs. L\u2019algorithme est plus complexe.<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Finalement, nous avons opt\u00e9 pour la solution comprenant deux capteurs par voie. En effet, elle seule permet d\u2019assurer le passage de chaque voiture avec un temps d\u2019arr\u00eat minimum. De plus, nous avons \u00e9galement constat\u00e9 la difficult\u00e9 qu\u2019il existe \u00e0 n\u2019avoir qu\u2019un seul capteur pour une voie. En effet, la tr\u00e8s forte directivit\u00e9 de ces capteurs ne permet ni une captation sur la diagonale ni dans l\u2019axe en sur\u00e9levant les capteurs. La figure suivante donne un aper\u00e7u du probl\u00e8me pour un capteur sur\u00e9lev\u00e9.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Cependant, un syst\u00e8me de captation infrarouge n\u2019est pas impl\u00e9mentable en situation r\u00e9elle puisque ces capteurs sont tr\u00e8s d\u00e9pendants de la luminosit\u00e9 ambiante. De plus, plusieurs intersections impl\u00e9mentent d\u00e9j\u00e0 un syst\u00e8me de captation par boucle magn\u00e9tique qui pourrait \u00eatre r\u00e9utilisable pour notre projet.<\/span><\/p>\n<h2><span style=\"font-weight: 400;\">Langages de programmation<\/span><\/h2>\n<h3><span style=\"font-weight: 400;\">Langage Arduino sur les cartes programmables<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Nous avons pr\u00e9f\u00e9r\u00e9 directement coder en C dans l\u2019IDE Arduino que d\u2019utiliser CodeBlocks puisque nous ma\u00eetrisons tous ce langage et que nous n\u2019\u00e9tions pas habitu\u00e9s \u00e0 utiliser le codage par bloc.\u00a0\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Python<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Nous avons utilis\u00e9 le langage Python comme interface entre la carte Arduino en r\u00e9ception et l\u2019unit\u00e9 centrale. Avoir une telle interface \u00e9tait n\u00e9cessaire sachant qu\u2019il est impossible d\u2019\u00e9crire dans des fichiers \u00e0 partir de l\u2019IDE Arduino. Python s\u2019est vite impos\u00e9 comme le langage \u00e0 utiliser. En effet, c\u2019est un langage simple et connu de tous les membres du groupe. C\u2019est aussi un langage assez haut niveau pour cacher les sp\u00e9cificit\u00e9s des OS et des drivers utilis\u00e9s par celui-ci dans la lecture des ports USB (ce que ne fait pas le langage C par exemple). Enfin, Python est un langage o\u00f9 la gestion locale des fichiers est tr\u00e8s simple.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">HTML\/CSS<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Les langages HTML et CSS sont connus pour leur utilisation dans les sites web. Ces deux langages sont compl\u00e9mentaires, l\u2019un g\u00e8re le fond tandis que l\u2019autre s\u2019occupe de la forme. Nous avons d\u00e9cid\u00e9 de les utiliser pour cr\u00e9er l\u2019interface utilisateur en raison de leur simplicit\u00e9.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">Javascript<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Nous avons utilis\u00e9 le langage JavaScript pour dynamiser l\u2019interface utilisateur. Ce langage a permis de r\u00e9pondre \u00e0 deux besoins majeurs :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">rendre l\u2019interface utilisateur interactive<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">r\u00e9cup\u00e9rer les donn\u00e9es de la base de donn\u00e9es afin de les restituer sur l\u2019interface utilisateur, \u00e0 travers l\u2019appel \u00e0 un script PHP<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Ce langage a l\u2019avantage de s\u2019interfacer tr\u00e8s facilement avec les langages HTML, CSS et PHP.<\/span><\/p>\n<h3><span style=\"font-weight: 400;\">PHP<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Le langage PHP est principalement orient\u00e9 serveur. Il est tr\u00e8s utile pour la gestion des bases de donn\u00e9es ainsi que le transfert d\u2019informations. C\u2019est pourquoi ce langage a pour r\u00f4le, dans notre projet, de lire le fichier de donn\u00e9es afin de les envoyer \u00e0 l\u2019interface utilisateur.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">L\u2019appel \u00e0 un script PHP n\u00e9cessite la mise en place d\u2019un serveur local sur l\u2019unit\u00e9 centrale (ordinateur dans notre cas).<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400;\">Emulation d\u2019une base de donn\u00e9es par un fichier txt<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Dans un premier temps, nous avions pens\u00e9 d\u00e9velopper une base de donn\u00e9es compl\u00e8te en MySQL accessible via un script PHP qui serait appel\u00e9 par le Javascript. Finalement, apr\u00e8s avoir impl\u00e9ment\u00e9 une premi\u00e8re version de la solution se basant sur un fichier txt ouvert par le script Python et par le PHP, nous avons choisi de garder cette solution pour plusieurs raisons :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">La simplicit\u00e9. Nul besoin de d\u00e9velopper une base de donn\u00e9es \u00e0 partir du moment o\u00f9 l\u2019on standardise les informations \u00e9crites dans le fichier txt et que l\u2019on code \u201cen dur\u201d l\u2019interpr\u00e9tation qu\u2019il faut faire de celle-ci.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">La non-prolif\u00e9ration de scripts et de documents. Il \u00e9tait n\u00e9cessaire de passer par un fichier txt. En effet, le script Python ne peut pas \u00e0 lui seul \u00e9crire dans la base de donn\u00e9es. Une solution \u00e9vidente aurait donc \u00e9t\u00e9 de faire un script PHP complet qui lit le fichier txt puis \u00e9crit dans la base de donn\u00e9es les informations contenues. Cette solution aurait \u00e9t\u00e9 beaucoup plus lourde \u00e0 impl\u00e9menter (seule la partie lecture du document txt a d\u00fb \u00eatre d\u00e9velopp\u00e9e) et n\u2019aurait pas supprimer la pr\u00e9sence d\u2019un fichier txt<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Apport en termes d\u2019exp\u00e9rience utilisateur. Nous avons pens\u00e9 qu\u2019ajouter une US technique impl\u00e9mentant une base de donn\u00e9es n\u2019aurait pas apport\u00e9 assez de valeur \u00e0 l\u2019utilisateur pour que celle-ci soit prioritaire.<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Malgr\u00e9 tout, nous sommes conscients que cette solution n\u2019est pas viable sur le long terme et que si notre projet devait \u00eatre repris et d\u00e9velopp\u00e9 \u00e0 plus grande \u00e9chelle alors le passage par une v\u00e9ritable BDD serait n\u00e9cessaire.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h1><span style=\"font-weight: 400;\">Conclusion et perspectives<\/span><\/h1>\n<p><span style=\"font-weight: 400;\">A ce stade, notre maquette pr\u00e9sente les caract\u00e9ristiques n\u00e9cessaires afin de d\u00e9montrer la pertinence de notre solution. N\u00e9anmoins avec plus de temps, nous pourrions am\u00e9liorer cette maquette. Voici quelques pistes d\u2019am\u00e9lioration :<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Avoir un algorithme de gestion globale des deux intersections.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">Un autre point que nous avions abord\u00e9 lors de l\u2019\u00e9tude de notre solution \u00e9tait la possibilit\u00e9 d\u2019avoir un algorithme de zone et non juste local comme c\u2019est le cas actuellement. En d\u2019autres termes, la seconde intersection devrait notamment pouvoir se synchroniser avec la premi\u00e8re. Ceci rendrait l&rsquo;algorithme beaucoup plus complexe (possible inclusion d\u2019IA) et nous n\u2019avons pas souhait\u00e9 essayer de le r\u00e9aliser.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Avoir un syst\u00e8me reposant sur une Base de Donn\u00e9es et non plus un fichier txt.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">Comme expliqu\u00e9 plus haut, nous avons bas\u00e9 nos \u00e9changes sur un fichier txt. Pour des raisons de passage \u00e0 l\u2019\u00e9chelle (agrandissement de notre syst\u00e8me), il serait pr\u00e9f\u00e9rable de disposer d\u2019une base de donn\u00e9es regroupant toutes les informations.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Avoir une version plus compl\u00e8te de l\u2019interface graphique.<\/span>\n<ul>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Avoir une v\u00e9ritable page de login.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">Actuellement une page de login existe mais celle-ci ne v\u00e9rifie pas la concordance login \/ mot de passe.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Disposer d\u2019une page de visualisation des donn\u00e9es avec graphique et tableau.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">L\u2019emplacement de la page est pr\u00e9vu mais pas son contenu.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Int\u00e9grer une v\u00e9ritable carte routi\u00e8re avec la possibilit\u00e9 de zoomer sur celle-ci. Nous avons int\u00e9gr\u00e9 le sch\u00e9ma d\u2019une route dans notre application afin de visualiser les feux.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Pouvoir changer le comportement de la maquette en envoyant une commande depuis l\u2019interface graphique aux feux telle que \u201cpasse au rouge\u201d ou \u201creste au vert pendant X secondes\u201d &#8230; Cette fonctionnalit\u00e9 est importante, mais malheureusement nous n\u2019avons pas eu le temps de la d\u00e9velopper. Le plus gros point de blocage de cette fonctionnalit\u00e9 est l\u2019envoi d\u2019une commande de l\u2019interface vers la maquette. Actuellement seul l\u2019envoi dans le sens oppos\u00e9 est r\u00e9alis\u00e9.<\/span><\/li>\n<li style=\"font-weight: 400;\"><span style=\"font-weight: 400;\">Pouvoir modifier le temps maximum d\u2019attente \u00e0 un feu depuis l\u2019interface graphique. De m\u00eame que pr\u00e9c\u00e9demment, la \u201cpi\u00e8ce\u201d manquant \u00e0 cette fonctionnalit\u00e9 est l\u2019envoi de donn\u00e9es de l\u2019interface vers la maquette.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Mettre des feux sur tous les axes. <\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><span style=\"font-weight: 400;\">La maquette actuelle comporte 8 axes mais seulement 4 axes sont \u00e9quip\u00e9s de feux connect\u00e9s. Cela aurait rendu la maquette plus r\u00e9aliste mais n\u2019apporte pas de changements majeurs quant \u00e0 son fonctionnement.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction &nbsp; L\u2019id\u00e9e de travailler sur le trafic routier nous est venue suite \u00e0 de simples observations de l\u2019\u00e9tat actuel du trafic dans la ville de Brest. En effet, Brest pr\u00e9sente plusieurs points d\u2019engorgement notamment \u00e0 proximit\u00e9 des ponts permettant de passer de la rive gauche \u00e0 la rive droite de la ville. Nous avons [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5164,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[113],"tags":[],"class_list":["post-5842","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couad"],"acf":{"article_projet":[10749]},"_links":{"self":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/5842","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=5842"}],"version-history":[{"count":2,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/5842\/revisions"}],"predecessor-version":[{"id":10755,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/posts\/5842\/revisions\/10755"}],"acf:post":[{"embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/projet\/10749"}],"wp:attachment":[{"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/media?parent=5842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/categories?post=5842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hub.imt-atlantique.fr\/fablab\/wp-json\/wp\/v2\/tags?post=5842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}