Beda de chuva de gorjeta simples conectada via Lorawan ™. O dispositivo conta o número de vezes a ponta/queda do balde e envia o valor usando o Lorawan ™.
Um aplicativo receptor pode calcular a precipitação e, se necessário, redefinir o contador.
O cálculo das chuvas é inspirado na instrução Arduino-Rain-Gauge-Calibration.
É usado um manômetro de caçamba com as dimensões 11 cm por 5 cm, respectivamente, fornecendo uma área de captação de 55 cm². Uma coleção de 10 mililitros de chuva é de 10 ml/55 cm² = 0,181818182 cm = 1,81818182 mm de chuva.
No bitador de chuva de gorjeta, as pontas da balde/cai 5 vezes para 10 ml (ou 1,81 mm de chuva) e, portanto, uma única ponta é para (10/5) ml = 2 ml (ou 0,364636364 mm).

Todos os pinos necessários dos pinos RFM95 estão na pena diretamente conectada aos pinos no 32U4, exceto no RFM95 DIO1. Para RFM95, o DIO1 é o pino Arduino 1 selecionado, pois é a interrupção externa nº 3 e também localizada ao lado do DIO1 na pena. Adafruit Feather 32U4 RFM95 Mapeamento de pinos.
O balde de gorjeta precisa de dois pinos na pena, GND e entrada. Como o pino de entrada é o pino Arduino 3 (interrupção externa 0) selecionada.
O pull-up fraco precisa ser ativado para o pino Arduino 3, portanto, quando as pontas/tumores do balde de gorjeta um sinal baixo pode ser detectado.
Platformio usando a plataforma Adafruit Feather 32u4 é a base. A Biblioteca Arduino-LMIC fornece o suporte ao Lorawan ™.
O firmware conta apenas o número de dicas/tocas feitas pelo balde de gorjeta e o envia usando o Lorawan ™. Na mensagem também está o nível de tensão da bateria relatado.
Durante a sequência de junção de Lorawan, o LED está desaparecendo. A classe Fade é construída a partir do exemplo de LED de desbotamento do Arduino.
A economia de energia é feita em dois estados principais. Modo de chuva e nenhum modo de chuva.
Um terceiro modo define o dispositivo no modo Sleep_forever sem nenhuma interrupção ativada se a tensão da bateria estiver abaixo de 3,5 v. Isso é para salvar a bateria de ser destruída pela alta.
O sono é realizado em intervalos de 8 segundos e, após cada 8 s de sono, a máquina de estado LMIC é verificada e os dados se forem os dados do tempo.
O período de envio de dados padrão é de 15 segundos.
Se não houve nenhuma chuva detectada por aproximadamente uma hora, o dispositivo define o modo de suspensão Sleep_forever e aguarda a próxima vez que chover, para que uma interrupção externa acorde o dispositivo.
Quando o dispositivo acorda uma mensagem é enviada para buscar qualquer comando recebido.
Para simplificar a integração com a rede de coisas, um decodificador e o codificador pode ser usado para simplificar o uso da API MQTT.
Comando MQTT para redefinir o balcão de chuva no dispositivo. A redefinição do parâmetro deve ter o valor 234 (0Xea) para que o comando de redefinição seja aceito pelo dispositivo.
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"reset":234}} 'Comando MQTT para definir o intervalo de transmissão para 15 minutos.
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 ;
}