Où sommes nous ?

Retour

Détecteur de pluie

Lorsqu'il fait chaud l'été, nous laissons les volets entre ouverts pour laisser entrer la fraîcheur ... mais il est pénible de devoir se lever la nuit lorsqu'un orage éclate pour éviter que la maison ne se transforme en piscine.
Mes volets roulants étant déjà contrôlés par ma domotique, il ne me restait plus qu'à lui ajouter un détecteur de pluie pour éviter cette tâche fastidieuse ...

Le détecteur

Il existe 2 technologies pour détecter que la pluie tombe :

La première technologie à l'avantage de ne jamais exposer le capteur aux intempéries ... sauf que je n'ai pas trouvé de kit pour le faire ; j'ai alors pensé faire un tour dans une casse, mais vu le prix de pièces détachées qu'elles pratiquent généralement, je me suis rabattu sur la seconde solution : pour un peu plus de 0,5€ port compris, je ne risque pas grand-chose, même si j'ai quelques doutes quant à l'oxydation du capteur dans le temps, même le constructeur indique bien qu'il a été traité.

Le circuit peut être alimenté en 3,3v comme en 5v (ça tombe bien, c'est la tension de mon bus 1-wire) et délivre

Il ne reste plus qu'à l’interfacer avec le bus 1-wire ...

Côté 1-wire

Plutôt que de rajouter une nouvelle sonde, j'ai décidé de remplacer la DS18B20 qui mesure la température extérieure par un DS28EA00 qui en plus de fournir cette mesure, dispose de 2 PIOs.

Attention

Cette puce n'est disponible qu'en version uSOP, c'est-à-dire avec des pattes espacées de seulement 0,65mm : c'est vraiment très petit, au point que j'ai dû les souder avec une ... loupe.
Pour les plus aventureux, je conseille vraiment l'adaptateur uSOP/DIL qui limite les dégâts. Mais pour ceux dont les yeux ne sont pas au top, qui ne maîtrisent pas le fer à souder ... ou dont la patience n'est pas la qualité première : passez votre chemin et optez pour un classique DS2406

Le DS28EA00 apparait sur le bus et donc dans OWFS, comme membre de la famille 42. Comme on peut le voir, on retrouve dans le sous-répertoire correspondant quasiment les mêmes entrées que pour des DS18B20 et DS2406P.

laurent@torchwood /var/lib/owfs/mnt/uncached/42.886847000000 $ ls
address  fasttemp   latch.B     PIO.ALL   r_address  sensed.ALL   temperature10  type
alias    id         latch.BYTE  PIO.B     r_id       sensed.B     temperature11
crc8     latch.A    locator     PIO.BYTE  r_locator  sensed.BYTE  temperature12
family   latch.ALL  PIO.A       power     sensed.A   temperature  temperature9

Au passage, on notera qu'il reste possible d'alimenter la puce en mode parasite.

Mesure de température

Tout ce que je disais sur les DS18B20 reste valable pour les 28AE00 :

Note

Lors de mes tests, ce me suis rendu compte que ces sondes sont relativement moins précises que leur grande-soeur 18b20 (relativement, hein, la précision reste quand même excellente), mais semblent souffrir aussi d'un décalage pouvant atteindre un quart de degré : je conseille donc de bien penser à tarer ses sondes, surtout si leur valeur doit être comparée à des 18b20.

Commande des PIOs

Les 2 PIOs d'un DS28AE00 peuvent être utilisés dans 2 modes :

PIO.A et PIO.B contrôlent les PIOs en sortie :

sensed.A ou sensed.B (ou lire le PIO correspondant) renvoie le niveau actuel du port en entrée donc.

latch.A et latch.B :  renvoient la valeur que nous avons affectée à un PIOs (et non sa valeur réelle qui peut-être influencée par un élément externe lorsque le PIO ne conduit pas ... c'est le mode entrée).. Il n'est donc pas possible de détecter un changement d'état comme avec le ds2406.

Enfin, on retrouve les champs *.ALL qui correspondent aux 2 PIOs dont les états sont séparés par des virgules et *.BYTE où les mêmes états correspondent à un bit d'un octet (A = bit 0, B = bit 1).

On remarque qu'il n'y a pas de champ set_alarm : en effet, seule la température peut mettre un DS28EA00 en situation d'alarme, et non les PIOs.

Réalisation

Il ne m'est pas nécessaire de tester tout le temps s'il pleut ou non : éviter de gaspiller de l'énergie sur mon bus 1-wire, le détecteur ne sera activé qu'à la demande. C'est pourquoi j'avais besoin de 2 PIOs : un pour activer le dispositif, un second pour lire sa sortie.

Comme on peut le voir, le schéma est ont ne peut plus simple.

L'étage de commande

La première chose à savoir est la consommation du montage (qui n'est malheureusement pas indiquée par le constructeur) : D'après mon multimètre, le montage ne consomme que 4mA par temps sec et 8mA s'il pleut (en fait je pense même que cette consommation n'est due qu'aux LEDs ... on pourrait donc la réduire drastiquement en les supprimant).

Lorsque le PIO est activé, sa broche est reliée à la masse ce qui rend le transistor conducteur et donc alimente le détecteur.

Comme souvent, j'utilise des composants de récupération, à savoir ici un transistor A1015 de type PNP et qui a les caractéristiques suivantes :

Vce(sat) < -0,3 V
Vbe(sat) < -1,1 V
Ic(max) = -150 mA
HFE(min) = 70 (c'est le gain minimum)

Il nous faut maintenant calculer la résistance Rb avec la formule suivante :

Rb = Vcc / ( Icmax / HFEmin * 1,3 )

où 1,3 est un facteur de sécurité de 30%. Ce qui donne

Rb = 5 / ( 0,150 / 70 * 1,3 )
= 1795

Il faut donc que cette résistance fasse au plus 1,8KΩ pour permettre la saturation du transistor.

L'étage d'entrée

Pas besoin de résistance de pull-up ici car le détecteur renvoie soit 0v, soit 5v ... ce qui convient parfaitement au PIO.

Côté logiciel

Pour faire fonctionner le montage, pas trop de questions à se poser :

On allume le dispositif en rendant le PIO.A conduteur

laurent@torchwood /var/lib/owfs/mnt/42.925247000000 $ echo 1 > PIO.A

On regarde le résultat sur le sensed.B ... en logique inversée, c'est-à-dire qu'un 0 indique qu'il pleut.

laurent@torchwood /var/lib/owfs/mnt/42.925247000000 $ cat sensed.B
1

Il ne pleut pas.

Sauf que ...

A l'heure où j'écris ces lignes, OWFS en version 3.1 comporte un bug pour les DS28EA00 qui fait qu'il modifie systématiquement les 2 PIOs lors des écritures. Avec la commande ci-dessus, nous ne fournissons que la valeur du A, le B prenant une valeur indéfinie ... généralement il est activé et donc force la valeur de sensed.B.
La solution est d'utiliser

echo '1,0' > PIO.ALL

Avec Marcel (v5.03 ou plus)

Marche / arrêt du détecteur

Pour contrôler la mise sous tension du détecteur, on peut utiliser la configuration suivante

*OutFile=Detecteur de pluie
Topic=maison/IO/DetPluie
File=/var/lib/owfs/mnt/42.925247000000/PIO.A

On allumera le détecteur par un

laurent@torchwood ~ $ mosquitto_pub -t maison/IO/DetPluie -m 1

et l'extinction se fera par

mosquitto_pub -t maison/IO/DetPluie -m 0

mosquitto_pub est livrée avec Mosquitto ; évidemment, n'importe quel soumetteur MQTT fera l'affaire.

Détection

Concernant la température, nous sommes déjà en terrain connu

*FFV=Exterieur
File=/var/lib/owfs/mnt/42.925247000000/temperature
Topic=maison/Temperature/Dehors
Offset=-0.1727184846
Sample=60

et lire un PIO, nous savons faire aussi

*FFV=Pluie
File=/var/lib/owfs/mnt/42.925247000000/sensed.B
Topic=maison/IO/Pluie

Ne pas oublier que dans ce cas, une valeur 0 (zéro) indique qu'il pleut et le 1 (un) est pour le temps sec.

Activation / Désactivation de la détection (Marcel v6.04 ou plus)

Lorsque le détecteur est désactivé, il est inutile de continuer de publier son topic de données. Depuis Marcel v6.x, il est possible d'activer à la demande une section. Ce qui se traduit par les configurations suivantes :

Détection

Si la mesure de la température ne change pas

*FFV=Exterieur
File=/var/lib/owfs/mnt/42.925247000000/temperature
Topic=maison/Temperature/Dehors
Offset=-0.1727184846
Sample=60

on démarre Marcel avec le FFV d'état désactivé : on ne pollue donc notre bus MQTT.

*FFV=Pluie
File=/var/lib/owfs/mnt/42.925247000000/sensed.B
Topic=maison/IO/Pluie
Disabled

Activation du détecteur

Ici aussi, pas grand-chose ne change, si ce n'est qu'on y ajoute une fonction Lua

*OutFile=Detecteur de pluie
Topic=maison/IO/DetPluie
File=/var/lib/owfs/mnt/42.925247000000/PIO.A
Func=ActiveTopicPluie

La dite fonction est très simple : elle renvoie la valeur reçue par le OutFile contrôlant le détecteur dans le topic d'activation du FFV "Pluie".

function ActiveTopicPluie( section_name, val )
    Marcel.MQTTPublish( Marcel.ClientID()..'/OnOff/Pluie', val )
end

Ce qui donne ...

laurent@torchwood ~/Projets/Marcel $ ./Marcel -vf Test.conf 
Marcel (c) L.Faillie 2015-2016
Marcel v6.0400 starting ...

Reading configuration file 'Test.conf'
---------------------------
Broker : 'tcp://localhost:1883'
MQTT Client ID : 'Marcel.test'
User functions definition script : 'scripts/AllScripts.lua'
Entering FFV section 'Exterieur'
    File : '/var/lib/owfs/mnt/42.925247000000/temperature'
    Topic : 'maison/Temperature/Dehors'
    Delay between samples : 60s
    Offset : -0.172718
Entering FFV section 'Pluie'
    File : '/var/lib/owfs/mnt/42.925247000000/sensed.B'
    Topic : 'maison/IO/Pluie'
    Disabled
Subscriptions (DPD, RTSCmd) sections are grouped at the end of the configuration
Entering OutFile section 'Detecteur de pluie'
    Topic : 'maison/IO/DetPluie'
    File : '/var/lib/owfs/mnt/42.925247000000/PIO.A'
    Function : 'ActiveTopicPluie'
OnOff topic : Marcel.test/OnOff/
*W* SMS sending not configured : disabling unamed SMS sending
*W* Alert's command not configured : disabling unamed external alerting
*W* No named notification configured : disabling

Creating childs processes
---------------------------
Launching a processing flow for FFV 'Exterieur'
FFV 'Exterieur' : maison/Temperature/Dehors -> 21.889782
*I* [Pluie] Reading FFV 'maison/IO/Pluie' is disabled
*I* message arrival (topic : 'maison/IO/DetPluie', msg : '1')
*I* [Detecteur de pluie] '1' written in '/var/lib/owfs/mnt/42.925247000000/PIO.A'
*I* message arrival (topic : 'Marcel.test/OnOff/Pluie', msg : '1')
*I* Enabling 'Pluie'
FFV 'Exterieur' : maison/Temperature/Dehors -> 21.889782
FFV 'Pluie' : maison/IO/Pluie -> 1.000000

Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2024
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.