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 ...
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 ...
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.
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.
Tout ce que je disais sur les DS18B20 reste valable pour les 28AE00 :
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.
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.
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.
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.
Pas besoin de résistance de pull-up ici car le détecteur renvoie soit 0v, soit 5v ... ce qui convient parfaitement au PIO.
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.
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
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.
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.
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 :
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
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
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 : 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 au total. |
Vous pouvez
laissez un commentaire
sur cette page.