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

Création d’un mur de lumières pour Escape Polytech

Bonjour à toutes et à tous ! Nous sommes trois étudiants de 2ème année actuellement en fin de cycle préparatoire de Polytech Angers et nous allons vous présenter notre projet réalisé plus tôt dans l’année : Le Mur-Lumières.


CAO

Rendu 3D de notre mur lumière

Nous avons utilisé des outils de CAO pour perfectionné le design de l’ensemble et éviter les erreurs de conceptions.

Programmmation

Une petit partie du code de notre projet

Un script python permet de contrôler le comportement de l’ensemble des élements.

Assemblage

Assemblage de la machine

Pour concrétiser le projet nous avons réalisé la fabrication de tout le bâti et le câblage nécessaire au bon fonctionnement.


Introduction de notre projet :

Vue générale du Mur Lumières

Ce projet fait partie d’un lot de projets associés à l’escape Polytech, un escape-game réalisé par les enseignants chercheurs de Polytech qui ont décidés de demander de l’aide aux étudiants pour créer des mini-jeux futurs. Le nôtre consiste à reproduire une forme sur un écran d’ampoules Philips HUE 5×5 à l’aide de boutons qui pilotent les ampoules : à vous de trouver la bonne combinaison !

Création du bâti :

Dans notre projet, il nous a fallu créer un bâti pour pouvoir stocker tous les autres composants et déplacer le tout facilement. Ainsi, l’utilisation de SolidWorks nous a paru nécessaire pour créer ce que nous avons choisi de faire : une borne d’arcade. Cette partie du projet n’a pas été la plus longue du fait que le bâti était plutôt simple à réaliser.
Cette CAO a ensuite permis la découpe puis l’assemblage des pièces dans du bois acheté chez un de nos fournisseurs.

Création du programme gérant les Ampoules Philips :

Pour contrôler les ampoules connectées, nous avons utiliser un pont Philips Hue se connecte aux ampoules avec le protocole ZigBee. Aussi, les 16 boutons que nous avons utiliser requièrent une carte PacLed 64 pour changer leurs couleurs simplement. Pour faire fonctionné tout les composants électronique ensemble nous avons utiliser un script python sur un Raspberry Pi 4. Ce programme permet de contrôler le clavier à l’aide d’un Arduino Uno, l’écran LCD, le pont, les boutons de couleurs avec la PacLed. Le code est pensé pour être le plus modulable et évolutif possible. Nous avons fait attention à ce que le code permette une grande résilience face aux éventuels petites interférences et perturbations qui pourrait survenir à cause de l’utilisation de fils non isolé pour transmettre de l’information entre les composants.

Assemblage et Tests réalisés à Polytech :

Une fois toute la partie programmation terminée, nous avons pu amener les planches découpées à Polytech pour y faire l’assemblage. Par la suite, nous nous sommes occupés de la longue partie concernant le branchement des multiples câbles (électriques et électroniques) avant de relier les cartes Arduino et Raspberry à nos autres composants.
Malgré quelques heures de complications à performer le code pour satisfaire toutes les conditions souhaitées, nous sommes arrivés à terminer le projet en temps et en heure !

Vue arrière du boîtier ouvert

Vue arrière du boîtier ouvert

Déroulement d’une partie :

Une partie peut donc se dérouler de la façon suivante :
– Le joueur arrive et sélectionne son niveau à l’aide du clavier qui lui confirme par la suite grâce au LCD

Ampoules de toutes les couleurs
panneau de commandes avec les boutons de couleurs

– Il essaye de trouver la bonne combinaison de boutons pour avancer dans le jeu et parvenir à trouver le résultat désiré
– Lorsqu’il trouve, un code s’affiche sur l’écran LCD et le joueur peut passer au niveau suivant.

Conclusion :

Grâce à l’importance de la communication et du travail d’équipe au sein de notre groupe, nous avons pu répondre à un cahier des charges qui semblait impossible si l’on s’y attaquait seul. Ce projet nous a d’autre part permis de développer nos compétences en CAO, en programmation et surtout nous a offert des connaissances en matière d’électricité, de moyens d’assemblages et sur bien d’autres domaines. Nous tenons à remercier encore une fois toutes les personnes ayant contribué au projet et nous espérons que ce projet, dont nous avons pris beaucoup de plaisir à réaliser, sera amené à être améliorer les prochaines années.

Caméra pour robot KUKA KRC3

image1

Fixer une caméra à un bras robot. Qu’est-ce que pourrait mal se passer?

Nous sommes Théotime Aubin et Antoine Grimault, notre objectif a été de fixer une webcam au bras robot KUKA et de lui faire détecter des objets sur un plan (fixe) défini au préalable.
La première étape a été de choisir l’emplacement de la webcam.

image2

  • On aurait pu choisir de fixer la caméra dans l’espace de travail du robot.
  • image3

  • Il était aussi possible de la fixer sur le côté du robot, et d’avoir une position de prise de vue différente de la position d’action.
  • image4

  • Enfin, on pouvait fixer la caméra directement sur la flasque du bras, avant l’outil.
  • Nous avons choisi la dernière option car ce système limite faiblement les mouvements du bras,
    et le repère de la caméra est “simple” à définir par rapport au repère de la flasque. C’est aussi plus facile de la fixer solidement ici.
    Il est possible que l’outil soit visible sur l’image, cela pourrait poser problème pour la détection des objets, mais d’après nos mesures cela a peu de chances d’arriver.

    Une fois ce choix fait, nous avons démonté la webcam pour n’en garder que l’électronique (PCB), puis modélisé un boitier sur SolidWorks que nous avons ensuite imprimé en 3D.

    Capture5
    Capture2


    Capture1
    Capture4


    Capture

  • Vient ensuite la phase deux… le traitement d’image :

  • Pour ceci nous avons décidé d’utiliser Python avec le module OpenCV sur un ordinateur séparé du robot. On a codé une application qui permet à l’utilisateur du robot d’avoir un retour vidéo pour calibrer la ‘‘visée’’, fait une détection de contour et donne les coordonnées d’un objet situé sur l’espace de travail défini au préalable, en convertissant au passage des pixels en millimètres.

    nnwn
    Capture6

  • Vient ensuite la phase trois… la programmation du robot :


  • Capture10

    Le but est simple. Le robot est capable de connaitre en temps réel la position de la flasque. Notre travail dans ce programme est de donner au robot les translations et rotations de repère afin de disposer des coordonner de la caméra en temps réel.

    Capture720210604_184736

    Après s’être bien creusé les méninges on finit par comprendre et ça donne un beau petit programme :



    Capture8

  • Conclusion :
  • Quand on fait tout fonctionner ensemble le robot est capable de localiser une pièce, en déduire ses coordonnées et la pointer. il aurait été possible d’aller un peu plus loin en communiquant directement les coordonnées au robot via une carte d’entrée sortie utilisant le protocole TCP/IP, mais celle ci a mis trop de temps a arriver.

    Capture9

    Modélisation mathématique et simulation numérique de la phyllotaxie

    Bonjour à tous,

    Dans le cadre du dernier semestre de PEIP2, il nous est proposé de concevoir un projet par groupe d’étudiants. Nous sommes deux élèves à avoir travaillé sur ce projet, Paul Bolufer ainsi que moi-même Marc Berret. Le projet est encadré par des professeurs de l’école et a pour durée une centaine d’heures.

    L’objectif de ce projet est de réaliser un simulateur permettant de modéliser le développement de certaines plantes. Pour notre part, nous avons choisi de le faire sous le langage Python. La modélisation s’appuie sur des modèles mathématiques.

    1. Présentation du projet

    La phyllotaxie est la science qui étudie l’ordre dans lequel sont implantées les feuilles, ou plus globalement la disposition des éléments d’un fruit, d’une fleur ou d’un bourgeon.

    Nous avons ainsi décidé d’orienter notre projet vers la création d’un programme informatique permettant de simuler la disposition des feuilles lors de la croissance d’une plante.

    Pour réaliser ce simulateur, il nous a été nécessaire d’acquérir de nouvelles compétences telles que:
    – la maîtrise des outils mathématiques pour comprendre le comportement et l’évolution des plantes
    – la maîtrise d’un outil informatique pour réaliser ces simulations

    Et nous avons rapidement été confrontés à de premières contraintes comme:
    – la nécessité de réaliser un travail de documentation sur le sujet
    – comprendre les modèles mathématiques mis en jeu
    – apprendre un nouveau langage de programmation (Python)

    Il était alors important de bien structurer nos séances de travail, d’adopter une bonne organisation et de se partager les tâches afin de mener à bien notre projet.

    2. Travail réalisé

    Pour mener à bien ce projet, nous avons orienté notre travail en deux parties. Dans un premier temps, la documentation sur notre sujet, à savoir la phyllotaxie ainsi que les modèles mathématiques. Dans un seconde temps, la mise en pratique par le développement du simulateur sur le langage Python.

      2.1 Documentation

    Les différents types de phyllotaxie

    Il suffit de changer l’angle pour obtenir une nouvelle forme de phyllotaxie. Il en existe 4 différentes:

    Phyllotaxie verticillé :
    Elle présente au moins trois organes par nœud. L’angle entre un nœud et le suivant est de 45 degrés. Ce cas de phyllotaxie est assez fréquent dans la nature.

    Plants de véroniques de Virginie.

    Plants de véroniques de Virginie.

    Phyllotaxie opposée :
    Les feuilles sont opposées deux par deux et on observe une rotation de 90 degrés entre un nœud et le suivant.

    Branches de menthe

    Branches de menthe

    Phyllotaxie spiralée :
    Il s’agit de la forme la plus classique de phyllotaxie, on compte un seul organe par nœud et un angle de 137,5 degré entre un organe et le suivant. On la retrouve dans 92% des plantes.

    Pomme de pin

    Pomme de pin

    Phyllotaxie alternée :
    Elle présente une feuille par nœud et un angle de 180 degrés entre deux organes consécutifs.

    Branche de chêne

    Branche de chêne

    Représentation mathématique en deux dimensions (théorie)

    Pour dessiner les points, on utilise le repère polaire:
    r = c * sqrt(n)
    teta= n * angle
    avec n est le nombre de points, c est la distance entre le point.

    repère polaire

    repère polaire

    Nous pouvons passer du repère polaire au repère cartésien pour dessiner avec un code informatique. En effet, les langages de programmation ne comprennent pas le repère polaire.

    Pour faire ceci, on utilise les propriétés du cosinus et du sinus qui sont respectivement:
    cos = adj/hyp et sin = opp/hyp
    On trouve que cos(teta)= x/r et sin()= y/r et ainsi x=cos(teta)*r et y=sin(teta)*r

    Il suffira juste de faire une boucle en fonction de n et de préciser les paramètres de c et de l’angle.

      2.2 Mise en pratique sur Python

    Concrètement, une fois le sujet compris, il faut le retranscrire sur un programme informatique. Pour ce faire nous avons suivi des formations pour apprendre le langage Python.

    Représentation de la phyllotaxie spiralée en deux dimensions (langage Python, éditeur VSC)

    Code phyllotaxie en 2D sur Python

    Code phyllotaxie en 2D sur Python

    Explication du code:
    Il faut tout d’abord importer les modules turtle et math nécessaire pour faire la représentation sous forme de dessins et pour utiliser les outils mathématiques. (ligne 1 et 2)

    Ensuite, on crée la fonction phy2D (ligne 4) et on rentre les paramètres avec c la distance entre les points, e l’épaisseur. On fait une boucle qui va dessiner un grand nombre de points (n=1000).

    On passe du repère polaire au cartésien. D’ailleurs, dans notre variable a (ligne 9), on convertit notre angle en radian en multipliant par pi/180 et par n pour que a dépend du point choisi. Puis, on dessine les points en changeant à chaque fois de position (x,y).

    À la fin, il suffit simplement d’appeler la fonction en indiquant les paramètres et on obtient la figure ci-dessous:

    Représentation graphique de la phyllotaxie spiralée (angle d’or: 137.5 degrés)

    Représentation graphique de la phyllotaxie spiralée (angle d’or: 137.5 degrés)

    Représentation en deux dimensions d’une marguerite et d’un tournesol

    En s’appuyant sur le code précédent, on peut dessiner n’importe quelle plante en 2D. En effet, il suffit juste de créer des fonctions dessinant un pétale et les répéter le nombre de fois que l’on veut.

    Simulation marguerite

    Simulation tournesol

    Création de l’application et d’un menu

    Une fois que nos programmes pour représenter la phyllotaxie en 2D et avec des exemples concrets étaient fonctionnels sur Python, nous avons créé l’application pour les regrouper. Ainsi nous nous sommes aidés du module tkinter sur Python pour faire les boutons, le menu…

    À gauche se trouvent les choix des différents paramètres et à droite l’interface graphique de dessin.

    Interface principale du simulateur

    Interface principale du simulateur


    Conclusion

    Pour conclure, ce projet a été long mais motivant pour chacun d’entre nous. En effet, nous avons apprécié travailler en équipe. Nous sommes très fiers du travail réalisé et des notions que nous avons pu découvrir. Le résultat final est conforme au cahier des charges, tout au long de la réalisation de ce projet nous nous sommes adaptés à la fois aux modèles mathématiques ainsi qu’aux outils informatiques. Nous avons développé sous Python un simulateur complet permettant de modéliser la phyllotaxie en 2D mais aussi sous forme d’exemples avec le cas de la marguerite et du tournesol. Ce travail fut pour nous enrichissant, à la fois sur l’aspect des recherches, celui de la découverte mais aussi sur l’apprentissage d’un nouveau langage de programmation : Python.

    Cryptographie Visuelle

    Nous sommes deux étudiants en peip2A à Polytech Angers, Baptiste Marchand et Clément Veyer. Cet article vous présente notre projet de cryptographie visuelle. Ce projet s’est effectué dans le cadre des projets de fin de cycle préparatoire aux écoles Polytech. Nous avons choisi ce projet car, tous deux, nous voulons poursuivre nos études d’ingénieur dans le domaine informatique, et ce projet s’inscrit parfaitement dans notre démarche.

    La cryptographie visuelle, qu’est-ce que c’est?
    La cryptographie visuelle est l’art de protéger des messages sous formes d’images. On obtient alors des “masques” qui sont en fait des images en noir et blanc générées aléatoirement. La méthode a été créée par Moni Naor et Adi Shamir en 1994, deux chercheurs en mathématiques et informatique. Ce qu’il y a de tout à fait particulier avec ce concept, c’est qu’il est à la fois accessible à tout le monde car très visuel, mais paradoxalement quasi impossible à cracker sans disposer de tous les masques nécessaires.

    Image 1 : exemple de cryptographie visuelle avec deux masques jetables

    Image 1 : exemple de cryptographie visuelle avec deux masques jetables

    Présentation du projet
    Le but de ce projet était à la base très simple : créer un programme python permettant d’effectuer une cryptographie visuelle à partir d’une image que l’on veut cacher. Dans notre groupe, nous nous sommes fixés plusieurs objectifs qui découlent du premier. Dans un premier temps, la création d’une GUI (Graphic User Interface) qui regrouperait l’ensemble des méthodes que nous avons pu mettre au point. Mais également, sur l’idée de Sébastien Lagrange, nous nous sommes fixés l’objectif de créer un jeu de cartes classique (32 cartes) qui permettrait de révéler un symbole différent pour chaque combinaison de carte, soit (31*32)/2 = 496 combinaisons différentes.

    Méthode basique des masques jetables
    Cette méthode est l’essence même de toutes les autres. Elle prend une image en noir et blanc, constitué donc de 0 et de 1 et la divise en 2 images distinctes. La première des deux images est générée complètement aléatoirement. La seconde, est générée en fonction du masque et de l’image d’origine. Pour faire le choix de couleur de de cette image, on utilise un XOR. Si on applique de nouveau un XOR aux images chiffrées, on retrouve l’image secrète à la perfection. Et si l’on superpose physiquement les 2 images (OU), on retrouve l’image secrète, mais imparfaite car cette fois-ci elle possède du bruit, comme illustré sur l’Image 1.

    Pour faire notre premier programme qui appliquait donc cette méthode, voici les étapes que nous avons suivi sur python, à l’aide du module Pillow :
    • on demande à l’utilisateur l’image à crypter (qui doit être purement en noir et blanc)
    • on ouvre le fichier (png ou jpg) et on en fait une matrice de pixels de valeurs 0 ou 255
    • on crée un premier masque aléatoirement (donc 50% noir et 50% blanc)
    • on crée le second masque, en faisant pour chaque pixel, un xor entre le pixel original, et celui du premier masque
    • on enregistre les deux masques, et le tour est joué!

    Améliorations
    Cette première méthode fonctionne très bien, mais après l’avoir terminée, nous avons vite compris le potentiel de cryptographie visuelle. On pourrait par exemple réduire le bruit, augmenter le nombre de masques, ou encore avoir des masques imagés.
    Mais pour faire tout cela, il faut quadrupler la taille des masques créés. On a ainsi, pour chaque pixel original, une matrice de 2*2 pixels.
    Nous pouvons donc nous permettre de représenter les pixels par des niveau de gris. Tel que: noir 0% = 0 pixels noir sur les 4, 25% = 1 pixel noir sur les 4, 50% = 2/4 , 75% = 3/4, 100% = 4/4.
    Si on reprend la première méthode avec la taille quadruplée, on obtient les cas suivants :

    Image 2 : différentes combinaisons pour chaque pixel original en ayant quadruplé la taille des masques

    Image 2 : différentes combinaisons pour chaque pixel original en ayant quadruplé la taille des masques

    Les combinaisons en haut de l’image décrivent un pixel original blanc, et celles d’en bas décrivent un pixel original noir. On aura, en superposant les masques, un blanc qui est en fait un gris 50%, et un noir 100%.

    Une fois qu’on a fait cela, on imagine aisément que, si on veut maintenant trois masques, on aura un résultat avec un blanc 75%. En effet, on superpose trois matrices de 2*2 pixels qui laissent passer un seul pixel blanc.

    Avec cette nouvelle méthode, la taille quadruplée réduit le bruit observé par l’oeil humain, et les trois masques permettent une sécurité de plus : si on superpose 2 des 3 masques, on n’observe rien du tout à part du gris. Voici le résultat qu’on obtient :

    Image 3 : Exemple de cryptographie visuelle à trois masques

    Image 3 : Exemple de cryptographie visuelle à trois masques

    Méthode des masques imagés
    Cette méthode est la plus convaincante de toutes, car les masques ont maintenant un sens. Il faut donc 3 images pour cette méthode, 2 images seront visibles et la 3ème secrète, cachée dans les deux autres. Pour ce faire, on utilise bien sûr les masques à taille quadruplée.

    Les masques ont des pixels blancs représentés en 50% et des pixels noirs en 75%.
    L’image obtenue par la superposition (OU) des deux masques imagés, elle possède des pixels blancs en 75% et des pixels noirs en 100%.

    A partir d’ici, on distingue 8 possibilités distinctes:
    4 possibilités ou le pixel secret est blanc, donc un pixel 75% obtenu une fois superposé
    Le premier masque est blanc, le second aussi
    Le premier masque est noir, le second aussi
    Le premier masque est blanc, le second noir
    Le premier masque est noir, le second est blanc (équivalent au précédent)

    Et 4 autres ou le pixel secret est noir, donc un pixel 100%, obtenu une fois superposé:
    Le premier masque est blanc, le second aussi
    Le premier masque est noir, le second aussi
    Le premier masque est blanc, le second noir
    Le premier masque est noir, le second est blanc (équivalent au précédent)

    Nous avons décomposé les différentes configurations de pixel que nous avons choisi dans le tableau blanc ci-contre (en haut):
    Microsoft whiteboard
    Mais le plus important est de comprendre la logique:
    Lorsqu’un pixel à coder est noir, on fait en sorte de ne pas superposer les pixel noirs des masques pour qu’une fois les masques superposé, il ne reste pas de pixel blanc (noir 100%).
    Au contraire, si le pixel a coder est blanc, on fait en sorte de superposer les pixels noirs des masques pour que lorsque l’on superpose les masques, un des 4 pixels reste blanc (noir 75%).
    L’œil humain est aisément capable de faire la distinction entre du noir 75% et du noir 100%. Ce qui lui permet donc de percevoir cette image obtenue, comme vous pouvez en faire l’expérience ci-dessous.

    Image 4 : exemple de cryptographie visuelle avec deux masques imagés

    Image 4 : exemple de cryptographie visuelle avec deux masques imagés

    Pour terminer
    Pour finir, nous avons d’une part créé une interface graphique qui regroupe toutes les méthodes développées. Télechargez le dossier contenant un exécutable ci-dessous :
    Et dont voici un tuto d’utilisation : https://youtu.be/8tiozFkfo8A

    Et d’autre part, nous avons élaboré un jeu de 32 cartes sur la base des masques imagés, mais où chaque combinaison de cartes fait apparaitre une symbole différent (voir notre gitlab) .

    Nous avons voulu terminer en beauté en développant un algorithme de VSS (Visual Secret Sharing) qui permet de générer n masques, puis en superposant superposant au moins k parmi ces n masques, nous pourrions observer l’image secrète. Malheureusement, nous avons à peine eu le temps de finir notre travail de recherche à ce sujet.
    Pour avoir plus de précisions sur ces trois projets, nous vous conseillons également de télécharger notre rapport complet, disponible à la fin de cet article.

    Conclusion
    Pour conclure, ce projet nous a permis d’abord de mettre en application nos connaissances en terme d’algorithmique et d’adaptation à un langage de programmation. Effectivement, nous n’avions encore jamais vraiment programmé en python, et nous avons réussi assez rapidement à nous accommoder au langage qui a l’avantage d’être facile à appréhender.
    Nous avons également eu l’occasion de faire un travail de documentation important pour essayer de bien comprendre tous les concepts, même si nous n’avons pas eu l’occasion de tout mettre en application. Pour cela, nous avons exploité de nombreux articles de recherche, notamment ceux de Moni Naor et Adi Shamir, mais également des articles français. Cela nous a permis d’effectuer un “semblant” de travail de recherche assez intéressant.
    Finalement, nous sommes fier du travail que nous avons produit et avons accompli nos 2 objectifs principaux. Avec plus de temps, nous aurions pu essayer de développer la méthode ultime de VSS.

    Télécharger le rapport de notre projet :

    Bras Robot

    Salut les Polypotes !

    Actuellement en deuxième année de cycle préparatoire ingénieur, nous avons choisi de nous intéresser à la robotique dans le cadre de notre projet de conception. Notre groupe se compose de Victor, Emma et Stanislas. Nous sommes trois étudiants souhaitant rejoindre la filière SAGI, la robotique nous intéresse donc tout particulièrement. Le projet du bras robot nous a permis d’avoir une première approche de ce domaine, de découvrir le fonctionnement des actionneurs et du microcontrôleur (carte Arduino Uno). De plus, nous avons eu l’occasion de nous essayer à la cinématique afin de modéliser notre bras sur Matlab ou Python. Notre professeur référent, M.Chatti nous a guidé étape par étape tout du long de notre projet.

    IMG_3467

    Au commencement de notre projet, nous avons reçu le bras tel qu’il est sur la photo ci – dessus. Il venait d’être fabriqué à l’aide de l’imprimante 3D à Polytech Angers et était composés de 6 servomoteurs qui effectuent des rotations lui permettant de se déplacer dans toutes les direction de l’espace. A première vue, nous avons décelé quelques défauts, par exemple, certains servomoteurs n’avaient pas un assez grand couple pour soulever le bras et porter un objet, de plus d’autres ne fonctionnaient même pas.

    Pour commencer nous avons décidé de nous intéresser aux actionneurs; les servomoteurs. Il fallait les tester afin d’être sûr de leur bon fonctionnement. Pour ce faire nous avons utilisé des potentiomètres ainsi qu’une carte Arduino. Les potentiomètres avaient pour objectif de donner une consigne au microcontrôleur qui avait lui même pour but d’envoyer un signal aux actionneurs, les servomoteurs. Nous avons simulé notre programme et nos branchements sur le logiciel TinKerCad.

    tinkercad

    Après avoir testé et changé les servomoteurs qui ne fonctionnaient pas bien nous nous sommes occupés de connecter la carte Arduino au smartphone. Pour ceci on a utilisé un module Bluetooth à brancher sur la carte, et une application Android que nous avons créé à l’aide d’une application développée par Google et le MIT; MIT app inventor, qui permet de créer des applications installables sur tous les smartphones Android.

    Interface de MIT app inventor avec notre code en block

    Interface de MIT app inventor


    Nous avons configuré l’interface de l’application pour y installer six curseurs (un pour chaque moteur) et ainsi contrôler toutes les articulations du bras.

    L’application, une fois connectée au module Bluetooth de la carte, envoie un signal Bluetooth à chaque déplacement d’un curseur, qui indique le moteur concerné ainsi que la position désirée par l’utilisateur. La carte reçoit ce signal et pilote les servomoteurs en fonction de la position donnée.
    Sur l’image ci-dessus on peut voir deux boutons clap numérotés 1 et 2. Ce sont les boutons scénario. Sur Arduino, nous avons programmé un enchaînement de positions pour chaque servomoteur qui va créer un mouvement en répétition, ce qui permet de répéter une action comme on peut voir dans la vidéo ci-dessous, où le bras vide une boîte de chewing-gum puis la replace à un autre endroit.

    Nous avons aussi ajouté à notre programme un moyen d’enregistrer les positions de servomoteurs envoyées depuis l’application pour ensuite répéter automatiquement la série mouvement demandé précédemment par l’utilisateur, pour que chacun puisse créer son propre scénario directement depuis l’application.

    Cinématique directe/inverse:
    Par la suite, nous nous sommes renseignés sur:
    – La cinématique directe(calculer la position finale de la pince à partir des positions de toutes les articulations.)
    – La cinématique inverse(calculer les positions nécessaires aux articulations pour obtenir une position finale du bras, à partir de la position de la pince.)
    Cependant, par manque de temps, nous n’avons pas pu approfondir la cinématique inverse. Avec une étude de cinématique inverse nous pourrions donner une position en X,Y,Z d’un objet et le bras ferait les mouvements nécessaires pour que la pince atteigne cette position le plus rapidement possible.

    Pour la cinématique directe, il est possible de calculer la position finale de la pince avec plusieurs approches différentes, par exemple à l’aide des relations trigonométriques existantes dans un triangle rectangle ou à l’aide d’équations de cercles. Nous avons donc fait des programmes sur Python et Matlab pour effectuer ces calculs, ce qui nous à permis de modéliser le bras en fonction des positions qu’on lui à donné.

    Interface final  de la cinematique du bras, sur matlab

    Interface finale de la cinématique du bras, sur Matlab

    Problèmes:
    Quelques problèmes sont apparus, liés aux branchements et à la puissance des servomoteurs, nous avons donc eu besoin de changer deux des 6 servomoteurs car il avaient besoin d’un plus grand couple. Nous avons donc acheté deux servomoteurs d’un couple supérieur à 20kg.cm pour soulever le bras. Nos anciens servomoteurs ne dépassaient pas 13kg.cm. Les nouveaux moteurs n’étant pas de la même taille, nous avons imprimé une nouvelle pièce adaptée aux nouvelles dimensions(en blanc ci-dessous).


    Malgré l’acquisition de moteurs plus puissants, nous avions toujours des problèmes pour contrôler le bras. Ces problèmes étaient en fait dû au manque d’alimentation, la carte Arduino avait du mal à alimenter les 6 servomoteurs. Nous avons donc branché la moitié des moteurs sur un générateur pour leurs fournir 6V et ainsi leur donner une plus grande puissance, ce qui a fonctionné, puisque nous avons fini par faire fonctionner parfaitement le bras avec une charge dans la pince.

    Pour finir, nous avons trouvé ce projet très intéressant car il nous à permis d’approfondir nos connaissances en robotique et de découvrir de nouvelles choses telles que la cinématique qui nous sera probablement très utiles pour la suite de nos études.

    Merci de nous avoir lu jusqu’au bout!

    Contrôle d’accès salle 214

    Bonjour,
    Je suis étudiant en deuxième année de cycle préparatoire à Polytech Angers. J’ai choisi de travailler sur le projet de contrôle d’accès à la salle 214.

    Objectif du projet

    La salle 214 est une salle de Polytech Angers dédiée aux projets. Cette salle contient beaucoup de matériel. Il est donc important de laisser la porte de cette salle fermée lorsque personne n’y travaille.
    Actuellement, les étudiants qui veulent accéder à la salle 214 doivent demander la clé à l’accueil en échange de leur carte étudiante. Ils peuvent ensuite rapporter cette clé quand ils ont terminé.
    Le but de mon projet est de simplifier cette démarche en rendant automatique l’ouverture de la porte grâce aux cartes étudiantes.

    En effet, les cartes étudiantes contiennent une puce RFID. En scannant une carte à l’aide d’un lecteur de cartes, il est possible de récupérer un numéro unique pour chaque carte. Il y avait déjà un ancien système pour ouvrir la porte de la salle 214, mais il fonctionnait avec des badges et n’est plus utilisé. Je réutilise donc ce système pour déclencher l’ouverture de la porte.

    Le premier ojectif de mon projet est de créer une base de données avec les numéros des cartes étudiantes pour gérer qui a accès à la salle. Un programme relié à cette base de données déclenchera un relais qui laisse passer le courant pour ouvrir la porte de la salle 214. Le second objectif est de créer un site web pour pouvoir contrôler facilement les accès et voir l’historique de toutes les entrées dans la salle.

    Étapes du projet

    Pour ce projet, j’ai utilisé deux Raspberry Pi. Une Raspberry Pi est un petit ordinateur de la taille d’une carte bancaire. On peut programmer une Raspberry Pi de la manière qu’on le souhaite. De plus, la Raspberry Pi possède des broches GPIO que l’on peut alimenter avec un programme. J’utilise donc ces broches pour relier la Raspberry Pi au relais qui ouvre la porte.

    Une Raspberry Pi utilisée durant ce projet.

    Une Raspberry Pi utilisée durant ce projet.

    J’ai commencé par écrire un programme en langage Python qui récupère le numéro de la carte. J’ai ensuite créé une base de données. Une base de données peut être composée de plusieurs tables, j’ai donc créé une table composée comme ceci :

    id Nom Prénom Numéro de carte Date de début d’entrée autorisée Date de fin d’entrée autorisée
    1 DURAND Martin 00123456789ABCDE 2019-03-01 2019-06-30

    Dans l’exemple ci dessus, Martin DURAND peut accéder à la salle 214 du 1er mars au 30 juin 2019.

    J’ai donc intégré cette base de données à mon programme Python pour qu’il cherche si le numéro scanné par le lecteur est présent dans la base de données et si la personne a le droit d’entrer.
    Pour activer le relais, j’ai déclenché l’alimentation d’une broche GPIO à partir du programme Python. Ainsi, tout fonctionnait avec une seule Raspberry Pi.

    Test du programme avec une seule Raspberry Pi.

    Test du programme avec une seule Raspberry Pi.

    Une des contraintes de ce projet est que le déclenchement de l’ouverture de la porte de la salle 214 se fait sur un tableau électrique présent en salle 212. C’est pour cela que j’ai besoin de deux Raspberry Pi qui doivent communiquer entre elles pour ouvrir la porte. Ainsi, j’ai fait deux programmes Python :

    • Un pour la Raspberry Pi en salle 214 qui scanne la carte et regarde dans la base de données si la personne a le droit d’entrer
    • Un autre pour la Raspberry Pi en salle 212 qui déclenche l’ouverture de la porte

    Le programme Python de la salle 214 envoie un message d’ordre d’ouverture à l’autre programme quand la personne est autorisée à entrer.

    J’ai ensuite installé tous les composants dont j’avais besoin sur le tableau électrique en salle 212 avec l’aide de M. Bouljroufi.

    Composants installés sur le tableau électrique

    Composants installés sur le tableau électrique

    Ainsi, j’ai pu tester que le programme fonctionnait correctement. Voici une vidéo de l’ouverture de la porte avec une carte étudiante :

    J’ai ensuite créé le site web. J’ai pour cela installé un serveur web sur la Raspberry Pi de la salle 214. J’ai utilisé le langage php pour relier la base de données au serveur web. J’ai aussi créé une deuxième table dans la base de données pour avoir un historique de toutes les ouvertures de la porte de la salle.

    Voici une démonstration du fonctionnement de ce site web :

    Conclusion

    Le résultat de ce projet est satisfaisant. On peut désormais ouvrir la porte de la salle 214 à l’aide d’une carte étudiante. De nombreux points restent à améliorer. Le site web pourrait avoir plus de fonctionnalités et être plus esthétique. Mais globalement ce projet a été une très bonne expérience. Cela m’a permis d’apprendre plein de nouvelles connaissances. J’ai appris les langages Python et php. J’ai découvert comment gérer des bases de données et j’ai amélioré mes compétences en électricité.

    Pilulier intelligent

    Nous sommes deux étudiantes de deuxième année du cycle préparatoire de l’ISTIA, école d’ingénieurs de l’Université d’Angers. Nous avons pour objectif de réaliser un prototype à bas coût permettant de réaliser un pilulier intelligent. Pour ce faire, il s’agit de concevoir un pilulier hebdomadaire conçu pour 4 prises par jour (matin, midi, soir et coucher), soient 28 compartiments avec couvercle à remplir de médicaments.

    Source : http://www.silvereco.fr

    Source : http://www.silvereco.fr

    Le pilulier, équipé de différents capteurs et sorties, permettra aux heures de prises des médicaments :

  • D’allumer la led de la case correspondante à la prise.
  • Un signal sonore prévient le patient qu’il est temps de prendre les médicaments.
  • Un capteur vérifie que les médicaments sont présents ou non.
  • Un message sera envoyé à l’infirmière ou un parent pour l’avertir que l’heure de prise est dépassée et que les médicaments n’ont pas été pris.
  • Pour réaliser ce projet nous disposions de 80 heures planifiées dans notre emploi du temps ainsi que la mise à disposition de tout le matériel de l’ISTIA (ces machines, ces salles…)


    TRAVAIL RÉALISÉ

    FINAL
    Afin de répondre au cahier des charges, nous y sommes allé par étapes :

  • Premiers pas et recherche d’informations

  • Dans un premier temps, nous avons regardé sur internet s’il existait déjà un tel projet. Après plusieurs sites consultés, nous sommes tombées sur une vidéo qui résumait plutôt bien ce que nous devions faire (lien de la vidéo : cliquez ici). En discutant avec nos professeurs et en recherchant des informations sur internet, nous avons convenu d’utiliser une Raspberry Pi ; celle-ci nous permettant de programmer en python les différents capteurs comme nous le souhaitions. De plus, la Raspberry Pi est connectée à internet et nous permet donc de communiquer avec l’extérieur.
    Après cette première étape, nous devions rechercher les capteurs et leds les mieux adaptés à notre projet, ainsi que réfléchir à la forme générale de notre pilulier et des différents compartiments.
    Pour essayer les premiers capteurs et leds que nous avions choisis, nous avons décidé d’imprimer un premier prototype du compartiment grâce à l’imprimante 3D.

  • La led

  • Nous avons décidé d’aller un peu plus loin que ce qui nous a été demandé dans le cahier des charges. En effet, nous avons jugé utile de prendre des leds bicolores (verte/rouge). La led verte s’allume dans la case qui correspond à l’heure de prise. Si malencontreusement le patient se trompe de case, la led rouge de ce dernier s’allume pour signaler le problème.

    https://www.lextronic.fr/leds-de-5-a-10-mm/8405-led-bicolore-rouge-verte-5mm.html

    https://www.lextronic.fr/leds-de-5-a-10-mm/8405-led-bicolore-rouge-verte-5mm.html

  • Le buzzer

  • Pour le buzzer, le choix n’a pas été très compliqué. Nous n’avons pas prêté attention à la tonalité du buzzer (savoir si la sonnerie est agréable ou non…), ni à son intensité. Finalement, après avoir reçu le buzzer et l’avoir testé, il est conforme à nos attentes. Quand il est l’heure pour le patient de prendre ses médicaments, le buzzer sonne de façon discontinue. Or, quand il se trompe de case, le buzzer l’alerte de manière continue, moins agréable à l’oreille, ce qui permet de faire réagir le patient rapidement.

    https://www.lextronic.fr/buzzers-divers/418-buzzer-vibreur-6v.html

    https://www.lextronic.fr/buzzers-divers/418-buzzer-vibreur-6v.html

  • Les capteurs

  • – En ce qui concerne le capteur de présence, nous recherchions à la base un capteur de poids. Malheureusement, la masse des médicaments étant très faible, aucun des capteurs que nous avions trouvé n’aurait pu détecter leur présence ou non. Nous sommes alors parties sur des capteurs infrarouges et après plusieurs essais, nous avons trouvé celui qui nous convenait : capteur fourche.

    https://www.mouser.fr/ProductDetail/Omron-Electronics/EE-SX1140?qs=JK6Bpmia%2FmuaHrA7Hyziiw%3D%3D

    https://www.mouser.fr/ProductDetail/Omron-Electronics/EE-SX1140?qs=JK6Bpmia%2FmuaHrA7Hyziiw%3D%3D


    Le capteur fourche (en bleu) s’emboîte parfaitement sous la case

    Le capteur fourche (en bleu) s’emboîte parfaitement sous la case


    – Par ailleurs, pour vérifier que le patient ne se trompe pas de case, nous avons rajouté un capteur, intégré à la case, qui permet de contrôler l’ouverture des compartiments grâce à un aimant placé dans le couvercle (couvercle réalisé grâce à la fraiseuse disponible au Fablab).

    https://www.lextronic.fr/ils-et-aimants/14667-interrupteur-reed-1xno.html

    https://www.lextronic.fr/ils-et-aimants/14667-interrupteur-reed-1xno.html


    L'aimant vient s'insérer dans le petit trou.

    L’aimant vient s’insérer dans le petit trou.

  • Compartiment

  • Nous avons conçu nos compartiments de manière à ce que nos capteurs et leds s’incorporent parfaitement dans la case. Cette réalisation fut possible grâce à la modélisation 3D.

    Le capteur ILS s'insère parfaitement dans le rectangle à gauche et la led passe par le trou en bas à droite.

    Le capteur ILS s’insère parfaitement dans le rectangle à gauche et la led passe par le trou en bas à droite.


    Le capteur fourche vient s'intégrer sous la case.

    Le capteur fourche vient s’intégrer sous la case.


    Le couvercle est fixé sur le compartiment à l’aide de colle forte et de petites charnières.

  • Programmation

  • Grâce à la Raspberry Pi, qui est reliée à internet, nous avons choisi de programmer l’envoi d’un mail plutôt que l’envoi d’un sms.
    pro mail 1
    pro mail 2
    Nous avons dû créer une adresse Gmail pour le projet, car c’est de cette adresse là (ligne 79 du code) que le mail est envoyé à l’adresse que l’on veut (ligne 80 du code). Le temps d’attente avant l’envoi du mail peut être modifié de manière simple (sans changer le code source) grâce à un document texte à part. En effet, pour faciliter l’accès à la Raspberry Pi, nous voulions trouver un moyen facile de modifier les heures de prises des médicaments et du temps d’attente pour l’envoi du mail. Pour cela, d’un simple smartphone, il suffit de télécharger l’application VNC Viewer, se connecter à la Raspberry Pi et modifier le document texte contenant les heures. La modification du code source se fait automatiquement car les deux fichiers sont reliés.

  • Petits plus

  • – BOITE
    Afin de protéger la Raspberry Pi ainsi que la breadboard et toutes les connexions, nous avons pensé à un boite en plexiglas permettant de voir comment fonctionne notre projet.
    boite 1

    boite 3

    – SUPPORT
    Pour faciliter le transport des compartiments, nous avons décidé de créer un support.
    socle

    Ce projet a été réalisé par Amélie DAVIAU et Axelle RUFLIN, avec l’aide de Mr AUTRIQUE, Mme GERARD et Mr Mercier.