La plupart des voitures récentes disposent d'un gadget assez rigolo: Les essuie-glaces automatiques, qui se mettent en marche dès qu'il pleut. Etant d'un naturel curieux, on s'est demandé comment fonctionne le détecteur de pluie des voitures, et s'il était possible d'en construire un soi-même sans être obligé de poser un pare-brise au beau milieu du jardin.
Un peu de théorie
En fait les détecteurs de pluie des voitures sont basés sur un principe optique: la réfraction. Lorsque qu'un rayon de lumière passe d'un milieu transparent à l'autre il est dévié. Cette déviation dépend de l'indice de réfraction respectif des deux milieux et est décrite par la relation suivante:
Déviation d'un rayon de lumière lors d'un changement de milieu
On note que si le rayon est perpendiculaire à la surface de transition, le rayon n'est pas dévié, quelque soient les indices de réfraction. D'autre part, cette relation met en évidence un angle limite au-delà duquel rayon ne traverse plus l'interface entre les deux milieux: il est réfléchi.
Réflexion d'un rayon de lumière lorsque l'angle d'incidence dépasse une certaine limite
C'est ce principe qui est utilisé dans les détecteurs de pluie: un rayon de lumière est envoyé dans un bloc de verre, l'angle du rayon est calculé pour que ce dernier se réfléchisse à l'intérieur du bloc et finisse dans un détecteur de lumière. Mais si une goutte d'eau se dépose sur la surface du verre, l'indice de réfraction de l'eau étant relativement proche de celui de verre, une partie du rayon arrive à sortir du bloc. Il y a donc moins de lumière qui arrive au détecteur. Gros avantage: ce système est relativement insensible à la lumière ambiante qui se contente de traverser le bloc sans atteindre le détecteur.
Schéma d'un détecteur de pluie, une goutte permet à la lumière de s'échapper
Voici l'illustration du phénomène avec un laser à l'intérieur d'un bloc en résine époxy.
Le rayon est réfléchi dans bloc optique
Une partie de la lumière arrive à sortir du bloc en passant par la goutte d'eau
Mise en pratique
La théorie est donc relativement simple: il suffit d'allumer une LED puissante à un bout d'un bloc transparent, et de placer un détecteur de lumière en face. On ne va pas utiliser le Yocto-Light qui est un peu trop lent avec ses 3 mesures par seconde. On va plutôt utiliser un Yocto-Knob avec un photo-transistor. C'est une technique qu'on a souvent utilisée: le changement de luminosité fait varier la résistance du photo-transistor ce qui est détectable par le Yocto-Knob.
Par ailleurs, la forme du bloc en forme de prisme tronqué n'est pas des plus pratique: elle oblige à fixer une LED et un photo-transistor à chaque bout, donc il y aura forcément un fil électrique qui relie les deux extrémités, ce qui n'est pas très élégant. On a donc choisi une forme un peu plus pratique qui permet de placer la LED et le détecteur du même côté.
Une forme plus adaptée pour le bloc optique
La grosse difficulté de ce projet est la réalisation même du bloc optique. Il existe probablement beaucoup de méthodes différentes pour y arriver. On a choisi de mouler de la résine époxy à la forme voulue: le moule est fabriqué avec des panneaux Plexiglas collés au pistolet à colle chaude. La résine époxy n’adhère pas sur le plexiglas. Il suffit donc, une fois la résine solidifiée, de démonter le moule pour en sortir un bloc parfaitement lisse: pas besoin de polissage.
Le moule en plexiglas
On en a profité pour noyer des inserts filetés dans la résine pour pouvoir fixer le bloc sur un support, à défaut vous pouvez utiliser des écrous.
Le bloc final, notez les inserts filetés pour le montage
Le problème de la résine époxy est sa couleur jaunâtre. C'est un moindre mal: on a fait quelques essais avec de la résine polyester complètement transparente. Le résultat a été assez décevant: le démoulage s'est avéré plus difficile qu'avec de l'époxy et le bloc a besoin d'être poli.
Il est difficile d'arriver à faire un bloc sans (trop) de bulles. Il faut mélanger le durcisseur et la résine très délicatement pour éviter la formation de ces bulles. Attendez-vous à devoir fabriquer plusieurs blocs avant d'obtenir un résultat satisfaisant.
Notez qu'il faut être particulièrement soigneux lors de la construction du moule: la moindre fuite pourrait bien rendre le moule définitivement solidaire de votre plan de travail.
Une fois qu'on a obtenu un beau bloc bien clair, il n'y a plus qu'à le fixer sur un support contenant la LED et le photo-transistor, et de raccorder le tout à un Yocto-Knob. On a alors un détecteur de pluie très design, il ne reste plus qu'à programmer l'application de détection.
Le câblage est trivial: trois fils sont nécessaires
Un détecteur de pluie super-design
Programmation
La programmation est des plus triviale: il suffit d'interroger en boucle le Yocto-Knob pour obtenir la luminosité détectée par le photo-transistor et de calculer l'écart-type des dernières valeurs lues. Un grand écart-type signifie que la réception de la lumière est très perturbée, donc qu'il pleut. Voici exemple en python qui fait ce calcul:
# -*- coding: utf-8 -*-
import sys,math
from yocto_api import *
from yocto_anbutton import *
errmsg=YRefParam()
# Setup the API to use local USB devices
if YAPI.RegisterHub("usb", errmsg)!= YAPI.SUCCESS:
sys.exit("init error"+errmsg.value)
# find any AnButtom function
channel = YAnButton.FirstAnButton()
if channel is None : sys.exit('No module connected')
# then find the first channel of the matching module
serial=channel.get_module().get_serialNumber()
channel1 = YAnButton.FindAnButton(serial + '.anButton1')
historic = []
stdDev = 0
# you might need to adjust these thresholds
historicSize = 30
level = 2.0
while True:
value= channel1.get_rawValue()
historic.append(value)
if len(historic)>historicSize: historic.pop(0)
l = len(historic)
if (l==historicSize):
avg = 0
avg2 = 0
for v in historic:
avg+= v
avg2+= v*v
avg = avg / l
avg2 = avg2 / l
stdDev = math.sqrt(math.fabs(avg2 - avg*avg))
if (stdDev>level):
print("It's raining")
else:
print("It's not raining")
YAPI.Sleep(10)
Et voilà le détecteur en action:
Conclusion
Ce détecteur permet de détecter quasi-instantanément la présence de pluie, mais pas la quantité d'eau qui tombe du ciel. Pour cela, il faudrait un pluviomètre. On a quelques idées à ce propos, on vous en reparlera à l'occasion.