Простой чаевой дождевой датчик, подключенный через Lorawan ™. Устройство отмечает количество раз пожилки/падения ведра и отправляет значение с помощью Lorawan ™.
Приложение приемника может затем рассчитать количество осадков и при необходимости сбросить счетчик.
Расчет осадков вдохновлен инструкцией по калиброванию Arduino-Rain-калибровку.
Используется дождевой датчик дождя с дождем с размерами 11 см на 5 см, что дает площадь водосбора 55 см². Коллекция из 10 миллилитров дождя составляет 10 мл/55 см² = 0,181818182 см = 1,81818182 мм дождя.
В датчике дождевого дождевого ведра ковшом кончики/упадок 5 раз для 10 мл (или 1,81 мм дождя) и поэтому один наконечник предназначен для (10/5) мл = 2 мл (или 0,364636364 мм).

Все необходимые контакты Pins RFM95 находятся на перьете непосредственно связаны с булавками на 32U4, за исключением RFM95 DIO1. Для RFM95 DIO1 выбран ARDUINO PIN 1, поскольку он является внешним прерыванием № 3, а также расположен рядом с DIO1 на перьев. Adafruit Feather 32u4 RFM95. Картирование штифтов.
Ковке с перевязанностью нуждается в двух контактах на перьев, GND и входе. В качестве входного вывода Arduino Pin 3 (внешнее прерывание 0) выбран.
Слабые подтягивания должны быть включены для Arduino Pin 3, поэтому, когда можно обнаружить кончики/купание с перекрашенными ковшой, можно обнаружить низкий сигнал.
Платформа с использованием платы Adafruit Feather 32u4 Platformio является базой. Библиотека Arduino-LMIC обеспечивает поддержку Lorawan ™.
Прошивка подсчитывает только количество советов/падений, сделанных ковшом, и отправляет его с помощью Lorawan ™. В сообщении также сообщается уровень напряжения батареи.
Во время последовательности соединения Lorawan светодиод исчезает. Класс FADE построен из примера Arduino Fading Led.
Экономия энергии выполняется в двух основных состояниях. Режим дождя и нет режима дождя.
Третий режим устанавливает устройство в режиме sleep_forever без каких -либо включенных прерываний, если напряжение батареи ниже 3,5 В.
Сон проводится с интервалами в 8 секунд, и после каждых 8 с сна проверяется машина LMIC состояния и данные, если пришло время времени.
Данные по умолчанию период отправки составляет 15 секунд.
Если в течение примерно один час устройства устанавливает режим сна, и ожидает, что в следующий раз, когда в следующий раз, внешнее прерывание разбудит устройство.
Когда устройство просыпается, сообщение отправляется, чтобы принести любую входящую команду.
Чтобы упростить интеграцию в сеть вещей, можно использовать декодер и энкодер для упрощения использования API MQTT.
Команда MQTT для сброса дождевого счетчика в устройстве. Сброс параметра должен иметь значение 234 (0xea) для команды сброса, которая будет принята устройством.
mosquitto_pub -h < Region > .thethings.network -u " <AppID> " -P " <AppKey> " -t ' <AppID>/devices/<DevID>/down ' -m ' {"port":2,"confirmed":true,"payload_fields":{"reset":234}} 'Команда MQTT для установки интервала передачи на 15 минут.
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 ;
}