Projet Niger – Yoan Charpentier & Thomas Boulineau

Réalisé en duo, notre projet (qui ressemble finalement plus à un stage…) s’est porté sur l’amélioration d’une application à propos du développement durable. Le but de cette application est de générer une carte interactive de la commune rurale de Dankassari au Niger. Cette carte interactive offre une vue d’ensemble sur les actions de la commune, ce qui permet aux responsables de ces dites actions de mieux orienter leurs décisions.

Exemple de carte générée, limitée 2 activités

À partir de fichiers de données, le programme collecte les informations et les regroupe sur une carte. Il est possible pour l’utilisateur de consulter les activités sur un village en particulier, ou alors de sélectionner une activité en haut de la page ce qui met en évidence dans quels villages cette activité a lieu.

Sur ce semestre de travail, nous avons avons ajouté un certain nombre de fonctionnalités. Tout d’abord, à l’époque il était particulièrement fastidieux de générer les cartes. Voici un exemple de commande qu’il fallait exécuter :

py Cartographier.py Activites.xlsx Population.xlsx nom_dela_carte

(où Activites.xlsx Population.xlsx sont des fichiers Excel qui comportent toutes les données nécessaires pour chaque village avec leur actions …)

Version en ligne de Cartographier.py

Dans le but de simplifier la génération de cartes interactives, nous avons créé un site web qui permet une utilisation de l’outil plus accessible et intuitive (à condition d’avoir une connexion à internet), ce qui n’est pas le cas lorsqu’on utilise le programme directement sur notre machine.

Page d'accueille pour la génération de carte en ligne avec le choix des fonds de carte
Page d’accueil pour la génération de carte en ligne avec le choix des fonds de carte

Ce formulaire permet de récupérer les deux fichiers nécessaires à la génération et d’exécuter la commande automatiquement en prenant en compte ces deux documents.

L’élaboration de ce site s’est d’abord fait grâce au logiciel Nginx, qui crée un serveur local sur nos ordinateurs. Cependant, nous avons opté pour l’outil Devbox, développé par Alain Godon. Nous pouvons donc héberger notre site sur un véritable serveur. Ainsi, le développement s’est fait plus facilement, notamment sur la gestion des fichiers en ligne. Gestion des fichiers qui s’est faite avec le logiciel Filezilla :

File:FileZilla logo.svg - Wikimedia Commons
Logo de Filezilla
Page d’accueil de Filezilla où notre serveur est ouvert

Les fonds de carte

Concernant ces fonds de carte, un travail esthétique a été apporté. En effet, lorsque nous avons commencé à travailler sur le programme, la carte ressemblait à ceci :

Première version du fond de carte

Ce fond de carte permet de visualiser brièvement les frontières des régions du Niger et les routes principales. Or, grâce à Jean-Yves Garinet et CartONG, nous avons pu intégrer deux nouveaux fonds de carte :

Ces nouveaux fonds de carte permettent de mettre en évidence les pistes de la commune, en dehors des grandes routes, ce qui permet par exemple de contrôler quels villages sont les mieux desservis, et prévoir des itinéraires. Notre dernier fond de carte intègre même une vision satellite du terrain. Finalement, ces ajouts de fonds de carte ne sont pas seulement un ajout esthétique, mais aussi pratique.

De plus, puisque selon notre utilisation, on ne choisira pas les mêmes fonds de carte, nous avons créé une fonctionnalité qui permet à l’utilisateur de choisir quel fond intégrer sur sa carte interactive. La ligne de commande pour générer la carte devient alors :

py Cartographier.py Activites.xlsx Population.xlsx n°fond_de_carte nom_dela_carte

Cependant, même avec l’ajout de ces nouveaux éléments, le premier fond de carte ne devient heureusement pas obsolète. En effet, même si les pistes ne sont pas consultables sur ce dernier, le premier fond de carte s’avère très utile lorsque l’on veut mettre en évidence les actions plutôt que le terrain.

Extraction des activités par village

Nous avons eu comme indication d’ajouter une fonctionnalité qui permet d’extraire les informations d’un village. Cela était déjà possible sur la carte interactive, mais cette fonctionnalité ajoutée doit permettre à l’utilisateur de conserver ces informations en dehors de la carte. Ce qui était jusque là impossible.

Nous avons développé deux versions de cette fonctionnalité : un programme inclus dans la carte interactive, et un autre totalement détaché.

Concernant la fonctionnalité désormais inclue dans la carte interactive, pour extraire les activités d’une ville, l’utilisateur doit cliquer sur le bouton “Affichage”, comme présenté ci-dessous :

Bouton affichage des panneaux d’informations

Ce bouton execute un programme JavaScript qui créé une alertbox intégrée au site, contenant toutes les informations necessaires :

Alertbox avec les détails du panneau d’information

Sa particularité est qu’il est possible de copier-coller ces informations pour les conserver dans un éditeur de texte. Nous précisons qu’il était impossible de sélectionner le texte directement sur la carte, le panneau d’information étant une image, voici donc tout l’intérêt de notre fonctionnalité.

Autrement, concernant la fonctionnalité détachée de la carte, le fonctionnement est différent : l’utilisateur fait appel au programme, celui-ci affiche les villages présents dans le fichier de données qu’il a fourni.

Extraction des activités en dehors de la carte

Il lui est proposé de saisir un ou plusieurs IDs. Ainsi, le programme insère exactement les mêmes données que la version de la carte interactive dans des fichiers texte.

Nous avons mis a disposition ce programme sur notre site, voici comment le programme se présente :

page après génération de la carte
menu déroulant de tous les villages

D’abord, on affiche une liste déroulante des villages afin que le client puisse sélectionner quel village l’intéresse.

Il ne reste qu’à cliquer sur le lien pour obtenir le résultat suivant :
résultat

On fait appel au programme avec l’ID du village correspondant, ce qui génère un document avec un résumé des informations concernant la ville. Enfin, le fichier texte est fourni au client.

Tutoriaux et documentations

Dans un souci de centraliser notre production, nous avons rédigé des documentations techniques et des tutoriaux vidéo, l’intérêt étant de permettre à n’importe qui d’être en mesure d’utiliser notre outil.

XLRD est une bibliothèque de python qui permet d’analyser des feuilles de calcul, ce qui signifie que sans elle, la génération de cartes est impossible. Cependant, son installation se présente assez compliquée, d’où la nécessité d’explications.

Page des documentations incluant : python3, la bibliothèque xlrd et l'utilisation de Cartographier.py
Page des documentations incluant : python3, la bibliothèque XLRD et l’utilisation de Cartographier.py

Pour accéder au site web : devbox.u-angers.fr/~yoancharpentier3501/html/index.html (provisoire)

Page GitHub du projet : https://github.com/P1char/cartographierV2

Nous remercions chaleureusement Marie-Françoise Roy, présidente de l’AESCD pour sa confiance dans nos productions et Nicolas Delanoue pour ses précieuses aides d’un point de vue technique ainsi que Jean-Yves Garinet pour les fonds de carte qu’il a créé. Merci également à vous pour votre lecture ! Et nous souhaitons bon courage au futur duo qui prendront en charge ce projet ! (Nous restons à votre disposition en cas de demande particulière sur notre partie de la production)

  • Thomas Boulineau & Yoan Charpentier

Simulateur de systèmes en JavaScript

Bonjour à toutes et à tous !

Nous sommes trois étudiants en seconde année du cycle préparatoire de Polytech Angers et lors de ce quatrième semestre nous avons travaillé sur un simulateur de systèmes de production en JavaScript. Vous trouverez dans cet article le déroulement de notre projet et les problèmes auxquels nous avons pu faire face !

Objectif

Le but est de créer une application web pouvant simuler un système de production, cela implique de programmer différents composants tels que des convoyeurs, des aiguillages et d’autres types de machines que l’on peut retrouver sur des chaînes de production réelles.

Ce genre de système est souvent pris en exemple pour illustrer des travaux de recherche car il permet de suivre l’évolution des flux du système au cours du temps.

Notre application devra également permettre à un utilisateur de créer facilement ses propres systèmes.

Pourquoi JavaScript ?

Tout simplement car il s’agit d’un langage de programmation qui convient parfaitement aux applications web et permet de programmer des animations graphiques dans un navigateur comme nous en avons besoin pour créer notre simulateur.

Logo du langage JavaScript

Logo du langage JavaScript

Déroulement du projet

Pour que notre simulateur puisse être le plus complet et permette un maximum de possibilités, nous avons créé au total 9 composants utilisables dans le système que voici :

  • Les convoyeurs : ce sont eux qui permettent le mouvement des pièces entre les différentes machines du système.
  • Un convoyeur

    Un convoyeur

  • Les convoyeurs butés : il s’agit d’un convoyeur normal avec en plus la capacité de stopper les pièces et de les faire repartir (on pourrait l’assimiler à un feu de circulation).
  • Un convoyeur buté

    Un convoyeur buté

  • Les machines : elles traitent les pièces en un certain temps et peuvent en traiter également qu’un certain nombre simultanément. Pour plus de dynamisme, leur design change en fonction de leur stock pendant la simulation.
  • Une machine

    Une machine

  • Les lots : ce sont des machines qui rassemblent un nombre défini de pièces en une seule pièce.
  • Un lot

    Un lot

  • Les lots doubles : des machines possédant le même comportement que les lots mais avec deux entrées pour les pièces et chacune de ces deux entrées doit avoir un nombre défini de pièces pour créer un lot.
  • Un lot double

    Un lot double

  • Les découpeurs : des machines qui découpent une pièce en plusieurs pièces.
  • Un découpeur

    Un découpeur

  • Les découpeurs doubles : ils fonctionnent comme les découpeurs mais la sortie des pièces découpées est divisée en deux.
  • Un découpeur double

    Un découpeur double

  • Les aiguillages : ils permettent de séparer les pièces qui arrivent. Cette séparation suit une logique cyclique : dans l’image suivante une pièce va en bas (0) puis deux pièces vont en haut (1).
  • Un aiguillage

    Un aiguillage

  • Les téléporteurs : des éléments qui transportent les pièces à travers la simulation afin de simplifier les échanges entre les machines sans surcharge visuelle.
  • Un téléporteur

    Avec tous ces composants disponibles nous avons pu créer plusieurs presets (exemples de système de production déjà faits) permettant à l’utilisateur de tester et de comprendre plus rapidement le comportement de chaque machine et leur manière de fonctionner.

    Vous pouvez tester ces différents presets et essayer de créer votre propre système en téléchargeant notre programme ici

    Les problèmes rencontrés

    Bien que le langage JavaScript soit le plus adapté pour ce projet, aucun de nous trois n’avait auparavant codé en JavaScript. Nous avons dû faire de nombreuses recherches pour apprendre les bases avant de commencer à travailler.

    Nous nous sommes rapidement rendu compte qu’il n’allait pas être simple pour l’utilisateur et même pour nous-même de créer des systèmes complexes s’il faut les coder directement dans le programme. C’est pour cette raison que nous avons créé une autre page qui permet d’ajouter et de retirer des machines bien plus facilement et avec un aperçu du système final en temps réel avant de lancer réellement la simulation.

    Le résultat

    Après plus d’une centaine d’heures de travail sur ce projet, nous avons pu aboutir à un résultat fonctionnel et qui satisfait le cahier des charges ainsi que nous-même.

    Voici une courte vidéo faisant la démonstration du premier preset intégré à notre application :

    Les améliorations possibles

    Avec plus de temps et de moyen, nous aurions pu envisager la mise en place d’un serveur offrant la possibilité à un utilisateur de se connecter pour enregistrer et récupérer ses créations plus facilement qu’avec la fonction de copier-coller actuel.

    La page principale où l’on crée sa simulation peut également être améliorée d’un point de vue ergonomique avec un système de “Glisser-déposer” par exemple pour placer les différents composants.

    Conclusion

    Cette expérience a été riche et très enrichissante pour nous trois. Adepte de l’informatique, nous avons pris beaucoup de plaisir à travailler sur ce simulateur et avons également beaucoup appris. Les problèmes rencontrés n’ont fait que renforcer nos connaissances du sujet et nous ont permis d’acquérir de nouvelles compétences qui nous seront utiles un jour dans notre carrière professionnelle.

    Nous tenons à remercier M. COTTENCEAU pour son encadrement tout au long du projet.

    Merci d’avoir lu notre article jusqu’au bout !

    Antoine Buquet
    Thomas Billequin
    Mathis Vaugeois

    Simulation en JavaScript

    Introduction

    Bonjour à tous. Nous sommes Paul Bodin et Romain Taillet, étudiants à Polytech Angers.
    Notre projet de deuxième année avait pour but de produire un outil permettant de créer des simulations de lignes de production sur une page web. Pour cela, nous étions encadré par M. Cottenceau et nous avons utilisé le langage informatique JavaScript.

    Le projet de deuxième année prend place durant le quatrième semestre de cycle préparatoire. Nous avons une centaine d’heures marquées sur nos emplois du temps qui y sont consacrées.

    Pour réaliser ce travail, nous avons donc dû nous organiser pour remplir le cahier des charges de notre projet en temps et en heure.

    Une bonne organisation du travail avec ses camarades fait partie de la réussite du projet

    Une bonne organisation du travail avec ses camarades fait partie de la réussite d’un projet.

    Notre travail

  • Pour commencer, nous avons créé des classes d’objets pouvant représenter des machines que l’on peut retrouver sur des lignes de production en usine.
    • Le séparateur séquentiel est une des machines. Elle sépare les pièces en entrée sur deux convoyeurs en sortie selon une séquence définie en attribut.

      Le séparateur séquentiel est une des machines. Elle sépare les pièces en entrée sur deux convoyeurs en sortie selon une séquence définie en attribut.

      • Ensuite, nous avons défini des attributs pour toutes ces classes et nous avons codé la manière dont elles doivent interagir entre elles.
        • Enfin, nous laissons un outil permettant à l’utilisateur de définir les objets qu’il souhaite mettre dans sa simulation ainsi que leurs attributs. Il pourra également changer de simulation aisément depuis le site.
          • Le bouton de sélection permet de choisir la simulation de notre choix. Nous proposons également deux exemples pour les utilisateurs.

            Le bouton de sélection permet de choisir la simulation de notre choix. Nous proposons également deux exemples pour les utilisateurs.

              Résultats

              Nous pouvons donc vous présenter le résultat de notre projet avec le second exemple créé sur notre site. Il montre toutes les machines que nous avons créé, dans une configuration que nous avons prédéfinie.

                  Toutes les machines et les convoyeurs peuvent être réarrangés pour donner une autre simulation. Nous avons donc respecté notre cahier des charges. Vous pouvez retrouver notre projet ci-joint.

                    Conclusion

                    Le projet nous a permis de développer des qualités nécessaires au métier d’ingénieur telles que l’organisation et la communication. De plus, nous avons pu étudier et améliorer nos connaissances sur un sujet précis durant une centaine d’heure.

                    Le choix du thème du projet se fait parmi une longue liste et la répartition des élèves avec un algorithme de mariage stable. La probabilité que chacun tombe sur un sujet qu’il aime est alors élevé et cela permet de bien mieux s’investir.

                    Pour en savoir plus sur notre projet ou le travail de compte-rendu demandé, regardez notre compte-rendu ci-après.

                      Capteur CO2

                      Introduction

                      Bonjour, nous sommes Nicolas Macé et Antonin Rabault, étudiants en 2ème année à Polytech Angers.
                      Dans le cadre du projet de conception de fin de cycle préparatoire, nous avons décidé de créer une interface web reliée à des capteurs de CO2.

                      Pourquoi ce projet ?

                      Vous n’êtes pas sans savoir qu’au moment où ces lignes sont écrites, le monde est encore en pleine crise sanitaire. Ainsi, nous souhaitions apporter notre contribution dans la lutte contre la pandémie. En effet, nos capteurs mesurent la qualité de l’air en fonction de la concentration en CO2, et selon un article du Haut Conseil de la Santé Publique, les particules de COVID-19 se comportent d’une manière similaire à celles du dioxyde de carbone (CO2) dans l’air.

                      Présentation du projet

                      Il y a actuellement 50 capteurs répartis dans les différents UFR de l’Université d’Angers et 100 de plus sont en préparation et seront installés prochainement.


                      Chaque capteur envoie des données toutes les 5 minutes dans une base de données grâce à une carte électronique (ESP-32). Ensuite, nous stockons puis récupérons ces données afin de les afficher sur le site pour que l’utilisateur puisse y avoir accès. Nous représentons ces données premièrement sous forme de jauges qui nous indiquent si le taux de CO2 actuel est trop élevé ou non. Nous les représentons aussi sous forme de courbes afin que l’on puisse voir l’évolution dans la dernière heure.

                      Courbe du taux de CO2 (en ppm) en fonction du temps

                      Courbe du taux de CO2 (en ppm) en fonction du temps

                      Nous avons aussi intégré dans notre site web une fonctionnalité assez inédite, une prévision de l’heure à laquelle le taux de CO2 dépassera un certain seuil. Cela permet de savoir assez précisément quand est-ce qu’une aération sera nécessaire. Cette prévision est utile car elle donne un bon indicateur temporel et évite à l’utilisateur de consulter toutes les 5 minutes le site. En général, le site affichera “Pas d’ouverture nécessaire prochainement”, c’est bon signe et cela signifie que la pièce est correctement aérée.

                      Equation donnant le temps en heures avant lequel une aération sera nécessaire

                      Equation donnant le temps en heures avant lequel une aération sera nécessaire

                      Tutoriel sur comment ajouter un capteur et comment visualiser la courbe de la concentration en CO2 en fonction du temps.

                      accueil
                      Vous pouvez dès à présent essayer vous même notre site web !

                      Pour approfondir

                      Notre projet a fait parler de lui ! En effet, un court reportage a été consacré à notre projet sur France 3 Régions.

                      Si vous souhaitez en apprendre davantage sur la transmission par voies aériennes du COVID, nous ne pouvons que vous recommander l’excellente vidéo de David Louapre.

                      Enfin, nous vous joignions notre rapport détaillé si vous voulez des renseignements supplémentaires sur le processus de création du site web ou sur l’élaboration de l’équation de prévision d’aération :

                      Projet Air Drum

                      Nous sommes un groupe de 3 étudiants en deuxième année de classe préparatoire à l’ISTIA. Dans le cadre des projets, nous avons choisi le projet nommé “AirDrum”.
                      Le Airdrum qu’est-ce que c’est ? C’est une activité qui consiste à mimer le geste d’un batteur sans avoir l’instrument en main. Vous voyez le AirGuitar ? Et bien imaginez la même chose avec une batterie. Simple vous pourriez dire; mais l’objectif du projet est surtout de réaliser une batterie virtuelle et que les sons correspondants soient joués selon les mouvements du “musicien” !

                      Pour réaliser ceci, nous avons été confrontés à trois problèmes majeurs :

                      1. Comment récupérer les coordonnées et mouvements du joueur ?
                      2. Comment jouer les bons sons au bon moment ?
                      3. Comment virtualiser la batterie, les baguettes/mains et faire tout correspondre ?

                      Nous avons alors fait des recherches sur Internet avec de nombreux tutoriels, des essais plus ou moins fructueux ainsi que de nombreuses découvertes pouvant aussi nous servir dans d’autres futurs projets. Voici les solutions que nous avons trouvé :

                      1. Wiimote et Nunchuk, capteurs avec Arduino, capteurs infrarouges, MakeyMakey, RazerHydra et la solution finale gardée, la Kinect.
                      2. Pure Data, Unity3D
                      3. Blender, Unity3D, programmes en C#/JavaScript

                      Nous avons donc tout d’abord créé une batterie virtuelle sous Blender.

                      Batterie

                      Batterie modélisée sous Blender

                      Nous avons ensuite intégré ce modèle sous Unity3D afin de pouvoir y intégrer des sons, libres de droits trouvés sur Internet, grâce à des scripts en JavaScript . Finalement, il ne nous manquait plus que l’intégration de la Kinect2 en passant par l’utilisation de scripts en C# et du “squelette” disponible dans le modèle de démonstration gratuit de Microsoft.
                      Kinect2

                      Kinect 2 utilisé pour récuperer les mouvements du “musicien”


                      LogoBlender

                      Blender


                      Unity3DLogo

                      Unity3D


                      SqueletteKinect

                      Squelette aussi appelé figure fil de fer