среда, 29 октября 2014 г.

Температура и влажность

Идея

Для второго эксперимента решено было сделать «полезную вещь», а именно мини «метеостанцию», которая будет показывать данные о температуре и влажности в квартире, а также на улице. При этом данные должны передаваться на сайт и хранится в БД, чтобы можно было потом просмотреть их в любом виде.

Реализация

Для реализации я использовал следующие компоненты:
·         Arduino UNO rev.3
·         Ethernet shield W5100
·         Датчик температуры DHT11
·         Датчик температуры DHT22

Дешёвый датчик DHT11 я решил разместить на балконе, т.к. в комнате хотелось более точную температуру, а у этого датчика погрешность в 2 градуса (у DHT22 погрешность в 0.5 градуса). Но после изучения технического описания о датчиках, стало понятно, что такой вариант не подойдёт, т.к. DHT11 измеряет температуру от 0°C до 50°C, против DHT22 от -40°C до 125°С.

Отправку данных решено делать через W5100. Подключаем библиотеку Ethernet и… чудо не произошло, т.к. пример работы с сетью оказался старым и компилятор выдаёт множество ошибок. Смотрим ошибки; переименовываем создание переменных под другими классами; подключаем библиотеки, которых не хватает; компилируем снова и … о чудо - проект скомпилирован.

Загружаем  скетч на ардуину и запускаем монитор порта. Видим, что подключаемся через раз, а через раз выдаётся ошибка. Вывел код ошибки в монитор порта, но оказалось, что никакой ошибки нет (точнее код ошибки 0, а обработка показывает, что мы просто не можем подключится). Беглым взглядом пробегаю код примера, из которого я писал свой код, и находим ошибку:
if (!client.connected()){
  isdata=0;
  Serial.println();
  Serial.println("disconnecting.");
  client.stop(); // Завершаем соединение
}

!client.connected() - проверяем, что клиент не подключён и тогда ОТКЛЮЧАЕМ его.
Зачем отключать клиент, если он не подключён?! Убираем отрицание и всё работает отлично.

Подключение к серверу за роутером мне пока побороть не удалось, поэтому я отправляю данные на внутренний сетевой накопитель (mybooklive), на котором работает виртуальный сервер. NAS обрабатывает запрос, логирует его в текстовый файл (на всякий случай) и отправляет запрос на внешний (сторонний, за роутером) сервер, где данные записываются в БД и выводятся в читабельном виде:
Также в планах построение графиков изменения температуры и влажности по данным в БД.

Результат

В живую посмотреть актуальную информацию можно тут: smarthome.fwm.by/weather/ (иногда информация не обновляется, т.к. плата у меня одна и я эксперементирую с другими проектами)
Итого выглядит плата с датчиками вот так:

Скетч (показать/скрыть)


Комментариев нет:

Отправить комментарий