Pull to refresh

Comments 96

UFO just landed and posted this here
А как вы собираетесь снизить погрешность до 0,1 градуса?
Увеличив количество датчиков, это не решит проблемы
статья не моя, сложно ответить =) как только автора кто нибудь пригласит — думаю наверняка ответит
Если я не ошибаюсь, DS18B20 имеет точность 0,5°С (при этом после -15 она становится еще хуже), поэтому тут придется менять датчик на более точный и накапливать статистику
Более точного, работающего по 1-Wire я не нашёл, а 1024 разрядного АЦП Arduino (если я не ошибаюсь), хватит только на датчик с погрешностью 0.1, на датчик с погрешностью 0.01 нужен уже более продвинуты АЦП, если я не ошибся в расчётах…
Все, теперь можно заваливать автора статьи вопросами. Уважаю людей, который могут не только работать головой, но и руками, ради такого и инвайта не жалко. Будем надеяться, товарищ liderman нас порадует еще многими техническими статьями.
Ага. Только хотел написать, нужны датчики с большей чувствительностью. Кому-то над почитать трудов по статистике, а еще ОЧЕНЬ желательно — по метрологии.
и не только температурные, потому как для прогноза надо знать тучу параметров )
начиная с давления и заканчивая расположением фронтов

такой термометр подойдет для удаленного слежения за теплицей или инкубатором )
Гроу-бокс :-) Надо будет в перспективе озадачиться
Для 18B20 можно задать разрядность преобразования 12 бит и тогда точность будет не пол градуса, а 0,0625
Это многие знают.
Вопрос больше в том для чего такая точность? Даже конопля не требует такого должного ухода.
Зачем тогда было писать «А как вы собираетесь снизить погрешность до 0,1 градуса?» Если «многие знают» то и предложили бы автору.
Это не спасёт, просто будет шуметь больше разрядов и всё.
Датчики с разных партий имеют разную погрешность она не всегда составляет чётко 0.5 градуса. Если взять хотя бы среднее значение хотя бы от 2-х, то теоритически можно улучшить показатели, особенно если удачно подобрать датчики
UFO just landed and posted this here
а для Украины не знаете подобных магазинов?
seeedstudio.com/depot/, если есть карточка visa classic (заодно и дешевле раза в 2 выйдет), а чтоб конкретно украинский — хз
Недавно купил на Ebay за $42 Arduino Duemilanove Kit, в набор входит сама Ардуина, LCD Shield — двухстрочный LCD с кнопками (удобно для навигации по меню), Prototyping Shield и Sensor Shield. Все работает, посылка из Китая пришла за 7 дней, сам удивился… Три сервомоточика еще едут, цена тоже более чем приятная — $3 за штуку.
Там же можно купить Ардуино + Ethernet за $35.50.
Еще — на Aukro я видел человек продает, большой выбор Арудин и шилдов.
В Киеве был один мужичок который сделал партию Мега и Нано, но он их уже распродал.
Остались только эти ребята radiodetali.lg.ua/.
Я же долго терзаясь заказал seeedstudio с разными датчиками, чему несказанно рад, т.к. доставили за 2 недели.
Так это и есть сайт того мужика который уже продал все ардуины. То есть нужных устройств у него нет :(
Самым простым для меня способом оказалась покупка на freeduino.ru, главным образом из-за оплаты, т.к. карты у меня нет. Доставка идёт из города Кемерова, заказ формируют быстро. По почте, до Оренбургской области, посылка шла ~ 2 недели.
Ребята хорошо упаковывают Arduino, так что ничего не повредится, в комплекте идёт инструкция и диск с ПО и документацией.

Следующие покупки буду делать на seeeduino.com, т.к. цены вдвое ниже.
а не лучше ли было использовать sqlite?
Что-то мне это напомнило :-D www.g0l.ru/blog/n2426 Я градусник для серверной делал с сигнализацией через смс, только до конца не довёл ибо уже уволили
Насчёт вот этой строки — int temp1 = (f — (int)f) * 100; // выделяем дробную часть
Нафига? Сразу в GET-запрос выводить значение температуры и всё гут. Т.е. у меня вот таким макаром:

client.print(«GET /address?password=pass&temp=»);
client.print(tempSensor.getTemperature());

А разбирать уж на стороне сервера. KISS, однако.
Ещё совет — «вторую и третью нужно соединить резистором на ~ 4,7 К. или светодиод...»
Можно обойтись подтягивающим резистором, реализованным внутри чипа ATMega. Достаточно добавить
pinMode(pin, INPUT); // Сюда будем подключать подтягивающий резюк
digitalWrite(pin, HIGH); // «Подключаем» подтягивающий резистор (реализован внутри ATmega)
где pin в данном случае = 7
У меня тоже работает аналогичный самодельный уличный датчик температуры, но в отличие от описанного — он у меня беспроводной, т.е. обмен данными идет по радиоканалу, в частности по технологии Zigbee
Эх, скорее бы уж придумывали беспроводную передачу питания :-( Совсем уж слаботочку не предлагать.
не, не такой, самодельный…
на улице коробочка с 2-мя махонькими платками (каждая 3-4 см) соединенных между собой проводочками (лапшой). На одной платке простенький контроллер с датчиком DS18B20 — эта платка температуру обсчитывает и передает данные на вторую плату, на которой модуль Zigbee со встроенной антенной. Он передает данные, потом переходит в сон (у меня интервал сна 15 минут), далее просыпается и посылает данные…
Вначале я запитывал эту хрень от 3.6V литиевой батарейки (LI-SOCL2) — она работает до температур -40. Реально проверял только до -15. Ниже в прошлом году не было :)
Обычная литиевая батарейка (то что в обычных магазинах продают) ниже -10 градусов цельсия уже не работает…
Так вот, такой батарейки хватало на месяц. Поэтому я потом начал питать датчик по проводочкам…

Уже дома стоит сервачок в один из USB-портов которого воткнута другая платка — Zigbee приемник, он постоянно активен и ждет передачу. Далее уже python ловит данные с порта и пишет их в базу при условии, что пакет получен полностью (бывает из-за радиопомех битые пакеты).
USB-термометр надо будет в USB-порт втыкать, т.е. комп нужен. А суть топика именно в автономной железке (ну, шоп инет только был и питание).
ну не обязательно в комп, можно в роутер с usb-портом и линуксом какимто… только тогда прийдется драйвера написать.
Есть еще такие устройства как usb-сервер: маленькая коробочка с usb и ethernet портами. На комп ставится программка-виртуальный usb-хаб, и устройство включенное в эту коробочку будет видно на удаленном компе. Эдакий TCP/IP <-> USB преобразователь.
Это да, вариантов много. Но с ардуиной интереснее :-)
Посмотрел я сколько стоит Ethernet Shield, да гораздо дешевле\интересней\проще купить какой нить старый рутер под ddwrt.
А дуину прицепить через uart или usb… Дуино здесь по сути становится контроллером ввода-вывода со всяких железяк, а вот на рутере можно уже замутить грамотный web-face всему этому делу.
Ну это смотря где покупать. На seeeduino.com ~600 руб. Если бы я выбирал где можно купить подешевле то тоимость всего устройства была бы около 1200-1500 руб.
И вообще, конечно, проще что-то купить. Но если все будут только покупать, кто ж тогда будет придумывать штуки которые потом остальные покупать будут? Да и интересное это дело — придумывать и реализовывать. Попробуйте как-нибудь, вместо того чтоб на E-bay сидеть.
придумывать нужно чтото действительно новое, а не велосипеды
Ну, один велосипед, другой… А потом глядишь и что-то дельное выйдет :-)
Меня всегда забавляют люди, которые еще не научились толком складывать и умножать, но с серьезным видом говорят о интегралах.
Поэтому уважаемый Quadratoff предлагаю нам с вами:

— не мешать людям получать базовые навыки и образование в области электроники;
— говорить что же действительно нужно людям;

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

Это отчего? Вентилятор сильно греется при работе?
>если вентилятор включить слишком быстро, то он сам вносит погрешность в температуру, обдувая датчик

Каким образом? Автор считает, что если обдувать [сухой] датчик окружающим воздухом, то он будет показывать температуру ниже, чем температура воздуха? По-моему автору нужно перечитать учебник физики.
поддерживаю. автору надо обязательно прочитать учебники. сходить на консультацию в экоцентры, которые ведут подобные сводки (например сходить в эколабораторию аэропортов), там работают специалисты с физическим образованием по специальности «физики неравновесных процессов».

маленький совет автору. поставьте Ваш корпус для датчика не горизонтально или под углом, но вертикально. корпус удлинните до отношения диаметра трубы к длине не менее один к десяти (на порядок короче). датчик можно поставить чуть ниже центра (во второй четверти трубы). в трубе на уровне датчика прорежте круглое окошечко для самого щупа. таким образом у Вас будет естественная конвекция масс воздуха. снизу датчика подсос, сверху теплый нагретый от датчика вверх.
Спасибо за совет с трубой! Это очень хорошее решение, как мне кажется.
Ну прежде чем советовать кому то что то перечитать, то для начало это нужно прочитать самому ;-)
Датчик конечно сухой, а вот воздух имеет влажность от сюда и проблемы. Я это обнаружил эксперементально, включив обдув на полную температура резко упала на 2 градуса, когда я прекратил обдув температура вернулась в предидущее состояние. Эксперемент повторил пару раз.
Вы правильно мыслите. при ветре 3 метра в секунду температура среды падает в среднем на 1 градус. благодаря влажности и возникающего при этом перепада давления. ветер способствеут более интенсивному испарению, следовательно более низкому давлению, сделовательно более низкой температуре. так на пляже в жару можно влажным полотенцем обмотать плотно бутылку с водой и поставить под палящее солнце. когда полотенце высохнет, жидкость в бутылке будет реально прохладной.
>ветер способствеут более интенсивному испарению, следовательно более низкому давлению, сделовательно более низкой температуре

Всё верно, только не в том порядке ;)
Ветер -> более низкое давление -> испарение -> более низкая температура.

>так на пляже в жару можно влажным полотенцем обмотать плотно бутылку с водой

Влажным полотенцем, да. То, что при испарении влага забирает энергию (т.е. тепло) с поверхности тела, ни для кого не секрет. Но в данном случае сенсор сухой (я не зря это подчеркнул).
Откуда влага для испарения? Конденсат? Тогда объясните мне физику процесса, почему влага вдруг конденсируется и тут же испаряется. При объяснении очень желательно не упустить процессы передачи энергии.
Мне то же интересно узнать. Эксперимент показал что температура при обдувании падает (проводил при температуре 25 градусов и нуле). Но как?
Так может она без обдува была повышенной, а при обдуве как раз падает до реальной?
Разумеется я проверил несколько раз, то включал то выключал обдув. Температура, то падала, то опускалась и так далее.
Вероятнее всего в вашем случае либо завышено питание, либо опрос идет не по прописанному в даташите алгоритму. Т.е. датчик нагревается изнутри.
Опрос идёт стандартной библиотекой. Тем более датчик цифровой и тут нет наводок, кроме шума создаваемого погрешностью измерения.

Питание не завышено, подключено стандартно.
Опрашивать раз в 3 секунды — лишнее, температура так быстро не меняется. Выводить значения температуры надо согласно погрешности измерения. И фильтровать данные.
Хороший проект, хорошо бы сделать API для получения температуры с указанием координат датчика
API я сейчас пишу. Ещё сделаю несколько графических информеров.
Датчик для улицы лучше другой подобрать, а DS-18B20 я, например, использую для мониторинга температуры в серверной
msevm.com/main/therm/ds18b20.jpg -тут вполне устраивает.
Непонятны 2 момента: 1) коробка из-под клея с вентилятором далеко не идеальное решение 2) на сайте висит прогноз погоды — он откуда берется?
Ну и еще идейку не новую подкину:
за стекло на улице устанавливаешь любой обычный термометр — на него направляешь веб-камеру, а ее транслируешь на сайт. Для особо продвинутых есть готовые решения: www.systems21.ru/akcp.php — типа такого.

НУ и напоследок еще один вопрос: в принципе мы имеем самоделку с довольно высокой стоимостью и некоторыми спорными моментами, не задумывался ли автор о поиске уже полностью готового решения? Мне кажется ненамного дороже выйдет, а по части точности и юзабилити в разы лучше, например вот такой девайс:
www.hw-group.com/products/HWg-STE/STE_ip_temperature_sensor_ru.html

А чем Вам DS-18B20 не сгодился. Датчиков лучше него, работающих по 1-Wire я не нашёл. Остаётся использовать аналоговый датчик, со всем вытекающими.
1 — да не идеальное, но что мешает это улучшить. Stepler выше предложил отличный вариант.
2 — берётся с замечательного сервиса weather.co.ua

> не задумывался ли автор о поиске уже полностью готового решения?
> Мне кажется ненамного дороже выйдет, а по части точности и юзабилити в разы лучше, например вот такой девайс:
> www.hw-group.com/products/HWg-STE/STE_ip_temperature_sensor_ru.html

Задумывался. Но ничего не мешает сделать девайс лучше. Про юзабилити спорно. Что может быть удобнее интерфейса доступа, который ты придумал для себя сам)
К тому же у этого устройства нижняя граница измерения температуры "-30", а у нас запросто может быть "-40" зимой. Ну и такие продукты в силу своей узкой специализации обычно дороги.
Есть вопрос — если точность 0.5 градуса, то зачем выводить инфу по температуре с точностью до сотых?
Из-за флуктуаций постоянно меняеться цифра на страничке. Может быть стоит навесить простенькое вычисление среднего значения, а на графике бахнуть простенькую интерполяцию?
Маркетинг) Ну просто когда что то меняется перед глазами, «ощущение онлайна» увеличивается

А график сгладить наверное стоит.
Всем привет из Ярославля. :) Но там всё просто, обычный датчик, подключённый к компьютеру.
поставить несколько таких в городе и делать свои прогнозы погоды

Как метеоролог скажу, без ежесуточных вертикальных разрезов атмосферы над площадью хотя бы в 1000км. прогноз не составить. Вот книжка интересная на эту тему aviaclub.ru/uploads/media/Aviacionnaja_meteorologija.pdf
Zak, спасибо за книгу. Уже начал читать.
клева!!! слушай, а можно несколько таких сетевых друг на друга?
Где покупали датчики 1-Wire? По инету искал, всё какие-то дорогие варианты, от 30 долларов.
От куда такие цены?
80 руб стоит на freeduino.ru/arduino/products.html#Procee
Но можно купить ещё дешевле, зайдите в ближайший магазин электронных компонентов
Дешевле всего не у местных барыг, а оптом покупать на eBay у китайцев.
Я купил 20 датчиков за 36$, т.е. ~55 рублей за штуку.
В для измерения влажности можно использовать датчик hih-4000 от Honeywell, но он аналоговый, его надо на АЦП вешать.
Ну так в Ардуино есть АЦП, т.н. аналоговый вход. 0-5В.
А hih-4000 это действительно оптимальный датчик по цене и легкости подключения.
Мне кажется разумнее использовать
SHT10: www.platan.ru/cgi-bin/qwery.pl/id=906155583&group=5547
т.к. он во-первых, цифровой и работает по 1-Wire, во-вторых, у него погрешность 0.5% в отличии от hih-4000 у которого она аж 2%!
Но тут возникает вопрос цены. Так что нужно смотреть на задачу.
Так он же дешевле стоит чем HIH-4000-004.
HIH-4000-004 стоит 550 руб., а SHT10 470 руб.

Так что у SHT10 и точность лучше и дешевле на 80 руб, к тому же имеет встроенный термометр и он цифровой! Ценя я взял с platan.ru, но это довольно не дешёвый магазин. Можно найти дешевле.
А у нас SHT10 тяжело найти, и он подороже может быть.
Всеравно, спасибо за пояснения, поищу SHT10
Если уж речь зашла о датчиках, то для измерения атмосферного давления а выбрал MPXA4115AC6U, он относительно недорогой.
Или есть такой вариант wiring.org.co/learning/basics/airpressure.html

В качестве датчика освещенности я планирую использовать фоторезистор, но пока еще не решил как его отградуировать.

Датчик скорости ветра возможно сделаю не датчике угла поворота или на переменном резисторе, еще не решил.

Еще нужен датчик направления ветра, это что-то в виде флюгера с электронным компасом, о нем я пока не думал.

Во общем у меня тоже живет мысль сделать домашнюю метеостанцию, и родилась она где-то полгода назад.

В вашем решении мне неясно, зачем делать обдув датчика воздухом, может проще его просто высунуть на улицу залив эбокситкой?
Заливал эпоксидкой, через полгода мой 1820 сдох. Имхо от разных коэффициентов термического расширения родного компаунда и заливки.
В качестве датчика давления удобнее использовать BMP085, он цифровой и работает по I2C, погрешность у него не большая, всего 1 гПа. Цена: ~500 руб.

Для флюгера можно использовать датчик угла (энкодер). Цена вопроса 140 руб. И получаете цифровой сигнал. Компас тут имхо не нужен. Один раз откалибровать по аналоговому компасу и всё.
Точность выше ± 0,5 градуса вами может быть получена только если датчик установлен на северной (теневой) стороне и на большой высоте относительно близлежащих зданий. Ну или на поляне в парке. Иначе неминуема тепловая «засветка» от асфальта, стен ближайших зданий, или стены вашего здания. Я решал аналогичную проблему, только результаты мне нужно выдавать в RDS/PS на моих эфирных станциях. Так в солнечный день погрешность от реальной температуры была +5 +10 +15 градусов, от сезона. Асфальтовые джунгли вокруг. А ближайшая северная сторона была в 200 метрах. Даже если эти условия будут соблюдены, то даже ночью температура воздуха флуктуирует в диапазоне ± 0,5 градусов от того, с какого направления дует ветер, то ли из ближайшего лесопарка, то ли из центра города. Не будет информация о флуктуациях избыточной?
«если вентилятор включить слишком быстро, то он сам вносит погрешность в температуру, обдувая датчик. Он не должен сдувать, а лишь проталкивать воздух»

Почему? Датчик же не потеет, с него ничего не испаряется. Он от своего питания нагревается совсем незначительно. С чего бы ему от интенсивного обдува врать?
Интересно, когда появиться фирма производитель стандартных корпусов для электронных элементов. Недорогих и стандартизованных для различного рода устройств? А то уже эти банки, пустые упаковки от CD дисков и другого рода «лыжи» уже так надоели…
В чип-и-дипе давно продаются замечательные пластмассовые корпуса любых типоразмеров.
К сожалению, больше нигде таких не видел, а тут за кусок пластмассы просят несколько сотен :(
Я теперь на Хабре, и с радостью отвечу Ваши вопросы.
Спасибо SovGVD, за то что опубликовал мою статью и спасибо miguello за приглашение на сайт
Гораздо целесообразнее для хранения температуры использовать Round-Robin Database, которая фактически предназначена для подобных задач, и предоставляет достаточное количество фич, включая построение графиков (по умолчанию, конечно же, не интерактивных и не таких замечательных). Есть разнообразные модули и библиотеки для PHP, python и еще много для чего.

В целом — отличная статья, правда, дороговато выходит, если использовать только в качестве высокотехнологичной игрушки :)
Ну ни так уж и дорого если заказывать например на www.seeedstudio.com:
— Seeeduino V2.2 (Atmega 328P) $22.50
— Wiznet Ethernet shield -w5100 $32.00
— DS18B20 — 80 руб
Итого: ~1715 рублей (по курсу 30 руб за 1 доллар)
Mysql в данном случае overkill. Для таких задач гораздо удобнее rrdtool.
Лично для моего проекта мне нужны сырые данные. А так можно и rrdtool. Но по прошествии времени использование в качестве БД Mysql показало себя хорошо. Хотя кто бы сомневался)
Много времени прошло, но всё-таки. Советую для вашего градусника виджет/гаджет сделать. Вот про мои (под Оперу и под винду 7).
Помогите не могу никак разобраться! У меня Ардиуно Мега 1280 и ни одна из двух библиотек OneWire не работает! — все отлично компилируется и записывает в ардуину, но ключи не считываются! Все время повторяется надпись No more addresses. Кто знает в чем может быть дело? может есть какое то несоостветствие в номерах выводов на плате, но как узнать что чему соовтетсвтует???
сброс данных на случай отсутствия связи (для меня это критично)

можно задействовать EEPROM, которого в ATMega168 512 байт или 1 килобайт в ATMega328, причем «усреднять» значения можно на самом Arduino, на случай отсутсвия связи писать значения в EEPROM, а при востановлении — отсылать всю «пачку» на сервер
Sign up to leave a comment.

Articles