Gauge de pluie de godet à basculement simple connecté via Lorawan ™. Le périphérique compte le nombre de fois la pointe du seau / tombe et envoie la valeur à l'aide de Lorawan ™.
Une demande de récepteur peut alors calculer les précipitations et, si nécessaire, réinitialiser le compteur.
Le calcul des précipitations est inspiré par l'instruction arduino-rain-calibrage-calibrage.
Une jauge de pluie de seau de basculement avec les dimensions de 11 cm par 5 cm respectivement est utilisée, donnant une zone de bassin versant de 55 cm². Une collection de 10 millilitres de pluie est de 10 ml / 55 cm² = 0,181818182 cm = 1,81818182 mm de pluie.
Dans la jauge de pluie de seau de basculement, les pointes / dégringolements du seau 5 fois pendant 10 ml (ou 1,81 mm de pluie) et donc une seule pointe est pour (10/5) ml = 2 ml (ou 0,364636364 mm).

Toutes les broches nécessaires des broches RFM95 se trouvent sur la plume directement connectée aux broches sur le 32U4, à l'exception de RFM95 Dio1. Pour RFM95 Dio1 est Arduino Pin 1 sélectionné car il s'agit d'une interruption externe n ° 3, et également située à côté de Dio1 sur la plume. Adafruit Feather 32U4 RFM95 Mappage des broches.
Le seau de basculement a besoin de deux broches sur la plume, GND et l'entrée. La broche d'entrée est la broche Arduino 3 (interruption externe 0) sélectionnée.
Un traction faible doit être activé pour la broche Arduino 3, donc lorsque le godet de basculement pointe / dégringole, un signal faible peut être détecté.
Platformo à l'aide de la carte de plateforme Adafruit Feather 32U4 est la base. La bibliothèque Arduino-LMIC fournit le support Lorawan ™.
Le firmware ne compte que le nombre de conseils / tubs effectués par le seau de basculement et l'envoie à l'aide de Lorawan ™. Dans le message, le niveau de tension de la batterie est également signalé.
Pendant la séquence de jointure de Lorawan, la LED s'estompe. La classe Fade est construite à partir de l'exemple LED de la décoloration Arduino.
L'économie de puissance se fait dans deux états principaux. Mode de pluie et pas de mode de pluie.
Un troisième mode définit l'appareil en mode Sleep_forever sans aucune interruption activée si la tension de la batterie est inférieure à 3,5 v. Ceci est pour éviter que la batterie ne soit détruite par la décharge.
Le sommeil est effectué à 8 secondes intervalles et après chaque 8 s de sommeil, la machine à états LMIC est vérifiée et les données si des données de temps sont envoyées.
La période d'envoi de données par défaut est de 15 secondes.
S'il n'y a pas eu de pluie détectée pendant environ une heure, l'appareil définit le mode de sommeil Sleep_forever et attend la prochaine fois qu'il pleut pour qu'une interruption externe réveille l'appareil.
Lorsque l'appareil se réveille, un message est envoyé pour récupérer toute commande entrante.
Pour simplifier l'intégration au réseau de choses, un décodeur et un encodeur peuvent être utilisés pour simplifier l'utilisation de l'API MQTT.
Commande MQTT pour réinitialiser le compteur de pluie dans l'appareil. La réinitialisation du paramètre doit avoir la valeur 234 (0xea) pour que la commande de réinitialisation soit acceptée par l'appareil.
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"reset":234}} 'Commande MQTT pour définir l'intervalle de transmission à 15 minutes.
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"multiplexer":15}} ' function Decoder ( bytes , port )
{
// Decode an uplink message from a buffer
// (array) of bytes to an object of fields.
var decoded = { } ;
if ( port === 1 )
{
if ( bytes . length >= 3 )
{
decoded . counts = ( ( ( bytes [ 2 ] & 0x80 ) >> 7 ) << 16 ) | ( bytes [ 1 ] << 8 ) | bytes [ 0 ] ;
decoded . vbat = ( ( bytes [ 2 ] & 0x7F ) + 330 ) / 100.0 ;
}
}
return decoded ;
} function Encoder ( object , port ) {
// Encode downlink messages sent as
// object to an array or buffer of bytes.
var bytes = [ ] ;
if ( port === 1 && ( ( object . multiplexer > 0 ) && ( object . multiplexer < 255 ) ) )
{
bytes [ 0 ] = 1 ;
bytes [ 1 ] = object . multiplexer ;
}
else if ( port === 2 && object . reset === 0xea )
{
bytes [ 0 ] = object . reset ;
}
return bytes ;
}