О цифровых термометрах на основе Arduino было сказано немало. Все они либо подключались к компьютеру, либо выводили температуры сразу на дисплей. Но мне был нужен уличный термометр, который автономно и отправляет данные на сайт. Итак, приступим.
Что нам понадобится:
- Arduino Duemilanove (Freeduino 2009)
- Ethernet Shield v2
- цифровой датчик температуры — DS18B20
- вентилятор для корпуса (120 мм)
- банка от водоэмульсионки или клея ПВА (2 литра)
- светодиод
- витая пара
Задачи
Опрашивать датчик температуры по шине 1-Wire и каждые 3 секунды самостоятельно отправлять результаты на Web-сервер, на котором они будут храниться.
Алгоритм работы устройства:
- присваиваем нашему Ethernet Shield`у MAC адрес и ip-адрес
- инициализируем соединение с сервером на 80 порт
- получаем данные с цифрового датчика температуры, по 1-Wire шине
- формируем GET запрос
- отправляем GET запрос
- разрываем соединение
Исходный код скетча:
Комментарии по ходу кода должны внести ясность.
<font>include <font>// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.</font> <font>// придётся её скопировать.</font> include <dallastemont>// MAC-адрес нашего устройства</dallastemont></font> <font>byte</font> mac[] = { 0x00, 0x3A, 0xF1, 0x19, 0x69, 0xFC }; <font>// ip-адрес устройства</font> <font>byte</font> ip[] = { 192, 168, 1, 156 }; <font>// ip-адрес удалённого сервера</font> <font>byte</font> server[] = { 79, 140, 28, 20 }; <font>// измените на свой</font> <font>char</font> temp[6]; <font>byte</font> isdata=0; Client client(server, 80); <font>// 80-порт.</font> DallasTemperature tempSensor; <font>void</font> setup() { Ethernet.begin(mac, ip); <font>// Инициализируем Ethernet Shield</font> tempSensor.begin(7); <font>// Датчик температуры на 7-й пин</font> Serial.begin(9600); <font>// Скорость консольного порта 9600 (пригодится для отладки)</font> } <font>void</font> loop() { delay(3000); <font>// задержка в 3 сек.</font> <font>// Соединяемся</font> <font>if</font> (client.connect()) { Serial.println(<font>"connecting..."</font>); <font>// Serial.println для отладки. Лучше его оставить, на всякий случай, потом будет легче понять, в чём проблема.</font> <font>// Обработчик ошибок датчика</font> <font>switch</font>(tempSensor.isValid()) { <font>case</font> 1: Serial.println(<font>"Invalid CRC"</font>); <font>// ошибка контрольной суммы</font> tempSensor.reset(); <font>// сбросить девайс</font> <font>return</font>; <font>case</font> 2: Serial.println(<font>"Invalid device"</font>); <font>// какой-то "левый" датчик :)</font> tempSensor.reset(); <font>// сбросить девайс</font> <font>return</font>; } Serial.println(<font>"connected"</font>); <font>char</font> buf[80]; <font>float</font> f=tempSensor.getTemperature(); <font>// получаем температуру</font> Serial.println(tempSensor.getTemperature()); <font>// Ниже извращения с отделением дробной части и целой. Почему-то Arduino не хочет работать с float.</font> <font>// Вместо числа вставляет вопросик. Наверное, виной тому отсутствие аппаратной поддержки работы с</font> <font>// числами с плавающей запятой в Arduino. Буду рад увидеть более красивое решение в комментариях.</font> <font>int</font> temp1 = (f - (<font>int</font>)f) * 100; <font>// выделяем дробную часть</font> <font>// Составляем GET запрос. Переменная code нужна для того, чтобы вражеский термометр не слал какие попало значения.</font> <font>// проверяется на стороне Web-сервера.</font> sprintf(buf, <font>"GET /class/backend/meteo.php?temp=%0d.%d&code=123456 HTTP/1.0"</font>, (<font>int</font>)f, abs(temp1)); Serial.println(buf); client.println(buf); <font>// Отправляем GET запрос</font> client.println(<font>"Host: opck.info"</font>); <font>// Указываем, какой конкретно host на данном ip нас интересует.</font> client.println(); } <font>else</font> { Serial.println(<font>"connection failed"</font>); } <font>while</font> (client.available()) { isdata=1; <font>char</font> c = client.read(); <font>// Читаем, что нам ответил Web-сервер</font> Serial.print(c); } <font>if</font> (!client.connected()) { isdata=0; Serial.println(); Serial.println(<font>"disconnecting."</font>); client.stop(); <font>// Завершаем соединение</font> } }
Сборка устройства:
- первую «ногу» датчика цепляем на «минус» GND
- вторую «ногу» (DQ) на 7-й пин
- третью на «плюс»
- вторую и третью нужно соединить резистором на ~ 4,7 К. Но я заменил резистор на светодиод и получил индикатор обращения к шине датчика (ВНИМАНИЕ! Без резистора или светодиода работать ничего не будет. Не забудьте!)
По идее, вот и всё. Должно работать. Работает, но боевые условия показали, что когда падает солнечный свет на датчик, тот может нагреваться и показывать температуру гораздо выше реальной. Всё правильно — он покажет температуру на солнце. А нам нужна температура воздуха. В первый раз для этого был собран корпус из-под банки от кофе, обёрнутый в фольгу. Но это ничем не помогло. Изучение фотографий реальных метео-станций помогло найти решение. Корпус для датчика должен быть больше, и к тому же иметь активную вентиляцию для таких случаев.
Делаем корпус для датчика
Подходящей по размеру оказалась банка от водоэмульсионной краски (такие же бывают из-под клея ПВА, объёмом 2-3 литра). В нижней части банки делаем отверстие под вентилятор. И прикрепляем его к банке. В центре банки размещаем площадку под датчики, диаметром немного меньшим самой банки, чтобы воздух мог циркулировать.Несколько фото:Банка от водоэмульсионкиДетали и банка с проделанным отвестиемУстановка датчика в корпусДатчик в корпусе, вид сверху Как вы помните, резистор я заменил светодиодом, поэтому делаем и для него отверстие, чтобы всегда было видно работу устройства.Корпус, вид сбоку Крышка от банки нам не нужна, вместо неё нужен навес, такой, чтобы и воздух пропускал, и чтобы атмосферные осадки не попадали внутрь (датчик-то будет расположен на улице). Корпус для Arduino я сделал из пластмассовой коробки от mp3-плеера Explay C360.Arduino
Backend, принимающий данные:
На стороне сервера работает скрипт, к которому обращается термометр. Скрипт проверяет правильность секретного кода, чтобы показания нельзя было подменить. А затем добавляет новую запись в таблицу MySql. Потом эти данные можно выводить как угодно. При этом каждую минуту данные за прошедшую минуту усредняются и добавляются в другую таблицу.Нужно это для того, чтобы: 1. проще было делать выборки в базе (не правда ли, удобнее указать конкретную минуту и получить результат) 2. выборки были быстрее (за год ~500 000 записей вместо 10 000 000) Во время длительной работы датчика обнаружилась проблема, иногда он самопроизвольно (раз в 3-4 часа) выдаёт рандомное значение. Поэтому я добавил проверку на изменение температуры больше чем на 1 градус в течении 15 секунд. Такие значения игнорируются.
Что из этого всего вышло:
На своём сайте я разместил страничку с термометром и добавил график температуры за последние сутки. Посмотреть можно тут: Ethernet термометр.
Недостатки:
Точность датчика 0.5* С, что для меня недостаточно. Но есть способ улучшить его характеристики. Понадобится ещё один, или более датчиков (желательно из разных партий). Получаем данные со всех датчиков и считаем среднее арифметическое. Так можно добиться точности до сотых градуса.
Планы на будущее:
- датчик влажности
- датчик давления
- датчик скорости ветра
- датчик освещённости
- поставить несколько таких в городе и делать свои прогнозы погоды
- питать Arduino по Power over Ethernet
- автоматизировать включение и частоту вращения вентилятора в зависимости от освещения
- удалённое управление
- сброс данных на случай отсутствия связи (для меня это критично)
Известные мне недостатки:
— высокая цена — 2180 руб. (Freeduino 2009 (800 р.) + Ethernet Shield v2 (1300 р.) + 1 датчик (80 р.)) — если вентилятор включить слишком быстро, то он сам вносит погрешность в температуру, обдувая датчик. Он не должен сдувать, а лишь проталкивать воздух.
Ссылки по теме:
Блог Arduino на ХабреОнлайн-термометрDS18B20 Datasheet PS: статья целиком и полностью принаддежит — все вопросы к немуMP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом купить в Мастер Кит. Драйвер, программы, схема, отзывы, инструкция, своими руками, DIYMP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом купить в Мастер Кит. Драйвер, программы, схема, отзывы, инструкция, своими руками, DIYУ нас Вы можете купить Мастер Кит MP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом: цена, фото, DIY, своими руками, технические характеристики и комплектация, отзывы, обзор, инструкция, драйвер, программы, схемаМастер Кит, MP719 Laurent-T, Многоканальный интернет термометр с WEB интерфейсом, цена, описание, фото, купить, DIY, своими руками, отзывы, обзор, инструкция, доставка, драйвер, программы, схемаhttps://masterkit.ru/shop/2283876Готовый модульMP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом»>MP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом»>MP719 Laurent-T — Многоканальный интернет термометр с WEB интерфейсом»>
Умный дом: Ethernet, WiFi, ESP8266 / Домашняя автоматика
Датчики / Домашняя автоматика
Идеальное решение для централизованного сбора показаний цифровых датчиков температуры удаленно через сеть Ethernet!
Предлагаемый блок в собранном виде позволяет реализовать принцип: купил – подключил. Блок позволит получить многоканальный цифровой термометр, подключаемый по локальной сети к Хабу (Hub), свитчу (switch) или роутеру (router) c последующим контролем температуры в браузере. Устройство будет полезно для применения в быту, дома, на даче, в бане. С его помощью можно производить измерения температуры окружающей среды, контролировать рабочую температуру морозильников и холодильных установок, протоколировать измеренную температуру через встроенный WEB-интерфейс.
Рекомендованный датчик температуры MP18B20. Рекомендуемый источник питания — PW1245.
+ 190бонусов на счет
Предлагаемый блок в собранном виде позволяет реализовать принцип: купил – подключил. Блок позволит получить многоканальный цифровой термометр, подключаемый по локальной сети к Хабу (Hub), свитчу (switch) или роутеру (router) c последующим контролем температуры в браузере. Устройство будет полезно для применения в быту, дома, на даче, в бане. С его помощью можно производить измерения температуры окружающей среды, контролировать рабочую температуру морозильников и холодильных установок, протоколировать измеренную температуру через встроенный WEB-интерфейс.
Рекомендованный датчик температуры MP18B20. Рекомендуемый источник питания — PW1245.
Напряжение питания (В) | 6 … 24 |
Тип питания | постоянный |
Диапазон измерения температуры, град.С | –25 … +125 |
Точность показаний (С) | 0,1 |
Количество подключаемых датчиков DS18B20 (шт) | 20 |
Потребляемый ток, не более (мА) | 50 |
Количество входов LAN (шт) | 1 |
Рекомендованная температура эксплуатации (°С) | -30…70 |
Габариты модуля (мм) | 85 х 50 х 20 |
Вес, не более (г) | 100 |
Вес | 62 |
- Возможность управления модулем через встроенную Web-страницу
- Возможность управления прямыми HTTP запросами
- Возможность управления набором текстовых команд управления (Ke-команды) через TCP (открытый API)
- Возможность работы с JSON запросами или через TCP порт (командная строка)
- Возможность назначения и хранения текстовых имен датчиков по их идентификационному номеру
- Встроенный фильтр и возможность сглаживание показаний датчиков на случай кратковременных сбоев в работе (воздействие внешних помех на длинной линии)
- В случае неполадок на линии, производит автоматически ресет шины 1-Wire путем размыкания контактов встроенного электромагнитного реле.
- Разработан специально для длительной и устойчивой работать в удаленном режиме
MP220R, BOX-BM8037
MP712 Laurent-2
Интернет реле +…
MP18B20
Модуль цифрового термодатчика DS18B20+, удаленное подключение
MP8037R
Цифровой термометр/термостат до 4кВт (20А)
PW1245
AC/DC Импульсный источник питания 12В / 0.5А
УЗМ-51М УХЛ4
Реле контроля напряжения 220В / 63А
MP8036
12-ти канальный таймер, термостат, АЦП, часы, v1,95а
MP8036multi
Логический модуль (таймер, термостат, часы, ацп, шим)
SN18B20
Герметичный датчик температуры DS18B20+
NM0101
Набор для сборки оконечного усилителя НЧ 100Вт (моно)
MP700
Тестер параметров и исправности электронных компонентов (R/L/C, N/P/M, ESR)
BM4511
Регулятор яркости ламп накаливания 12-24В / 50A
BM8020
USB осциллограф
NS180
Новогодняя ёлка (набор для пайки)
NM0607
Набор для сборки стабилизированного блока питания 2,5…27В, 10А
MP718 Laurent-2G
Интернет реле + GSM
Предзаказ
MK080
Отпугиватель кротов Антикрот
ПризнакиПрограммирование</li>Датчики температуры</li>Умный дом</li>ХарактеристикиИнструкцииСхемыКомплектацияСборкаНастройкаЭксплуатацияВопросы и ответыКомментарииАналогичныеСопутствующиеВам может пригодитсяCopyright www.maxx-marketing.netРазделы—> Ethernet датчики влажностиEthernet датчики давленияEthernet датчики температурыИнтернет барометрыИнтернет гигрометрыИнтернет гигростатыИнтернет термометрыСортировать по:РейтингуЦенеДешевыеДорогиеСо скидкойНа странице:Вид:
Хит продажНаличие: 2 шт.Интернет термостат/гигростат c 2-мя релейными каналами и логическими входами/выходами RODOS-16 Устройство сертифицировано СЕРТИФИКАТ Интернет термостат RODOS-16 – это современное устройство для поддержания микроклимата и коммутации нагрузок в производственных помещениях и частных домах через интернет соединение. Одним из достоинств данного устро..4 100 рубПодробнееID Товара: 148СкидкаНаличие: 29 шт.Интернет термометр TE-MONITOR V.4 с датчиком температуры длиной 3 метра Данное устройство применяется для контроля температуры. Особенностью данного устройства в том, что к нему не нужно какое либо дополнительное программное обеспечение. Достаточно любого браузера. Также показания можно считать по SNMP или по telnet. ..3 500 руб2 900 рубПодробнееID Товара: 139Интернет термометр TE-MONITOR V.2 Данное устройство применяется для контроля температуры. Особенностью данного устройства в том, что к нему не нужно какое либо дополнительное программное обеспечение. Достаточно любого браузера. Также показания можно считать по SNMP или по telnet. Параметры определяются применён..2 600 рубПодробнееID Товара: 125Интернет термометр, барометр, гигрометр SMALL METEO V.4 с датчиком температуры/влажности длиной 3 метра Легендарое продолжение устройства SMALL METEO v.2 в корпусном исполнении. Данное устройство применяется для контроля температуры, влажности, атмосферного давления. Особенностью данного устройства в том, что к нему не нужно какое либо дополни..3 500 рубПодробнееID Товара: 124Наличие: 5 шт.Интернет термометр, барометр, гигрометр TE-MONITOR V.6 TE_MONITOR_V6 – контроллер для подключения датчиков температуры, влажности и атмосферного давления, выполненный в прочном компактном корпусе из ABS пластика. Встроенный web-интерфейс позволяет просматривать показания датчиков через интернет-браузер с любого компьютера либо смар..3 700 рубПодробнееID Товара: 207Используемые источники:- https://habr.com/post/110610/
- https://masterkit.ru/shop/2283876
- https://silines.ru/ethernet/ethrnet-sensors/