Construire un détecteur de pluie

Construire un détecteur de pluie

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
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
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
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
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
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
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
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 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
Le câblage est trivial: trois fils sont nécessaires


Un détecteur de pluie super-design
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:


#!/usr/bin/python
# -*- 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.

Commenter 11 commentaires Retour au blog



1 - hotfirenet Vendredi 05 juillet 2013 8H43

C'est énorme votre truc, par contre la rosé du matin va engendrer des gouttes, le capteur va donc signaler de la pluie alors qu’il n’y en a pas ? En tout cas bravo c’est un super article.

2 - martinm (Yocto-Team)Vendredi 05 juillet 2013 8H48

Oui, il y a des chances que la rosée soit détectée comme de la pluie, encore que la détection étant basée sur la variation brusque de luminosité (écart type) la rosée est peut-être un phénomène suffisamment lent pour ne pas interférer.

On doit aussi pouvoir traiter le bloc avec une substance hydrophobe quelconque pour que les gouttes ne restent pas accrochées.

3 - vince Samedi 24 mai 2014 15H52

Très bon projet. J'aurais voulu savoir la référence de la résine et du durciseur que tu avais choisi, étant donné que je travaille sur le même projet.
Merci d'avance.

Vincent

4 - martinm (Yocto-Team)Samedi 24 mai 2014 16H41

@vince: On a utilisé de l'époxy L + durcisseur L standard parce que c'est ce qu'on avait sous la main. Ça se trouve dans les bon magasins de modélisme par exemple www.topmodel.fr (ref 187100110-1), ou encore auprès de vendeurs spécialisés comme www.swiss-composite.ch (ref 100.1101). Prévoir une balance de précision pour un mélange précis.

Ceci dit, ce n'est probablement pas le meilleur choix en terme de qualités optiques.

5 - vince Dimanche 25 mai 2014 16H55

Je me demandais au niveau de la LED choisie pour l'application finie, vous avez pris une Led avec un angle de vue assez faible vu le rayon que vous obtenez ?

6 - martinm (Yocto-Team)Dimanche 25 mai 2014 17H38

@vince : le rayon lumineux qu'on voit sur la vidéo provient d'un pointeur laser vert. Le but était de mettre en évidence ces phénomènes de réflexion/réfraction de manière un peu spectaculaire :-)

Dans le détecteur de pluie, une telle débauche de puissance n'est pas nécessaire, ni même souhaitable. On a utilisé une LED rouge L-7104SEC-J3 de Kingbright et un phototransistor SFH 310-2/3 de OSRAM.

7 - vince Dimanche 25 mai 2014 17H42

Merci beaucoup pour toutes ces précisions.

8 - bsg75 Dimanche 09 juillet 2017 7H09

Superbe réalisation, pour ceux qui auraient la flemme de réaliser le capteur : http://www.vaisala.fr/fr/products/rainandprecipitationsensors/Pages/DRD11A.aspx

9 - bsg75 Mercredi 12 juillet 2017 16H24

Bon j'ai obtenu le prix du capteur en question : 735€ ht! Autant dire que le jour où j'en aurai le besoin, je réaliserai le capteur selon les instructions présentées ici.

10 - xabi Lundi 03 septembre 2018 8H42

Bonjour, J'ai deux questions : 1 - Je me demande si ce détecteur est sensible à la lumière du soleil. En d'autre termes, si le détecteur est exposé au soleil, la mesure ne vas t'elle pas être faussée ? 2 - Avec quoi avez vous fabriqué le socle comportant les leds ? Merci d'avance pour vos réponses.

11 - martinm (Yocto-Team)Mardi 04 septembre 2018 14H33

@xabi: la géométrie du bloc empêche l'essentiel de la lumière extérieure d'atteindre le capteur de lumière. De plus, la détection de pluie étant basée sur l'écart-type de la mesure de luminosité, les changement lents ou isolés n'affectent pas la détection. Le socle est en impression 3D, mais n'importe quel support peut faire l'affaire.

Yoctopuce, get your stuff connected.