1. Introduction

J'ai eu l'envie de reproduire un système d'automatisation d'ouverture et de fermeture d'une cuvette dont j'ai fait l'expérience lors de mon voyage au Japon, l’été dernier. Ce système consiste à automatiser un couvercle d'une cuvette en plastique, de sorte à ce qu’il se lève et se referme automatiquement lors de la détection d’une personne. En effet, au Japon, les toilettes, sont dotées de beaucoup de fonctionnalités telles que musique, jet nettoyant et chasse automatique. Cela m’a donné l’idée d’en faire autant lors de ce projet même si toutefois cela ne sera pas aussi sophistiqué. D'autre part dans les toilettes publiques, il m’arrive de voir des traces d’urine, ce qui nuit à l’hygiène générale des toilettes.

Un des enjeux inhérents est de garantir une meilleure hygiène des toilettes pour limiter la propagation des bactéries. L’autre objectif est de garantir une utilisation plus rapide des toilettes et de garantir un meilleur confort sans avoir à toucher la cuvette avec les mains.

2. Matériel et méthodes

Schémas:

1. Vue de Profil



Légende:

  1. Capteur de distance HC-SR04 pour la détection d'une entrée ou de la sortie d'une personne des toilettes.
  2. Raspberry Pi 3, coordinateur du système.
  3. Moteur "treuil" pour l'ouverture ou la fermeture du couvercle de la cuvette.
  4. Système de fixation du moteur
    1. Planches
    2. Équerre
    3. Poids
  5. Capteur de distance HC-SR04 pour la détection d'une personne ou non sur les toilettes.
  6. Capteur de distance HC-SR04 pour la détection de l'ouverture ou non du couvercle de la cuvette.

2. Vue du dessus du système de fixation du moteur et des deux capteurs de distance.


Légende:

  1. Planches
  2. Équerres
  3. Poids
  4. Moteur avec vérin plus pièce "enrouleur".
  5. Capteur de distance HC-SR04 pour la détection d'une personne ou non sur les toilettes.

2.1 Matériel

  • 1 Raspberry Pi 3 avec Pin-40 Wedge et son Breadboard
  • Câblage
  • 1 Brique EV3
  • 2 Interrupteurs
  • 1 Capteurs de distance HC-SR04
  • 1 Servomoteur moyen MINDSTORMS
  • 1 Capteur de couleur MINDSTORMS
  • Pièce LEGO Technic
  • 1 Cuvette en plastique
  • 6 Planches
  • 2 Poids
  • 1 Rouleau de fil pour saucisson
  • Clous
  • (Câble USB)
  • 1 Élastique
  • 1 Ressort
  •  

2.1.1 Raspberry Pi 3 avec Pin-40 Wedge et son Breadboard

Le Raspberry Pi 3 est un fantastique mini-ordinateur à un prix très abordable de 40.-. Il est doté de multiples prises servant à connecter les différents capteurs. La Pin-40 Wedge est aussi un outil très intéressant qui permet de faire des circuits électroniques beaucoup plus facilement.

Il est le cerveau de ce projet comme il contrôle la partie détection et donne les ordres à la brique EV3.

2.1.2 Capteur HC-SR04

Ce capteur de distance à ultrason est précis pour un coût très bas de 9.20.- (frais de port inclus). Il est petit et n'a que 4 pins.

Pour l'alimentation du capteur il y a la pin Vcc (5V) et la pin GND (Ground). Ensuite la pin Trig (TRIGGER) et Echo. Pour mesurer une distance il faut envoyer une impulsion de minimum 10 microsecondes pour que le TRIGGER envoie 8 impulsions de 40kHz, ensuite lorsque la pin Echo reçoit le son, elle émet un courrant HIGH de la durée du voyage des impulsions (aller et retour). On mesure ce temps-là pour savoir la distance parcourue par le son (dans le code).

2.1.3 Brique EV3 et Servomoteur moyen MINDSTORMS

La brique EV3 est un autre mini-ordinateur, moins puissant que le Raspberry Pi mais qui peut exécuter des programmes simples. Il sera commandé par le Raspberry Pi via wi-fi. Le servomoteur a un nombre de tours définis, il suffit de faire le trajet 1 fois pour savoir combien de tours il faut faire pour soulever la cuvette.

Voici la Brique EV3 et ci-dessous le servomoteur

En dernier le capteur de couleurs

2.1.4 Cuvette en plastique

J'ai fait le choix d'utiliser une cuvette en plastique comme la cuvette actuelle est en céramique. Elle est lourde et pourrait se casser lors des tests. C'est pourquoi la cuvette en plastique offre un moyen léger et solide pour le moteur.

2.1.5 Cadre en bois

Ce cadre sert à ne faire aucune marque sur le carrelage de ma salle de bain, il est renforcé avec une 6ème planche pour ne pas tomber lorsque le moteur soulève le couvercle.

2.2 Méthode

Ce projet est divisé en 4 phases, d'abord la phase approfondissement et d'écriture. En deuxième, une phase de construction des support des différents éléments essentiels puis en troisième la phase d'électronisation et de communication. En dernier la phase de code pour arriver à mon but.

2.2.1 1ère phase: Écriture

Tout d'abord, j'ai repassé 10 heures à écrire et à approfondir les différentes étapes et problèmes auxquels j'ai fait face.

Cela m'a permis de poser les questions essentielles au développement du projet:

Comment installer les différentes parties du systèmes?

Pour le capteur de distance, j'ai utilisé un autocollant double face pour ne pas abimer le bois dans la salle de bain.

Dans le cas du Raspberry Pi 3, je pensais aussi utiliser ce système.

Dans le dernier cas pour fixer le moteur et le deux autres capteurs, j'ai pensé à un système qui n'endommagerait pas les catelles, en construisant un support qui ne nécessiterait aucune fixation dans le mur.

Quels moyens de communications entre les différentes parties du système?

Le Raspberry Pi 3 peut contrôler la brique EV3 grâce à l'OS ev3devs, cependant je ne me suis rendu compte de cette possibilité que le 27 janvier.

Comment alimenter les capteurs et le moteur?

Pour les capteurs, j'ai vu qu'on pouvait les contrôler directement via la "bread board" du Raspberry Pi 3.

Avec la brique EV3 aucun souci pour l'alimentation du moteur, il y a juste besoin d'un fil entre les deux et la brique est alimentée avec des piles.

Comment savoir si la cuvette est fermée ou ouverte? Comment éviter que la cuvette se referme sur la personne assise si une personne tierce enclenche le système de fermeture.

Un système de détection de couleur fourni dans le pack LEGO MINDSTORMS permet d'avoir une couleur d'ouverture et de fermeture. Ce qui permet de ne pas avoir d'autre personne qui enclenche le système de fermeture si une personne est déjà assisse dessus.

Enrouler le fil puis aider le couvercle lors de la fermeture pour qu'il reparte en avant.
Le tout a été construit en pièce LEGO et est équipé d'un ressort pour aider à la fermeture du couvercle. (image)

2.2.2 2ème phase: Construction

Comme le système est divisé en 2 parties, j'ai commencé par construire le support pour le moteur et pour les 2 capteurs à côté des toilettes. J'ai choisi de faire ce support pour ne pas abimer les murs. Sinon j'aurai du faire des trous dans les catelles.

Il est composé de 6 planches, 2 sur le sol de chaque côtés des toilettes, 2 qui montent sur le mur perpendiculairement aux 2 premières et 1 planches qui relient les deux côtés. La planche du mur et du sol gauches sont fixées avec une autre planche en diagonale pour assurer un bon maintien de la structure.

Pour l'autre partie du système, j'ai abandonné du fait de la non-communication entre les deux parties.

2.2.3 Électronique et communication

Pour faire fonctionner le capteur et lire ses valeurs, le système électronique est assez simple, il suffit juste d'un diviseur de tension entre la pine ECHO et GND pour ne pas faire griller les pins GPIO.
Ci-dessous l'électrification en entier avec de droite à gauche les pins du capteur: VCC, Trigger, Echo et GND.

Pour la partie LEGO, l'alimentation est gérée par la brique elle-même.

Du côté de la communication, cela passe par l'alimentation dans chaque partie. Mais pour l'intercommunication, je n'ai pas cherché assez tôt un moyen de communiquer avec la brique LEGO depuis le Raspberry Pi 3. Le système d'exploitation ev3devs aurait pu régler tout cela mais malheureusement je ne l'ai trouvé que le 27 janvier.

2.2.4 Code

Le plus dur a été de connecter le Raspberry Pi 3 au wifi comme la connexion HDMI ne fonctionnait pas. J'ai du d'abord le connecter à l'Ethernet puis ensuite mettre mon identifiant wifi et le mot de passe.

Dans la partie détection, le code n'est pas très compliqué mais il m'as fallu du temps pour comprendre les erreurs du code dont je me suis inspiré.

Le voici:

#!/usr/bin/python
#Code pour mesurer des distances grâce au capteur à Ultrason HC-SR04.
#On importe les librairies nécessaires pour mesurer une distance.

import sys
import time
import RPi.GPIO as GPIO

#On utilise les valeurs des pins indiquées sur le Pi-40 Wedge et non les
#valeurs physiques.

GPIO.setmode(GPIO.BCM)
GPIO_TRIGGER=23
GPIO_ECHO=24

#On fait une boucle d'essai pour pouvoir sortir du programme à tout moment

try:

        print "Ultrasonic Measurement"

        #On définit les pins comme entrée pour la pin Trigger et sortie
        #pour la pin Echo.

        GPIO.setup(GPIO_TRIGGER,GPIO.OUT)
        GPIO.setup(GPIO_ECHO,GPIO.IN)

        #On donne une valeur False à la pin Trigger (False=low=Intensité 0).

        GPIO.output(GPIO_TRIGGER, False)

        #On commence une boucle infinie pour tester tout les 6 dixièmes de
        #secondes la distance

        while True:

                #On laisse une demi-seconde au capteur pour se préparer

                time.sleep(0.5)

                #On lance une impulsion sur la pin Trigger de 10 microsecondes

                GPIO.output(GPIO_TRIGGER, True)
                time.sleep(0.00001)

                GPIO.output(GPIO_TRIGGER, False)

                #On recommence un timer en boucle pendant que la pin Echo est
                #low.

                while GPIO.input(GPIO_ECHO)==0:
                        start=time.time()

                #Puis pendant que la pin Echo est High on laisse le timer
                #mesurer le temps que le son a pris pour parcourir la
                #distance aller et retour. On sort de la boucle lorsque
                #l'impulsion est finie.

                while GPIO.input(GPIO_ECHO)==1:
                            pass

                #Directement après on arrête le timer.

                stop=time.time()

                #Elapsed nous sert à savoir le temps d'arrivée moins le temps
                #de départ ce qui nous donne le temps total. Puis on multiplie
                #cette duréee par la vitesse du son en cm/s= 34000 que l'on
                #divise par deux comme c'est la durée du trajet aller et
                #retour.

                elapsed=stop-start
                distance=elapsed*17000

                #On montre les résultats obtenu

                print "Distance: {}cm ".format(distance)

#La fin du try, ctrl+C nous permet de shutdown le programme.

except KeyboardInterrupt:
        pass

finally:
        GPIO.cleanup()

#Si j'avais su l'existence de ev3devs plutôt, j'aurai pu utiliser RPyC
#pour exécuter la suite des instructions sur la brique LEGO

Le résultat est assez précis comme vous pouvez le voir ci-dessous.

Pour le code du moteur et du capteur de couleur , c'est aussi assez simple.

En effet, on fait une boucle infinie dont la seule option de sortie est de présenter du blanc devant le capteur de couleur. Dès qu'on est sorti cela joue une petite musique (optionnel) et cela active le moteur qui tourne pendant 26 tours. Dès que le moteur a fini, on rentre dans une autre boucle infinie où cette fois, il nous faut la couleur bleue pour sortir au lieu de la couleur blanche. Une musique va aussi être jouée (optionnel) et le moteur fait 26 tours dans le sens contraire. Le tout est contenu dans une boucle infinie pour réitérer l'action autant de fois qu'on le veut.
Pour arrêter le système, la brique LEGO est équipée d'un petit bouton.

3. Résultats

Voilà comment cela donne sur mes toilettes :D

Les deux parties du système ont pu être construites électrifiées et codées, malheureusement la communication entre elles n'a pu être établie. Cependant voici, une vidéo du système, n'utilisant que les composants LEGO.

En plus une vue de près de la partie moteur et ressort.

On peut voir que le système fonctionne très bien et que les poids et le cadre en bois ne bougent presque pas. Lors de cette réussite et de celle de la mesure de distances, j'ai été rempli de joie, du fait du grand nombre d'heure consacré à ce projet.

4. Discussion

La partie de préparation du projet m'as pris plus de 10 heures pour poser les bonnes questions et les problèmes à venir. Ensuite, j'ai commencé par connecter le Raspberry chez moi pour commencer a construire et coder la partie de détection.

La partie de détection composée du Breadboard et de fils, du Raspberry Pi 3 et du capteur m'ont pris une soirée entière du fait de la difficulté de connecter le Raspberry Pi 3. De plus je n'avais pas bien lu la documentation du fait que le code dont je me suis inspiré chronométrait le temps de l'impulsion HIGH de la pin Echo. Or je croyais qu'il fallait chronométrer le temps depuis le départ de l'impulsion. J'ai appris qu'il fallait toujours lire une documentation avant de se lancer directement dans le code.

Ensuite, j'étais toujours coincé du côté du choix du moteur. J'ai un peu laissé le temps aller jusqu'au weekend du 20-21 janvier où je me suis dit que je pouvais utiliser les moteurs d'un pack LEGO que j'avais reçu il y a fort longtemps. Je me suis mis à construire l'enrouleur et le ressort pour qu'il soit fixé sur le cadre en bois. Cependant, j'ai laissé de côté le moyen de communication entre le Raspberry Pi 3 et la brique LEGO jusqu'au 27 janvier, ce qui fait que je n'ai pas réussi mon projet a 100%.

Dans ce projet j'ai aussi appris à comprendre un nouveau langage (LEGO MINDSTORMS) et comment l'utiliser, ce qui donne des avantages pour apprendre d'autres langages. J'ai aussi un peu tâtonné le langage HTML lors de l'écriture de ce blog.

Dans l'ensemble, j'évalue le temps passé à écrire et à réfléchir à 20 heures, le temps de construction d'environ 6 heures et le temps de code et d'électrification à environ 4 heures.

5. Conclusion

En conclusion, cela a été un projet de longue haleine, sur lequel je m'y suis pris légèrement trop tard pour la partie Méthode et Matériel du blog. L'apprentissage de plusieurs codes et du fonctionnement de plusieurs composants m'ont aidé a mieux comprendre comment l'information circule.

Ev3devs aurait pu apporter plus de code à l'ensemble de ce projet mais malheureusement le temps m'a manqué. C'est finalement la partie écriture qui aura pris le plus de temps. À chaque étape cruciale, j'ai été rempli de joie lors de la réussite de certaines parties telle que les mesures de distance grâce aux capteurs, le cadre, le fonctionnement du moteur et du capteur couleur et finalement l'ensemble du système.

L'avantage principal de mon projet est de ne pas avoir besoin de toucher la cuvette avec ses doigts, ce qui donne une meilleure hygiène aux toilettes.

Références

Fiche technique et explication du capteur HC-SR04: https://www.gotronic.fr/pj2-hc-sr04-utilisation-avec-picaxe-1343.pdf (consulté le 27 janvier 2018)

Explication de l'électrification et codage entre le Raspberry Pi 3 et le capteur HC-SR04: http://www.manuel-esteban.com/lire-un-capteur-ultrason-hc-sr04-avec-un-raspberry-pi/ (consulté le 27 janvier 2018)

Lien pour acheter le capteur HC-SR04: https://www.chipandlove.ch/fr/home/37-capteur-de-distance-hc-sr04.html (consulté le 27 janvier 2018)

Site pour expliquer ev3python: https://sites.google.com/site/ev3python/small-basic-ev3 (consulté le 27 janvier 2018)

Site de ev3devs: http://www.ev3dev.org/docs/getting-started/ (consulté le 27 janvier 2018)