Домашняя метеостанция

Уголок радиоконструктора

Мы создаем метеостанцию ​​на базе Fishino, которая позволяет вам собирать данные с датчиков, просматривать их в режиме реального времени, отправлять push-уведомления и сохранять данные через регулярные промежутки времени.

Мы не можем отрицать, что возникновение экстремальных погодных явлений в тех областях Планеты, где они никогда не происходили, связано с изменением климата, отчасти вызванным антропогенным загрязнением.

Предотвращение ущерба, причиненного такими явлениями, с помощью прогнозов погоды - один из факторов, которые сделали метеостанции очень популярными, и все, что позволяет определять температуру, атмосферное давление, интенсивность ультрафиолетового излучения, концентрацию определенных газов в воздухе и т. Д. Для обнаружения и измерения Эти параметры мы полагаемся на профессиональные метеостанции с высокой стоимостью, когда вам нужна чрезвычайно точная информация для построения даже прогнозных моделей, в то время как если цель должна быть помещена в любительскую область, мы выбираем продукты среднего уровня. Однако существует и третий способ, представленный самостоятельным строительством, как мы продемонстрируем в этой статье, в котором мы предлагаем построить метеостанцию ​​с невысокой стоимостью, что позволит вам получить основные параметры окружающей среды с добавлением некоторых дополнительных функций.

Проэкт

Задача метеостанции Fishino - сбор данных с некоторых датчиков, в частности:

  • DS18B20 для температуры;
  • DHT22 для влажности;
  • BMP180 для атмосферного давления;
  • ML8511 для ультрафиолетовых лучей;
  • AS3935 для обнаружения молний в радиусе 40 км;
  • Анемометр скорости ветра;
  • Датчик дождя RAINMOD для обнаружения осадков.

Затем все значения, полученные в результате опросов, будут опубликованы на веб-сервере одновременно на трех языках. Каждые 5 минут вся информация будет сохраняться на карте microSD, а каждые 60 минут будет передаваться в виде push-уведомления через известное приложение Pushetta.

Аппаратное обеспечение

Датчики размещены на щите (рис. 1) для Fishino и подключены к нему, как показано на принципиальной схеме и в таблице 1 .

Рисунок 1

Таблица 1






 

Датчики DS18B20, DHT22, BMP180 и AS3935 уже были описаны в предыдущих статьях, поэтому мы не будем объяснять их работу; анемометр (код WIND01) и датчик дождя (код RAINMOD) - два коммерческих продукта Opne Electronics.

Давайте кратко проанализируем схему, начиная с линии 5 В, к которой последовательно подключен резистор 330 Ом, зеленый светодиод (LD1), который сигнализирует о том, что экран запитан.

Два полюса анемометра соответственно подключены к контакту + 5V и D9 с понижающим сопротивлением 10 кОм.

Полосковая линия ML8511 имеет контакты 1 и 4, подключенные к + 3,3 В, и используются соответственно для питания датчика и включения внутреннего модуля, в то время как выход (контакт номер 3) будет подключен к аналоговому входу A0.

На печатной плате также есть небольшой цифровой датчик температуры, DS18B20: последний имеет выходной контакт, подключенный к перемычке JP1, к которой снова подключается сигнал, поступающий с контакта 2 винтового разъема CN1. Выход перемычки подключен к контакту D8 Fishino с подтягивающим резистором R1 4,7 кОм.

Мы решили выбрать эту стратегию, чтобы выбрать, использовать ли проводной зонд или встроенный датчик по мере необходимости.

То же самое верно для датчика DHT и клеммной колодки CN3, подключенной к перемычке JP2, подключенной к контакту D5 с подтягивающим резистором R2.

LD2 - двухцветный (зелено-красный) светодиод с общим катодом. Контакты подключены двумя резисторами 330 Ом R4 и R5 к контактам A2 и A3 нашей платы соответственно.

Прошивка

Прежде чем анализировать скетч Fishino, мы анализируем различные библиотеки, из которых он состоит, некоторые из них написаны нами, потому что они недоступны в сети. Каждую библиотеку можно бесплатно загрузить с www.github.com/signorettae.

Библиотека Wind.h

Первый датчик, для которого мы написали удобную библиотеку, - это анемометр: мы знаем, что если он делает четыре полных оборота за одну секунду, скорость ветра составляет 10 км / ч.

Написание сниппета для сообщения об обнаруженной скорости и интеграция его в библиотеку с использованием прерываний было довольно простым делом. Благодаря им мы предпочтем определенную операцию (в данном случае расчет мгновенной скорости) другим.

Чтобы включить его в наш скетч, вам просто нужно написать #include <Wind.h>.

Разберем работу нашей библиотеки. Когда мы переходим к созданию объекта, необходимо вставить константу, которая указывает контакт, к которому подключен датчик:

Ветер ветер (wind_pin);

Всего с этой библиотекой связано 5 функций, перечисленных ниже:

bool begin (пусто);

двойной getKmhSpeed ​​(недействительно);

двойной getMtpsSpeed ​​(недействителен);






 

двойной getMpHSpeed ​​(недействительно);

двойной getKtsSpeed ​​(недействительно);

Первый логический и включен в настройку. Он используется для инициализации датчика и возвращает истинное значение в случае положительного результата.

Следующие четыре функции используются для определения скорости времени в различных единицах измерения по мере изменения наших потребностей.

Возвращаемая переменная будет двойной.

Полную библиотеку можно скачать из репозитория github.

Библиотека ML8511.h

Хотя датчик ML8511 оснащен собственным рабочим эскизом, созданным командой Adafruit, мы решили интегрировать его в нашу собственную библиотеку, что позволяет нам получать те же результаты, но с большей простотой использования.

Чтобы включить библиотеку на этот раз, просто введите препроцессор:

#include <ML8511.h>

Когда мы создаем UV-объект, мы должны вставить две константы:

ML8511 UV (UVOUT, REF_3V3);

UVOUT контактный выходной контакт нашего датчика, в то время как REF_3V3 контактный указывает на то, что мы используем ссылку + 3,3В; это было необходимо, потому что задействованные значения очень низкие и очень чувствительные, и поэтому для получения оптимальных измерений рекомендуется сравнивать напряжение питания с выходным напряжением датчика.

В данном случае функции, относящиеся к этой библиотеке, равны 3 и позволяют полностью управлять датчиком. В частности, у нас будет:

bool begin (пусто);

double getuvIntensity (недействительно);

double getoutputVoltage (недействительно);

Как и в предыдущей библиотеке, функция begin () является логической, а getuvIntensity () и getoutputVoltage возвращают переменную типа double. Первый из них возвращает интенсивность УФ-излучения в мВт / м2, а второй - выходное напряжение датчика, выраженное в вольтах. Полную библиотеку можно скачать из репозитория github по ссылке .

Эскиз

Скетч, который управляет всей метеостанцией, очень четкий, но легкий для понимания.

«Каркас» нашего скетча такой же, как у FishinoHomeAuto (доступен среди примеров доски Fishino), потому что необходимо использовать веб-сервер для загрузки статических файлов с доски на клиент, который попытается подключиться из браузера. Весь скетч подробно прокомментирован, поэтому разобраться в каждой функции не составит труда. Ниже приводится краткое изложение наиболее важных частей нашего кода с уделением особого внимания наиболее важным инструкциям.

В первой части кода (у нас есть такие библиотеки, как Fishino.h, SPI.h, SD.h и FishinoWebServer.h. Мы также добавили библиотеки Fishetta.h для отправки push-уведомлений, FishinoRTC.h с его OneWire.h для управления встроенным модулем RTC и FishinoDallasTemperature.h для цифровых датчиков температуры. Также имеется библиотека EVERY.h, которая позволяет вам повторять инструкции через регулярные промежутки времени без необходимости использования функции задержки, которая может блокировать выполнение Наконец, мы находим библиотеку Wire.h для управления шиной I²C и FishinoFlash.h, который позволяет сохранять строки во флэш-памяти, чтобы предотвратить насыщение оперативной памяти.

Полностью смотрите здесь.