1. Introduction

Comme il serait pratique, en rentrant chez soit après une journée de travail acharné, de pouvoir juste claper dans ses mains pour qu’un verre d’eau (ou d’autre pour ceux que l'eau ne satisfait pas) nous soit servit. Voilà en quoi consiste mon projet; la réalisation d’une fontaine à eau détectant un son et, à l’aide d’une pompe, servant une quantité prédéfinie d’eau (3dl).

Le système que je veux fabriquer doit non seulement pouvoir détecter un son mais également si un verre est sous l'arrivée de liquide afin d'éviter tout accident. Il est, en effet, relativement désagréable de devoir essuyer le meuble sur lequel se trouve la fontaine à la place d'avoir sa boisson servie. Le tout est réalisé à l'aide d'un raspberry pi branché directement à un écran et à un routeur à l'aide d'un câble ethernet, et auquel j'ai branché un clavier et une souris afin de pour travailler dessus. Le code, lui, est récrit en python sur la base d'un model skel.py reçu en classe.

Malheureusement à cause d'un problème technique, la pompe sur laquelle reposait ma fontaine a cessé de fonctionner après le troisième essaie. Mon projet sera donc un "proof of concept" où la pompe a été remplacée par une LED qui s'allume lorsque la pompe aurait dû être en marche, afin de prouver que le système fonctionne.

2. Matériel et méthodes

2.1 Matériel

  • 1 x Raspberry pi (Model B+)
  • 1 x Breadboard
  • 2 x Mini-breadboard
  • 1 x Pi wedge SparkFun
  • 1 x Câble nappe
  • 1 x Microphone à électret (Amplifié)
  • 1 x Set d'IR-LED et d'IR-Receiver (Photodiode)
  • 1 x Potentiomètre U103
  • 1 x Pompe à aquarium Anself DC5V 2.3W (220l/h) (remplacée ici par une LED rouge)
  • 18 x Fils électriques de couleurs différentes
  • 2 x Résistances 300Ω
  • 1 x Résistance 10'000Ω
  • 1 x Clavier
  • 1 x Souris
  • 1 x Écran
  • 1 x Câble ethernet
  • 1 x Câble HDMI

2.2 Méthode

Le projet est composé de deux parties : la partie physique (Hardware) qui comprend tout les branchements et la partie code (Software).

2.2.1 Hardware

La partie Hardware est elle même composée en trois sous-parties qui sont : l'émetteur et le récepteur à infrarouge, le microphone et enfin la pompe, remplacée par une LED. Pour commencer il faut préciser le code couleur des câbles afin de faciliter la lecture du système. Les câbles rouges et oranges sont reliés aux la sorties 5V du PI wedge, les câbles blanc et noir sont relié aux l'entrées GND, les fils bleus représentent des entrées de courant dans le wedge et les fils vers des sorties.

Le câblage des émetteur/récepteur infrarouge est relativement simple. L'émetteur se branche comme une LED classique. L'anode (+) (le pin le plus long) est reliée à une résistance de 300Ω, afin de ne pas faire griller l'IR-LED. Cette dernière est câblée à la sortie 5V du PI wedge. La cathode est branchée à l'entrée GND du PI wedge. Pour le récepteur c'est l'inverse, l'anode (+) est reliée à l'entrée GND. La cathode est branchée à l'entrée G4 sur le PI wedge mais aussi à la sorti 5V du PI wedge à travers une grosse résistance (10'000Ω). Le récepteur fonctionne comme une porte on/off, de base le courant sort par le pin G4 mais lorsque il reçoit un signal infrarouge le courant passe de la cathode à l'anode donc plus de courant n'arrive sur le pin G4.

IR.JPG _Figure 1 : Émetteur et récepteur infrarouge._



La partie la plus compliquée du système est le microphone à électret. Les pins Vdd et Gain sont reliés à la sortie 5V, le pin GND à l'entré GND et le pin out est la sortie du micro. Le fonctionnement du micro est le suivant : lorsqu'il reçoit un son il envoie un courant de 0 à 3.3V (selon la puissance du son) par le pin "out". Le problème est que le Raspberry ne détecte que les signaux digitaux (0 ou 1), c'est à dire qu'il ne fait pas la différence entre un courant de 1V de tension et un courant de 3.3V de tension. La conséquence est que dés qu'il va recevoir un son le signal va passer à 1, il est donc impossible de capter un son particulier comme un clap. Pour palier à cela j'ai ajouté un potentiomètre entre la sortie du microphone et le pin G22, le pin d'entré sur le PI wedge. Le potentiomètre permet d'ajouter un grosse résistance réglable à la sortie du microphone. Cette résistance va baisser la sensibilité de ce dernier car il faut plus de tension pour qu'un courant, suffisant pour être détecté par le raspberry, passe par le potentiomètre. Ce dernier offre également un autre avantage qui est de pouvoir régler la sensibilité du microphone, en effet plus on baisse la résistance du potentiomètre plus le micro est sensible.

La dernière partie, la plus simple, est de brancher la LED qui remplace la pompe. L'anode (+) est reliée au pin de sorti G24 à travers une résistance de 300Ω et la cathode est reliée au pin d'entré GND du PI wedge.

DSC04297.JPG _Figure 2 : Câblage final_

2.2.2 Software

La partie code pour ce projet est relativement simple. Je commence par importer deux librairie :

   import RPi.GPIO as GPIO
import time

La première est nécessaire afin de pouvoir configurer les pins de sortie (GPIO : General Purpose Input/Output). La seconde permet d'utiliser des commandes en rapport avec le temps. Elle sera utile lors de la configuration de la pompe.

Ensuite, j'ajoute une commande permettant de prendre les numérotation des pins sur le PI wedge à la place de ceux du raspberry :

   GPIO.setmode(GPIO.BCM)

Puis, il faut configurer les pins d'entrée et de sortie :

   INFRA = 4
MICRO = 22
POMPE = 24

GPIO.setup(INFRA, GPIO.IN)
GPIO.setup(MICRO, GPIO.IN)
GPIO.setup(POMPE, GPIO.OUT)

Par la suite, je lance la première partie du code qui consiste à détecter si un verre est présent ou non entre l'émetteur et le récepteur infrarouge :

   while True:
if GPIO.input(INFRA) == GPIO.HIGH:
print "Ready"
else:
print "NotReady"

Ces commandes permette d'afficher sur l'écran auquel est relié le raspberry si la pompe est prête à être activée ou non. Si le raspberry affiche ready alors qu'il n'y a pas de verre c'est qu'il faut légèrement replacer l'émetteur afin qu'il soit parfaitement en face du récepteur.

La partie suivante est celle qui permet de lancer la pompe lorsque le micro détecte un son suffisamment fort comme un clap et qu'un verre est détecté :

       if GPIO.input(INFRA) == GPIO.HIGH and GPIO.input(MICRO) == GPIO.HIGH:
GPIO.output(POMPE, GPIO.HIGH)
time.sleep(4.9)
GPIO.output(POMPE, GPIO.LOW)
else:
GPIO.output(POMPE, GPIO.LOW)

Les deux dernière commande permette d'éteindre la pompe après un certain temps. Ce temps est fixé à 4.9s ; Le temps nécessaire à une pompe d'un débit de 220l/h pour remplir un verre de 3dl.

Enfin je termine le code par des commandes permettant d'arrêter le système lorsque l'on appuie sur ctrl+c et lorsque le raspberry s’éteint.

   except KeyboardInterrupt:
# ctrl+c
pass

except Exception as error:
# error
print error

finally:
# always clean up before leaving
GPIO.cleanup()

3. Résultats

Bien que la pompe ne fonctionne pas et donc que la fontaine ne peut pas distribuer de l'eau, le résultat est plutôt satisfaisant. Il suffirait de remplacer la LED par un pompe neuve et le projet fonctionnerait parfaitement.

Final.JPG _Figure 3 : Projet Final_

4. Discussion

La manière dont le projet à été réalisé n'était pas celle prévue à la base surtout au niveau du micro. Ma première idée à été de connecter le micro à un convertisseur analogique adc, mais après plusieurs essaies infructueux et n'aillant pas trouvé les connaissances nécessaires l'idée du potentiomètre est venue. Certes il permet de régler la sensibilité du micro afin de l'adapter à ses désirs mais il a également ses limites. En effet, une de mes idées était d'ajouter une librairie de reconnaissance vocal pour pouvoir par exemple dire un mot comme "café" pour activer la pompe, mais mon système fonctionnant toujours avec une sortie digital il n'est pas possible de le faire. Une autre limite de mon système est au niveau des émetteur/récepteur infrarouge. En effet, si le verre entre les deux est transparent le signale passe et va donc indiquer que la pompe n'est pas prête à fonctionner. Le système ne s'activera donc pas au son d'un clap.

5. Conclusion

Le projet était de réaliser une pompe s'activant au son d'un clap. Les objectifs sont partiellement atteint car tout le système fonctionne excepté la pompe qui est l'élément qui semble central mais qui ne l'est pas au niveau du projet en soit car le but premier était de détecter un son et d'activer quelque chose avec ce son. Mon projet m'a permis de me familiariser avec les méthodes à appliquer afin de programmer quoi que ce soit; Considérer chaque partie du système comme un système en soit et une fois que tout marche indépendamment tout mettre ensemble.

Références

Iglesias, Javier (2017-18). OC informatique : notes de cours. Gymnase provence OC info gymnase Provence site Web. Consulté le 31 jan. 2018. https://oci.gyre.ch/