Cafetière intelligente

Sommaire :

I – Présentation du projet

II – Points a améliorer

III – Solutions mises en œuvre

1) Partie programmation

2) Partie conception

IV – Conclusion

Nili younes – CHTOUANE ZAKARIA – 2022

Présentation du projet :

 

Notre projet consiste a améliorer une cafetière connectée (Interface + boitier). L’interface affichera plusieurs informations qui faciliterons beaucoup de choses a l’utilisateur. Notamment, le nombre de café pris, par jour ou par an, la consommation électrique, journalière et annuelle, ainsi que l’état de l’alimentation de la cafetière. Cependant, le boitier nous permettra de couvrir l’interface ainsi que les fils qui lient la Raspberry au capteur et a la cafetière.

La vie est trop courte pour continuer a boire du mauvais café.

Charles-maurice De Talleyrand-périgord

Points a améliorer :

 

  • L’interface :

On devait améliorer l’esthétique de l’interface et corriger les valeurs qui s’y affichaient, notamment, la consommation électrique, le temps d’alimentation ainsi que le temps de chauffage.

  • L’alimentation :

On devait aussi mettre une unique alimentation a l’ensemble des composants électriques (Raspberry + Cafetière).

Solutions mises en œuvre :

  • Partie programmation :

On a utiliser le logiciel « Spyder » et la bibliothèque « Tkinter » qui est une bibliothèque graphique libre d’origine pour le langage Python et qui permet la création d’interfaces graphiques.

Logo Tkinter
L’interface
Nombre de café Consommation électriqueTemps d’alimentation
Le nombre de café consommé.Le nombre de Watt consommée par la cafetière.Le temps où la cafetière est allumée.
Temps de chauffage Alimentation de la cafetièreEtat de la cafetière
Le temps où la cafetière chauffe.Si la cafetière est allumée ou pas : ON / OFFSi la cafetière est branché a la prise ou pas : ON / OFF
  • Partie conception :

Le logiciel « CorelDraw » qui est un logiciel de dessin virtuel nous a permis de faire le boitier en 3D.

Boitier et interface

Conclusion

Ce projet nous a permis de travailler en équipe pour réaliser les différentes tâches et les mettre en œuvre pour finaliser le projet.

Nous tenons a remercier comme il se doit Mr. Verrier, Mr. Bazeille et Mr. Al Assaad pour leurs soutien et leurs apport de connaissance qui nous a énormément aidé à mener à bien ce projet, et Mr. DE SABBATA pour l’aide à l’IUT-Lab lors de la réalisation du boitier.


TABLE PONG

SOMMAIRE

  • Présentation du projet
  • Problèmes rencontrés
  • Solutions apportés
  • Conclusion

1 ) Présentation du projet :

Notre projet de deuxième année de DUT GEII était d’améliorer une table interactif qui avait été commencer par d’anciens élèves de GEII. Notre travail sur cette table était de rendre simple et logique son lancement ainsi que son utilisation pour optimiser au maximum les sensations du ou des joueurs. Pour se faire, nous avons dus nous penchés sur plusieurs parties : la partie programmation, la partie technique, ainsi que l’aspect visuelle et la simplicité d’utilisation.

2 ) Problèmes rencontrés :

  • Partie esthétique :

Pour la partie esthétique et technique nous devions rendre la table plus jolie et faciliter le transport de celle-ci.

  • Partie programmation :

Le but du projet était de programmer un jeu du nom de « PONG ». Ce jeu est l’un des premier jeux vidéo d’arcade.
« Développé par Allan Alcorn à partir de novembre 1972. »

3 ) Solutions apportés :

  • Partie esthétique :

Nous devions rendre le lancement du jeu plus esthétique et plus intuitif, donc, pour ce faire nous avons mis en place plusieurs menus :

  1. Menu pour choisir le nombre de joueurs.
  2. Menu pour choisir le niveau de difficulté. 
  3. Menu pour choisir le score maximum.
  • Partie programmation :

Pour rendre notre projet plus intéressant, on a dû créer plusieurs programmes pour pouvoir gérer toutes les fenêtres de jeu.

  • Programme « 1vs1 » : Jouer contre un ami.
  • Programme « 1vsIA » ; Jouer contre l’intelligence artificielle.
  • Programme « Choix difficulté » : Pour choisir le niveau de difficulté (Facile, Moyen, Try-hard).
  • Programme « Choix du score » : Pour pouvoir choisir le score max qu’on peut atteindre au cours d’une partie.
  • Programme « Choix du nombre de joueurs » : Pouvoir choisir le nombre de joueurs (1 joueur / 2 joueurs).

4 ) Conclusion :

Durant ce projet, on a dû travailler en équipe et pouvoir mettre en œuvre nos compétences en programmation. On tiens a remercier nos professeurs qui ont contribuer a la réussite de ce projet.  


Robot Suiveur

Enoal PERRAIS/ Mehdi Boumakhloufi / Mohamed Amine Fadlallah

Sommaire

1/ Description du projet et problématique

2/ Diagrammes

3/ Améliorations apportées

4/ Partie Logicielle

5/ Conclusion

1/ Description du projet et problématique

Nous avons pour projet de créer un système embarqué dans un robot qui aura de nouveaux capteurs et permettra de réaliser un suivi de ligne.

Nous avons repris le projet que nous avions choisi l’année dernière pour y ajouter des éléments supplémentaires.

L‘année précédente nous avions démarré le projet Smart car uniquement avec le châssis de la voiture et les moteurs DC pas à pas à l’intérieur.

Le châssis :

Les moteurs pas à pas double sens :

Nous lui avons ajouté de nombreuses améliorations :

  • Ajout d’ un boîtier pour y ajouter du design et contenir les composants ainsi que les capteurs.

  • Ajout de capteurs ultrasons HC-SR04 à l’avant et à l’arrière pour détecter un obstacle (la distance de l’obstacle sera indiquée sur un afficheur 7 segments et si obstacle il y a, un buzzer bippera, les leds vertes s’éteindront et les leds rouges s’allumeront)
  • Ajout d’ un capteur de centrale inertielle IMU9DOF qui calcule l’accélération sur les axes x,y et z de la voiture :
  • Un module Wifi ESP8266 qui transmet à un serveur en ligne les données des capteurs :
  • La voiture dispose d’un mode autonome et un mode manuel. Pour le mode manuel on pilotait la voiture avec un simple clavier d’ordinateur.
  • Un switch permet d’arrêter complètement le système en toute sécurité.
  • Un afficheur LCD qui permet d’afficher un texte comme le nom du projet par exemple.

2. Diagrammes

Diagramme Bête à corne :

Diagramme Pieuvre :

3/ Améliorations apportées

Cette année nous allons lui ajouter différents composants électroniques et améliorer notre système pour obtenir une meilleure performance :

  • Mode suivi de ligne grâce à des capteurs infrarouges (dans l’illustration ici nous en avons deux -> carrés rouges)

Dans la situation 1 : Les deux capteurs détectent une ligne noire et continue leur trajectoire

Dans la situation 2 : Le capteur gauche détecte la ligne noire et s’y dirige donc en tournant vers elle

Dans la situation 3 : Le capteur droit détecte la ligne noire et s’y dirige donc en tournant vers elle

Dans la situation 4 : Les deux capteurs ne détectent plus la ligne noire et donc le robot recule

Capteur TCRT5000
  • Système photovoltaïque qui se dirige vers les rayons lumineux en récupérant les photons grâce à des photorésistances

Dans ce système photovoltaïque nous trouverons différents composants :

  • Communication à distance :
    1. Xbee : de l’Arduino dans la smart car avec la Raspberry Pi via module Xbee RX TX : pilotage manuel de la voiture sur la Raspberry, allumer/éteindre des leds…

Module XBEE :

Interface Homme-machine sur l’écran de la Raspberry PI :

  • Bluetooth : On peux piloter via une application Android les leds et le moteur de la voiture avec le module HM-10

Module HM-10 :

Interface APPInventor (Android) sur le smartphone :

  • Camera thermique AMG8833 permettant d’alerter l’utilisateur d’une présence humaine.

En plaçant sa main devant la caméra (à gauche) on peux constater que sur un écran TFTLCD (à droite) les pixels correspondent à des pics de chaleurs et en l’occurrence ici en rouge c’est la main qui est détectée.

Quand une présence humaine est détectée (par une chaleur supérieure à 32°), il est écrit « Humain » en bas de l’écran.

4/ Partie Logicielle

Voici les logiciels que nous avons été amenés à utiliser tout au long du projet.

5/ Conclusion

Ce projet nous a permis de développer nos compétences dans les systèmes embarqués et dans la gestion de projet en groupe.

Nous avons su améliorer notre projet autant sur les fonctionnalités que sur l’esthétique.

Le budget de la Smart Car est également monté d’un cran et cette petite voiture peut désormais être considérée comme un véritable robot haut-de-gamme.


Microscope bas-coût

Cet article décrit le travail réalisé dans le cadre du projet « Microscope bas-coût » de deuxième année de D.U.T. Génie Electrique et Informatique Industrielle (GEII), du module d’Etudes et Réalisations. Ce projet a été mené par Amine Ghomrani et Paul-Alexandre Patry.


Contexte du projet

Le but de ce projet est l’élaboration d’un microscope low-cost (bas-coût). L’article Low-cost, sub-micron resolution, wide-field computational microscopy using opensource hardware sert de base de travail au projet. Il montre l’opportunité que représente les récentes évolutions de l’informatique et de la photographie grand public, en décrivant la fabrication et l’utilisation d’un microscope. Les principaux constituants sont un ordinateur mono-carte Raspberry Pi 3 et une caméra couleur, également de marque Raspberry. Une matrice de 256 diodes électroluminescentes (LEDs) sert à l’éclairage des échantillons à examiner.


Cahier des charges

Le projet comporte différents objectifs.

Le microscope présenté dans l’article Low-cost, sub-micron resolution, wide-field computational microscopy using opensource hardware ne permet pas un déplacement de l’échantillon autre que manuel. La structure du microscope doit de ce fait être modifiée, pour permettre un déplacement mécanique de l’échantillon sur les axes X et Y.

Le déplacement de l’échantillon sur les axes X et Y, ainsi que le déplacement de la caméra sur l’axe Z – déjà présent – doivent être, à terme, motorisés.

Une interface graphique, doit être élaborée, pour que l’utilisateur puisse interagir avec le microscope. Toutes les fonctions du microscope doivent être commandables via cette application.

Pour mener à bien le projet, nous avons différents éléments à notre disposition. L’annexe 1 de l’article présente la marche à suivre pour construire le microscope qui sert de modèle pour le projet. La liste des composants de ce microscope, ainsi que les fichiers des pièces qui nécessitent une impression 3D, sont fournis. En plus de ces éléments, trois programmes, écrits en langage Python (version 3 et supérieures), ainsi qu’un exemplaire du microscope (Figure 1), assemblé d’après les instructions de l’article, sont mis à notre disposition.

Figure 1 : Microscope construit d’après les indications de l’article Low-cost, sub-micron resolution, wide-field computational microscopy using opensource hardware

Interface graphique – µScope APP

Programmes existants et définition des fonctions de l’application

Il a été dit ci-dessus que trois programmes, écrits en langage Python, ont été fournis en début de projet. Ces trois programmes correspondent à trois modes d’éclairages différents de l’échantillon. En plus de contrôler l’éclairage, chaque programme affiche à l’écran ce que la caméra filme en direct.

Ces programmes présentent néanmoins deux inconvénients :

  1. Pour modifier l’éclairage de l’échantillon, l’utilisateur doit stopper l’exécution du programme en cours puis lancer l’exécution d’un autre programme.
  2. Le flux d’images en provenance de la caméra, et affiché à l’écran, est intangible pour le pointeur de la souris, et ne peut être déplacé, réduit ou enregistré.

De plus, ce flux d’images étant affiché par défaut en plein milieu de l’écran, l’utilisation d’autres fonctions du Raspberry Pi est impossible (Figure 2).

Figure 2

De cette première analyse des programmes existants il ressort que :

  • l’application doit permettre un contrôle fluide de l’éclairage de l’échantillon, avec la possibilité de passer facilement d’un mode d’éclairage à un autre.
  • le flux d’image reçu par la caméra doit être contenu dans une fenêtre qui puisse être déplacée, réduite ou fermée.

Une autre tâche que l’application doit pouvoir remplir, découle de la nature même du projet. Un microscope étant un outil d’observation, l’enregistrement de photographies des échantillons observés doit être possible.

L’éclairage de l’échantillon est assuré par une matrice de LEDs RGB – Red Green Blue – ce qui signifie qu’une multitude de couleurs d’éclairage peuvent être composées. Il a également été montré, via les trois programmes présentés plus haut, qu’il était possible de choisir précisément quelles LEDs de la matrice devaient être allumées ou éteintes. Cette flexibilité de l’éclairage – choix des LEDs et de la couleur – peut être exploitée pour permettre à l’utilisateur de composer un éclairage personnalisé. Elle peut aussi être appliquée au traitement d’image, en photographiant l’échantillon sous différents angles d’éclairage et avec différentes couleurs.

Enfin, le déplacement de l’échantillon devant être motorisé, l’application doit inclure le contrôle par l’utilisateur du mouvement de l’échantillon.

Développement de l’application

Environnement de développement

Le Raspberry Pi, en tant qu’ordinateur, nécessite un Système d’exploitation pour pouvoir fonctionner. Le système d’exploitation utilisé pour ce projet est le Raspberry Pi OS version « Bullseye ».

L’application est entièrement codée en langage Python, version 3.9. La partie interface graphique de l’application a été réalisée avec la librairie Tkinter. Les principales librairies utilisées sont la librairie unicornhathd développée pour le contrôle de la matrice à LEDs, par le fabricant Pimoroni, et la librairie OpenCV pour le contrôle de la caméra, l’enregistrement et le traitement d’images.

Descriptions des fichiers de l’application

Pour que l’application puisse fonctionner, il est nécessaire que tous les fichiers exécutables se trouvent dans le même dossier. Les fichiers qui constituent l’application sont les suivants :

Fichier .pyRôle
Split_vX
(X : numéro de version)
Fichier à exécuter pour lancer l’application.
Vérification de l’installation des librairies nécessaires au bon fonctionnement de l’application. Si les toutes les librairies sont installées le fichier Split_mainwindows sera appelé. Sinon le fichier Split_warnwindows sera appelé.
Split_warnwindowsAffichage dans une fenêtre de la liste des librairies manquantes sur l’appareil et nécessaires au bon fonctionnement de l’application.
Split_mainwindowsDéfinition de la fenêtre principale de l’application. Fait appel aux fonctions définies dans les fichiers Split_stepper, Split_capture et Split_unicornhathd. Appel des fichiers, Split_helpwindows, Split_infowindows et Split_advancedwindows si l’utilisateur appuie sur les boutons correspondants.
Split_helpwindowsDéfinition de la fenêtre d’aide de l’application.
Split_infowindowsDéfinition de la fenêtre d’information sur l’application.
Split_advancedwindowsDéfinition de la fenêtre des réglages avancés. Cette fenêtre réunit les éléments définis dans les fichiers Split_hatwindows et Split_capwindows.
Split_hatwindowsDéfinition des éléments de contrôle personnalisé de l’éclairage (mélangeur de couleur, éclairage progressif…). Fait appel aux fonctions définies dans les fichiers Split_capture et Split_unicornhathd.
Split_capwindowsDéfinition du bouton « Créer un film » et des fonctions utilisées pour la création de vidéos.
Split_unicornhathdDéfinition des fonctions de contrôle de la matrice à LEDs.
Split_stepperDéfinition des fonctions de contrôle des moteurs pas à pas.
Split_captureDéfinition des fonctions de traitement d’images et de sauvegarde d’images.

Le diagramme suivant décrit de manière visuelle l’ ordre dans lequel sont appelés les fichiers et si cet appel se fait systématiquement, ou est conditionné à un événement (ex. : appui sur un bouton) :

Figure 3 : Interactions entre fichiers

Contrôle des librairies

Le diagramme suivant montre le mécanisme utilisé pour vérifier la présence des librairies nécessaires au bon fonctionnement de l’application :

Figure 4 : Mécanisme d’importation des librairies

Si les librairies nécessaires au bon fonctionnement de l’application ne sont pas installées la liste des librairies manquantes sera affichée (Figure 5).

Figure 5 : exemple de message d’erreur

Utilisation du GPIO par l’application

Le schéma suivant montre les pins utilisés pour le contrôle de la matrice à LEDs et des trois moteurs pas à pas (Figure 6).

Figure 6 : Utilisation des pins du GPIO

Les moteurs pas à pas sont alimentés par une autre source que la carte Raspberry Pi. Les masses des drivers des moteurs doivent donc être reliées à la masse de l’alimentation, elle même reliée à la masse du Raspberry Pi.

La matrice à LEDs est alimentée directement par le Raspberry Pi et doit aussi être reliée à la masse de la carte.

µScope APP : description des fenêtres de l’application

Fenêtre principale

La fenêtre principale de l’application (Figure 7) est découpée en deux parties. Dans la partie gauche de la fenêtre est affiché le flux d’images en provenance de la caméra. Cet affichage se fait en temps réel. Dans la partie droite sont rassemblés les boutons de contrôles des fonctions de base de l’application.

Figure 7 : Fenêtre principale de l’application

La partie droite de la fenêtre principale est elle-même divisée en plusieurs sous parties, identifiées par des zones de descriptions.

Un bouton permet d’enregistrer l’image actuellement filmée par la caméra.

Deux boutons permettent d’allumer des modes d’éclairage prédéfinis : le bouton « Eclairage DARKFIELD » (Figure 8) et le bouton « Eclairage FULL » (Figure 9).

Le premier permet d’allumer les LEDs de la rangée extérieure de la matrice. Le but est d’obtenir un éclairage rasant de l’échantillon.

Figure 8

Le second bouton, quant à lui, permet d’allumer toutes les LEDs de la matrice. Dans les deux cas, l’éclairage est de couleur blanche.

Figure 9

Le bouton « OFF » permet d’éteindre complètement les LEDs de la matrice, qu’elles aient été allumées via la fenêtre principale, ou la fenêtre des réglages avancés.

Viennent ensuite six boutons qui permettent de déplacer l’échantillon en commandant les moteurs. Les boutons pour la commande des axes X et Y permettent de déplacer l’échantillon. Les boutons pour l’axe Z contrôlent la distance entre la caméra et l’échantillon, via la translation du support de la caméra.

Fenêtre de réglages avancés

La fenêtre des réglages avancés est scindée en trois parties (Figure 10).

Figure 10

La partie « Réglage RGB » permet à l’utilisateur de composer la couleur de l’éclairage de l’échantillon. La zone sous les trois tirettes permet de prévisualiser la couleur obtenue par le mélange des couleurs rouge, vert et bleu (Figure 11).

Figure 11 : exemple de composition d’une couleur

Le milieu de la fenêtre est occupé par les commandes de trois modes d’éclairage dits « progressifs ». Il est à noter que pour utiliser ces modes d’éclairage – ainsi que les modes dits automatiques – il faut d’abord avoir composé une couleur, à l’aide de la partie « Réglage RGB ». Dans chacun des modes d’éclairages, le niveau 0 sert à éteindre la matrice à LEDs.

Le premier de ces éclairages est un éclairage « depuis le centre ». Le niveau d’éclairage 1 allume un carré de LEDs en plein centre de la matrice. Chaque niveau d’éclairage supérieur épaissit le bord du carré d’une nouvelle rangée de LEDS, jusqu’à allumer toutes les LEDS avec le dernier niveau. En tout 8 niveaux d’éclairages sont disponibles, en exceptant le niveau 0 (Figures 12 et 13).

Figure 12 : Eclairage progressif depuis le centre de niveau 4 et de couleur bleue
Figure 13 : Résultat de la commande sur la matrice à LEDs

Le second mode d’éclairage est appelé « depuis le bord ». Le niveau d’éclairage 1 allume le carré que forment les LEDs à la périphérie de la matrice. Dans ce cas aussi, 8 niveaux d’éclairage sont disponibles, depuis le premier carré, jusqu’à l’utilisation de toutes les LEDs de la matrice (Figure 14 et 15).

Figure 14 : Eclairage progressif depuis le bord de niveau 4 et de couleur bleue
Figure 15 : Résultat de la commande sur la matrice à LEDs

Le dernier mode d’éclairage est appelé « Eclairage circulaire ». Contrairement aux modes d’éclairage précédents, celui-ci ne comprend que quatre niveaux d’éclairage. Les LEDs allumées forment un L contenu dans un quart de la matrice. Chaque niveau d’éclairage correspond à la commande d’un quart différent de la matrice (Figures 16 et 17).

Figure 16 : Eclairage circulaire de rang 2 et de couleur bleue
Figure 17 : Résultat de la commande sur la matrice à LEDs

A chaque mode d’éclairage est associé un bouton « Mode automatique ». Dans ce mode une photographie de l’échantillon est prise pour chaque niveau d’éclairage disponible. Le bouton « Créer un film » , à gauche de la fenêtre, permet de générer un film à partir de la série de photographies prises.

Fenêtre d’aide

La fenêtre d’aide est ouverte par le bouton vert marqué d’un point d’interrogation, situé dans la fenêtre principale (Figure 18).

Figure 18

Dans cette fenêtre se trouve un menu constitué de plusieurs boutons. L’utilisateur appuie sur le bouton correspondant à la partie de l’application sur laquelle il cherche des renseignements. Une fois qu’il a cliqué, la fenêtre d’aide est fermée et remplacée par une fenêtre contenant les explications recherchées (Figure 19).

Figure 19

Une fois la lecture finie, deux choix s’offrent à l’utilisateur :

  • soit fermer directement la fenêtre d’explications
  • soit appuyer sur le bouton retour, au bas de la fenêtre.

Dans le second cas, après la fermeture de la fenêtre d’explications, la fenêtre d’aide sera de nouveau affichée, permettent l’exploration des autres pages d’aides.

Fenêtre d’information

La fenêtre d’information est ouverte par le bouton bleu marqué d’un i, situé dans la fenêtre principale. Cette fenêtre rappelle brièvement dans quel contexte cette application a été développée et quelles personnes ont participés au projet (Figure 20).

Figure 20

Bibliographie

LOW-COST, SUB-MICRON RESOLUTION, WIDE-FIELD COMPUTATIONAL MICROSCOPY USING OPENSOURCE HARDWARE
OMAS AIDUKAS, ANDREW R. HARVEY, PAVAN C. KONDA, REGINA ECKERT, LAURA WALLER

TKINTER REFERENCE: A GUI FOR PYTHON
NEW MEXICO TECH COMPUTER CENTER

CAMERA PROJECTS BOOK : 39 EXPERIMENTS WITH RASPBERRY PI AND ARDUINO
IBRAHIM DOGAN
ELEKTOR INTERNATIONAL MEDIA – 2019 – ISBN : 978-1-907-92077-6
(Disponible à la Bibliothèque Universitaire, Campus Collines)


Cash Machine


Sommaire

  • Contexte et définition du problème
  • Cahier des charges fonctionnel
  • Matériel utilisé
  • Solutions techniques mises en œuvre
    • Partie électronique
    • Partie programmation
    • Partie conception
  • Conclusion du projet et amélioration possibles

Contexte et définition du problème

  • Nous accumulons beaucoup de pièces rouges
  • Leur comptage est fastidieux

Notre but est donc de trouver un moyen de trier et de calculer la somme de ces pièces automatiquement

Cahier des charges fonctionnel

Cahier des charges fonctionnel
Trier Distinguer les différentes pièces Stocker les pièces par valeur
Compter Calculer la somme total  
Calculer les sommes par valeur
Calculer la différence par rapport à un objectif
Afficher (IHM) Vue Principale Somme totale
Vue Tiroir Gestion de tous les tiroirs
Vue Objectif Fixer une valeur à atteindre et l’écart avec celle-ci
Vue Conversion Comparer la somme avec d’autre monnaies prédéfini
Coût Environ 130 €

Matériel utilisé



Solutions techniques mises en œuvre

Partie électronique

Nous avons réalisé une carte pour regrouper les résistances. Cela permet de simplifier le câblage et le rangement à l’intérieur de la boîte ce qui permet une meilleur ergonomie à lors d’action dans la boîte (tels que la récupération des pièces et changement éventuel de composants).

Nous avons mis des résistances de 3,3k Ohm afin d’enlever l’effet de rebond du signal produit par les capteurs.

Partie programmation

Interface graphique

L’IHM (interface homme-machine) permet d’interagir et de rendre compte du contenu de la tirelire.

Pour cela nous utilisons la bibliothèque Tkinter qui est une graphique libre d’origine pour le langage Python, permettant la création d’interfaces graphiques.

  • Utilisation de la bibliothèque Tkinter
  • Menu principale avec ses 3 sous-menu
from tkinter import *
Résultat final pour chaque menu
Menu tiroirMenu objectifMenu principalMenu conversion
Permet une visualisation du nombre de pièces par tiroirPermet de définir un montant à atteindreAffiche la somme et permet d’accéder aux autres menus.Convertit la somme actuelle dans la tirelire en différente monnaie

Détection pièce

Parallèlement au programme qui gère l’interface graphique, un programme détecte les impulsions des capteurs et incrémente à la somme de la tirelire la valeur qui correspond à chaque capteur.

  • Utilisation de la bibliothèque « gpiozero »
  • Incrémente la valeur de la pièce
from gpiozero import Button

Partie conception

Utilisation du logiciel CorelDRAW

Conclusion du projet et amélioration possibles

Durant ce projet nous avons du travailler en équipe pour réaliser les différentes tâches et les mettre en communs pour finaliser le projet.

En guise d’amélioration, nous aurions pu rajouter un moteur qui aurait permis un écoulement plus fluide des pièces dans l’entonnoir.

Equipe:Antoine BLOISArthur CHAUDETThéo STEIB


Trackeur GPS pour la cartographie de locaux

Tuteurs: Stéphane BAZEILLE et Nicolas VERRIER

Groupe: Yassine AMIAR et Farès KHALFALLAH

Sommaire :

I) Présentation générale du projet

  • Contexte et principe
  • Liste de matériel et logiciel utilisé
  • Diagramme de bête à cornes
  • Diagramme pieuvre

II) Gestion et réalisation du projet

  • Exploitation et activation des capteurs
    • GPS
    • Caméra
    • Centrale inertielle
  • Programmation
    • Coordonnées GPS
    • Photos
    • Interface
  • Finalisation
  • Difficultés rencontrées

III) Conclusion

  • Remerciements

I) Présentation générale du projet

  • Contexte et principe

Le projet trackeur GPS pour la cartographie de locaux a pour objectifs grâce à un dispositif créées par nos soins d’enregistrer le parcours fait lors de déplacement, dans notre cas nous avons parcouru l’enceinte de l’IUT. Suite à cela les informations du parcours sont enregistré et retranscrites sur un site internet ainsi que sur un fichier dans la mémoire de la Raspberry PI. Pour mettre à bien ce projet nous sommes compose d’un binôme.

Le principe est de retracer le trajet parcouru par l’utilisateur. Pour ce faire, il faut tout d’abord commencer par étudier les comportements des différents capteurs ( GPS, Centrale Inertielle, Caméra), puis de la carte Raspberry PI. Une fois ces tâches achevées, il faut programmer chaque capteur dans un programme différent afin d’arriver à ses fins sans risques de perdre toute la progression sur une petite erreur. Pour finir, il faut créer une interface afin de pouvoir lancer l’application et visualiser quelques données.

  • Liste de matériel et logiciel utilisé:
    • Raspberry PI
    • Batterie externe
    • Caméra
    • Boîtier
    • Ecran
    • Langage Python
    • GPS
  • Diagramme bête à cornes
  • Diagramme pieuvre

A partir du diagramme pieuvre on réalise le tableau des fonctions pieuvre le tout en détaillant chaque fonction principale dite FP dans notre cas seulement FP1 mais également les fonctions contraintes dite FC qui vont de FC1 à FC7 dans notre cas.

II) Gestion et réalisation du projet

  • Exploitation et activation des capteurs
    • GPS

Pour commencer, nous avons tout d’abord pris connaissance du module GPS dont nous disposions.

Après avoir pris connaissance du GPS, il a fallu le configurer sur la Raspberry PI afin de pouvoir récupérer les coordonnées sur la carte.

Pour cela, il a tout d’abord fallu installer le module GPSD grâce à cette ligne de commande:

sudo apt-get install gpsd gpsd-clients python-gps

Puis désactiver le gps:

sudo systemctl stop gpsd.socket

sudo systemctl disable gpsd.socket

Ensuite le réactiver :

sudo systemctl enable gpsd.socket

sudo systemctl start gpsd.socket

Finalement, nous avons pu visualiser les données obtenues grâce au GPS:

gpsmon

Voici ce que nous obtenons:

Nous remarquons que grâce au GPS, nous obtenons la date, l’heure ainsi que les coordonnées longitude, latitude et l’altitude. Nous verrons plus tard comment exploiter ces données pour notre projet.

  • Exploitation et activation des capteurs
    • Caméra

Pour régler la caméra, il faut tout d’abord l’autoriser à communiquer avec la Raspberry Pi en la paramétrant en rentrant la commande:

sudo raspi-config

Puis ensuite paramétrer ainsi:

Une fois ceci fait, nous pouvons brancher la PiCaméra à la Raspberry PI puis redémarrer le système.

Nous verrons plus tard en détail le programme qui permet de photographier avec la PiCaméra.

  • Exploitation et activation des capteurs
    • Centrale inertielle

Afin de nous repérer et pouvoir guider l’utilisateur à l’intérieur d’un bâtiment de l’IUT, nous avons pensé à utiliser une centrale inertielle qui calculerait la trajectoire lorsque l’on perd le signal GPS car il est impossible d’obtenir un signal GPS au sein d’un bâtiment avec un tel module GPS.

Nous avons tout d’abord essayé d’étudier la précision du capteur. Pour ce faire, nous avons placé le capteur sur un banc afin de pouvoir effectuer des trajectoires droites dans une seule direction verticale et horizontale (x ou y). Nous avons donc branché le capteur aux bonnes entrées de la Raspberry PI grâce à des câbles puis créer un petit programme afin de relever les données obtenues avec ce capteur.

Suite à un changement de groupe et donc une baisse d’effectif dans le groupe de ce projet, nous avons été contraints d’abandonner cette partie du projet…

  • Programmation
    • Coordonnées GPS

Dans cette partie, nous verrons les différents programmes utilisés pour ce projet. Commençons par le GPS.

Pour le GPS, nous devions tout d’abord récupérer les données captées par le GPS (Longitude, Latitude) grâce à ce programme trouvé sur internet que nous avons adapté à nos beoins:

port = '/dev/ttyAMA0'  #Sélection du port du GPS
gpsd = gps(mode=WATCH_ENABLE|WATCH_NEWSTYLE)

list_lat = []    #création de listes pour stocker les coordonnées
list_lon = []
x = []           #Coordonnées X
y = []           #Coordonnées Y
D = []           #Distance parcourue

i=1

try:
    while True:
        report = gpsd.next() #
        if report['class'] == 'TPV':
            lat = getattr(report, 'lat', 0.0)  #Récup latitude
            lon = getattr(report, 'lon', 0.0)  #Récup longitude
            Temps = getattr(report, 'time','') #Récup temps

Cependant, les coordonnées récupérées de cette manière sont des coordonnées brutes avec lesquelles nous ne pouvons pas nous repérer et tracer le trajet effectué. Pour remédier à cela, nous devons convertir les coordonnées GPS en coordonnées cartésiennes:

calc_lat = (6371*cos(float(lat))*cos(float(lon))) #conversion latitude
calc_lon = (6371*cos(float(lat))*sin(float(lon))) #conversion longitude
list_lat.append(calc_lat) #stock les données converties dans les listes
list_lon.append(calc_lon) 
#Conversion des données converties en points cartésiens X et Y 
x1 = float(list_lat[0]-list_lat[i-1])
y1 = float(list_lon[0]-list_lon[i-1])
x.append(x1)
y.append(y1)
#Calcul de la distance parcourue grâce à un calcul de distance entre deux vecteurs qui calcule la distance entre le point actuel et le point précédent puis qui s'additionne au fil du temps.
calc_dist = sqrt((x[i-1])**2+(y[i-1])**2)
D.append(calc_dist)

Ensuite, nous affichons les valeurs que nous avons calculé:

print "Coordonnees x : ",x[i-1]
print "Coordonnees y : ",y[i-1]
print "Distance parcourue : ",D[0]+D[i-1]," m"

i=i+1  #Incrémentation pour mesure d'un nouveau point de position

Pour avoir le tracé du parcours effectué, nous devons tracer un « graphique » des points x et y et l’afficher ensuite:

plt.plot(x,y)  #Traçage d'un point en fonction de x et y
time.sleep(1)  #Attente d'une seconde pour recommencer la boucle
os.system("clear")  #Actualisation de la fenêtre d'affichage

Nous affichons simplement le tracé final une fois que nous fermons l’application:

plt.show()     #Affichage du tracé

Grâce à ce programme simple, nous pouvons déjà obtenir un tracé du parcours effectué, avec en temps réel la distance parcourue et la position cartésienne x et y. Cependant, les coordonnées obtenues contenaient beaucoup de chiffres après la virgule, pour y remédier nous avons fait ainsi:

xi=str(x[i-1])
yi=str(y[i-1])
di=str(D[0]+D[i-1])
#Ensuite nous affichons seulement les 6 premiers caractères de ces données:
print "...",xi[0:5]
print "...",yi[0:5]
print "...",di[0:5]
  • Programmation
    • Photos

Pour la prise de photos lors du trajet, nous avons fait un programme simple de prise de photos. Ceci est un programme pour prendre 5 photos à une intervalle de 30 secondes entre chaque photos. Il faut ensuite l’adapter à nos besoins, c’est-à-dire, prendre des photos du début du trajet jusqu’à la fin.

from picamer import PiCamera #Importation des librairies nécessaires
from time import sleep

camera = Picamera() #Choix de la caméra

camera.resolution = (1024,768) #Choix de la résolution de la caméra
camera.rotation = 180  #Rotation de la caméra à 180° selon sa position car elle est placée à l'envers

i=0
while i<5:
      #Choix de la direction des photos
    chaine1=('/home/pi/Desktop/Photos_projet/image%d.jpeg')%i
      #Prévisualisation de la photo
    camera.start_preview(fullscreen = False, window = (50,50,640,480))
    sleep(1.5) #Attente de 1,5 seconde pour la visualisation
    camera.capture(chaine1) #Prise de la photo
    camera.stop_preview() #Arret de la visualisation
    print ('photo numero ', i+1, 'prise')
    i=i+1      #Incrémentation du numéro de la photo
    sleep(30)  #Attente de 30s pour la prochaine photos

Une fois ce programme adapté à nos besoins, nous l’ajoutons au programme principal. Pour notre cas, il fallait le rajouter au programme principal, nous avons donc choisi cette solution:

j=0
#Effectuer cette tâche uniquement lorsque i est un multiple de 30 (soit toutes les 30 secondes)
if i%30==0 :  
    chaine1=('/home/pi/Desktop/Photos_projet/image%d.jpeg')%i
    camera.capture(chaine1)
    j = j+1 #Comptage du nombre de photos prises
  • Programmation
    • Interface

Pour une question d’esthétique, nous créons une interface afin de visualiser le tout sur une seule fenêtre. Nous utilisons ici la librairie Tkinter fin de la créer. Voici le programme crée pour l’interface:

from Tkinter import*

fenetre = Tk()
fenetre.title('Trackeur GPS')  #Titre de la fenêtre d'interface

 #Création du label fenetre qui contiendra les objets (frame) 
champ_label = label(fenetre)  
cadre = Frame(fenetre, width=300, height=150, borderwidth=1)
cadre.pack(fill=BOTH)

 #Création du premier 'frame' qui contiendra du texte
pos_x = Frame(fenetre, width=20, height=50, borderwidth=1)
ligne_texte = Label(pos_x, text=("position x = "+str(x[i-1])),width=30
ligne texte.pack(side="left")
pos_x.pack(fill=BOTH)

 #Création du deuxième 'frame' qui contiendra du texte 
pos_y = Frame(fenetre, width=20, height=50, borderwidth=1)
ligne_texte2=Label(pos_y, text=("Position y = "+str(y[i-1])), width=30)
ligne_texte2.pack(side="left")
pos_y.pack(fill=BOTH)

 #Création du troisième 'frame' qui contiendra du texte 
dist = Frame(fenetre, width=20, height=50, borderwidth=1)
ligne_texte3=Label(dist, text=("Distance parcourue = "+str(D[0]+D[i-1])+" m"), width=30)
ligne_texte3.pack(side="left")
dist.pack(fill=BOTH)

#Création du quatrième 'frame' qui contiendra le nombre de photos prises depuis le début du trajet
nb_ph = Frame(fenetre, width=20, height=50, borderwidth=1)
ligne_texte4=Label(dist, text=("Photos prises : "+str(j)), width=30)
ligne_texte4.pack(side="left")
dist.pack(fill=BOTH)

 #Création d'un bouton 'Quitter'
Bouton_Quitter = Button(cadre, fg="red", text = "quitter", command = fenetre.destroy
Bouton_Quitter.pack(side="right")

champ_label.pack()

fenetre.update() #Actualisation de la fenêtre

Une fois tous ces programmes achevés, nous les mettons ensemble sur un seul programme afin d’avoir la totalité de l’application sur un seul programme, ce qui nous permettra de lancer un trajet et de l’arrêter lorsqu’on le souhaite.

  • Finalisation

Le système terminé, il ne fonctionne malheureusement pas comme on le souhaiterait. En effet, l’interface ne fonctionne pas comme prévu car lorsque les positions se mettent à jour, l’interface précédente reste présente et les nouvelles s’accumulent en dessous de celle-ci.

De plus, le module GPS que nous utilisons n’est pas très stable au vu de sa position dans le boîtier car il est « enfermé » ce qui crée des perturbations et donc fausse les données du tracking.

  • Difficultés rencontrées

Nous avons rencontré plusieurs difficultés au cours de ce projet. Premièrement, nous ne connaissions rien à propos de la Raspberry PI, ce fut pour nous une très bonne découverte.

De plus, le changement de groupe nous a contraint à devoir abandonner une partie du projet. Cela nous a aussi quelque peu ralenti.

Le module GPS met beaucoup de temps pour capter des satellites lors de la mise en tension. Ceci est encore plus ralenti lorsque le ciel est couvert.

III) Conclusion

Pour conclure, malgré que le projet ne soit pas fonctionnel à 100% et ne fonctionne pas comme nous le voudrions, nous avons beaucoup avancé et il nous a vraiment plu car il était très agréable à réaliser et il nous a permis de développer des compétences en programmation ainsi que de découvrir ce qu’est le Raspberry PI et toutes ces fonctionnalités. Il nous a aussi permis d’effectuer un agréable travail d’équipe, ce qui est très intéressant.

  • Remerciements

Nous tenons à remercier tout d’abord M.VERRIER Nicolas et M.BAZEILLE Stéphane non seulement pour nous avoir aidé mais également guidé tout au long du projet. Nous tenons à remercier également M.DE SABBATA qui nous a laissé accès à l’IUT LAB sans modération.


Système de vidéosurveillance autonome


  • Présentation du projet
  • Présentation des composants
  • Etude du projet
  • Présentation de l’aspect technique
  • Réalisation du projet
  • Conclusion
  • Remerciements

Présentation du projet

Le projet consiste à mettre en place un système de vidéosurveillance à l’extérieur qui sera autonome. Il faudra placer le système dans un endroit propice au soleil car celui ci sera alimenté grâce à l’énergie solaire. Ce système sera munit d’un boitier comportant le système ainsi que de la caméra et d’un petit panneau solaire. Pour ce projet, nous utiliserons un Raspberry Pi 3, un Witty Pi 2, une caméra, un panneau solaire, des capteurs et un ordinateur portable pour la partie de programmation.

Nous avons donc dans un premier temps, il fallait faire l’étude du sujet en réalisant plusieurs diagrammes, ensuite nous avons pu commencer la programmation en même temps que la création du boitier. Pour la suite, il a fallu se concentrer sur la détection de mouvement. Pour finir, nous avons réalisé une étude énergétique du projet, par rapport à la batterie.


Présentation des composants

En ce qui concerne les composants utilisés : nous utiliserons un Raspberry Pi 3, un Witty Pi 2, une caméra, un panneau solaire, des capteurs et un ordinateur portable pour la partie programmation.


Etude du projet

Au cours de cette étape du projet il était important de savoir sur quoi nous allions travailler, pour cela nous avons réaliser un certains nombre de diagrammes :

Une fois que les différentes tâches ont été déterminé nous nous sommes scindés en 2 groupes pour avancer en parallèle :


Présentation de l’aspect technique

Dans un premier temps nous nous sommes concentré sur l’aspect programmation du Raspberry Pi, notamment en élaborant un programme de redémarrage automatique du Raspberry Pi a l’aide du module Witty Pi, de cette façon nous pouvons contrôler la fréquence des prises de vue. Ensuite nous avons étudier le stockage nécessaire et le poids des photos pour optimiser le stockage des photos, un programme peut être activer pour supprimer les anciennes photos automatiquement (il est possible de stocker 1500 photos en Full HD). Nous avons ajouter les programme crée au démarrage du Raspberry Pi ce qui nous permet de rendre le système entièrement autonome d’un point de vue prise de photo.

Par la suite nous avons ajouté un système de détection de mouvement, ce système est pleinement fonctionnelle mais nécessite cependant une alimentation constante en énergie et cela sort de la quantité d’énergie dont nous disposons avec notre batterie actuelle (2000 mAh). Le flux vidéo peut aussi être accessible via internet si il y a une nécessité de contrôler la zone a distance.

Dans un deuxième temps nous avons étudier la partie énergétique du projet, notamment la consommation du Raspberry Pi et le rendement du panneau solaire. Avec une partie de 2000 mAh tel que la notre nous obtenons une autonomie théorique de 48 minutes, a cela nous devons ajouter l’usure de la batterie, nous avons donc du optimiser la consommation d’énergie pour que le système puisse être autonome le plus longtemps possible notamment la nuit ou en cas d’ensoleillement faible. A propos du temps de charge de la batterie, nous avons calculé un temps de charge de 4 H (Capacité batterie  / Puissance du chargeur = 2000/500 = 4 heures de charge)

Pour finir nous avons réalisé un boitier pour le Rasberry et le matériels électroniques ( batterie … ) afin d’avoir un support et une protection pour cette partie. Ensuite nous avons fixé le panneau solaire puis nous avons ajouté une barre réglable afin de choisir l’angle qui permettra au panneau de recevoir le meilleur rendement énergétique et d’alimenter au mieux la Raspberry.


Réalisation du projet

Au cours de la réalisation le groupe a été scindé en deux, une partie sur la programmation du Raspberry Pi et une autre sur la réalisation du boitier.

Dans la partie programmation nous avons utilisé le langage Python ainsi que l’environnement de travail Thonny Python 3. Les scripts était ensuite exécuter au démarrage avec le fichier rc.local.

En parallèle, le groupe occupé à la création du boitier a utilisé le logiciel CorelDRAW pour la réalisation de celui-ci, puis nous avons utilisé la découpeuse laser pour la créer.

Une fois le boitier réalisé, nous nous sommes attelé à la création d’un support pour le panneau solaire. Celui ci se devait d’être adaptable notamment en ayant pour contrainte la possibilité de changer l’inclinaison du panneau. Pour se faire nous avons opter pour un support en bois en deux parties, une partie sur le panneau solaire et une autre sur le sol, le tour relié par une charnière et avec la présence d’une crémaillère sur la partie basse du support. Ainsi l’angle du panneau peut être changer a tout moment.


Conclusion

Pour conclure, nous avons rencontré quelques problèmes notamment avec la batterie qui ne chargeait plus. Lorsque l’on voulait la charger cela prenait également beaucoup de temps donc nous ne pouvions que réaliser les essais lorsque la Raspberry était alimentée par l’ordinateur.

Nous avons un code python servant à commander la caméra, la prise de photo et ses différents paramètres comme la résolution et la luminosité. Ainsi que pour l’enregistrement de l’image à un endroit spécifique du raspberry, et un autre pour la gestion des photos en effaçant les plus anciennes, de cette façon nous pouvons garder un nombre défini de photos.

Ensuite, nous avons ajouté ces deux fichiers pythons au lancement grâce au fichier rc.local. Ce fichier permet d’exécuter les deux programmes au lancement du raspberry et en arrière-plan, et cela en moins de 30 secondes.

Nous avons géré la fréquence des prises grâce au module Witty Pi2. Grâce à ce module nous pouvons définir quand le raspberry s’allume ou s’éteint et ainsi gérer l’énergie.

Malgré quelques soucis, le but du projet a été atteint et le système fonctionne très bien. Dès que quelqu’un passait devant le capteur, le système prenait une photo. Pour la fiabilité du projet, nous conseillons de choisir une batterie avec une meilleure capacité et un plus grand panneau solaire pour la recharger.

Au final, nous avons un programme autonome et fonctionnel de prise de photos en milieu extérieur ou intérieur avec gestion de stockage d’énergie.


Remerciements

Nous souhaitons remercier nos professeurs :
– M. Verrier Nicolas
– M. Bazeille Stephane

Ainsi que les personnes suivantes pour leur aides :
– M. De Sabatta Christophe

Nous les remercions pour leurs aides et leurs conseils dans ce projet.


Trieuse/compteuse de monnaie

Sommaire 

  • Présentation du projet 
  • Présentation du matériel utilisé 
  • Étude du projet 
  • Déroulement du projet 
  • Résultats 
  • Conclusion 
  • Remerciements 

Présentation du projet 

Notre groupe est constitué de 3 étudiants de deuxième année : 

  • CLERBOUT Romain 
  • DUDENHOEFFER Maxime 
  • ZIMMERMANN Benjamin 

Dans le cadre du cours d’Études et Réalisations de deuxième année du DUT Génie Électrique et Informatique Industrielle, nous avons dû réaliser un projet. 

Le but de notre projet est de créer une machine qui trie et compte les pièces. Il faut également ajouter un afficheur à cette machine afin d’avoir le total des pièces. 

Dans ce projet nous avons dû travailler sur la partie structure et sur la partie programmation. 

Présentation du matériel utilisé 

Pour crée la structure il nous a fallu une imprimante 3D, une découpeuse laser et du plastique. 

Petite Machine De Découpe Laser Pour Acrylique/plastique/papier ...

Pour la partie programmation, il nous a fallu un Arduino, un écran LCD et un capteur de poids. 

Capteur de poids TEM01052B

Étude du projet 

L’attribut alt de cette image est vide, son nom de fichier est image-9.png.
L’attribut alt de cette image est vide, son nom de fichier est image-7.png.
 

 

Pour mener à bien la réalisation de notre projet nous avons séparé le travail en 2 parties : la partie informatique et la structure. 

Romain s’est occupé de la programmation pendant que Benjamin et Maxime se sont occupés de la structure. 

Avant de commencer le projet nous avons dû faire une analyse du capteur de poids ainsi que des pièces. Nous avons dû mesurer et peser chaque pièce afin de faciliter le triage. Par exemple, la pièce de 2 euros est la plus grande et la plus lourde, elle a 25,75 mm de diamètre et 8,5 g. Nous avons relevé ces deux caractéristiques pour chaque pièce. Le capteur a une plage de mesure qui va de 0 à 780 g.  Il a une précision de 4 mg, en effet, le capteur de poids fonctionne grâce à une résistance interne qui varie selon la courbure du matériau qui l’entoure. On récupère alors, en sortie,une tension qui nous permet, après une simple règle de trois, de connaître le poids en grammes de la pesée. On utilise aussi une carte qui permet de faire la liaison entre l’arduino et le module de pesée, celle-ci est utile pour amplifier le signal de sortie du capteur. On utilise d’ailleurs dans le programme, non pas une valeur de poids de la pièce en gramme mais une unité arbitraire. 

Voici l’analyse des pièces que nous avons réalisé : 

La pièce de 2 euros a un diamètre de 25.75 mm et un poids de 8.5g(1850ua). 

La pièce de 1 euro a un diamètre de 23.25 mm et un poids de 7.5g(1615ua). 

La pièce de 50 centimes a un diamètre de 24.25 mm et un poids de 7.80g(1650ua). 

La pièce de 20 centimes a un diamètre de 22.25 mm et un poids de 5.74g(1245ua). 

La pièce de 10 centimes a un diamètre de 19.75 mm et un poids de 4.10g(880ua). 

La pièce de 5 centimes a un diamètre de 21.25 mm et un poids de 3.92g(850ua). 

La pièce de 2 centimes a un diamètre de 18.75 mm et un poids de 3.06g(652ua). 

La pièce de 1 centimes a un diamètre de 16.25 mm et un poids de 2.30g(505ua). 

Ensuite il a fallu choisir comment programmer le comptage des pièces. Nous avons commencé sur une Raspberry pi mais au final nous sommes passé sur Arduino car c’était plus pratique entre autres parce que que celui-ci possède des entrées analogiques et le système d’exploitation de la raspberry pi n’était pas utilisé. 

Déroulement du projet 

Dans un premier temps, nous avons dû réfléchir à une solution pour trier les pièces. Nous avons opté pour une rampe fait à la découpe laser avec des trous à l’intérieur en fonction de la taille de chaque pièces, l’idée était d’incliner cette plaquette pour que les pièces roulent dessus et tombent dans le trou correspondant. Il fallait faire attention car les pièces de 50 cents et de 5 cents étaient plus grandes que les pièces de 1 euro et de 10 cent. Par la suite nous avons créé des tuyaux en dessous de chaque trou pour que la pièce se glissent dedans. 

Ensuite, il a fallu trouver une solution pour peser les pièces précédemment triées. Après avoir essayé de les peser séparément nous avons décidé de les peser toutes ensemble sur un banc de pesage. Celui-ci était équipé du capteur de poids.  

Pour finir, nous avons pu améliorer notre structure qui fonctionnait déjà pour qu’elle soit plus simple d’utilisation. En effet, nous avons rajouté une pièce, faite avec l’imprimante 3D à l’entrée de la rampe de tri pour guider les pièces plus facilement. Nous avons également ajouté des tiroirs à la sortie des tuyaux pour pouvoir récupérer les pièces une fois pesées. 

Pour le déroulement du côté de la programmation, qui a été fait en parallèle de la structure, nous avons fait un programme qui se divise en 2 parties. Une partie gère la pesée, on pèse tout le banc de pesé, on ajoute la pièce et on fait une soustraction de la nouvelle pesée moins l’ancienne, ce qui nous donne le poids de la pièce qui vient de tomber et nous permet de déterminer le type de celle-ci. La deuxième partie gère l’affichage. On affiche soit la cagnotte qui est l’affichage de base, soit le nombre de pièce par type. Cet affichage est géré par un bouton pendant qu’un autre bouton permet la remise à zéro de la cagnotte. 

Après avoir fini la structure et la programmation nous avons fini par améliorer notre projet. Nous avons ajouté une boîte pour ranger l’arduino et poser les deux boutons. Nous avons également re-designer notre projet pour en améliorer l’esthétique. 

Résultats 

La structure marche très bien, on met les pièces sur le trieur elles roulent puis tombent dans différents tuyaux selon leur taille. Ensuite, elle tombe dans des tiroirs posés sur le banc de pesage. Quand on a fini de compter les pièces, on peut retirer les tiroirs et récupérer les pièces. 

Nous avons réussi à afficher sur un écran LCD deux modes. 

Sur le premier mode, on peut voir un jackpot qui s’incrémente à chaque pièce qui arrive sur le banc de pesage. 

Sur le second mode, on peut voir un tableau avec les différentes pièces qui vont de 1 centime à 2 euros et à côté on voit le nombre de pièces posés sur le banc de pesage. 

Conclusion 

Nous avons réussi à terminer le projet dans les temps. 

Le projet étant centré plus sur la partie conception de l’objet et mise en place de nos idées grâce aux outils qui étaient à notre disposition, il nous a permis de développer nos compétences en programmation, mais également en conception 3D avec Tinkecad et en utilisation de programme de dessins vectoriels (CorelDraw) dont nous nous sommes aidés pour la découpe laser. Il a également permis de travailler en équipe, ce qui est la partie la plus intéressante du projet car nous mettons nos connaissances et nos idées en commun pour arriver à nos fins. 

Remerciements 

Finalement, nous tenons à remercier nos professeurs, M.Bazeille et M.Verrier pour leur aide et leurs conseils mais aussi M.de Sabbata qui nous a laissé accès à l’IUT Lab et à ses machines. 


Machine à café connectée

Sommaire

Introduction

Membres du projet et répartition des tâches

Problématiques

Gestion du projet

  1. Bête à cornes
  2. Mindmap
  3. Diagramme de GANTT
  4. Budget initial
  5. Liste des achats

Réalisation du projet

  1. La cafetière à filtre programmable
  2. Composants
    1. Raspberry PI
    2. Capteur de vibration
    3. Photorésistance
    4. Optocoupleur
    5. Ecran LCD tactile
  3. Implantation des capteurs
    1. Capteur de vibration et photorésistance
    2. Optocoupleur
  4. Codage
  5. Support

Bilan

Perspectives d’évolution

Remerciements

Introduction 

Dans le cadre des projets d’étude et réalisation du DUT Génie Electrique et Informatique Industrielle de Mulhouse, nous avions un volume de 96h pour réaliser le projet suivant : équiper une cafetière de capteurs pour monitorer son utilisation. Ce projet a duré pendant les quatre cinquièmes du volume horaire total, arrêté brutalement pour cause de COVID-19, c’est-à-dire d’octobre à mars.

Notre équipe s’est formée autour de ce projet par souci d’affinités et de préférences. Ce projet fut encadré par deux professeurs : M. Bazeille et M. Verrier. En dehors de nos heures de travail nous avons développé le projet en complément dans l’IUT LAB pour nous tenir à jour dans le diagramme prévisionnel. 

Membres du projet et répartition des tâches 

Les 4 membres de ce projet.

Anthony Tort Mathieu Rey Victor Seiler Thibaut Cauvez

Une fois les compétences de chacun découvertes, nous nous sommes réparti les tâches de telle sorte:

Présentation du projet

Le projet qui nous a été attribué est celui de la machine à café connectée. Ce projet consiste à apporter des modifications à une cafetière basique (Cosylife CL-PRG27) en y ajoutant des capteurs pour monitorer son utilisation. 

Les différents buts de ce projet sont :

  • La prise en main d’une raspberry pi
  • L’implantation de capteurs
  • La récolte d’informations à l’aide de ces capteurs
  • La réalisation de statistiques à partir de ces informations
  • L’enregistrement des données sur un site internet

Problématiques 

  1. Quels capteurs seront présents et comment les intégrer à notre cafetière ?
  2. Comment adapter notre système dans un environnement humide et chaud ?
  3. Comment utiliser des informations déjà présentes sur les capteurs de la cafetière ?
  4. Comment traiter et croiser ces informations de manière à avoir le plus de données utiles ?

Gestion du projet

1) Bête à cornes

Afin de ne pas s’égarer sur le sujet, nous avons mis en place une bête à cornes:

2) Mindmap

Ce diagramme a pour objectif de guider les avancées du projet.

3) Diagramme de GANTT

Les diagrammes de GANTT nous permet de comparer la durée d’avancement du projet prévisionnelle et réelle.

4) Budget initial 

Notre budget de départ était de 50 euros avec l’emprunt de la raspberry pi et de son écran tactile. Ce budget étant modulable il pouvait augmenter en cas d’achat de fournitures nécessaires au développement du projet qui dépasserait le plafond initial.

5) Liste des achats 

Article(s)Prix unitaire (TTC)QuantitéTotal (TTC)
Cafetière filtre programmable COSYLIFE CL-PRG2719.81 €119.81€
Capteur de vibrations ST0405.60€15.60€
Capteur De Lumière Photosensible3.97€13.97€
Optocoupleur Traversant (RS : 395-6344)0.238€102.38€
Prix Final(TTC) 31.76€

Les prix des résistances, des câbles  et de la carte électronique pour l’optocoupleur ne sont pas pris en compte car sont insignifiants ou récupérés sur d’anciens systèmes.

Réalisation du projet

1) La cafetière à filtre programmable

Ce projet consiste à agir sur la cafetière programmable de la marque Cosylife, il s’agit d’une cafetière basique avec un système d’horloge programmable pour l’allumer et l’éteindre de manière automatique à l’horaire que l’on souhaite.

MarqueCOSYLIFE
Type cafetièreCafetière programmable
ColorisNoir et inox
Puissance (W)900 W
ProgrammableOui
Capacité du réservoir (L)1,5 L
IsothermeNon
Nombre de tasses max15 tasses
Maintien au chaudOui
Porte filtreAmovible et lavable
Niveau d’eau visibleOui
Système anti-gouttesNon
Type de verseuseVerseuse Thermo-résistante
Veille automatiqueOui
Descriptif complémentaireverre plus résistant aux chocs thermiques
Informations complémentairesDécouvrir notre Marque et nos Produits Cosylife
Dimensions produitH 34,5 cm x L 19,9 cm x P 26,5 cm
Poids net1,55 kg
Poids brut2,4 kg
Code article960086

2) Composants

2.1) Raspberry pi

La raspberry pi est un nano-ordinateur nous permettant de faire le lien avec nos capteurs. En effet, les informations sont directement envoyées sur celle-ci afin d’être traitées et utilisées. Elles sont ensuite envoyées sur un écran LCD afin de les afficher.

Fiche technique:

ProcesseurARM v8, Quad-core 1.2 GHz, Broadcom2837 64bit CPU
Mémoire1 GB
Connectique4 x USB 2.0, 1 x CSI, 1 x micro SD, 1 x GPIO, Sortie vidéo et stéréo, 1x DSI
CommunicationBCM43143 Wifi WLAN, Bluetooth BLE
AlimentationMicro USB, jusqu’à 2,5A

2.2) Capteur de vibrations

Le capteur de vibrations permet de détecter l’utilisation de la machine à café. La cafetière tremblant un peu lorsqu’elle fait couler le café, son but ici est de capter ce tremblement. Un potentiomètre nous permet de calibrer le seuil de détection du capteur, ce dernier pouvant être utilisé avec une entrée analogique ou numérique.

Fiche technique:

Alimentation3 à 5 VCC
Sorties4 Sorties: VCC, GND, D0,A0
Dimensions42 x 17 x 9 mm

2.3) Photorésistance

La photorésistance est disposée contre le pichet de la cafetière, nous informant si le réservoir de café est présent ou non. Cette information nous permet de savoir si un café est servi et de savoir combien de fois le réservoir a été retiré.

Fiche technique:

Alimentation3,3 à 5 VCC
Sorties4 Sorties: VCC, GND, D0,A0
Dimensions3,2 x 1,4 cm

2.4) Optocoupleur

Nous utilisons des optocoupleurs afin de récupérer une information là où circule du courant. Ces optocoupleurs sont reliés directement à la cafetière afin de connaître si elle est branchée à un réseau électrique et aussi pour savoir si le bouton ON est activé.

Fiche technique:

Type de montageTraversant
Type de sortieTransistor
Tension directe maximum1,4 V
Nombre de broches4
Type de boîtierDIP
Temps de croissance5µs
Courant d’entrée maximum50 mA
Tension d’isolement5 kVrms
Taux de transfert de courant maximum260%
Rapport de transfert de courant minimum60%
Temps de chute4µs

2.5) Ecran LCD tactile

L’utilisation d’un écran LCD tactile nous permet de faire l’affichage de toute les informations récoltées grâce au capteur. L’utilisation d’un écran LCD tactile permet de faciliter l’utilisation de la cafetière car utiliser un écran d’ordinateur serait beaucoup moins ergonomique.

Fiche technique:

VersionLCD
Couleur16-bit
Affichageab 7.0 Zoll
Résolution physique800 x 400 Pixel
Diagonale17.78 cm
ModèleRaspberry Pi
ParticularitéTouch kapazitiv

3) Implantation des capteurs

3.1) Capteur de vibrations et photorésistance

Capteur de vibrations 

Pour intégrer le capteur de vibrations à notre cafetière, nous avons eu comme idée de le placer contre celle-ci. L’objectif a été de détecter les vibrations lorsque l’eau, présente dans le réservoir s’écoule dans le filtre. Cela nous a permis de savoir quand la cafetière passe du mode chauffage et remplissage au chauffage de la cafetière seul, et ainsi de connaître la consommation exacte en énergie car la cafetière consomme plus quand elle chauffe et écoule de l’eau. Nous savions aussi que lorsque l’eau s’écoule à un temps T (le débit d’écoulement étant constamment le même) il déverse un certain volume d’eau correspondant à un nombre de tasses à café moyen. Cela nous permis de connaître le volume de ces cafés servis. 

Photorésistance 

La photorésistance placée contre la verseuse en verre nous permet de détecter un changement d’état correspondant à la prise en main de cette même verseuse. Cela permet de savoir que quelqu’un est en train de se servir un café, et ainsi de connaître le nombre moyen de cafés servis à chaque utilisation.

Le branchement des ces deux capteurs, chacun composés de quatre broches, fut assez simple à réaliser :

  • VCC = alimentation du capteur (5V)
  • GND = masse du capteur
  • D0 = information de sortie logique du capteur 
  • A0 = information de sortie analogique du capteur

Nous avions uniquement utilisé la sortie D0 des deux capteurs de manière à détecter les changements d’état pour détecter les cas cités précédemment.  

3.2) Optocoupleur

 

L’optocoupleur est un composant électronique capable de transmettre un signal d’un circuit électrique à un autre, sans qu’il y ait de contact galvanique entre eux.

Dans le cas présent, il permet de récupérer des informations dans la cafetière elle-même et de l’envoyer dans la raspberry tout en séparant les deux circuits car la carte électronique d’où nous tirons les signaux est alimentée en 5V continu mais en 230V  alternatif ce qui est à la fois dangereux pour la raspberry et pour l’homme. Les signaux électriques que nous avons récupérés de la cafetière étant l’alimentation globale de la cafetière pour savoir si elle est branchée à une source de courant et l’appui sur le bouton de mise en marche de la cafetière pour savoir si elle est en veille ou en train de chauffer et faire du café. Nous avons donc deux circuits de l’optocoupleur, séparés mais branchés de la même façon c’est pour cela que l’image décrivant le branchement de l’optocoupleur ci-dessous correspond aux deux circuits de l’optocoupleur. 

Le branchement d’un optocoupleur consiste à récupérer le signal sur la pin 1 sortant par la pin 2  et d’alimenter la pin 3, s’il y a présence de signaux entre la pin 1 et 2 le transistor serra passant et et laissera passer le courant de la pin 4 à 3 pour ainsi récupérer un signal ou non sur la pin 3. En sortie de pin 3 nous avons intégré une diode au pont diviseur de tension pour savoir visuellement si le l’optocoupleur est passant ou bloquant.

Afin d’intégrer l’optocoupleur nous sommes passés par une phase test sur une breadboard puis nous avons dû créer la plaque électronique:

Néanmoins, afin de passer à l’étape de la création, des mesures de protection sont nécessaires à cause du contact avec des produits dangereux. Il faut donc se munir:                                                                                                                                         

De gants en latex

D’une blouse de travail

De lunette de protection

Après la création de la carte virtuellement, l’étape suivante consiste à créer la carte électronique qui est réalisée en plusieurs étapes:

  1. Imprimer, découper et passer aux rayons UV

Après avoir imprimé le schéma des pistes KiCad sur une feuille de calque, il faut découper la plaque qui va accueillir la piste avec les dimensions nécessaires. Ensuite, il faut placer la plaque découpée sur la feuille de calque dans les rayons UV afin de créer une réaction chimique sur la résine présente sur la plaque n’étant pas protégée par les pistes de la feuille de calque.

  1. Passage au révélateur et nettoyeur

La plaque passant dans le révélateur va afficher les pistes qui n’étaient pas exposées aux rayons UV. Elle va ensuite passer dans une nettoyeuse au perchlorure afin d’enlever les résidus de résine pour ainsi afficher les pistes cuivrées. La plaque sera encore passée aux UV afin d’enlever toute trace de résine.

  1. Étamage

La plaque va être ensuite plongée dans de l’étain chimique à froid pour y déposer une couche d’étain sur le cuivre afin de le protéger de l’oxydation.

  1. Perçage des pistes

Perçage des pistes avec différentes tailles de foret suivant les différentes pattes des composants. Le trou ne doit être ni trop petit ni trop grand.

Nous avons ensuite intégré l’optocoupleur en utilisant le logiciel kicad puis en réalisant toute les étapes de la création d’une plaque pour enfin l’intégrer dans un boite créé à la découpeuse laser pour nous permettre de le mettre en place et de manipuler le système en toute sécurité.

Voici une vidéo montrant les phases de test de l’optocoupleur ou l’on peut distinguer un changement d’état de l’information récupérée prouvant que le système fonctionne

Une fois tous les capteurs mis en place voici une image montrant comment ils sont disposés dans la boîte (ce n’est pas la disposition finale)

4) Codage 

La partie la plus importante de ce projet consiste à faire le codage de la raspberry pi. En effet il faut tout d’abord faire l’acquisition des différentes informations prises par les capteurs, il faut ensuite traiter ces informations et les croiser afin d’en tirer des statistiques et des informations sur l’état de la machine à café. Enfin il faut afficher ces informations sur un écran LCD. 

En raison de l’épidémie de Covid-19 nous n’avons pas de capture d’écran de notre code.

Tout d’abord nous utilisons nos capteurs en numérique, dans le but de savoir si la machine tremble ou non et si le pichet est présent ou non. Nous n’avons pas besoin de savoir la quantité de lumière et de vibrations, c’est pourquoi notre code fait de la détection de changement d’état.
Nous croisons nos données des différents capteurs afin de connaître l’état de la cafetière comme indiqué sur le schéma ci-dessous:

L’utilisation de la librairie “time” nous permet de savoir la date et l’heure réelle. Nous l’utilisons aussi pour compter la durée d’allumage de la cafetière et pour savoir depuis combien de temps la cafetière est branchée au réseau électrique. Ces valeurs multipliées aux valeurs mesurées de consommation dans ses différents états nous permet de connaître sa consommation en temps réel.

A l’aide d’un appareil permettant de mesurer les Watts par seconde, nous avons fait des tests et des courbes afin d’évaluer la consommation de la machine à café:

La programmation d’un compteur à chaque fois que quelqu’un retire le pichet nous permet de connaître le nombre de cafés servis et de créer des petites alertes (par exemple « changez filtre ») à partir d’un certain seuil dépassé.

On affiche puis on retire très rapidement notre code afin de faire le rafraîchissement des valeurs.

Voici une représentation de ce qu’affiche  l’écran après le lancement de notre programme:

5) Support

Afin de protéger les composants, nous avons dû créer un support. Pour cela, nous avons d’abord imaginé un boîtier qui suit la forme de la cafetière. Ainsi commence la modélisation de la cafetière.

Nous avons pris les mesures de la cafetière et modulé celle-ci. Par souci de moyens, nous avons décidé de changer notre fusil d’épaule et utiliser la découpeuse laser. Nous avons du refaire des plans et penser aux orifices afin de faire passer les fils et les composants et de placer l’écran de la raspberry PI sans que celui-ci ne tombe. Ci-dessous, les plans de la boîte.

Les parties noires signifient l’enlèvement de matière.

Ensuite, nous avons dû choisir la couleur de notre boîtier. Étant donné que nous avons besoin de mettre la photorésistance dans la pénombre, nous avons opté pour un noir uni sans transparence.  

Voici la face avant vue de l’intérieur de la boîte :

Pour fixer l’écran nous avons utilisé un ruban adhésif d’électricien.

Ci-dessous une image de la construction du boîtier:

Nous n’avons guerre pu finir sa construction car il nous faut encore ajuster différents capteurs. 

Bilan

Pour conclure sur notre projet, nous n’avons pas atteint tous nos objectifs principaux. En effet, il reste encore à finir l’intégration du support dans la cafetière puis régler la sensibilité des capteurs en situation réelle et enfin créer et récupérer les informations déjà acquises sur un site web. Malgré cela, la cafetière a reçu beaucoup d’améliorations depuis son état initial.  Nous avons découvert que le fait de modifier un système déjà fini en y ajoutant des améliorations est très intéressant. Nous avons réussi à tenir la plupart de nos prévisions malgré un certain retard pour cause de mauvais branchement de capteur, de programme, support ou encore dû au contexte actuel. Tout en avançant dans le projet nous avons continué à penser à de nouvelles améliorations car le projet nous a beaucoup plu et nous a permis d’apprendre et développer des connaissances portant sur notre formation GEII.

Perspectives d’évolution

Notre projet n’a pas atteint son maximum:

  • Nous pourrions piloter la cafetière à distance en enlevant la carte électronique qui pilote la cafetière et en intégrant un système de transistor piloté par la raspberry pi, elle-même pouvant être pilotée par une interface web
  • Intégrer un capteur de vibration adapté au système serait un grand avancement pour l’acquisition de nouvelles données et la précision de valeurs mesurées actuelles telles que la consommation électrique et le volume de café créé sur un temps donné.
  • La prise en compte de la consommation électrique de la raspberry pi  est intéressante car, à présent intégré au système, il fait partie de la cafetière.
  • Fixer un objectif de consommation de la cafetière sur l’interface pourrait sensibiliser ses utilisateurs et faire des économies d’énergie de manière à pouvoir exploiter ce projet dans un but d’économiser l’énergie.
  • L’ajout de nouveaux capteurs permettrait de créer plus d’informations, par exemple un capteur de niveau d’eau pourrait informer la quantité de cafés servis.
  • Une autre idée serait d’ajouter une information lorsque le pichet est retiré de la cafetière.

En utilisant un autre type de cafetière, nous pourrions pallier au problème de vibrations.

 Remerciements

Nous tenons à remercier l’IUT de Mulhouse ainsi que l’IUT LAB pour le budget et l’apport de matériels.

Également un grand merci à nos professeurs encadrants M. Bazeille et M. Verrier.


Gestion énergétique d’un système d’arrosage

 

                                 Système d’arrosage automatique

Groupe :

HARMRI Anis

BAVERA MVOU Joël

Tuteur: Stéphane BAZEILLE et Nicolas VERRIER

Sommaire :

  1. Les objectifs

  2. Matériels

  3. Programmation

  4. Consommation énergétique

  5. Conclusion

 

INTRODUCTION

 

Nous sommes deux étudiants en deuxième année GEII et avons comme projet l’amélioration d’un système d’arrosage automatique proposé par Soléa. Nous étions chargés de la partie alimentation tandis qu’un autre groupe était chargé de la partie «  intelligence ».

 

1 – Objectif du projet

A- Contexte

L’objectif du projet est d’élaborer un système d’arrosage automatisé alimenté à l’aide d’un système d’alimentation indépendant et renouvelable. Pour limiter la consommation d’énergie on devait programmer l’allumage et l’extinction du système.  Afin de mener notre projet à bien nous avions structuré notre travail de façon à accomplir ces taches-là :

Estimation de la consommation du système complet

  1. Alimentation de la raspberry sur batterie

 

  1. Mise en place du panneau solaire pour le rechargement de la batterie

 

  1. Extinction et allumage automatique de la Raspberry

 

  1. Conception CAO

B- énoncé du besoin

 

C- environnement du produit

 

le système devra résister à la température et à l’humidité ambiante . La batterie devra être à l’abri de l’humidité  pour éviter qu’elle ne s’abime. Pour ce qui est du panneau solaire il faut évidemment qu’il soit exposé entièrement au soleil pour fournir de l’énergie. NB il suffit qu’une seule cellule soit recouverte pour que le panneau ne fournisse pas d’énergie , il faut faire très attention à la position du panneau

2–Matériels

Dès le début nous disposions d’un certain nombre d’équipements à l’élaboration de notre projet :

  1. Carte Raspberry pi 3

c’est la base du projet, c’est à partir d’elle que nous avons réalisé notre profilage énergique

 

 

 

  1. Batterie en lithium

cette batterie polymère de 2000mAh a servit à alimenter la Raspberry pi ainsi que les capteurs

 

3.Un panneau solaire :

Le panneau photovoltaïque utilisé pour recharger notre batterie a une puissance de 2W et une tension de 6V

 

 

  1. Un driver  :  ce qui permet la charge décharge simultané de la batterie et maximise l’énergie produite par le panneau

 

 

 

  5  .Witty pi 2

 

elle a servit pour programmer les séquences d’allumage extinction

 

 

 

6. booster de tension

Toutefois la batterie débite une tension de 3.7 V ce qui est insuffisant devant les 5V nécessaire à l’alimentation de la raspberry pi. nous avons donc utilisé un booster de tension qui transforme les 3.7V d’entrée en 5V de sortie pour alimentation la Raspberry.

 

 

 

 

 

5 -Programmation

1.Envoi d’un mail

Dans notre cas nous n’utilisons que des adresses gmail

XXX@gmail.com est l’adresse d’envoi et YYY@gmail.com est le destinataire. Nous avons utilisé le serveur SMTP.gmail.com qui est un serveur gratuit qui nous permet d’envoyer jusqu’à 100 mails par jour

Ce code est indépendant de la configuration du serveur. Pas besoin d’installer quoi que ce soit pour que le mail puisse être envoyé, toutes les librairies nécessaires sont normalement déjà installées.

Cette fonction sera utilisé pour signaler l’ouverture et la fermeture de la vanne .

 

2.Lancement d’un script au démarrage

Pour le lancement  il suffit tout simplement de placer le chemin du script voulu dans le fichier Rc. Local tout à la fin avant  le « exit 0 ». Et le script se lancera tout seul au démarrage. Cependant dans certains  cas il faut ajouter le caractère « & »  pour éviter que le code se répète en boucle.

pour vérifier que le code se lance bien au démarrage nous avons relié une Led à notre Raspberry pi qui s’allume pour confirmer que le programme se lance bien .

A chaque fois que la Raspberry pui démarre elle envoi une impulsion pour allumer la Led

 

3.Séquence allumage/extinction

Pour cette partie nous avons utilisé une Witty Pi 2 qui est une horloge temps Réel pour Raspberry Pi. Nous avions d’abord utilisé une RTC for Pi au début mais elle nétait pas adapté car elle ne disposait pas de pin d’alarme

Après avoir connectée la Witty Pi 2 à notre Raspberry, l’installation de notre module se fait en exécutant ces lignes de codes  :

Après avoir installé le module on peut ouvrir de menu et constater que 8 possibilités s’offrent à nous

les options 1,2 et 3 servent à régler la date et l’heure. Ce qui vas nous intéresser ici sont les points 4,5 et 6.

l’option 4 sert à programmer la prochaine extinction , l’option 5 elle sert à programmer le prochain démarrage tandis que l’option 6 nous permet de choisir un script de séquence d’allumage/ extinction.

voici un exemple simple de séquence

ce script tout simple met en marche la Raspberry pi pendant 5 minutes toutes les 20 minutes

nous avons utilisé des scripts du même type

 

si les conditions d’arrosage sont bonnes on active le script de gauche :

on met en marche la raspberry pi pendant 5 min   c’est à dire le temps d’ouvrir la vanne , puis elle s’arrête pour redémarrer à 4h pendant 5 min pour fermer la vanne

si les conditions sont mauvaises :

on met en marche la raspberry et on l’arrête jusqu’au lendemain.

la commande python pour lancer le script est  :

4.Consommation énergétique

1. Recharge par panneau solaire

voici la courbe caractéristique de notre panneau solaire .

Nous pouvons constater qu’avec une luminosité maximale , nous pouvons récolter 0.038 A par cellules. Le panneau étant constitué de 12 cellules on fait le produit.
12*0.038= 0.456 A

Ainsi grâce à la relation suivante nous pouvons déterminer le temps de charge de la batterie avec un rayonnement optimal.
T = Q / I
T représente le temps en secondes
Q la quantité de charge en coulomb (1000mAh = 3600 Coulomb)
I l’intensité en ampères
Donc :
T = 7200 / 0.456 = 15789.4s   soit 4h et environ 20 minutes de temps de charge
La même formule nous servira par la suite afin de calculer notre temps de décharge avec l’ensemble des équipements nécessaire à l’élaboration du projet.

 

2.Estimation de la consommation du système

pour notre batterie de 2000mAh on a :

1 capteur de 35 mA

1 capteur de 0.15 mA

1 Raspi de 490 mA

dans la formule I = intensité en Ampères

Q= quantité de charge en Coulomb ou en Ah (1Ah = 3600 coulombs)

et t correspond au temps en secondes

calculons à présent le temps qu’il faut à notre système pour décharger la batterie.

Notre batterie peut donc tenir environ 3H48mn

 

3. Courbe de charge et de décharge

 

courbe de charge pratique

En extrapolant nous avions obtenus ces résultats en chargeant la batterie avec le panneau solaire.
Donc un temps de charge d’environ 6 heures avec l’ensoleillement présent ce jour-là. Cette courbe
nous prouve que la batterie peut bien se charger grâce au panneau solaire.

 

courbe de charge théorique 

Nous avions tracé la courbe de charge de la batterie avec le logiciel Scilab. Afin de faire une
hypothèse sur le temps que pourrait mettre la batterie à se décharger

 

 

courbe de décharge théorique

Nous faisons la même expérience en pratique en utilisant un moteur à courant continue et en
relevant la tension à plusieurs moments à l’aide d’un voltmètre.

 

 

 

courbe en pratique

 

 

 

Donc avec un moteur à courant continue la batterie se déchargeait au bout d’environ 33 minutes.
Donc en faisant cette mesure nous avons pu déterminer si la batterie fonctionnait.
Cette courbe de décharge nous l’avions réalisée en relevant plusieurs mesures au cours de la
décharge à l’aide d’un voltmètre, puis en extrapolant ces valeurs obtenus afin d’obtenir une courbe.

 

 

4. Allumage et extinction

nous avons le courant consommé pendant 10 min par notre système. Nous constatons des pics pendant l’allumage et pendant l’extinction . on a mesuré environ 82mAh

 

 

 

nous avons réalisé les mêmes mesure mais cette fois nous avons allumé et éteint 2 fois notre système pendant 3 min . on a mesuré environ 47 mAh d’où l’intérêt de faire des allumage et extinction pour économiser la batterie .

5. importance du driver

La puce MCP73871 du chargeur USB / solaire possède une fonctionnalité très astucieuse appelée « partage de charge ». Supposons que nous ayons un chargeur lipoly tous les jours et que nous souhaitions utiliser la batterie pendant la charge. Pour ce faire, nous pouvons connecter le projet directement à la sortie de la batterie. Cela signifie toutefois que le chargeur charge à la fois une batterie et pilote votre projet en même temps. il fait parfois sombre et nous ne pouvons pas utiliser de chargeur solaire. Il y a donc également un port USB sur le tableau. Nous pouvons utiliser n’importe quel câble mini-B pour brancher et charger.
Si quelque chose est connecté à la prise CC, il débranchera mécaniquement le mini-connecteur USB. Il faut donc s’assurer de débrancher le panneau solaire lors du chargement par USB.

 

                                                                                  CONCLUSION

 

Nous voudrions tout d’abord remercier Monsieur Nicolas VERRIER et Monsieur Stéphane BAZEILLE de nous avoir donné l’opportunité de réaliser ce projet et de nous avoir apporter leur aide tout au long de celui-ci. Ce projet nous a permit d’apprendre à travailler en équipe et à se repartir les taches de façon à finir le travail qui nous avait été confié.
Pour conclure, grâce à un grand travail de recherche nous avons pus élaborer un système d’arrosage automatique avec une alimentation indépendante et renouvelable.
Nous avons pus déterminer quels équipements étaient nécessaire, faire un bilan de consommation énergétique et de déterminer le moyen le plus économique d’utiliser la batterie. nous avions aussi réussi à programmer en langage python de nombreux programmes dont l’allumage et l’extinction de la raspberry pi 3. finalement nous avons réalisé une conception CAO pour stocker nos composants électroniques.
Nous pourrions également ajouter à ce projet divers point d’amélioration. Comme par exemple, installer un capteur qui mesurerai l’état de la batterie et ainsi l’envoyer par mail.
Voici une vidéo illustrant la mise en action des scripts, extinction/allumage et le rechargement de la batterie par le panneau solaire.


Système d’arrosage intelligent

PROJET ER2 : Mise en œuvre d’un système de régulation d’un arrosage automatique

Contexte :
L’entreprise Soléa a pris contact avec l’IUT de Mulhouse dans le but de commanditer un projet auprès des étudiants de deuxième année GEII :
Ils souhaiteraient que nous réalisons pour eux un système intelligent et autonome de régulation pour leur système d’arrosage automatique des pelouses sur les voies de tramway.

Pour réaliser cette commande, le travail sera divisé en deux projets : notre groupe se concentrera sur la partie “intelligence” du système, un autre groupe de nos camarades se chargera de la partie “autonomie” du système.

Matériel :
Pour mener à bien ce projet, l’IUT a mis à notre disposition le matériel suivant :

– 2 Raspberry Pi 3
– Capteurs de température, pression & humidité du sol
– Shield GrovePi+
– 2 Modules Xbee (communication sans fil longue portée)

Objectifs :
Nous devons réaliser un système de régulation pour un arrosage automatique des pelouses.
Le système devra contrôler l’arrosage en fonction de plusieurs paramètres : température, humidité du sol, la pression atmosphérique.

Notre système doit pouvoir se raccorder par dessus le système déjà existant en station.
Pour ce faire, nous allons devoir faire communiquer sur une longue distance un Raspberry Pi de mesure situé a coté de l’électrovanne, et un Raspberry Pi de contrôle se situant en station.
On souhaite aussi pouvoir présenter une analyse statistique à l’utilisateur.

 

Tout d’abord, nous avons commencé par tester nos capteurs :
Après avoir écrit des petits programmes simples, nous avons pu relever des valeurs sur nos capteurs.

Toutefois, certains capteurs n’étaient pas compatibles avec un Raspberry Pi 3 : En effet, le quartz régulant la fréquence de synchronisation des capteurs sur les Pi 2 sert a la communication BlueTooth sur les Pi 3 ; les Raspberry Pi 3 ne sont donc pas compatibles avec les protocoles de communication synchrone.
Seuls les capteurs se connectant sur les ports I2C fonctionnent : le protocole I2C est asynchrone et utilise des acquittement et des handshakes.

Ensuite, nous avons assemblé ces codes simples permettant de relever les valeurs de chaque capteurs, pour obtenir un code capable de relever les valeurs de chaque capteur, l’un après l’autre, puis de les enregistrer dans un fichier texte à fin de les traiter puis de les transmettre par la suite à la Raspberry Pi réceptrice.

Nous avons tout d’abord établi une communication sur le réseau Ethernet local de l’UHA entre nos deux Raspberry Pi.
Nous avons opté pour le protocole TFTP car il était simple d’utilisation et répondait à nos besoins

Après avoir réussi à récupérer les valeurs de nos capteurs sur la Raspberry Pi réceptrice et à contrôler l’allumage d’une LED (représentant l’électrovanne) en fonction des valeurs reçues, nous nous sommes attelés à réaliser la communication sans fil à l’aide des modules Xbee.

Nous avons alors opté de moyenner nos mesures sur une période d’une dizaine de mesures avant de les émettre, la transmission textuelle des donnée n’étant pas instantanée.
Après, nous avons ajouté à notre code de réception l’écriture des données reçues dans un fichier Excel dans le but de permettre une analyse statistique par l’utilisateur.

Voici l’un des graphiques que nous avons pu obtenir en changeant d’environment le capteur d’humidité du sol.
On constate un pic anormal pour les valeurs d’humidité  « Moisture » : celui ci correspond à une erreur de transmission.
On voit aussi des intervalles ou il n’y a pas de mesures enregistrées : ces intervalles correspondent à une perte de la communication.

Ici, on peut voir à gauche le ficher .txt dans lequel les valeurs brutes relevées sont stockées, et à droite, les valeurs traitées apparaitre dans la console de Raspberry Pi réceptrice.

Enfin, voici les algorigrammes de nos codes émetteurs et récepteurs :

 

 

 

 

 

 

 

 

 

 

 

 

 


Vidéo de démonstration :

Conclusion :
Nous estimons avoir bel et bien montré la faisabilité d’un tel système.
L’un de nos camarades qui viendra à réaliser son stage de fin d’études au sien de l’entreprise Soléa pourrait bien devoir approfondir sur ce projet et le mettre en place en conditions réelles.

 


Supervision d’un four à tabac

 

Tuteur: Stéphane BAZEILLE et Nicolas VERRIER

 

Groupe: Florian BRAUN, Noah BEAUPERE et Hugo TISSOT

 


 

Sommaire

Cahier des charges

1. Présentation générale du problème

1.1. Projet

1.2. Contexte

1.3. Énoncé du besoin

1.4. Environnement du produit

2. Expression fonctionnelle du besoin

 

Gestion et réalisation du projet

1. Simulation des capteurs

A) Générateur de fonctions arbitraires

              a) Analyse du système des valeurs recherchés
              b) Création de la fonction arbitraire
              c) Le générateur

B) Convertisseur Analogique Numérique

            a) Branchement
            b) Configuration
            c) Code

C) Avertissement visuel

            a) Branchement
            b) code

 

2. Programmation du RaspberryPI

A) Récupération des données

B) Communiquer entre les RaspberryPi

C) Analyse et utilisation des données

D) Envoie des données au serveurs

 

3. Stockage et Interprétation des Données

A) Récolte et Stockage

              a) Étude de marché
              b) Architecture

B) Accès à Distance et Interprétation

 

 

 

 

 


Cahier des charges

1.Présentation générale du produit

1.1. Projet

Le but du projet est de collecter les données de température sur chacun des fours à tabac d’une exploitation, les envoyer sur un serveur accessible depuis un smartphone ou autre pour permettre de visualiser et comparer facilement les données instantanées. Une alarme sera également créée, en cas de fort dépassement des valeurs attendues ou de problèmes matériels et l’utilisateur sera averti.

1.2. Contexte

Lors du processus de séchage du tabac, le séchage des feuilles doit passer par différents cycles avec différentes température et humidité afin d’extraire efficacement toute l’humidité. Ces cycles de séchage durent, au total, une semaine avec des fours continuellement allumés. Si un four vient à tomber en panne ou subi une anomalie durant le processus et qu’il n’y a pas de surveillance, (la nuit par exemple) les dégâts et la perte de la récolte peuvent se chiffrer en milliers d’euros.

1.3. Énonce du besoin

1.4. Environnement du produit

Le dispositif final doit pouvoir directement se connecter aux capteurs des fours et doit répondre à un minimum de contraintes environnementales:

  • résister à une température minimum de 90°C
  • résister à l’humidité ambiante

Liste du matériel:

  • 2 Raspberry Pi
  • Générateur de tension (fonction arbitraire)
  • Oscilloscope
  • CAN
  • Afficheur 7-seg
  • Relais wifi

On estime le coup total à 158€, étant donner que l’oscilloscope et le Générateur nous on été prêté.

 

2.Expression fonctionnelle du besoin

Tableau des Fonctions

Fonction Désignation Critères d’appréciations Niveau Flexibilité Observations

Limite d’accep-

tation

  

     FP1

Permettre à l’utilisateur de consulter l’état des fours en temps réel

– visualiser sur un smartphone

– comparer les valeurs attendues et réelles

/ / /
FP2 Avertir l’utilisateur en cas de dysfonctionnement d’un four

– envoyer une notification ou mettre en place une alarme sur le smartphone

– mettre en place un avertisseur visuel

état des alarmes récoltées toutes les 15 minutes / fréquence d’acquisition de 30s pour la simulation

 

FS1

Récolter les données des fours – récolter les données de température et d’humidité avec les Raspberry PI données récoltées toutes les 15 minutes / fréquence d’acquisition de 30s pour la simulation
 FS2 Détecter un dysfonctionnement

– etre capable de détecter un écart de température trop grand

– réguler la température

15minutes / régulation de la température uniquement dans la simulation
FS3 Être alimenté en énergie – branchement secteur / / /
FS4 Résister aux agressions du milieu ambiant

– résister à une haute température

– résister à l’humidité ambiante

90°C + ou- 5°C /
FS5 Communiquer entre les Raspberry PI et le serveur

– communiquer entre la raspberry et le serveur internet

– communiquer entre les deux raspberry PI

/ / /
FS6 Respecter le budget du client -Coût final accessible 500€ + ou – 100€ /

 

 


 

Gestion et réalisation du projet

1. Simulation des capteurs

A) Générateur de fonctions arbitraires

(Tissot)

                a) Analyse du système des valeurs recherchés

On sait que les différents four à tabac possède déjà leurs propres capteurs de températures,n’ayant pas la références de ces capteur, on choisit comme référence un capteur qui correspond le plus nos besoins.

Ici on choisit donc comme référence un thermomètre à sortie analogique “THERMOSA”, avec les caractéristiques suivantes:

  • Gamme de température : -20 à +120 °C
  • Sortie analogique : Tension proportionnelle à la température -2,5 V (-20 °C) à +2,5 V (+120 °C)

On a donc 140°C sur une tension d’amplitude 5V, 1°C correspond à 0.035V.

Pour des raison pratique lié à la simulation, on affirme que 0°C correspond à une tension 0V.

 

On a pour but de créer une fonction capable de reproduire le cycle du séchage du tabac (voir courbe si-dessous).

 

La fonction devra donc obligatoirement passer par tous ces points.

On va donc avoir:

  • 1°C correspond à 0.035V
  • 20s dans la simulation correspond à 1h

On établit donc les points principaux de la fonction:

température (c°) temps simulation (s) tension de sortie (V)
32 0 1,12
40 160 1,4
40 960 1,4
57 1300 1,995
57 2400 1,995
73 2720 2,555
73 3110 2,555
40 3120 1,4
40 3280 1,4

 

                  b) Création de la fonction arbitraire

Afin de créer cette fonction, on a besoin de générer un fichier de points (CSV File). Pour le générer il existe de nombreuses solutions, ici nous allons utiliser le logiciel gratuit EasyWawe.

 

 

Pour cela, après avoir installé ce logiciel, exécutez le.

 

Une fenêtre va s’ouvrir, cliquez sur “File” puis “New”.

 

La fenêtre “Property setting” s’ouvre, dans la case “Sample” vous pouvez sélectionner le maximum de points pour avoir la meilleur précision.

 

Sélectionnez ensuite une période de 3280s, puis cliquez sur “Ok”.

 

La fenêtre “Wawe1” s’ouvre, cliquez sur “Draw” puis “Coordinate Draw”.

 

Indiquez le nombres de points nécessaire, ici “9”, et sélectionnez ensuite “Table”.

 

Rentrez ensuite les coordonnées des différents points. (ATTENTION Xpos est en kiloseconde et non en seconde).

temps simulation (s) tension de sortie (V)
0 1,12
160 1,4
960 1,4
1300 1,995
2400 1,995
2720 2,555
3110 2,555
3120 1,4
3280 1,4

 

Une fois tous les points entrés cliquez sur “Ok” et votre fonctions va être générer.

Il ne vous reste plus qu’à enregistrer en “.csv”, et vous avez votre fichier de points.

 

 

            c) Le générateur

Concernant le générateur, nous utilisons le générateur de fonctions arbitraire hameg hmf2525. Celui-ci est très pratique car il permet d’obtenir des période très longue et possède un port USB. On va donc utiliser ce port afin d’y transférer le fichier CSV précédemment créé (munissez vous de la notice de générateur si vous ne connaissez pas son fonctionnement).

Chargez le fichier

 

Réglez ensuite la période à 3280s, l’amplitude à 2.555V et l’offset à 1.25V afin que la tension de sortie corresponde à la tension souhaiter précédemment.

Il ne faut pas hésiter à utiliser un oscilloscope pour mieux visualiser la courbe.

 

 

B) Convertisseur Analogique Numérique

(Tissot)

Le CAN (Convertisseur Analogique Numérique) va nous servir à convertire la tension analogique du générateur, afin de pouvoir l’analyser sur le Raspberry PI. Le CAN possède deux entrées, on va donc y rajouter un potentiomètre pour simuler un second four.

Nous utilisons le CAN MCP 3002:

 

 

 

                a)Branchement

A l’aide d’une Breadboard, on va connecter la sortie du générateur et le potentiomètre au CAN, et le CAN au Raspberry PI comme ci dessous:

                    b) Configuration

Il faut configurer votre Raspberry PI pour utiliser le CAN.

Il faut tout d’abord vérifier que le SPI est activer.

Ouvrez un terminal et lancez la commande suivante :

sudo raspi-config

Sélectionnez « Advanced Options » puis validez :

Puis sélectionnez « SPI » puis validez :

Une fois cela fait, exécuter les commande suivante dans le terminal:

sudo apt-get install python2.7-dev

sudo apt-get install python3-dev

sudo apt-get libevent-dev

sudo pip install spidev

 

 

 

                      c) Code

#!/usr/bin/python

import time    

import spidev

DEBUG = 0

 

spi = spidev.SpiDev()

spi.open(0,0)

   

# read SPI data from MCP3002 chip

def get_adc(channel):

          # Only 2 channels 0 and 1 else return -1

          if ((channel > 1) or (channel < 0)):

                    return -1

           r = spi.xfer2([1,(2+channel)<<6,0])

           ret = ((r[1]&31) << 6) + (r[2] >> 2)

          return ret   

while 1:   

          print (get_adc(1))

         Tension = (get_adc(1)*2.7)/1024

         print (Tension)

        time.sleep(5)

 

 

Dans ce code on va créer une fonction “get_adc(channel)” qui va nous permettre de sélectionner l’entré du CAN et d’y lire la valeur. Si “channel” est différent de 0 ou 1 on retourne -1.

La valeur reçu est entre 0 et 1023, on procède alors à un calcul pour que cette valeur corresponde à une tension.

 

C) Avertissement visuel

(Tissot/Braun)

Le but est d’avertir visuellement l’utilisateur à l’aide d’un afficheur 7 segments.Il va alors pouvoir savoir sur quel four une alarme s’est déclenchée, cela peut être dû à un écart de température ou un problème matériel.

                 a) Branchement

 

Pour procéder correctement au branchement il nous faut un afficheur 7 segment et 7 résistances de 240 . Un segment va alors correspondre à un pin du Raspberry PI, il  suffit de suivre le schéma ci-dessous

Pour ma part, j’ai connecter:

  • le segment A au PIN11
  • le segment B au PIN12
  • le segment C au PIN13
  • le segment D au PIN22
  • le segment E au PIN18
  • le segment F au PIN16
  • le segment G au PIN15

 

             b) code


#librairies à importer

import time

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)# On supprime les avertissements inutiles

seg={« A » : 11, « B » : 12, « C » : 13, « D » : 22, « E » : 18, « F » : 16, « G » : 15} #on indique quel segment est sur quel PIN

#fonction d’affichage

def display(x) :

GPIO.output(seg[‘A’], x in [1,4])

GPIO.output(seg[‘B’], x in [5,6])

GPIO.output(seg[‘C’], x in [2])

GPIO.output(seg[‘D’], x in [1,4,7])

GPIO.output(seg[‘E’], x in [1,3,4,5,7,9])

GPIO.output(seg[‘F’], x in [1,2,3,7])

GPIO.output(seg[‘G’], x in [0,1,7])

La fonction display va permettre de choisir quelle pin il faut allumer en fonction du nombre x. L’afficheur 7 segment étant en logique inverse on indique les nombres pour lesquels chaque segment ne doit pas s’allumer.

On intègrera donc la fonction display dans le code final.

 


2. Programmation du Raspberry PI

(Braun)

A) Récupération des données

import cantest2 #cantest2 est le programme du Convertisseur Analogique-Numérique.
Il me permet de récupérer les données à l’aide d’une fonction


def RecupTfour(Nfour) :
Tfour[Nfour] = ((cantest2.get_adc(0)*3.35)/1024)/k

Cette fonction va récupérer la température du four (Tfour), d’un four précis choisi (Nfour), il converti également la tension que le programme cantest2 me donne en une température lisible.

 

B) Communiquer entre les RaspberryPI

La communication entre les Raspberry Pi est gérée par un serveur MySQL, celui-ci sera gérer sur le Raspberry maître et l’esclave lui enverra ses données. Il faut d’abord initialiser la connexion avec MySQL :


os.system ("sudo service mysql restart")
mydb = mysql.connector.connect(  host = '192.168.xxx.xxx',
user = 'FAT',
passwd = '****',
database = 'FAT')

Cette fonctionnalité est faite par une fonction qui enverra chaque valeur au serveur qu’il pourra par la suite gérer

 

C) Analyse et utilisation des données

L’analyse des données de se fait four par four, chaque seconde.
La première étape dans l’analyse d’un four est l’initialisation de celui-ci. Pour cela, on considère que le four s’allume quand on détecte une température entre 31 et 33 °C.


 def InitialisationFour(Nfour) :
              if (Tfour[Nfour]>=31) and (cycle_start[Nfour]==0) and (Tfour[Nfour]<=33) :
                           temps_depart[Nfour] = time.time()
                           cycle_start[Nfour] = 1

A partir de ce moment, on active un timer (temps_depart) pour savoir depuis quand ce four est allumé.
Une fois le four allumé, il faut calculer la température attendue : le tabac doit sécher pendant une semaine à des paliers de température différents.


def CourbeAttendu(Nfour) :

              if (time.time()-temps_depart[Nfour]<=16) :
                          Tatt[Nfour]=32+(time.time()-temps_depart[Nfour])*0.5

              if (time.time()-temps_depart[Nfour]>16) and (time.time()-temps_depart[Nfour]<=96) : #palier 40
                         Tatt[Nfour]=40

              if (time.time()-temps_depart[Nfour]>96) and (time.time()-temps_depart[Nfour]<=130) : #montée 40-57
                         Tatt[Nfour]=40+(time.time()-temps_depart[Nfour]-96)*0.5

              if (time.time()-temps_depart[Nfour]>130) and (time.time()-temps_depart[Nfour]<=240) : #palier 57
                         Tatt[Nfour]=57

              if (time.time()-temps_depart[Nfour]>240) and (time.time()-temps_depart[Nfour]<=272) : #montée 57-73
                         Tatt[Nfour]=57+(time.time()-temps_depart[Nfour]-240)*0.5

              if (time.time()-temps_depart[Nfour]>272) and (time.time()-temps_depart[Nfour]<=312) : #palier 73
                         Tatt[Nfour]=73

              if (time.time()-temps_depart[Nfour]>312) and (time.time()-temps_depart[Nfour]<=328) : #palier 40
                         Tatt[Nfour]=40

              if (time.time()-temps_depart[Nfour]>328) :
                         Tatt[Nfour]=0
                         cycle_start[Nfour]=0
                         temps_depart[Nfour]=0

On peut voir ici que l’on a des conditions pour savoir à quel palier le four devrait se trouver.
Suivant ce palier, on définit un Tatt qui est la température théorique que le four devrait avoir à cet instant précis. Puis à la fin, quand le four a fini son cycle, on remet l’état du four (Cycle_start) à 0 pour qu’il soit considéré comme éteint et on reset son timer.


def Alarme(Nfour) :

              if (abs(Tatt[Nfour]-Tfour[Nfour])<3) :
                         temps_ecart[Nfour] = time.time()-temps_depart[Nfour]
                         alarme_ecart[Nfour] = 0
                         display(10)
             if ((time.time()-temps_depart[Nfour])-temps_ecart[Nfour]>5) :
                        #print(« ecart de temperature de plus de 5s »);
                        alarme_ecart[Nfour] = 1
                        display(Nfour)

A coté de cela, il y a une fonction alarme qui compare l’écart entre la température théorique (Tatt) et la température actuelle du four (Tfour) et actionne une alarme si cet écart dure dans le temps (5 secondes).

 

D) Envoie des données au serveurs

Une fois l’analyse des données terminée, il faut envoyer celles-ci au serveur.


def Ecriture(Nfour) :
              if (temps_different[Nfour]!=int(time.time()-temps_depart[Nfour])) :
                        date = datetime.datetime.now()
                        sql = "INSERT INTO Four_" + str(Nfour) + " VALUE (null, %s, %s, %s, %s)"
                        cur.execute(sql, (str(date), str(Tfour[i]), str(defaut[i]), str(alarme_ecart[i])))
                        mydb.commit()
                        temps_different[Nfour]=int(time.time()-temps_depart[Nfour])
                        print("four ={}, time= {}, Tatt={}, Tfour= {}, Alarme ={}".format(Nfour, int(time.time()-temps_depart[Nfour]), int(Tatt[Nfour]), int(Tfour[Nfour]),alarme_ecart[Nfour]))

Cette fonction s’occupe d’envoyer chaque donnée de chaque four au serveur et cela chaque seconde.

 


3. Stockage et Interprétation des Données

A) Récolte et Stockage

(Beaupere)

              a) Étude de marché

Avant de commencer à coder, nous avons effectué une étude de marché pour connaitre la solution technique la plus fiable, simple et peu coûteuse sur le long-terme afin de ne pas compliquer la tâche de l’utilisateur avec des maintenances ou des actions pénibles ou excessives hors de son domaine de confort.

  • Première idée : Tirer des câbles entre les capteurs et le serveur

Les câbles résistants à une utilisation extérieure sont chers et devraient être remplacés ou réparés au minimum annuellement si ce n’est plus. Un seul défaut dans le câble et toutes les données reçues jusqu’à la réparation seront inutilisables.

  • Deuxième idée : Connecter les capteurs à un micro-ordinateur possédant une liaison GSM

Il existe des services tout prêt permettant ce genre de prouesse mais malheureusement ces services sont dimensionnés pour des cas ayant plusieurs machines à superviser (comme une industrie) et serait donc un coût beaucoup trop élevé pour notre cas particulier.

  • Troisième idée : Étendre le réseau Wi-Fi jusqu’aux fours à tabac grâce à des répéteurs

Contrairement aux 2 autres solutions celle-ci n’implique qu’une simple vérification logicielle et physique des relais afin de s’assurer de leur bon fonctionnement, et dans le cas échéant le remplacement du matériel. Les facteurs d’erreurs potentielles seront les intempéries puissantes.

La solution finale a donc été le choix de la troisième idée : Étendre le réseau Wi-Fi et donc connecter 2 Raspberry Pi entre elles via le SGBD (Système de Gestion de Base de Données) MySQL.

              b) Architecture

Pour plus de clarté voici un schéma des différentes connexions :

Les 2 RaspBerry Pi sont reliées entre elles via le Wi-fi. L’un occupe la fonction de serveur MySQL et donc stockera les données ainsi que le site Web et l’autre sera la client MySQL.

Le tabaculteur accède aux données depuis son ordinateur (ou son smartphone) seulement si il est connecté en Wi-Fi.

Et voici également un schéma du trafic de données :

Chaque RaspBerry Pi possède un identifiant pour se connecter à la base de données, ainsi que le Site Web qui utilise un autre identifiant afin d’éviter des modifications non voulues.

Toutes les secondes, les données sont transmises à la base de données, 1 table pour chaque four. Une fois en situation réel, on pourra espacer la transmission des données (jusqu’à 15 minutes) vu que le processus complet dure une semaine et qu’une erreur de température n’est fatale qu’après 1 ou 2 heures.

B) Accès à Distance et Interprétation

(Beaupere)

Sur le RaspBerry Pi Serveur, nous avons codé une page a l’aide des langages de programmation Html5, CSS et PHP. Il a été pensé comme une application Web pour simplifier sa compréhension et son utilisation par le tabaculteur. Le résultat est le suivant :

Page d’accueil pour accéder aux dernières mise à jour des fours, ainsi qu’une ‘‘Led’’ de couleur verte ou rouge pour les alarmes de température ou de défaut matériel.

Page détaillé d’un four pour suivre l’avancement sur le cycle hebdomadaire. En bleu, le cycle idéal et en noir, qui apparaîtra au fur et à mesure du cycle, nous verrons le cycle actuel.

 

Vidéo de présentation


Remerciements

Merci à nos professeurs référents M. BAZEILLE et M. VERRIER et l’IUT.Lab pour le matériel.


Table tactile « FTIR »

Table Interactive

 

 Giudilli – Merimeche – Vessot – Binder

 

 

 

 


SOMMAIRE

 

  1. Phase d’étude
    1. Présentation du projet
    2. Matériel en possession
    3. Répartition des tâches
    4. Recherche de matériel
    5. Conception du prototype
    6. Conception de la table
  2. Phase prototypage
    1. Réalisation du prototype
    2. Polissage du polycarbonate
    3. Connections des LEDs avec des fils
    4. Connections des LEDs avec des PCB
    5. Fabrication de la surface de couplage
    6. Assemblage
  3. Phase réalisation
    1. Réalisation de la table
    2. Soudure des LEDs
    3. Programmation
    4. Jeux
    5. Démonstration
    6. Améliorations possibles

 

 


Introduction

 

Lors de notre deuxième année de DUT GEII, nous avons proposé nous-même un projet à nos professeurs. C’est ainsi que nous avons choisi de travailler sur la conception et la création d’une table interactive. Il s’agit d’une table dotée d’un écran tactile et qui peut être utilisée de différentes situations, comme lors de réunions ou simplement pour se divertir, dessiner ou jouer.

Nous tenons à remercier Messieurs Verrier et Bazeille, nos professeurs, qui nous ont encadré lors de ce projet et sans qui il n’aurait pas été possible.

 


1. Phase d’étude

   1. Présentation du projet

 

Notre table tactile est basée sur une technologie nommée “FTIR” (Frustrated Internal Reflection).  Pour mettre en place un tel écran, il faut d’abord une plaque translucide entourée de leds infrarouges.  Cette plaque servira de support aux rayonnements infrarouges des leds qui se dispersent de manière uniforme dans ce support.

Lorsqu’un doigt est posé sur la surface, nous modifions le comportement de la lumière infrarouge dans la plaque. Une partie de cette lumière est alors déviée vers le sol et grâce à une caméra infrarouge, nous pouvons repérer cette modification sous la forme de “blobs”.

En traitant les images reçues de la caméra, nous pouvons déterminer à quel endroit simuler un clic de souris sur l’ordinateur.

Le choix de cette méthode dite “FTIR” est intéressant car nous pouvons utiliser un vidéoprojecteur pour afficher l’écran de l’ordinateur. En effet le vidéoprojecteur émet de la lumière visible et ne perturbe donc pas notre système infrarouge.

Cependant afin de pouvoir projeter sur l’écran (qui est entièrement transparent), il faut rajouter une surface de couplage légèrement opaque. Cette surface de projection, comme visible sur le schéma, permet aussi d’améliorer la réflection de la lumière infrarouge lorsque nous touchons l’écran.

   2. Matériel en possession

 

Pour réaliser notre projet l’IUT nous a prêté un vidéo projecteur et un Raspberry Pi 3 pour réaliser le traitement d’image et la programmation de la détection de blob et le tracking.

   3. Répartition des tâches

 

Nous nous sommes réparti les tâches afin que tout le monde puisse contribuer au projet. Nous avons tous réalisé de la surface de couplage. M. Merimeche a fait la conception et la réalisation de la table, il a fait la recherche des caméras que nous pouvons modifier afin de lui enlever son filtre infrarouge. M. Vessot s’est occupé de la recherche des composants pour l’écran, a réalisé le schéma électrique et le soudage des LED.  M. Giudilli s’est occupé surtout de la programmation et du polissage du polycarbonate du prototype. M. Binder s’est occupé de l’organisation du projet et du polissage du polycarbonate de la table. Quand une personne avait fini sa tâche, il en aidait une autre afin d’aller plus vite.

   4. Recherche de matériel

 

Il nous a fallu rechercher un écran transparent, nous pensions à une plaque de plastique. Après de nombreuses recherches, nous avons opté pour un écran en polycarbonate.

Nous avons dû ensuite chercher une webcam sur laquelle le filtre infrarouge est facile à enlever, nous avons retenu quelques modèles :

  • Sony Playstation Eye Camera
  • Philips SPC900NC
  • Logitech QuickCam Express
  • Microsoft LifeCam VX-1000

Nous avons finalement choisi la Sony Playstation Eye Camera car elle était plus facile à obtenir et dans un délai rapide. Cependant après certains tests, nous avons tout de même changer l’objectif de cette caméra pour mieux détecter les infrarouges et supprimer le visible.

   5. Conception du prototype

 

Il nous a fallu d’abord concevoir un prototype avant de commencer la table tactile. Ce prototype a d’abord été modélisé en 3D sur le logiciel Fusion 360. De dimension raisonnable (40*20*20 cm), il permettait d’être transporté facilement et de simuler correctement le comportement d’une table tactile grandeur nature.

   Le prototype modélisé sur Fusion360

 

La fente supérieure permet d’accueillir une plaque de polycarbonate de 10x20cm avec sa surface de couplage ainsi que les leds infrarouges qui l’entourent. Ce prototype intègre une partie amovible à l’avant (en rouge) pour faciliter l’installation de la caméra sous l’écran.

Nous avons choisi de maintenir les leds autours de l’écran en utilisant des profilés en aluminium

   6. Conception de la table

 

Après des essais concluant sur le prototype, nous avons modélisé notre table tactile en 3D. Ce modèle nous a permis de quantifier le matériel nécessaire (bois et visserie). Nous nous sommes inspirés de différents modèles de tables et d’établis pour concevoir une table solide et non bancale.


2. Phase prototypage

   1. Réalisation du prototype

 

Le prototype a été réalisé à la découpe laser selon le modèle vu précédemment. Voici son apparence une fois les différentes pièces montées.

   2. Polissage du polycarbonate

 

La lumière ne passait pas bien dans la plaque de polycarbonate. De ce fait, nous avons dû la polir à l’aide du papier à poncer, du fil de fer et une dremel.

   3. Connection des LEDs avec des fils

 

Nous avons choisi d’utiliser une alimentation d’ordinateur pour alimenter nos leds. Cette alimentation à une tension de 3.3 V à ses bornes et est capable de délivrer jusqu’à 33A. Ainsi, nous avons dimensionné nos résistances sur 18 Ω pour que nos leds puissent bénéficier d’un courant optimal. Toutes les leds étaient placées en parallèle.

Voici le schéma électrique :

 

Dans un premier temps, nous avons voulu connecter les LEDs avec des fils sur le prototype, cependant il s’est avéré que cette connection n’était pas adaptée pour ce prototype.

Ils y auraient eu trop de fils, l’isolation aurait été très compliqué à réaliser sur l’ensemble du prototype qui comportait déjà 15 LEDs. Nous avion donc un problème au niveau de l’espace que nous avions pour les fils et aussi de l’isolation du système. Nous avons donc cherché une autre méthode qui résolvait ces deux problèmes.

 

   4. Connection des LEDs avec des PCB

 

Afin de pallier aux problèmes de dimension et d’isolation du schéma électronique, nous avons opté pour une méthode de connections avec PCB. Cette méthode nous permet en effet de gagner beaucoup de place dans le prototype car la soudure des LEDs est faite sur le PCB à des petits fils. Cela a donc permis un gain de place important, pour résoudre le problème de l’isolation, le PCB en lui-même était déjà bien adapté pour isoler le système électronique, mais nous avon rajouté par-dessus de la colle qui permettait d’isoler les parties un peu plus vulnérable que le PCB ne pouvait pas protéger.

Nous avons donc vu que ce système est très pratique pour un schéma électronique de petite taille et avec un courant peu élevé (jusqu’à 1,5A). Cependant pour un schéma électronique plus grand, le choix des PCB aurait été trop coûteux, nous avons donc dû chercher une autre méthode pour la table.

   5. Fabrication de la surface de couplage

 

La surface de couplage à deux fonctions : elle sert à afficher l’écran via le vidéoprojecteur et à mieux détecter les doigts. Elle a été créée à partir d’une feuille de papier calque (ayant les mêmes dimensions que la plaque de polycarbonate) qui a été enduit d’un mélange de silicone et de diluant.

   6. Assemblage

 

Nous avons installé les différentes composantes du prototype vues dans les parties précédentes sur la maquette.


3. Phase réalisation

   1. Réalisation de la table

 

Une fois la commande de bois reçue, nous avons découpé les planches et les chevrons en se basant sur la modélisation 3D pour les dimensions. Nous les avons ensuite assemblés.

Une fois la table montée nous avons installé la plaque de polycarbonate par-dessus. Ensuite, nous avons rajouté autour de l’écran les profilés U avec les leds et la surface de couplage a été posée par-dessus.

   2. Soudure des LEDs

La solution que nous avons choisie pour connecter les leds entre elles sur la table est de modéliser nos propres PCB en bois et de les fabriquer avec la découpe laser.

    PCB en bois modélisé en 3D

 

   Soudure des leds

 

   3. Programmation

 

Traitement flux d’entrée : Pour repérer uniquement les changements effectué sur l’image d’entrée nous soustrayons l’image acquise par une première image prise lorsqu’il n’y a aucun doigt de posé. Ensuite nous appliquons différents filtres pour supprimer le bruit de fond dû à la caméra.

 

Détection des blobs : Comme nous l’avons vu précédemment, notre système infrarouge permet de repérer les doigts posés sur l’écran sous la forme de “blobs”.

 

Tracking : La détection de blob nous permet d’avoir un tableau de coordonnées représentant les différentes positions de chaque blob. Pour identifier ces derniers et les différencier un algorithme de proche en proche programmé par nos soins est utilisé ainsi chaque blob se voit donner un ID unique nous permettant de le différencier.

 

Calibrage : La webcam étant en train de filmer avec un grand angle, il fallait donc lui donner à travers le programme les dimensions de l’écran. Aussi, cette caméra n’étant pas totalement droite par rapport à l’écran, l’image reçue n’était pas 100% rectangulaire. Pour cela notre programme intègre une partie de calibrage. Il faut lui donner 4 positions sous la forme de blobs (en posant nos doigts) aux 4 coins de l’écran. Ainsi le programme en traitant ces données récupère les dimensions de l’écran et est capable de le redresser sous la forme d’un rectangle.

Interface et application : Les différentes parties du programme ont été regroupées sous une même interface.

 

   4. Jeux

 

Nous avons aussi programmé quelques applications qui ont été optimisées pour la table. Elles ont été programmées en C++ et à l’aide de la librairie SFML.

“Paint” : Notre Paint reprend les bases du Paint sur ordinateur et on peut être plusieurs à l’utiliser en même temps.

 

“Hanoï” : Notre jeu des tours de Hanoï reprend les règles classiques du jeu pour 3 disques, il faudra donc utiliser le tactile afin de les déplacer.

 

“Pong” : Ce jeu n’a pas encore été implémenté sur la table et nécessite 2 joueurs. Son amélioration et installation pourrait faire l’objet d’un projet futur.

 

   5. Démonstration

 

 

   6.Améliorations possibles

 

Des améliorations peuvent encore être réalisées sur notre table tactile. En voici certaines :

  • Adapter les jeux Hanoï et Pong sur la table
  • Soigner son esthétique (ponçage, peinture ..)
  • Investir dans une caméra de meilleure qualité (avec un plus grand nombre d’image par seconde notamment)
  • Porter les programmes sur un ordinateur plus puissant et l’intégrer dans la table
  • Réaliser l’alimentation des leds

 


Puissance 4 vs. Bras robot

 


 

HEBINGER Pierre   –   ECKLER Louis

 


SOMMAIRE

 

I. Préparation

  • Contexte et principe
  • Matériel et logiciel
  • Bête à cornes
  • Diagramme Pieuvre

II. Programmation P4

  • Format du code
  • Création de la logique et structure du jeu
  • Mode PvP
  • Création d’une IA
  • Ajout d’intelligence pour l’IA
  • IA logique
  • IA prédictive
  • Interface utilisateur
  • Visuelle
  • Tactile
  • Assemblage du programme (Main)

III. Bras robotisé

  • Programme embarqué sur le robot
  • Communication
  • CAO

IV. Conclusion et remerciements

 

V. Notice et Code

 

I. Préparation

Contexte et principe

 

Le but de ce projet est de créer un programme permettant à une personne d’affronter soit une personne soit une intelligence artificielle via un écran connecté à une Raspberry Pi. L’intelligence artificielle aura plusieurs niveaux de difficultés. Par la suite, il a été convenu de faire en sorte que la partie se joue sur un vrai puissance 4, avec un bras robotisé qui effectue les mouvements pour le joueur et l’intelligence artificielle.

 

Le programme devra s’exécuter sur une Raspberry Pi, c’est pourquoi notre code sera en Python. L’interface devra être également tactile, ce qui nous amène à prendre du matériel spécifique.

 

Matériel et logiciel

 

Pour le matériel, il faudra:

  • une Raspberry Pi 3
  • un écran tactile LCD 7″ Raspberry Pi Officiel
  • un bras robotisé Staübli TX40 avec une pince

 

On utilisera également comme logiciel:

  • Python IDLE
  • Staübli Robotics Suite

 

Bête à cornes

Au niveau de la bête à cornes, on aura quelque chose de plutôt simple:

 

Bête à cornes

Traduction: Grâce au programme “Puissance 4”, on rend service au joueur en le divertissant.

 

Diagramme Pieuvre

 

Pour le diagramme pieuvre, on a deux fonctions principales et six fonctions contraintes:

Diagramme Pieuvre

Fonctions principales:

  • FP1: L’information venant du programme puissance 4 devra être accessible à l’utilisateur
  • FP2: L’information devra être livrée de façon ergonomique afin d’être comprise

 

Fonctions contraintes:

  • FC1: Le projet puissance 4 devra être utilisable par un utilisateur quelconque
  • FC2: Le projet devra fournir des informations de jeu
  • FC3: Le projet devra être ergonomique lors de son utilisation
  • FC4: Le projet sera exécuté sur une Raspberry Pi en continu
  • FC5: Le projet doit être adapté à son environnement, c’est-à-dire en dans une pièce
  • FC6: Le projet ne devra pas excéder un certain coût

 

Solutions face aux contraintes:

  • FC1: L’utilisateur pourra exécuter et utiliser le programme via l’écran
  • FC2: Les informations seront affichées sur l’écran via des images (jeu sur écran) ou via du texte (jeu avec le robot)
  • FC3: Le joueur pourra sélectionner avec l’écran tactile la colonne de son choix
  • FC4: La Raspberry Pi sera alimenté sur secteur
  • FC5: Aucune protection à l’environnement n’est nécessaire du fait que le projet est utilisé en intérieur
  • FC6: Le matériel étant déjà disponible, le coût du projet est nul

 

II. Programmation P4

Format du code

 

Nous avons choisi d’utiliser majoritairement de l’anglais afin d’éviter les accents qui ne font pas partie des caractères utilisables dans les noms de fonction.

Pour les noms de fonction nous avons utilisé le préfixe “is” ou “has” pour les fonctions retournant une valeur booléenne. Puis nous avons utilisé “get” et “set” pour les fonctions retournant ou modifiant l’état d’une variable.

 

exemples:

De plus nous avons essayé de respecter autant que possible la règle disant qu’une fonction ne doit pas effectuer plus d’une seule tâche afin de rendre le code plus simple à utiliser et débugger.

 

Finalement nous avons décidé d’utiliser uniquement Python 3 car elle était déjà présente sur la Raspberry Pi et que les différentes versions de python n’ont pas toujours le même comportement.

C’est pour cela que les programmes ne fonctionnent pas sur les PC de l’IUT qui eux sont sous Python 2.7 !

 

    Création de la logique et structure du jeu

 

Dans un premier temps nous avons créé la classe au cœur de notre programme : “Tableau”

Cette dernière nous permet de stocker l’état du jeu, de lui apporter des modifications simples ainsi que de vérifier divers éléments sur l’avancement de la partie.

 

Elle se présente de la façon suivante:

L’état du jeu est stocké dans un tableau en 2 dimensions de 7 colonnes et 6 lignes, chaque case de ce tableau représente une case du puissance 4 réel.

Une case vide prend la valeur de 0, une case avec un pièce du joueur 1 prend la valeur 1 et finalement une case avec une pièce du joueur 2 prend la valeur -1.

Descriptif des fonctions

 

_init_()

Constructeur de l’objet, elle permet d’initialiser les valeurs du tableau.

getTableau()

Renvoi le tableau de valeurs du jeu.

display()

Permet d’afficher le tableau de jeu de façon ergonomique dans la console python en ajoutant le numéro des colonnes et en remplaçant les valeurs par des symboles.

getSlot()

isSlotPlayable()

Permet de savoir si la case est jouable.

getRowSlot()

Cette fonction permet d’identifier la position “y” de la case jouable dans la colonne “x”.

Si cette colonne est pleine la fonction renvoie “-1”.

 

setPiece()

isFull()

Cette fonction permet de savoir si il ne reste plus aucune case de libre dans la grille du puissance 4.

hasPlayerWon()

Cette fonction nous permet de vérifier si un des joueurs a gagné la partie en alignant 4 pièces de sa couleur. Elle nous renvoie la position x, y de la case et la direction de cette ligne dans un tableau. Si le joueur n’as pas fait de ligne de 4 pièces la fonction renvoie “false” (0).

 

    Mode PvP

 

Tout d’abord, il faut savoir que chaque niveau est représenté par un chiffre dans le code:

  • Niveau 0 : mode PvP
  • Niveau 1 : mode IA aléatoire (baptisé “Timmy”)
  • Niveau 2 : mode IA logique (baptisé “Captain Obvious”)
  • Niveau 3 et supérieur : mode IA prédictive (baptisé “Hawking”)

Dans les variables globales, on choisira donc le niveau de l’adversaire dans la variable “level”, ici 4 soit le niveau IA prédictive.

Pour la création du mode PvP ou “level=0”, nous avons simplement fait en sorte de demander au joueur 2 quelle colonne il veut jouer comme le joueur 1. Pour cela nous avons réalisé la chose suivante:

Si c’est au tour de l’adversaire (soit turn différent de 1) et si le level = 0 (soit le mode PvP), alors on demande au joueur 2 quelle colonne il souhaite jouer ( x = askPlayer( ) ) . Dans le cas contraire soit (level différent de 0) il faudra demander à l’IA de jouer.

    Création d’une IA

Une fois le système d’alternance entre joueur mis en place nous avons ajouté au code pour le deuxième joueur, la fonction askIA(). Cette fonction fait appel à différents algorithmes qui vont être chargés de retourner la colonne jouée par l’ordinateur avec une difficulté variable.

 

Dans un premier temps nous avons créé une “IA” retournant simplement une colonne jouable aléatoirement afin de tester le bon fonctionnement du code.

Ajout d’intelligence pour l’IA

    IA logique

 

L’IA logique, nommée “CaptainObvious”, doit faire en sorte de bloquer le joueur, tout d’abord en lui empêchant d’aligner 4 pièces. Si le joueur ne peut pas en aligner 4, alors il lui empêchera d’en aligner 3. Si le joueur ne peut pas en aligner 3, alors “CaptainObvious” va chercher à en aligner 3. Si il ne peut pas en aligner 3, alors il va chercher à empêcher le joueur d’en aligner 2. Le code se présente de la façon suivante:

La fonction CheckFor() permet d’identifier toutes les cases vides qu’un joueur donné pourrait jouer afin de faire une ligne de n pièces de sa couleur. Elle va nous renvoyer le résultat sous forme de tableau de position.

Exemple:

Si on effectue une vérification de 4 pièces pour le joueur 1, la fonction nous renvoie  “[1,0] [4,1]”, ce sont les coordonnées de tous les cases vides que le joueur pourrait utiliser pour faire une ligne de 4 pièces en un seul coup.

Afin de vérifier si le joueur peut réellement faire le coup permettant de mettre une pièce à une de ces positions, on se sert de la fonction isSlotPlayable(). En effet dans l’exemple suivant le coup en “[4,1]” n’est pas possible car la case en dessous est vide.

    IA prédictive

 

Cette IA représente le niveau de difficulté le plus élevé de notre programme.

Elle va se baser sur la prédiction et l’analyse de tous les états futurs possibles du jeu.

 

Pour ce faire nous avons pris exemple sur l’algorithme surnommé “minimax“, celui-ci se base sur tous les états du dernier rang pour faire sa prédiction.

Cet algorithme se base sur le fait que le joueur lui aussi, fait à chaque fois le coup le plus avantageux pour lui. Les règles sont simples, un joueur tente d’arriver au nombre le plus faible et l’autre au nombre le plus élevé.

 

Il va donc partir du bas de “l’arbre” en sélectionnant à chaque fois l’option la plus avantageuse pour chaque joueur afin d’identifier le chemin que l’IA doit prendre pour avoir le plus de chances de gagner.

 

La clé de la réussite de cet algorithme est l’identification de la valeur de l’état actuel du jeu.

Il serait en effet simple de se contenter de vérifier si l’IA ou le joueur gagne dans une branche donnée mais la puissance de calcul de la Raspberry Pi étant limitée il nous est pas possible de calculer tous les coups possible avec beaucoup de coups d’avance.

 

Nous avons donc décidé de créer une fonction attribuant une valeur à un jeu. Elle va nous retourner une valeur positive si le joueur gagne et une valeur négative si l’IA gagne. Dans le cas ou aucun des deux gagne la fonction va nous retourner une valeur intermédiaire dépendant de l’avantage qu’a un joueur. En effet si le joueur possède plusieurs options pour aligner 3 pions alors que l’IA n’en a aucune la valeur du jeu va être en faveur du joueur.

 

Pour cela elle va s’appuyer sur la fonction countPossible() qui va retourner le nombre de coups possibles qu’un joueur va pouvoir faire pour aligner un certain nombre de pièces.

Il a fallu ensuite créer une fonction permettant de simuler tous les coups possibles et de renvoyer la valeur du coup à l’IA.

Finalement nous avons réalisé la fonction permettant de faire le choix de l’IA en fonction de toutes les possibilités qui lui sont proposées.

Elle va prendre le résultat de chaque branche pour trouver le coup avec la valeur la plus faible car c’est ce coup qui va lui donner le plus de chances de gagner.

 

Interface utilisateur

 

Pour l’interface utilisateur, nous avons utilisé PyGame qui permet de créer des interfaces via Python.

Tout d’abord on définit les dimensions de l’IHM (ici l’écran tactile), la taille d’un emplacement, le titre de la fenêtre et l’ouverture de la fenêtre:

Par la suite on charge les images et on les adapte au format que l’on souhaite:

les variables red_image et yellow_image sont utilisées uniquement pour l’interface avec le jeu sur écran.

On affiche ensuite l’écran puis le fond d’écran :

La suite du programme diffère en fonction de son utilisation avec le jeu sur écran ou avec le robot.

 

    Interface avec jeu sur écran uniquement

On va donc d’abord afficher le puissance 4. Pour cela on écrit une fonction qui colle des cases bleues (slot_image) en 6 lignes et 7 colonnes soit 42 cases. La fonction est donc la suivante:

Il faut ensuite afficher chaque pièce jouée. Pour cela on regarde d’abord si c’est la pièce du joueur ou de l’adversaire qui doit être ajoutée ( tableau[x][y] == 1 ou tableau[x][y] == -1) et on affiche la pièce de couleur rouge ou jaune en fonction de ça:

 

Joueur:

Adversaire:

Au final la fonction complète sera la suivante:

Pour savoir quelle colonne le joueur souhaite utiliser, on doit recueillir l’emplacement du curseur de la souris ou du doigt avec l’écran tactile.

 

position[0] correspond à la position en x du curseur.

position[1] correspond à la position en y du curseur.

 

On cherche d’abord à voir si le curseur est posé sur une case et non en dehors du puissance 4, on va donc vérifier de la façon suivante:

Si la position en x est inférieure à la position en x de la case la plus à gauche ou supérieure à la position en x de la case la plus à droite, alors on return -1 pour signifier que le curseur est en dehors du jeu.

 

De même, si la position en y est inférieure à la position en y de la case la plus en bas, on return -1 pour signifier que le le curseur n’est pas dans le jeu. Nous avons décidé de ne pas faire de même si le curseur est au dessus de la case la plus haute pour que le joueur puisse poser sa pièce au dessus du jeu, afin de paraître plus réel.

 

Si le curseur est dans le jeu, alors on return la position en x du curseur.

 

La dernière fonction utilisée pour l’interface permet d’animer cette dernière. Lors de la pose d’une pièce, on souhaite la faire défiler du haut de l’écran jusqu’à son emplacement. Pour cela, on définit d’abord la hauteur de début (startheight = 0) et la hauteur finale qui dépendra de l’emplacement de la pièce jouée. On fait avancer la pièce et on réaffiche le fond d’écran, puis la pièce ajoutée, puis le puissance 4 et les autres pièces et on on affiche le tout.

La fonction est donc représentée de la manière suivante:

Le rendu visuel sera donc le suivant:

la zone avec le contour rouge représente la surface sur laquelle on peut cliquer pour mettre une pièce dans la colonne n°0.

 

Interface avec jeu via le robot

 

Pour l’interface avec le robot, on n’affichera pas autant d’éléments que pour une partie sur l’écran uniquement. On n’affichera qu’une ligne du puissance 4 et on n’affichera pas les pièces, étant donné que l’utilisateur les verra en vrai. On laissera donc l’utilisateur choisir uniquement la colonne de son choix.

Pour l’affichage des cases on aura donc ceci:

Étant donné qu’on n’aura qu’une ligne, la fonction qui prend la position en x du curseur change également:

Il ne reste donc plus qu’à utiliser ces fonctions dans le code principal (Main).

Voici une image montrant l’écran lorsque qu’on joue avec le robot:

 

 

    Assemblage du programme (Main)

Diagramme des classes

Tout d’abord, on importe les autres fichiers:

Afin de pouvoir faire plusieurs actions en même temps, on utilise le threading.

On initialise par la suite toutes les variables vues dans les programmes précédents:

On initialise le tableau, puis on définit que le premier à jouer sera le joueur. On met le level à 4, soit l’IA prédictive et on définit que la variable qui arrête l’affichage est a False.

 

On affiche le jeu:

On crée une fonction qui va demander au joueur quelle colonne il souhaite jouer.

 

On regarde d’abord si le joueur veut quitter le jeu ou si il a cliqué pour jouer:

Si le joueur veut quitter le jeu, on renvoie x = -2.

Si le joueur a cliqué, on vérifie qu’il a cliqué dans une colonne, sinon on envoie un message à l’utilisateur:

“le nombre choisi doit être entre 0 et 6, veuillez réessayer”.

Si le joueur a cliqué dans une colonne mais qu’elle est pleine , on envoie un message à l’utilisateur:

“la colonne est pleine, veuillez en choisir une autre”.

Si le joueur a cliqué dans une colonne est qu’elle n’est pas pleine, on renvoie la valeur de x.

La fonction complète est la suivante:

 

 

On crée également une fonction qui va demander à l’IA la colonne qu’elle souhaite jouer via AITread.

C’est à ce moment qu’on va utiliser le threading. En effet, pendant que l’IA va calculer la colonne qu’elle doit jouer, on doit continuer à rafraîchir l’écran pour éviter un “freeze” de l’application.

 

A nouveau, si le joueur cherche à quitter le jeu, on renvoie la valeur x = -2.

Si le joueur ne souhaite pas quitter le jeu, on arrête le threading et on récupère la réponse de l’IA.

 

Le code de la fonction est le suivant:

 

La fonction IATread va donc recueillir la réponse de l’IA. En fonction du niveau de l’IA, on va demander la réponse à l’IA correspondante:

On crée la boucle de jeu. On regarde d’abord à qui est le tour. Si c’est le tour du joueur, on va utiliser la fonction askPlayer(). Si c’est le tour de l’adversaire, on regarde si l’adversaire est un autre joueur (mode PvP avec level = 0), sinon on utilise la fonction AskIA().

 

Si la valeur de x est de -2, on met la variable quit_game à True, la partie s’arrête.

 

Sinon, on utilise slotAnimation pour afficher la pièce qui rentre dans le puissance 4.

Quand l’animation est finie, on définit la place de la nouvelle pièce.

On affiche le fond d’écran, les pièces et le puissance 4. On aura donc le code suivant:

On vérifie par la suite si quelqu’un a gagné: si c’est le joueur 1 qui gagne, on lui envoie “Le joueur 1 a gagné”. Sinon, on regarde si c’est le joueur 2 qui gagne et on envoie le message “Le joueur 2 a gagné”. On fait de même avec l’IA, avec un message personnalisé en fonction du niveau de l’IA. Enfin, on arrête le programme.

 

Si personne ne gagne, on vérifie si le puissance 4 est plein, dans ce cas là on envoie le message “Personne ne gagne, retente ta chance” et on arrête le programme.

Sinon, on passe le tour à l’autre: turn = turn * (-1).

On a le code suivant:

On crée une autre boucle qui vérifie si le joueur souhaite quitter le jeu:

 

Main version robot

 

Dans cette version nous avons simplement repris le code déjà écrit pour le main précédent et nous y avons ajouté les éléments permettant d’interagir avec le robot.

Diagramme des classes version Robot

 

La classe “DisplayRobot” est une version simplifiée de la classe “Display”. en effet il n’est plus nécessaire d’afficher l’état du jeu sur l’écran vu que nous pouvons le voir en réel. Son but est simplement de proposer à l’utilisateur une grille simplifiée pour qu’il puisse choisir ou le robot doit jouer.

 

On ajoute aussi la nouvelle classe “SocketCom” qui permet, à l’aide de la fonction “sendSocketToRobot()”, d’envoyer les coups joués au robot, on reviendra plus en détail sur cette classe dans la troisième partie.

Il a fallu ici encore faire appel à des threads pour pouvoir envoyer les données au robot car une fois de plus le programme ne peut pas se permettre d’attendre le robot. Cette technique permet au programme de continuer à exécuter sa boucle principale tout en attendant que le robot confirme la réception des données.

On va utiliser une variable “SocketComState” afin de resynchroniser le programme une fois le message envoyé.

Voici une vidéo de présentation du projet puissance 4 avec le jeu sur écran:

III. Bras robotisé

Étant donné que nous n’avions pas utilisé tout le temps consacré au projet après avoir finalisé le programme, nous avons eu pour nouvel objectif de prendre notre programme et de faire jouer un robot sur un vrai puissance 4.

    Programme embarqué sur le robot

 

En premier nous avons écrit le code qui va être exécuté sur le robot.

Celui-ci va stocker la position des piles de pièces ainsi que l’emplacement du plateau de puissance 4. Il va pouvoir recevoir la colonne et la couleur de la pièce jouée par le joueur ou l’IA.

 

Le programme est initialisé par la fonction start qui va se charger de placer le robot à sa position de départ et d’initialiser la hauteurs des piles de pièces.

C’est elle aussi qui va configurer le port du serveur Socket en “timeout” (temps d’attente) limité car on ne connaît pas le temps que va prendre le programme pour envoyer les données au robot (le joueur humain pouvant attendre des heures avant de faire un coup si il le veut). Finalement elle va appeler la fonction “p4” qui  s’occupe de la réception des données et du calcul des mouvements du robot.

La fonction p4

Cette fonction contient la boucle principale du programme.

Elle va attendre les données de la Raspberry Pi avec la fonction “sioGet” qui prend comme argument le serveur Socket configuré au préalable dans les configurations du robot et une variable de sortie “nCom” qui va stocker les données reçues. La fonction “clearBuffer()” permet de supprimer les données après leur lecture afin que le serveur puisse recevoir les données du prochain coup.

 

Après avoir calculé les positions de déplacement du robot on va faire appel à la fonction “mouvement()”  qui elle, va ajouter les vitesses et les points d’approche des mouvements du robot ainsi que la gestion de l’ouverture et de la fermeture de la pince.

On a par la suite ajouté un delay avant que le robot lâche les pièces car les pièces qui restaient légèrement collées à la pince se voient projetées en arrière.

 

Il ne reste donc plus qu’à transmettre les coups du programme au robot afin qu’il puisse les réaliser sur le plateau du puissance 4.

Communication

A la place d’afficher les différents coups des joueurs sur l’écran nous devons désormais envoyer ces derniers au robot. Pour cela nous avons créé une nouvelle librairie du nom de “SocketCom”  (pour la communication par socket).

 

Dans un premier temps nous avons mis en place une convention d’envoi des données aussi utilisée lors de la réception du coté robot.

Les données sont envoyées en paquet de 3 char (nombre de 8 bits). Le premier donne la colonne jouée, le deuxième la couleur jouée et le troisième est utilisé pour envoyer des commandes au robot. Si ce dernier est à 1 par exemple, le robot va automatiquement arrêter le programme et ainsi ne pas être dangereux. Comme le robot ne contient aucune intelligence cela est le seul moyen pour lui de savoir quand la partie est terminée.

La fonction “moveRobot” se charge de la création du message à transmettre et de la boucle d’envoi du message qui s’assure que le robot a bien reçu le message avant de continuer.

La fonction chargée de l’envoi du message est “sendMoveToRobot”. Elle crée la connection avec le robot, encode le message et le transmet au robot.

    CAO

(Conception Assistée par Ordinateur)

 

L’utilisation du bras robotisé entraîne des contraintes que nous avons dû gérer. En effet, les vibrations causées par le déplacement du bras font bouger le puissance 4, ce qui provoque une imprécision notable. Il est donc nécessaire de faire en sorte que le puissance 4 reste stable. Pour cela nous avons eu l’idée de créer un support permettant de caler le jeu sur la table, qui soit en plus installé de manière non définitive. Le support a donc été créé avec le logiciel Corel Draw et une découpeuse laser.

Le support est en bois et est muni de deux encoches pour insérer les pieds du puissance 4 ainsi que deux emplacements gravés afin de savoir ou poser précisément les piles de pièces rouges et jaunes.

Étant donné que le puissance 4 sera utilisé dans la salle où se trouve le Staübli, la table utilisée est munie d’encoches comme vous pouvez le voir ci-dessus. Nous avons donc créé une encoche dans chaque coin du support afin de le fixer à la table, comme ci-dessous:

Suite à cela, malgré le fait que le puissance 4 soit stable, nous avons remarqué que le nombre de pièces tombant en dehors du puissance 4 reste conséquent (environ 7% des pièces tombent en dehors lors d’une partie).

 

Après plusieurs observations, nous avons conclu que cette imprécision peut provenir de différents éléments:

 

  • Les pièces collent parfois à la pince
  • Le robot peut avoir une erreur de 2mm sur un mouvement
  • Le robot n’est pas bien calibré à la table

 

Une des solutions possible est d’ajouter une mousse sur la pince pour que les pièces ne collent plus. Cependant cela n’aurait pas suffit car même lorsque les pièces ne collent pas il arrive que la pièce tombe en dehors du puissance 4.

 

C’est pourquoi nous avons décidé de créer une goulotte afin d’agrandir la “zone de chute” de la pièce. Nous avons donc à nouveau utilisé Corel Draw afin de créer la goulotte. Cette fois-ci nous avons utilisé du plastique bleu, afin d’avoir la même couleur que le puissance 4.

La forme du puissance 4 nous a permis de réaliser une goulotte amovible. Le puissance 4 n’a donc pas été modifié directement, il peut être utilisé sans goulotte.

Après plusieurs essais avec la goulotte, nous avons observé une erreur de 0%. La solution est donc validée.

Voici une vidéo de présentation du programme en action, joué avec le Staübli:

IV. Conclusion et remerciements

 

Nous tenons à remercier avant tout M.VERRIER Nicolas ainsi que M.BAZEILLE Stéphane pour nous avoir aidé pendant le projet. Nous tenons également à remercier M.DE SABBATA qui nous a été d’une grande aide pour la réalisation de la CAO.

 

En conclusion, nous pouvons affirmer que ce projet nous a offert une expérience non négligeable dans le domaine de l’informatique, la robotique et  la CAO. Ce projet nous a également appris à nous partager les tâches en fonction des nos compétences et surtout à travailler durablement en groupe. Nous sommes d’autant plus heureux de savoir que ce projet sera utilisé lors des portes ouvertes de l’IUT de Mulhouse.

 

Quant aux améliorations éventuelles à réaliser sur ce projet, il serait possible de rajouter un deuxième bras robotisé qui puisse jouer contre le premier. Cela servirait donc à faire une démonstration du programme devant les spectateurs. Nous avons également pensé à rajouter une caméra visant le puissance 4 afin de pouvoir faire jouer directement l’utilisateur sur le puissance 4, cependant le robot Staübli n’étant pas fait pour une utilisation ludique, la sécurité ne serait pas assurée. Pour ajouter des fonctionnalités au robots, on pourrait néanmoins faire en sorte qu’il ouvre la grille en fin de partie et qu’il empile les pièces sur deux piles. Il faudrait alors rajouter une caméra en plus.

 

V. Notice et code

 

Vous trouverez ci-dessous les liens utiles:

  • La notice d’utilisation du projet:

https://drive.google.com/file/d/1QyNU8MFcEi8Y3eGVnGr0a0IhyVS3yis5/view?usp=sharing

  • Le code:

https://drive.google.com/drive/folders/1iRYLxJR4iJaN3XV4ZD_5T1SGecX8y07u?usp=sharing

 

Vous pouvez nous contacter aux adresses mails suivantes:

hebinger.68(at)gmail.com

louis.eckler(at)gmail.com

       

 


CanSat

 

 

 

 


Sommaire

  • Introduction
  • Points importants
  • Réalisation
  • Code et rendu
  • Planification
  • Répartition des tâches
  • Perspectives
  • Point complexe et solutions envisagées

 


Introduction

 

  • Qu’est ce qu’un CanSat ?

Un CanSat (Canette-Satellite) est un dispositif autonome de faible volume (equivalent a une canette de soda de 33cl) qui réalise des missions scientifiques à très haute altitude ou en orbite. Cet appareil prend la forme d’une sonde nanosatellite cylindrique, qui est lancée par une fusée ou un ballon et qui redescend sous parachute en effectuant ses missions.

Dans notre cas nous n’allons pas lancer notre CanSat en orbite ou le larguer depuis un ballon sonde, mais nous allons le larguer depuis un parapente en vol, ceci étant plus simple à organiser.

 

  • Contraintes :

    • Raspberry PI3
    • Module émetteur/récepteur XBee
    • Volume max : 1L

 


 

 

Objectifs

  • Crée un CanSat équipé de :

    • Raspberry PI3
    • Capteur ultra sons (approche)
    • Caméra
    • Capteur de températures, de vitesse, d’humidité et de pression
    • Module émetteur/récepteur Xbee
    • Système autonome (via pile/batterie)
    • Test en condition réelle
    • Volume minimum

Diagramme pieuvre

 


Planification

 

 


 


Perspective

  • Crée un CanSat équipé de :

    • Raspberry PI3
    • Capteur ultra sons (approche)
    • Caméra
    • Capteur de températures, de vitesse, d’humidité et de pression
    • Module émetteur/récepteur Xbee
  • Système autonome (via pile)

  • Test en condition réelle


Réalisations

  • Recherche sur les CanSat
  • Apprentissage Raspberry PI/python
  • Test des capteurs (ultra sons, caméra, Sense Hat …)
  • Transmission des données avec les modules XBee
  • Construction 3D  CanSat
  • Programmation du capteur ultrason

 


Le module Sense Hat

  • Capteur de température
  • Capteur de pression
  • Capteur d’humidité
  • Matrice LED
  • Gyroscope/accéléromètre

 


Transmission des données 

  • Deux modules XBee émetteur/récepteur

  • Logiciel XCTU

 


Capteur ultrason

  • Alimentation : 5Vcc

  • Portée: de 10cm à 4 m

  • Consommation :30mA

 


Alimentation

  • Power Board:

    • Deux Vcc de 5V

    • Deux  Vcc de 3,3V

    • Deux  Gnd

    • Entrée VIN


Conception 3D

 

 

Pour la création de la structure du CanSat nous avons utiliser Sketchup car il s’agit d’un logiciel que je connaissait déjà, et nous avons utiliser l’imprimante 3D de l’IUT LAB pour le crée

 


Parachute

S=(2.g.M)/(R.Cx.Vd²)

 

g = 9,81  m·s−2
M = 1,2 kg
R = 1,21 m
Cx = 1  : coefficient de frottement
Vd = 3m/s   : Taux de chute


Points complexe et solutions

 

  • Test des capteurs

    • Début compliquer puis simplifier avec l’utilisation du Sense Hat
  • Transmission des données lors de la descente

    • Utilisation de Xbee complexe
    • Problème priorité entre les ports série GPIO et le bluetooth du Raspberry Pi
  • Conception 3D

    • Intégration du Raspberry Pi, du Sense Hat, des capteur, … dans un volume restreint

Programmation

Le code permettant de gérer la prise de mesure a été écrit en python car il s’agit d’un langage simple et très utiliser sur Raspberry Pi.

Vous pouvez trouver le code commenter ici : Code du CanSat


Vidéo récapitulative

 

 


Remerciements


Vidéo Surveillance

Vidéo Surveillance

 

SOMMAIRE

I. Contexte du projet

1).Définition du projet

2).Cahier des charges

3).Expression du besoin

II. Déroulement du projet

1) Initiation au Raspberry (interface Raspberry, python…)

2) Logiciel MOTION

3) Détection de mouvement à l’aide d’un capteur

4) Ajout d’un servomoteur

5) Transfert des images

6) Packaging

III. Conclusion

 

I.Contexte du projet

 

1. Définition du projet

Dans le cadre de nos projet de deuxième année il nous a été demandé de réaliser une vidéo surveillance a l’aide d’un raspberry pi 3, d’une caméra et d’un capteur ultrason. L’objectif primaire de ce genre de projet est non seulement de nous introduire au travail en équipe mais aussi en autonomie.

Notre projet  vidéo surveillance a pour but la protection des biens et des personnes. Ce projet  se base sur la détection de mouvement, lorsque le capteur ultrason détecte un obstacle (mouvement dans la pièce ) il prend une photo.

EXPOSE

2.Cahier des charges

 

-Récupération des données capteurs

-Ecriture du programme

-Interface web pour la sauvegarde

 

3.Expression du besoin

 

Captuikhbibiubigbuih

 

II. Déroulement du projet

1) Initiation au raspberry (interface raspberry, python…)

Avant de commencer l’utilisation du Raspberry, il nous a fallu prendre connaissance des différentes commandes utile pour l’utilisation de ce dernier car, pour la plupart d’entre nous, nous n’avons jamais utilisé de raspberry. Une fois a l’aise avec le raspberry nous nous somme initier au langage python, car c’est essentiellement avec ce langage que nous avons travailler.

2) Logiciel MOTION

Avant de commencer a coder en utilisant le capteur, nous avons d’abord tester si la caméra du raspberry fonctionnait et réagissait bien. En recherchant sur internet nous avons trouver l’existence du logiciel « MOTION ». La fonction première de Motion est de faire de la vidéo-surveillance avec diffusion en ligne, en temps réel, via une ou plusieurs caméras ! Motion permet également de faire de la « motion capture », c’est-à-dire, que Motion est capable de comparer la dernière image prise avec la nouvelle pour faire de la détection de mouvements.

 

 

Avec Motion la caméra réagissait bien au mouvement, comme nous pouvons le voir sur l’image de droite, a chaque mouvement une photo est prise et enregistrer.

 

3) Détection de mouvement à l’aide d’un capteur

Lorsqu’une personne passe devant le capteur d’ultrasons, une photo est prise car il y a un changement de distance entre la distance précédente et la distance capter par le passage d’une personne.

 

4) Ajout d’un servomoteur

Une fois la partie détection faite, nous sommes passé à la partie servomoteur pour faire des balayages, pour avoir un champ plus grand 180°.En effet, nous avons constater des saccades, pour régler le souci, avant de d’executé le programme principale nous lancions un programme qui gênerait un tableau avec les distances capté par l’ultrasons chaque 20° jusqu’à 180°, le servomoteur balaye un champ de 180° par pas de 20 ° et le fichier stocke les distances chaque 20° pour ainsi optimiser la détection des obstacles lors des balayages pendant le programme principale. En effet, le programme principale comparait la valeur de la distance prise par celle du capteur et celle stocké dans le tableau, si la distance était différente à plus de 5% elle prenait des photos.

 

5) Transfert des images

Une fois la photo prise par détection de l’ultrasons , la photo était transféré sur un serveur web par FTP puis afficher sur un site web.

 

6) Packaging

Nous avons modéliser en 3D une boite pour le Raspberry Pi, le capteur d’ultrasons et le servomoteur pour avoir une meilleure ergonomie.

 

III. Conclusion

Pour conclure, ce projet nous a beaucoup apporté, tant niveau théorique,pratique et tant au niveau sociable. Au début de ce projet nous avions aucune connaissance sur le raspberry, grâce à ce projet nous avons pu acquérir toutes les connaissances en Linux nécessaires pour utiliser son interface. Durant ce projet nous avons aussi apprit à coder en python et transféré des fichiers en FTP.

Finalement notre projet a parfaitement fonctionner, ceci grâce au réelle investissement de toute l’équipe et aussi grâce au professeurs qui étaient la pour répondre a toutes nos questions.


Lanceur de volants de badminton


LANCEUR DE VOLANT POUR BADMINTON

 

 » On ne devient pas champion dans un gymnase. On devient champion grâce à ce qu’on ressent; un désir, un rêve, une vision. On doit avoir du talent et de la technique. Mais le talent doit être plus fort que la technique. « 

Mohammed Ali

 

 



REMERCIEMENTS

 

Nous tenons a remercier nos professeurs tuteurs sans qui ce projet n’aurait certainement pas aboutis. Nous remercions également Mr De Sabbata qui a été présent à chaque étapes du projets ainsi que nos camarades qui ont fait preuve d’une bienveillance exceptionnelle lors de la conception et des tests.

 

 



 

 

Cet article fait office de rapport dans le cadre du cours Etudes et réalisation. Il s’agit de l’étape final de notre projet qu’est, vous l’aurez compris, le lanceur de volant. Ce projet à été choisie par nous même et réalisé sous la tutelle de nos professeurs référents que sont Mr Bazeille et Mr Verrier. Dans la suite de ce développement, nous allons essayer de vous expliquer et illustrer les étapes intrinsèques à notre réalisation, puis nous allons conclure sur une petite démonstration.

 

Objectif: Réaliser un lanceur de volant pour badminton

 

Membres de l’équipe:  Alexandre DARTOIS,  Adin BADIENZI et Marvin DARBOUX

 

Sommaire

 

I) Contextualisation

1) Présentation du projet

2) Gantt

II) Conception

1) Construction mécanique

2) Conception électrique

III) Programmation

IV) Conclusion

 

 

 



 

I) Contextualisation 

 

Tout d’abord comme son nom l’indique notre projet sera un robot qui va lancer des volants à différentes positions du terrain. Il devra idéalement pouvoir faire des routines permettant l’entrainement du joueur. Notre projet n’a pas vraiment de cahier des charge unique car il évolue au fur est à mesure des besoins liées aux contraintes de jeux.

 1) Présentation du projet

Avant de se lancer dans la conception d’un objet tels que celui ci , quelques prérequis sont importants. Par exemple la vitesse d’un lancer de volant qui peut atteindre les 450 km/h ou encore la taille du terrain  étant de 13,40 m sur 5,20 m pour la réalisation des routines. De ce fait il nous est très vite venu l’idée de se servir de deux disques tournant en sens inverse de façons a pouvoir propulser un volant vers un endroit prédéfinis. On s’est aussi inspiré des modèles existants tels que :

–  Le BLK

 

– Le Aliobot Supra

On peut voir que ces 2 lanceur sont vraiment riches en choix d’exercices et de fonctionnement car il peuvent faire énormément de routines ainsi que des routine spéciales crées par le joueur lui même en réglant la vitesse des volant. Mais le plus intéressant est que le BLK peut se connecter via le Bluetooth à un portable et a son application propre pour faire différente routines.

 

De ce fait, l’idée du support viens très rapidement afin de stabiliser le tout et permettre éventuellement de réaliser manuellement les routines. Pour que ce système soit un peu plus optimale voila les premiers objectifs que nous nous sommes fixés :

Le capteur devait servir à l’incrémentation des volants. Il permettait au lanceur de savoir si le volant est effectivement parti ou non. Si oui il devra permettre au lanceur de repositionner un autre volant de façon autonome et aussi de connaitre le nombre de volant que compose sa série. Pour ce faire il fallait bien évidement un support pour les volants et un système permettant de bloquer les volants le temps que le capteur perçoive un volant.

Afin de réaliser ce tour de force on a eu comme matériel droit à :

– Un RasPi 3 Model B

– Des kits de construction mechano ( gentillement fournis par l’iut lab)

– La possibilité de commander des composants sous peine d’accord de nos tuteurs

 


 

2) GANTT

Avant de pouvoir passer à la partie physique de notre projet on a du commencer par une approche plutôt papier sur l’étude de notre système: la répartition des tache, comment aboutir au résultat escompté, etc . Donc pour ce faire on a commencé par faire différentes analyses avec différents logiciel permettant la facilité pour l’avancement de notre projet et des taches a réaliser.

 

  • Première analyse fonctionnelle dit « la Bête a corne » :

Cette première analyse nous a permis d’exprimer le besoin primaire, donc son exigence principal sous forme très simplifiée.

  • Seconde analyse :

Maintenant qu’on a exprimé la fonction principal de notre lanceur on peut passer à une autre analyse qui est le « le MindMap », cette analyse est le fait de représenter les grande idée et partie qui vont constituer un même sujet qui pour nous est notre lanceur de volant:

 

  • Dernière analyse :

Maintenant grâce a notre MindMap on peut faire notre Gantt qui est le fait de planifier toutes les idées trouvé lors de l’analyse précédente en fonction de la durée de notre projet ainsi que d’autres contraintes.

Grace a notre planification on peut voir les durée « prévisionnelle » et surtout la date de début et de fin du projet et de chaque sous partie.Notre projet commença le 30 novembre 2017 et la dernière consacré a celui-ci était le 22 janvier 2018.

 



II) Conception

 

Maintenant que toute l’étude est faite on peut passer au gros du projet qu’est la partie conception d’une structure adéquate pour notre lanceur.

 

1) Conception mécanique 

Avant de pouvoir tester des programmes on doit tout d’abord ce pencher sur une structure permettant de lancer des volants.

Schémas illustrant le mode de fonctionnement

 

D’où Notre choix qui c’est très vite porté sur les méchanos pour la réalisation de la structure à cause de la diversité des composants et outils que présente ces boites(Makeblock). On a commencé dans l’optique que ce que nous réaliserons avec les méchanos sera un prototype pour ensuite créer notre « vrai » réalisation. Dans un premiers temps nous nous sommes concentrés sur la structure:

  • Première réalisation et problèmes associés

Réalisation intermédiaire (I)

On peut voir sur cette image que notre réalisation n’est pas adéquate pour lancer des volants de part ça rigidité qui n’est pas bonne car certaines pièces sont déformé sous le poids de nos moteur et des tremblements du a la rotation des moteur. L’impacte de la mise en route des moteurs provoque un bruit assourdissant à cause de l’écart et des frottements entre les roues dentés.

  • Après ces premiers résultats quelques peut chaotiques, voici ce que nous avions imaginé ensuite

Résultat intermédiaire (II)

On peut voir sur cette image que le second test juste l’aspect externe montre un peu plus de rigidité mais il y a d’autre aspect technique qui on était résolu comme par exemple le niveau des roue qui était du a la mauvaise rigidité de la structure ainsi que l’espace pour le volant ou encore les vibration des moteur qui on était réduite, etc. Donc au vue des aspects résolu on remarque qu’une grande partie était du a la rigidité de la structure. Cependant les 2 plus gros problème sont toujours a résoudre : Les tremblement ainsi que le bruit assourdissant.

Le modèle illustré ci-dessus fait office de premier prototype pour notre lanceur de volant. Bien que plutôt satisfaisant pour effectuer des lancers, on a préférer le solidifier pour le prototype finale, prototype que nous illustrerons dans la partie conception électrique car cette structure comporte des composant qui seront expliqué dans cette partie.


Maintenant que nous disposons d’une structure convenable au lancé on va pouvoir y incorporé des composant qui vont permettre le confort des utilisateurs ainsi que le bon fonctionnement de notre lanceur.

2) Conception électrique

Pour commencer voici un petit schéma qui regroupe les grandes parties qui compose notre lanceur et qui seront implantés dans la structure vu dans la partie conception mécanique :

 

Principe de fonctionnement

 

Nous avons essayé par le biais du schémas ci-dessus de vous illustrer les différents  composants électriques qui ont intervenus lors de la conception du lanceur.Voici une liste non exhaustive des composants que nous avions choisi:

  • dans le cas des moteurs on a opté  pour le 42BYG Stepper
  • dans le cas du capteur Ultrason on a opté pour le Me Ultrasonic sensor
  • pour l’affichage du choix des routines on a choisi le Me TFT LCD screen
  • pour gérer l’ensemble des composants on a choisi le Me Orion
  • pour choisir son mode de jeux on a préférer le Me 4Button

Pourquoi le 42BYG stepper ?

En résumé il s’agissait tout simplement du moteur pas à pas le plus puissant disponible dans les boites Makeblock. Avec sa puissance, on pouvait se rapprocher (avec un système similaire à celui des engrenages) d’un lancer ordinaire de volant par un individus quelconque.  De plus par le biais du contrôleur qui lui est systématiquement associer on pouvait gérer le voltage et l’ampérage, donc agir sur la façons dont allait tourner le moteur ( les roues) .

2H ME Make (contrôleur pas à pas)

Le Me 2H Microstep Driver est une pilote de moteur pas à pas hybride à 2 phases, et adopte l’alimentation de DC 12 ~ 36V. Il est adapté pour piloter le moteur pas à pas hybride à 2 phases avec une tension de 24 ~ 36V et un courant inférieur à 2,0A. Ce pilote utilise la boucle de courant numérique complète pour mettre en œuvre le contrôle de micropas, de sorte que le moteur présente une faible ondulation du couple, une faible vitesse et un fonctionnement fluide, des vibrations et du bruit faibles. Lorsqu’il tourne à grande vitesse, son couple de sortie est relativement élevé et sa précision de positionnement est élevée.

 

Le Me Orion , qu’est ce que c’est ?

Me Orion

Le Makeblock Orion est une sorte de carte mère basée sur Arduino Uno . Il se munit de huit ports RJ25 pour se connecter à tous les autres modules de la série Me (kit Inventor ou séparé sur demande) avec des étiquettes couleur. Il supporte  la plupart des logiciels de programmation (Arduino / Scratch / AduBlock).

 

Maintenant que vous connaissez la plupart des composant qui seront implanté dans notre lanceur voici le résultat final après que chaque composants soit inséré :

On peut voir sûr cette image la structure final avec les solution technique au problème expliqué dans la partie conception mécanique et donc les solution sont pour le bruit on a utilisé une courroie entre l’axe du moteur et celui des roue qui permet d’évité le frottement entre les 2 axes et pour les tremblement on a opté pour des pied qui vont permettre au moteur de ne pas être directement en contacte avec le sol et ainsi limité au maximum les vibrations. On peut voir aussi les composant électrique utilisé comme :  – la carte Me Orion (en haut au milieu)

– les 2 moteur (en bas) et leur driver (en haut)

– l’écran LCD (en haut)

– le capteur (au milieu de l’image)

– la télécommande (a gauche au milieu)

Maintenant que nous avons un prototype opérationnel on peut passez a la partie programmation.

 



III) PROGRAMMATION

 

Avant de ce lancé dans du code pur et dur voici un schéma explicatif de comment notre lanceur fonctionnera et donc de comment le programme sera fait.

Principe de fonctionnement informatique

 

1) Rasberry Pi 3

Qu’est ce que c’est ?

Le Raspberry Pi est un ordinateur à processeur ARM conçu par David Braben, dans le cadre de sa fondation Raspberry Pi2. Cet ordinateur  permet l’exécution de plusieurs variantes du système d’exploitation libre GNU/Linux et des nombreux logiciels compatibles. Il existent actuellement plusieurs versions du Raspberry-Pi. Il est malgré sa taille réduite suffisamment ouvert (ports USB, réseau) et puissant (ARM 700 MHz, 256 Mo de mémoire vive pour le modèle d’origine, 512 Mio sur les dernières versions) pour permettre une grande palette d’utilisations.

Le Raspberry Pi 3 est quant à lui équipé d’un processeur ARM Cortex-A53 quad-core 64 bits (Bradcom BCM2837) fonctionnant à 1.2GHz, de 4 ports USB 2.0, 1Go de mémoire, 1 sortie vidéo HDMI 1.3a, 1 port Ethernet 10/100, 1 prise jack audio/vidéo. La version 3 ajoute le support du Bluetooth 4 BLE (BCM43438) et plus du WiFi 802.11 b/g/n (BCM43438). Enfin, il possède un connecteur CSI permettant de brancher une caméra compatible.

 

Raspi 3

Un problème c’est alors très vite posé. Celui de se servir d’un rasberry Pi pour piloter une cate arduino. Afin de palier à ce problème une solution existe : le Megapi

Megapi Makerblock

Mais on très vite abandonné cette piste faute de matériel. Il fallait se  munir d’un Megapi et coté timing on étais assez limités. On a donc écarté le fait d’inclure le Rasberry Pi dans notre projet.

Nous avons décidé d’utiliser arduino afin de programmer.

2) Arduino (logiciel)

Mais arduino qu’est ce que c’est ?

Le logiciel Arduino (IDE) open source fonctionne sous Windows, Mac OS X et Linux. L’environnement est écrit en Java et basé sur processing avec d’autres logiciels open-source. Il fonctionne également comme compilateur C. Le C est adopté dans le monde entier pour les microprocesseurs. Il offre un bon compromis entre l’effort de développement et l’efficacité du programme.

 

 

Maintenant que le domaine informatique est devenu limpide on va pouvoir passez au code que je vais séparé en plusieurs partie distincte pour que votre compréhension soit plus facile :



Pour commencé on a inséré les librairie qui sont propre a notre carte MeOrion et pour notre moteur pas a pas AccelStepper, ensuite on définie une longueur max pour notre écran LCD et après on a créer des variable qu’on a mit a 0  de base ou d’autre qu’on a juste créer ensuite on a définie chaque composant utilisé :  – MeSerial (écran LCD) connecté au port 5.

– Me4Button(télécommande) connecté au port 8 et on définie ce qui ce passe quand on appuie sur le bouton.

– AccelStepper(Moteur pas à pas) on définie les 2 sens de marche et sur quel variable interne au MeOrion il sont connecté, le FULL2WIRE signifie qu’il n’y a que 2 fil pour un sens.

– MeUltrasonicSensor (capteur Ultrason) connecté au port 6 du MeOrion.

 

 

Maintenant qu’on a définie les librairies, les variables et les composant on peut passez a l’initialisation.



Pour l’initialisation on a juste définie une série d’action que notre lanceur va exécuté. Le mySerial.begin permet de définir la vitesse des bits donc des bauds et les mySerial.print(ln) permette d’écrire sur l’écran LCD. Donc cette série d’action va écrire UHA dans un rectangle ensuite on attend 3 seconde puis efface tous et on écris 3 phrase « Salut … » « Je suis B0-1 … » « Jouons ensemble ! » ensuite on efface tous et on écris « Owww tu vas kiffer » et aprés on efface tous.

 

 

Maintenant que notre initialisation est faite on va passez a la création de la fonction menu.



Pour la fonction menu ces une fonction qui est créé et qui pourra être appelez dans le programme, donc on peut voir que cette fonction est très simple elle permet juste d’écrire les 3 jeux qu’il y a et sur quel bouton il faut appuyé et sur quel bouton appuyé pour retourné au menu.

 

 

Maintenant on peut passez a la boucle infinie.



On peut voir dans cette boucle qu’au début définie ce que signifie appuyé sur le bouton et ensuite comme la variable start a été mise a 0 au début alors on appelle la fonction menu vu précédemment ensuite on passe start à 1 pour pouvoir commencé le programme.

 

 

Maintenant avant de passez a la création des jeux on va commencé par le capteur.



On peut voir que pour le capteur on commence par créer un compteur ensuite il faut que le moteur tourne toujours donc il faut constamment mettre des stepper(1/2).run() ensuite on demande pour que l’écran LCD écrive Nb_de volant suivi de la valeur du compteur. Puis pour un aspect visuelle on dit que pour chaque jeux on veut qu’il écrive le nom de ce jeux.

 

 

Maintenant pour un aspect visuelle on a définie des conditions.



On peut voir que ces condition sont active que quand soit tout les bits poubelle sont à 0 ou a 1 pour explication les bits poubelle sont définie pour l’activation(=1) ou la désactivation(=0) du mode de jeux pour résumé il permette soit que les moteur accélère pour pouvoir commencé le jeux soit qu’il décélère pour pouvoir arrêté le jeux, chaque jeux possède sont bit poubelle. Donc quand un des bits et a 0 alors on écrit que les moteurs vont s’arrêté et donc atteindre 0 tr/min et inversement quand un des bits et a 1 alors le moteur va atteindre 1200 tr/min.

 

 

Maintenant pour notre plus grand plaisir on a créé un événement.



On peut voir pour cette événement qu’il s’active quand le capteur a compté 10 volant et il va écrire sur l’écran « PFF petit joueur ».

 

 

Maintenant on peut passez a la création des jeux.



On peut voir pour la création du jeux 1 qu’on regarde quel bouton a été pressé si ces le bouton 1 alors on est dans le mode_jeux=1 et on incrémente la variable poubelle adéquate ensuite si celle-ci est égal a 1 alors on écrit le nom du jeux et la vitesse des moteurs. Ensuite on définie que la position actuelle des moteur est 0 et on lui donne une vitesse max une accélération et une position a atteindre (comme la position est très grande le moteur ne s’arrêtera pas tout de suite) et on fait cela pour les 2 moteurs.

 

 

Maintenant que la partie accélération et faite il faut passez a la partie décélération.



On peut voir comme je l’ai dit précédemment quand poubelle égal 2 (égal 0 car boucle infinie donc il voit poubelle égal à 0) alors le moteur est en phase de décélération, donc quand on appui de nouveau sur le même jeux la variable s’incrémente et donc on passe en phase de décélération (poubelle=2) dans cette phase on écrit la vitesse du moteur et le nom du jeux ensuite on prend la position du moteur actuelle et on lui dit qu’il a 5 fois cette distance pour s’arrêté.

Voici pour un mode de jeux mais le scénario ce répète a part que les moteur utilisé ne seront pas les même.

 



IV CONCLUSION

 

Quoi de mieux qu’une petite vidéo démonstrative pour conclure ?

 

 

Perspectives d’évolutions:

  • gestion plus effective du temps et des priorités
  • réalisation du vrai lanceur à l’instar d’un prototype
  • réalisation d’un socle pour les volants et choix de moteurs plus puissants

Webographie:


Microscope à bille

 

 

 

 

 

 

Microscope à bille

 

 

 

 

Sommaire :

 

 

Introduction

Cahier des Charges

Ressources

Réalisation du Projet

Perspectives D’améliorations

Conclusion

Remerciements

 

 

 

 

Introduction

 

Lors de cette deuxième année en DUT GEII, je suis amené à réaliser un projet, celui-ci doit être en lien direct avec ma formation ( génie électrique et informatique industrielle ), pour mon cas, il s’agit du projet intitulé « Microscope à bille », ce projet rentre dans le cadre du module « études et réalisations » dont la notation dépend des efforts fournies (avancement du projet), ainsi que le rapport et la vidéo .

Pour mon projet, il m’est demandé d’utiliser une Raspberry Pi 3 mais également de faire une « Conception Assistée par Ordinateur » (CAO) du microscope. Afin de réaliser mon projet, qui consiste à acquérir des images et faire du traitement de donnée, j’utilise « Python » un langage de programmation intégré dans le Raspberry Pi 3.

 

 

Cahier des Charges

 

 

A quoi sert le projet et à qui il sert ?

  

Les différents fonctions et contraintes du projet :

 

 

 

 

Fonctions principales : Le projet doit posséder les bases d’une microscope traditionnelles, en terme d’acquisition d’image, zoom,  réglage de luminosité et travaille d’un échantillon.

 

Contrainte Informatique : J’utilise une Raspberry Pi afin de crée le microscope.  Au delà de ça, il faut une interface visuelle afin de rendre le projet plus intuitif. La prise en main et la maîtrise des différents langages sont nécessaires pour réaliser le projet.

 

Contrainte Conceptuelle : J’utilise Corel Draw afin de réaliser la conception assistée par ordinateur de ma microscope en obtenant en produit final, un appareil peu coûteux et simple d’accès.La prise en main et la maîtrise des notions d’optiques sont nécessaires pour réaliser le projet.

 

Contrainte de ressources : Le budget est limité à 100€.

 

 

Organisation du projet :

 

 

 

 

Ressources

 

 

PICAMERA :

Caméra permettant d’acquérir une image ou faire une vidéo. Dans mon cas, elle est utilisée en tant que lentille d’acquisition d’image. Elle est de très bonne qualité,  en effet elle possède une multitude d’application (réglage de contraste, résolution, qualité…) très facile d’accès.

 

 

 

RASPBERRY PI 3:

C’est un mini-ordinateur qui relie les différents module du microscope. Cette carte contrôle l’écran, les LEDS ainsi que la caméra à travers des langages de programmations notamment le python.

 

 

 

SENSEHAT :

C’est un module qui contient un ensemble de capteur (pression, ultrason, température…), personnellement j’utilise seulement la matrice de LED compatible avec Raspberry Pi pour des raisons d’accessibilité. Ces LEDS sont simples à programmer. Cependant, le flux lumineux qu’elles délivrent est irrégulier après expérience.

 

ECRAN LCD :

Ecran tactile «  7 pouces » permettant de visualiser les images acquises par le microscope.  Il est possible de travailler directement avec le microscope sans avoir besoin d’être à proximité d’un écran d’ordinateur grâce à une interface manipulée avec python.

 

 

BILLE :

C’est utilisé comme une lentille, de 1,92 millimètres de diamètre, qui permet d’agrandir 177 fois l’image de la camera, qui est placé entre la source de lumière et l’échantillon.  La seule problématique est la distance entre la focale et l’échantillon.

 

Réalisation du Projet

 

Programmation : 

Dans un premier temps, l’objectif consiste à acquérir une image à l’aide de la PiCamera. La maîtrise de linux et aussi python est nécessaire avant de débuter l’un est semblable à l’invite commande d’un PC et l’autre est un langage de programmation intégré dans le Raspberry PI. Pour capturer une image, il faut : télécharger la librairie appropriée, déclarée au tout début du programme python. On à ainsi accès aux différents fonctionnalités comme par exemple : le contraste de l’image, la résolution, obtenir une vidéo, image ….

Puis dans un second temps le but est de régler la luminosité délivrée par le sense hat par le biais de la matrice de LED, pour facilité l’observation de l’échantillon. Il faut également installer la librairie pour ce cas.

Ensuite il m’est demandé de mettre au point une interface permettant de manipuler le code de manière tactile via Tkinter. Et pour terminer, faire du traitement d’image avec OpenCv, le travaille ce fait sur les pixels de l’image, le but est d’obtenir un échantillon perceptible pour ensuite l’étudier, avec l’aide du détection de contours et de filtre. 

 

 

Test 1 : observation d’un échantillon de plume d’oiseau avec filtre.

 

 

 

Test 2 : observation d’un échantillon de plume d’oiseau sans filtre.

 

 

Conception :

Pour ce projet, il m’est demandé de faire une CAO de la microscope. Pour ce faire, certains critères doivent être traités en amont, tout d’abord la distance focale entre la bille et la lentille de caméra (quelques millimètres ), ensuite la distance entre l’échantillon et la source de lumière (proche de 2cm), prendre en compte la taille de la nappe (15 cm), un support pour projeter la lumière à un point précis, un support pour tenir l’échantillon et le tout relié au Raspberry pi. Pour la conception, le logiciel utilisé est « CorelDraw ». C’est une conception en 3D utilisant une machine  à découpe laser.

 

Perspectives D’améliorations

 

 

Afin que le projet puisse connaître de meilleur résultat, il est envisageable de travaillé sur la source d’éclairage, l’autotomie ainsi qu’un moyen de support, d’extension pour la Picamera. 

 

Source d’éclairage :  LED Blanche.

   

 

Extension Picamera : Raspberry Pi Camera HDMI Câble Extension

 

Autonomie : Batterie lithium 5 Volts.

 

 

 

Conclusion

 

 

Ce projet m’a permis de découvrir de nouvelles choses comme : la gestion d’un projet, le travail en autonomie, la démarche à suivre pour arriver au bout d’un projet. De plus, cela m’a permis d’approfondir mes connaissances en informatique, en langage python, l’univers de linux ainsi qu’à la conception d’une microscope. 

 

 

Remerciements

 

 

Merci au département GEII de l’IUT de Mulhouse pour le budget et l’apport de matériels.

Nos professeurs encadrants Mr Verrier et Mr Bazeille de m’avoir aidé pour ce projet.


Microscopie sans lentille

  

MICROSCOPE SANS LENTILLE

 

SOMMAIRE

 

INTRODUCTION

PROBLÉMATIQUES

STRATÉGIES

COMPOSANTS

CAO

PROGRAMMATION

VIDÉO

CONCLUSION

POUR ALLER PLUS LOIN…

REMERCIEMENTS

 

INTRODUCTION

 

Durant notre deuxième année de DUT Génie Electrique et Informatique Industrielle nous devions effectuer un projet d’étude et réalisation. Nous avons choisi de réaliser un microscope sans lentille à l’aide d’un Raspberry Pi 3. Pour mener à bien se projet nous étions encadrés par deux professeurs, Mr Verrier et Mr Bazeille et notre équipe était composée de la manière suivante :

  • Arthur Gasser – Chef de Projet
  • Quentin Dijoux – Responsable Programmation
  • Raphaël Jimenez – Responsable Conception Assistée par Ordinateur

Notre microscope devait impérativement être réalisé en utilisant un Raspberry Pi 3 et nous devions le créer à l’aide d’une Conception Assistée par Ordinateur (CAO). Il nous a donc tout d’abord fallut apprendre les bases de la programmation Linux, Unix et de l’univers Raspberry en général. Mais nous avons également dû approfondir certaines notions concernant le domaine de l’optique pour pouvoir dimensionner notre microscope de manière optimale. La capture de l’image zoomée se fait à l’aide d’une RaspiCam Noire V2 et peut être visualisée sur un écran LCD et l’éclairage se fait à l’aide d’un module de leds SenseHat.

Nous avons commencé ce projet le jeudi 30/11/2107 et nous l’avons achever le lundi 22/01/2108. La réalisation d’un microscope géré électroniquement nous intéressait tout particulièrement car les différents aspects de conception et de programmation étaient nouveaux pour nous. Mais ce projet faisait appel à d’autres notions intéressantes comme l’holographie par exemple.

 

PROBLÉMATIQUES

 

Comment programmer efficacement le microscope pour qu’il soit simple d’utilisation ?

Comment dimensionner rigoureusement la CAO pour que les zooms effectués par le microscope soient suffisamment conséquents et nets ?

Nous voyons ressortir ici les deux points principaux de notre projet : CAO et Programmation.

 

STRATÉGIES

 

Ce projet était assez conséquent tant au niveau de la charge de travail qu’au niveau de la difficulté. Nous avons donc relevé le challenge en donnant le meilleur de nous même ! Nos points forts étaient notre motivation et notre bonne répartition des rôles. Nous avons également essayé de communiquer régulièrement avec nos professeurs encadrants afin qu’ils soient tenus au courant des avancements de notre projet et pour qu’ils puissent nous conseiller au mieux.

Nous avons tout d’abord réalisé le cahier des charges fonctionnelles accompagné de différents diagrammes pour bien commencer le projet. Puis nous avons effectué les différentes recherches nécessaires afin de pouvoir démarrer la programmation de la caméra et des leds. Ensuite nous avons étudié un certains nombres de documents afin de pouvoir calculer la future résolution de notre microscope qui nous a permis de le dimensionner et nous avons rédigé les différents documents accompagnant notre projet tout au long de celui-ci. Plus notre projet avançait, plus il était complexe, il a donc fallut travailler en dehors des heures prévues pour les études et réalisations, lors de nos temps libres.

Nous vous invitions à télécharger le PDF suivant afin de visualiser nos différents diagrammes qui nous ont permis de démarrer le projet dans les meilleures conditions possibles (Bête à cornes, MindMap, Pieuvre, Ligne des temps).

Stratégies

 

COMPOSANTS

 

Notre microscope est constitué de plusieurs éléments, nous allons vous les présenter brièvement. Les caractéristiques électroniques de ces composants sont détaillées dans notre Cahier des charges techniques disponible en bas de page.

  • RASPBERRY PI 3 Modèle B

C’est le cœur de notre microscope. En effet cette carte contrôle notre écran, nos leds ainsi que notre caméra. L’entièreté de la programmation a été réalisé sur ce Raspberry et toutes les informations sont centralisées à l’intérieur de ce dernier.

  • ECRAN LCD

Cet écran tactile permet de visualiser les images récupérées à l’aide de notre microscope. Il rajoute énormément de confort car il est possible de travailler directement avec le microscope sans avoir besoin d’être à proximité d’un autre écran. Cependant, travailler sur un écran plus grand reste plus confortable sur le long terme.

  • RASPICAM NOIRE V2

Cette caméra nous permet de capturer nos images zoomées. Elle est de très bonne qualité mais dans le cadre de notre application, comme le nom de notre projet l’indique, nous avons été amené à retirer la lentille présente sur la caméra. Cela est indispensable pour pouvoir réaliser les zooms des images.

  • SENSEHAT

Cette petite carte contient un module leds compatible avec Raspberry, voilà pourquoi nous l’avons choisi pour réaliser l’éclairage dans notre microscope. Ces leds sont pratiques à utiliser et assez simples à programmer. Cependant, le flux lumineux qu’elles délivrent est assez faible. Il est possible d’augmenter la qualité de notre microscope avec des leds plus puissantes.

  • CARTE SD

Nous réalisons des captures ainsi que du traitement d’image, ces opérations sont assez lourdes niveau mémoire. Nous avons donc du ajouter une carte SD de 16go compatible avec Raspberry pour éviter tout problème et pour mener à bien notre projet.

  • ÉCHANTILLON

Enfin, comme dans tout microscope, il faut un échantillon à observer. Comme pour les microscope classique nous observons des échantillons présents sur de simples lames standards.

CAO

 

L’un des points principaux de notre projet était de réaliser une CAO (Conception Assistée par Ordinateur) pour créer notre microscope. Pour cela, nous avons utilisé le logiciel Tinkercad, qui était le plus pratique dans notre cas car c’est un logiciel en ligne, nous pouvions donc travailler chez nous et sur tous les PC de l’IUT (voici un lien vers le site Tinkercad).

Pour une question de praticité, nous avons décidé de réaliser notre microscope en plusieurs pièces pour faciliter le montage ainsi que la maintenance. Dans cette partie, nous allons vous présenter chacune des pièces en détail.

  • SOCLE

Commençons par la base de notre microscope. Ce socle a été conçu afin que la caméra et surtout le capteur soit au milieu du microscope. Il y a également un chemin de câble qui passe en dessus pour que la nappe de la caméra soit protégée et pour la connecter directement au Raspberry de manière efficace. Le Raspberry et l’écran sont donc placés sur la partie avant du socle (la plus grande) pour des questions de confort.

  • MURS/ÉCHANTILLON

Sur ce socle, vient la partie qui permettra d’accueillir l’échantillon. Cette pièce est constituée de 4 murs et sur deux de ces murs, il y a une fente permettant d’introduire l’échantillon dans le microscope à l’aide de la pièce que nous allons voir tout de suite.

  • SUPPORT/ÉCHANTILLON

On place l’échantillon sur cette pièce puis on l’introduit dans le microscope. Tout a été étudié pour que le support soit maintenu par les deux fentes vues précédemment. Cette pièce est de cette forme car l’échantillon ainsi que la lumière doivent arriver jusqu’au capteur située juste en dessous.

  • PROTECTION

Pour que notre écran et notre Raspberry soient protégés contre les chutes. Nous avons réalisé cette pièce permettant de les caler. Sur cette pièce nous avons également réalisé deux trous pour laisser passer les câbles provenant du SenseHat et de l’alimentation mais aussi pour brancher le clavier, la souris et un câble HDMI. Nous avons aussi placé le logo de l’IUT ainsi que nos noms sur le dessus de la pièce.

  • PINHOLE

Cette pièce est entièrement pleine. Mais en son centre, il y a le trou appelé « pinhole » permettant de laisser passer la lumière. Sa taille a été étudiée afin que le phénomène de diffraction soit respecté, nous verrons les détails des phénomènes physiques dans la dernière partie de ce document.

  • FOCALE

Afin que le flux de lumière soit plus conséquent, nous avons ajouté une focale pour concentrer la lumière en un seul point. Cette pièce est donc constituée d’un trou permettant de fixer parfaitement la focale au centre.

  • LEDS/TUYAU

Notre module de leds sera fixé sur cette pièce, nous avons percé un trou afin de laisser passer les câbles du SenseHat. Ces câbles passeront ensuite dans le tuyau et descendront jusqu’au Raspberry.

  • TOIT

Voici la dernière pièce de notre microscope. Il s’agit d’un cube permettant de refermé le montage. Sur cette pièce nous pouvons voir le nom de notre microscope « μSCO-Pi 3D » ainsi que notre logo.

La CAO était une étape très importante du projet, nous avons donc consacré beaucoup de temps pour la réaliser de la manière la plus précise, esthétique et ergonomique. Cependant, le rendu final présentait quelques erreurs de précision que nous avons tenté de corriger au mieux. Nous avons dû peindre notre microscope en noir pour empêcher la lumière extérieure de gêner notre acquisition. Nous avons utilisé l’imprimante 3D (résine) de l’IUT Lab, nous souhaitons donc remercier Mr De Sabbata pour son aide.

Nous vous invitions à télécharger notre Cahier des charges techniques (CDCT) en bas de page dans la rubrique « Pour aller plus loin… » afin de visualiser nos différentes pièces ainsi que le microscope fini sur Tinkercad et après impression.

 

PROGRAMMATION

 

La programmation de notre microscope est réalisée en Python 3. Avant ce projet, nous n’avions aucune connaissance en Python et en Linux, nous avons donc dû nous adapter et apprendre ces différents langages. Nous souhaitions que notre microscope puisse être utilisé par tout le monde, c’est pour cela que nous avons annoté chacun de nos programmes. Nous utilisons trois programmes principaux et nous allons détailler leur contenu.

  • ACQUISITION

La programmation de notre microscope est réalisée en Python 3. Avant ce projet, nous n’avions aucune connaissance en Python et en Linux, nous avons donc dû nous adapter et apprendre ces différents langages. Nous souhaitions que notre microscope puisse être utilisé par tout le monde, c’est pour cela que nous avons annoté chacun de nos programmes. Nous utilisons trois programmes principaux et nous allons détailler leur contenu.

  • RECONSTRUCTION

La capture étant réalisée, il faut maintenant améliorer le rendu de celle-ci. Pour cela veillez cliquer sur le bouton « Reconstruction 2D » afin de lancer le programme correspondant. Ce dernier va réaliser une mise au point numérique à l’aide d’un recalage de pixel. Pour cela, il faut utiliser plusieurs FFT (Fast Fourier Transformer). Ces différents termes peuvent paraître compliqués mais en visualisant la photo une fois reconstruite vous allez très vite comprendre son impact sur l’image que vous avez prise précédemment. Une fois la reconstruction terminée vous pouvez analyser votre image.

  • ANALYSE

Pour ouvrir ce programme il vous suffit d’appuyer sur le bouton correspondant. Une fois le programme lancé, vous pouvez réaliser un certains nombres d’actions :

  • Contouring
  • Zoom
  • Déplacement
  • Annotation
  • Sauvegarde

Pour accéder à ces différentes actions, il vous suffit de lire les instructions présentes sur votre écran.

Vous pouvez retrouver tous nos codes en téléchargement dans la rubrique « Pour aller plus loin… » en bas de page.

 

VIDÉO

 

Dans le cadre du projet nous avons du réaliser une vidéo résumant l’entièreté de celui-ci. Nous n’avons pas réalisé une vidéo classique, en effet, nous avons utilisé une macro sur PowerPoint afin de transformer ce dernier en vidéo full HD puis nous avons rajouté nos voix ainsi qu’une musique en fond. Cette vidéo est disponible juste ici, nous vous invitons à la visionner.

 

 

CONCLUSION

 

Malgré le manque de connaissance, nous nous sommes adaptés très rapidement à l’univers Raspberry. Nous avons réussi à créer un programme assez simple d’utilisation ainsi qu’un CAO précise, nous avons atteints nos objectifs. Nous sommes globalement très satisfaits du rendu final de notre microscope. Le projet était assez complexe mais nous avons redoublé d’effort pour le mener à bien. Nous arrivons à obtenir des images zoomées avec une résolution et une précision correctes. Nous aurions cependant pu avoir de meilleurs résultats avec une source de lumière plus adaptée à la situation et un pinhole plus petit (ce qui était difficilement réalisable). Et avec plus de temps, nous aurions aimé réaliser, en plus de la reconstruction 2D, une reconstruction 3D de nos images mais c’est encore un autre niveau de difficulté.

Mais notre microscope n’est pas encore dans son état final puisque Mr Verrier continuera à travailler sur celui-ci et l’utilisera lors de divers présentations ou événements.

 

POUR ALLER PLUS LOIN…

 

Afin que notre projet soit plus complet et plus détaillé, nous avons rédiger plusieurs documents. Si notre projet vous a intéressé, nous vous invitons à les télécharger. Les différents programmes que nous avons réalisé sont également en téléchargement.

  • Cahier des charges fonctionnelles

Indispensable au bon démarrage du projet, ce cahier des charges définit les différents cadres et objectifs de celui-ci. Il permet de partir dans la bonne direction et de vérifier si tous les membres de l’équipe ont la même vision des moyens à mettre en œuvre pour accomplir les objectifs.

CDCF

  • Cahier des charges techniques

Ce document récapitule les fonctions des composants que nous avons utilisé, la manière dont nous avons effectué notre CAO, les différents calculs de dimensionnement que nous avons du faire et aussi un résumé de la partie programmation.

CDCT

Interface Raspberry

Analyse Raspberry

Interface Moniteur

Analyse Moniteur

Reconstruction

  • Guide d’utilisation et d’installations

Ce guide vous permet de comprendre comment utiliser notre microscope étape par étape mais il vous explique également comment installé les divers logiciels que nous avons installé sur notre Raspberry.

Guide

  • Rapport de nos séances

Ce document permet de visualiser l’avancement de notre projet au fur et à mesure de nos séances de travail.

Rapport des séances

 

REMERCIEMENTS

 

Nos professeurs encadrants pour leurs aides et leurs conseils.

L’IUT ainsi que l’IUT LAB de Mulhouse pour le budget et l’apport de matériels.