Pull to refresh

Comments 108

Насколько я понимаю, батарейки он поедает именно из-за того, что постоянно молотит пустые такты в delay(). Чтобы сделать устройство экономичным, нужно копать в сторону использования аппаратных таймеров c прерываниями, и усыпления контроллера между периодами. Если интересно развивать тему, конечно же)
Конечно интересно. Но если использовать прерывания, разве я тогда смогу получать данные с датчиков каждую секунду?
Да, нужно как-то настроить аппаратный таймер, чтобы он вызывал прерывание каждую секунду (на ардуино я такого ещё не делал, но возможность вроде есть), а уже в прерывании опрашивать датчики и обновлять дисплей.
Хм, а тогда не получится тоже самое что и сейчас (по энергозатратам)?
Так смысл в том, чтобы в оставшееся время переводить контроллер в режим пониженного энергопотребления, вместо того чтобы выполнять пустые такты. Теоретически потребление должно упасть на порядки) Если опубликуете об этом пост — будет очень полезно, потому что тема перевода ардуино в режим пониженного потребления в интернете плохо раскрыта.
AVR прекрасно переводится в режим сна с пробуждением от сторожевого таймера раз в секунду. В режиме сна ядро стоит, таймеры стоят, все — стоит, только сторожевой таймер тикает. Потребление при этом измеряется в наноамперах.

К сожалению, ардуиновская библиотека мне не знакома, для AVR я пишу на Си и ассемблере, но примеры кода мигания светодиодом со сном в паузах я собрал видимо все
Так вроде ардуиновская библиотека это просто надстройка над либами AVR, поэтому никто не мешает их использовать. Готовый пример для сна МК на 8 секунд:
Скрытый текст
#include <avr/sleep.h>
#include <avr/power.h> 
#include <avr/wdt.h> 

volatile boolean wdt_tripped=1;

void system_sleep() 
{
	delay(2);                            // Wait for serial traffic
	_SFR_BYTE(ADCSRA) &= ~_BV(ADEN);     // Switch ADC off
	set_sleep_mode(SLEEP_MODE_PWR_DOWN);
	sleep_enable();
	sleep_mode();                        // System sleeps here
	sleep_disable();
	_SFR_BYTE(ADCSRA) |= _BV(ADEN);      // Switch ADC on
}

void wdt_interrupt_mode()
{
	wdt_reset();
	WDTCSR |= _BV(WDIE); // Restore WDT interrupt mode
}

void wdt_reset_mode()
{
	wdt_reset();
	WDTCSR &= ~_BV(WDIE); // Enable WDT reset mode
} 

ISR(WDT_vect) 
{
	wdt_tripped=1;  // set global volatile variable
} 

...

void setup()
{
  wdt_disable();
  wdt_reset_mode();
  wdt_enable(WDTO_8S); 
}

void loop()
{
  wdt_interrupt_mode();
  if (wdt_tripped) {
    wdt_tripped = 0;
    delay(10);
  }

  system_sleep();
  wdt_reset_mode();  

//read sensors, display data
}   



Единственное отличие, то что старые загрузчики арудино не дружат с wdt_reset_mode, и если сторожевой таймер установлен на 8 секунд, а время чтения сенсоров будет дольше этого значения и не будет вызван wdt_reset, то таймер сработает и МК уйдёт в boot-loop, весело моргая светодиодом. Для фикса можно залить кастомный бутлоадер, который при старте делает сброс таймера, либо не использовать reset_mode.
Авторам примера видимо невдомек, что контроллер сам прекрасно знает, от какого источника он сбросился и выставляет соответствующий признак в регистре MCUCSR.

Здесь же для этого городят отдельный флаг, для подъема этого флага — отдельный обработчик прерывания. Отвратительно.

Внимание! Симулятор четвертой АВР-студии с установкой MCUCSR откровенно лажает: www.avrfreaks.net/forum/mcucsr-wdrf
А, тут применен другой способ — контроллер укладывают спать, а потом он будится сторожевым таймером и сразу уходит в прерывание, без сброса. Тогда все вроде как легитимно.
Если не переводить вачдог обратно в reset-mode, то никаких проблем не будет. Учитывая, что без специального бутлоадера оно все равно нормально работать не будет, это ничего плохого не сделает.
А зачем, кстати, каждую секунду-то? Достаточно раз в полчаса получать — никто еще не умирал от того, что прогноз погоды по ТВ сообщают не каждую секунду и даже не каждый час. Про деревни без ТВ вообще молчу.

Другое дело, что в nano слишком много того, что кушает батарейки и без ежесекундных обновлений. Тот же USB, тот же преобразователь напряжений, тот же светодиод. Собственно, я экспериментировал со стандартными библиотеками сна и пришел к простому выводу: не умеешь на чистом c++ — забудь про энергосбережение на AVR.

Поэтому забыл, питаюсь от сети, получаю данные раз в полчаса (чтобы не занимать зря радиоканал беспроводным датчиком) и, не поверите, счастлив.
Ну например, тут есть часы и они работают с точностью до секунды. Люблю точность. Ну а если точность не нужна, да и минут тебе хватает, то вполне можно обновлять данные раз в минуту. Ну а если вообще убрать отсюда часы то и раз в 15-30 минут можно снимать показания.
Это, конечно, прекрасно, но лично я не понимаю, причем тут часы и точность до секунды, если не предусмотрено хранение данных. Нет, правда, я не со зла — просто не понимаю смысла в такой интеграции. Так что убрать часы — не самый плохой ход.

Да и вообще, климатические параметры за секунду обычно не меняются, это не те процессы.
ну у меня реализовано так что все крутиться в одном цикле и время и датчики. Если опрашивать датчики например раз в 3 секунды, то секунды на экране будут обновляться раз в три секунды.
spc имеет ввиду то, что часы по факту вам незачем, а правда зачем? Обновляйте таймер, раз в 10 сек.
Меняются во время грозы, например.
Часы (отдельную микросхему) отсюда можно выбросить и считать время самим контроллером. Точность даже лучше выйдет.

Только кому интересно — то в регистрах сейчас копаться? Чай не 80е. Фигак — и в продакшен!
а как вы будите получать изначальное время и дату? + выключишь контроллер и все время и дата пропала. А с датчиком реального времени все просто, задал ему время и все, он будет его держать и продолжать считать пока его собственная батарейка не сядет.
Пока контроллер спит, его сторожевой таймер тикает, как только натикает — разбудит ядро, ядро прибавит единичку к счетчику секунд и завалится дальше спать.
А если пропало питание микроконтроллера? Все пропадет и придется все заново настраивать. А с датчиком реального времени все будет нормально, подал питание на микроконтроллер и на экране реальное время.

Ваш метод хорош, когда не нужна точность и нужно просто будить по времени устройство.
При моем методе сам контроллер питается от батарейки, его питание никуда и никогда не девается. Если уж прям вот хочется точности, можно брать время с GPS или с «пиков» радио «Маяк». И настройка не нужна.
Часы можно оставить, они жрут мизерно, и у них есть своя батарея, их не обязательно постоянно питать вообще. Можно при включении контроллера спрашивать время у часов, затем считать контроллером. Только зачем? Опрос сожрет много энергии? Все таки бутылочное горлышко совсем не в часах.
А на сколько Вам важно в метеостанции проверять данные каждую секунду? Мне вот раз в минуту вполне хватает. + при частом опросе датчики могут греется и от того показывать завышенную температуру.
Кстати еще можно часы опрашивать раз в секунду, а остальные датчики — запоминать их показания и опрашивать пореже, так в итоге сэкономите энергию и датчики не будут пытаться перегреваться.
Еще можно ключом (или даже ножкой контроллера, не думаю, что датчикам нужно больше 20 миллиампер) питание с датчиков снимать на то время, пока их показания не нужны.
Насколько я помню, для того же dht22 это не самая лучшая идея — ему нужно некоторое время на инициализацию.
Да и вообще я смотрел — у меня подобный набор датчиков на фоне Ардуино вообще не заметен в плане потребления энергии во время спячки. Разве что саму ардуино отключать и давать ей питание лишь раз в минуту(или какой кому нужен интервал) на нужное время.
DHT22 в режиме ожидания потребляет что-то около 10мкА, BMP085 около 6мкА, Arduino Pro Mini (с AtMega328) в режиме сна потребляет 0.23мА. Во время съёма и передачи данных всё это дело потребляет около 20мА, правда замеры производились китайским мультиметром, а не осциллографом, поэтому могут быть сильно не точными. Но в любом случае, если добавить к этому набору солнечную батарейку (на 5В и 20-100мА) с аккумулятором или ионистором, то про замену батареек можно забыть надолго.
Похоже у меня какая-то неправильная Arduino, меньше чем 2 милиампера она отказывается потреблять.
Насколько я помню, большую часть этих 2мА потребляет светодиод, показывающий наличие питания. Но он легко выламывается\выпаивается. Кстати, с AtMega32u4 (Arduino Pro Micro) без светодиода потребление ещё чуть меньше, 0.16мА в режиме сна.
Уточню, что пожиранием занимается все же резистор, установленный вместе со светодиодом последовательно. Если есть потребность сохранить индикацию и не транжирить энергию, нужно соорудить этому светодиоду импульсное питание.
У меня его отламывание сэкономило где-то 0,5мА. Ну и да, у меня не оригинальная ардуина, потому вполне возможно, что просто китайцы поставили сильножрущий стабилизатор напряжения или еще что, пока сильно разбираться было лень.
UFO just landed and posted this here
Не только по этому, ардуино вообще жрет непростительно много для питания от батареек, ну и для этого тогда лучше использовать pro mini, в ней нет USB-2-COM конвертора, который отъедает не мало. Ну и вообще в Интернете есть куча статей о том, как бы чего от ардуины отломать (в прямом смысле), что бы она меньше ела.
UFO just landed and posted this here
Да я верю :) но просто некоторые вещи особо нет смысла отламывать, а некоторые вроде светодиодов и стабилизатора (если он не используется) — более чем
UFO just landed and posted this here
В среднем, если конечно все с Китая заказывать, то где то 1100. Это вообще все + провода.
UFO just landed and posted this here
UFO just landed and posted this here
Я бы даже сказал, что идеальный. Есть почти все необходимое, в большинстве случаев цены ниже чем у других, отправляет быстро.

И мне кажется, что вместо bmp085 лучше взять bmp180, он немного дешевле и точнее. А вместо DHT22 взять SHT21, он хоть и стоит дороже, но зато показания с него читаются стабильно и привирает не так часто, плюс подключается тоже по i2c.
Я отсюда в основном заказываю AliExpress.
Вы только учтите что у этой коробочки 32 КБ памяти. Подключаем библиотеку термометра, барометра и интернет шилда и получаем 6-10 КБ под код. Не всё так радужно
А если выкинуть ардуиновские библиотеки и почитать даташиты, термометр и барометр займут байт по 200-300, сеть — килобайт, может два.
electrodragon.com неплох весьма, правда, чуть дороже… И отзывы пишите перед новой покупкой…
И разве оно этого стоит? Ну конечно если только ради обучения… готовые решения намного дешевле…
Вот у меня такой стоит: www.ebay.com/itm/New-LCD-Digital-Alarm-Clock-Thermometer-temperature-Humidity-Hygrometer-Meter-/161114624108

Преимущества:
1. готовое решение, влажность/температура/часы, работает одновременно и снаружи и внутри помещения.
2. автономность работы — от батарейки уже 2 года работает, ни разу не менял.
3. Цена — 5$ это явно дешевле ардуино+детали+работа.

Точность датчиков представленных в данном проекте например выше в разы чем в этом устройстве. Плюс проект можно усовершенствовать и подстроить под свои нужды. Ну и кому что нужно, как говорится.
Откуда такая информация про точность, кстати? Если верить описанию DHT22, то у него точность по влажности до +-5% по влажности и до +-0.2C по температуре.

Не говоря о том, что по этому датчику рекомендуемая частота обновлений не чаще раз в 2 секунды (он иначе не успевает).

Другое, конечно, дело, что оставшиеся ресурсы Arduino можно и под другие цели пустить.
DHT22 действительно врёт в вопросах влажности. Но это враньё имеет закономерность. Если вычислить эту закономерность, используя множественные измерения при разной влажности и сравнивая с калиброванным аналоговым гигрометром, то программно можно подправлять показания, точность будет примерно плюс-минус 2%.
Температуру показывал точно. Опять же, возможно, что описанное поведение зависит от конкретного экземпляра.
Это повезло с экземпляром. Мой вот любит показывать 99% влажность, когда сыро. Как высыхает — снова становится адекватен.
UFO just landed and posted this here
В наших магазинах Arduino в любых видах нереально «подороже», так что Ebay и Aliexpress — наше все.
У меня тоже такой термометр есть. Та еще дрянь. Термометр врет, причем погрешность не постоянна, а зависит от температуры, и ее нельзя скомпенсировать. Показометр влажности вообще показывает произвольные числа, надежно показывает только 100% влажность. Нижний порог влажности у него 25-30%, но когда он показывает 30% на самом деле ближе к 70%. Я пробовал несколько похожих девайсов, все одинаково хреново ведут себя.
Спасибо родной.

Давно хотел сделать то же самое но для под водой, возьму ваш проeкт за основу.

Исходники лучше на git залить — мало ли что у mail.ru случится.
Не за что. Давно хотел там зарегистрироваться, вот появилась возможность. В течении пару дней, наверно выложу исходники туда.
А над более удачным корпусом не задумывались? На первый взгляд смотрится не очень презентабельно, учитывая то что это не прототип а уже готовое устройство.
Задумывался конечно, например планировал все спрятать за этот кусок фанеры и вырезать отверстие под экран. Но так как это для дома, то оставил так + это выглядит очень интересно и необычно. Друзья как только входят в комнату, сразу обращают внимание на странное устройство с проводами.
Предлагаю сделать все на прозрачной или матовой основе со слабой подсветкой. Аккуратно провести разводку и возможно добавить некоторые детали для красоты. Думаю интерес будет не меньший, а выглядеть намного приятнее.
со2 еще надо мониторить в домашней метеостанции, для того чтобы знать, когда проветривать
А не подскажете, чем не дорогим его можно мониторить?
я вот такой купил себе домой.
ru.aliexpress.com/item/Portable-Digital-3-in1-Round-Desktop-Indoor-Air-Quality-Temperature-Humidity-RH-Carbon-Dioxide-CO2-Monitor/655960009.html
наблюдения показали что в комнате 14 метров с пластиковыми окнами и 2 людьми надо проветривать раз в 2 часа.
Меня пока жаба душит, но спасибо за ссылку :)
Брал вот такую 4 года назад smartliving.ru/Main/WeatherStation на ебей. Цена вопроса 3000р. До сих пор стоит на крыше дома, раз в год меняются батарейки. Внутренний блок показывает параметры в помещении. Итого имеем температуру, влажность, давление внутри и снаружи, направление ветра, скорость ветра и датчик осадков снаружи. Внутренний блок спокойно подключается к windows и linux.

Зачем делать такую поделку из ардуины — непонятно. Разве что интерес.
Такую погодную станцию хоть сейчас бы купил за 3000руб, но на ебей она продаётся уже за 8000руб. Жаба с такой ценой пока что не согласна.
Вы правы, не отслеживал как-то цены на подобные станции, действительно взлетели.
Давление внутри и снаружи

А это для чего? И оно (давление) отличается?
Имелось в виду «температуру, влажность, давление» внутри и снаружи. Конкретно давление внутри и снаружи это, конечно, одно и то же :)
А можно ли вместо выключателя поставить датчик освещенности? А то как-то не комильфо руками включать…
Еще можно управлять включением-выключением подсветки экрана в зависимости от времени суток. Логика примитивная: например включать после 19:00 и выключать после 6:00, как вариант.
Летом темнеет позже, зимой раньше, придется раз в N недель подстраивать (т.е. перепрошивать ардуинку) — тоже как-то не юзер-френдли.
Время заката и рассвета можно рассчитать для любого времени/даты и любых координат на Земле.
На avr? Зачем? Опять же надо вводить свои координаты, или вы предлагаете снабдить схему еще и GPS-приемником? Не поверю, что датчик освещенности сложнее.

Не говоря уж о том, что из-за пасмурной погоды (или занавешенных штор) может стемнеть раньше.
Датчик освещенности очевидно практичнее, а вот наличие GPS обеспечит нас точным временем.
Да, про точное время я не подумал.
А нельзя ли получать точное время например от компа (который узнает его по NTP и отдает, например, в последовательный порт?)
Не проблема, с помощью, например, HC-05 это можно проделывать даже от смартфона по Bluetooth.
Дополню — с этим модулем можно, пользуясь смартфором как модемом, подключиться к Интернету, узнать время и отправить измерения куда следует.
А вот это уже интересно, да.
Ну если есть RTC, значит и календарь есть, а там можно поизголяться и над более сложной логикой ;)
Но это все шутки. Я у себя на малинку подкинул 20х4 экранчик и подсветку выставил таким образом, что при нормальном освещении ее просто незаметно, а в полумраке — чтобы было нормально видно. При этом не настолько яркую, чтобы ночью фонарем светила.
У этого экрана, вроде подсветка работает только так- она либо включена либо нет. Я скорее всего добавлю светорезистор и все, как только порог темноты будет достигнут дисплей включится.
Да, но ее яркость регулируется сопротивлением. Я поставил подстроечное, настроил один раз и забыл
Хорошая идея, так можно хорошо настроить яркость экрана.
Там обычные светодиоды, сколько тока на них дать, так и будут светиться, как следствие, поставить потенциометр и можно менять яркость. еще можно при помощи ШИМа это делать.
И еще датчик движения :) Зачем светить, если все равно рядом никого нет?
Я думаю это уже перебор для проекта метеостанция)
Ну это уже Вам решать, я себе повесил :)
Да, тоже неплохо. Только бы не вышло, как бывает с этими дверями — машешь им, машешь, а они реагируют примерно столь же активно, как зеркало на вампира.
Ну… у меня пока проблем не было, ну точнее были только ложные срабатывания, несрабатываний не было. С дверьми проблема больше в том, что датчики стоят криво. Так же помню стояли охранные датчики в другой квартире, они очень хорошо реагировали на любое движение, а принцип действия в них тот же.
> Вот так метеостанция будет выглядеть в сборе

Только не надо говорить, что это будет оконечным видом «прибора». Мне страшно!
у таких приборов нет оконечного вида :)
Что, так наколеночным велосипедом и останется? Жуть!
Неужто после макетирования не вариант развести плату, отЛУТить и спаять все по-человечески, без этой дикой горы проводочков и макеток?
Зачем ардуинство разводить?
По внешнему виду понятно, что целью был процесс, а не результат
Судя по коду, не сказал бы, что процесс был целью…
Пожелание:
Много написали о целесообразности…
Есть важная фича, в проекте не развитая. Это предсказание погоды по барометру. Грубо: падение давления — к осадкам, повышение — к солнцу. Ну и отображать изменение давления в периоде и символ погоды.
Я тоже на это надеялся, поставил датчик атмосферного давления, и в итоге как-то совсем не получается у меня глядя на давление и его историю предсказать осадки… ну где-то в 30% случаев разве что.
Желательно этот эффект исследовать. Я анализировал станции с усредненной истории давления за период до 12 часов, 5-8 измерений. Даже возможность отображения такой шкалы принесло бы большую пользу.

Пожелание:
Из дополнительных фич:
Датчик осадков. Подскажет брать зонт или нет. (Может потребоваться подогрев).
Датчик силы (не направления!) ветра.
Я это объяснил это тем, что за окном Питер :)
Датчик ветра это хорошо, но мне кажется, что его лучше ставить на крышу дома, что в условиях города не очень удобно, сейчас у меня пока датчик просто приклеен к козырьку за окном.
Объясните глупому: практическое применение метеостанций этих?
Вот лично (субъективное мнение) для меня даже не интересно знать температуру внутри квартиры, не говоря уже о давлении и влажности. Уличную узнать — в трее висит виджет, там же и прогноз.
Может я чего не понимаю, но для чего вам эти данные?
«Потому что могу» (с)
Ну а если серьезно, у меня вот на балконе мониторится температура, что бы цветы не замерзли. Правда пока так и не реализовал управление теплым полом (потому что нет его, теплого пола =]), но скоро и это будет.
Понимать, это в квартире холодно или просто ты простыл и тебе везде холодно, управлять отоплением и проверять, не дурит-ли тебя ЖКХ отключая ночью батареи :)
Я, например, живу в таком месте, что виджет в трее часто серьезно врет. Плюс статистика — по графику за неделю/месяц видно, куда вообще температура движется. Про давление вообще молчу — очень удобно по тому же графику понимать, что ждет впереди и от чего болит голова.
Человек больше недоумевает, зачем знать температуру и влажность в квартире, где и так можно по своим ощущениям сказать, как обстоят дела.
Влажность по ощущениям не скажешь. А, например, многим комнатным растениям влажность критична, да и для людей тоже лучше не выходить за определенные пределы.
UFO just landed and posted this here
Позволю не согласиться: для меня температура окружающей среды в 36 градусов при любой влажности АДу подобно (просто не люблю жару). И температура воздуха, влажность на мой взгляд проще и удобнее определяется самим организмом.

Видимо я так и не проникнусь полезностью идеи постройки/покупки/использованию метеостанции :)
36 градусов мало кто хорошо переносит.
Насчет 36 при 70% и 38 при 55% — надо посчитать какой-нибудь там Humidex.
для того что бы люди(особенно дети) не болели — у воздуха должны быть определённые параметры, поэтому их важно мониторить.
Sign up to leave a comment.

Articles