Авторизация
Регистрация

Напомнить пароль

avatar
RSS блога Подписка

Погода в доме: беспроводной метеодатчик из Arduino Pro Mini

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

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

В некотором смысле это спасибо MySKU и всем, кому понравились игрушки из Arduino.



ЖЕЛЕЗКИ

Arduino Pro Mini

Плата совершенно крошечная. Я даже не ожидал, что настолько. Но при этом на ней — взрослый чип ATmega328, так что по производительности она не уступает той же Uno. Это версия 5В, питается или от 5В стабилизированного по любому пину VCC или же от 5 — 12В по пину RAW (если верить Arduino.cc). По-моему, очень удобно.







Комплект передатчик-приемник ASK/OOK 433 МГц

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

Живые фото можно посмотреть в предыдущем тексте про Arduino.

Преобразователь Serial — USB

Очень простой, недорогой и универсальный — есть питание 5В и 3.3В на выбор. Нужен, чтобы загружать код в Arduino Pro Mini, так как у платы нет своего USB. Шлейф, который вы видите на фото, входит в комплект. И хотя ничего необычного в нем нет — обычные четыре провода, все равно приятно.







Датчик влажности и температуры DHT21

Заказывал часы для жены, но DX ошибся с заказом, ошибку признал и вернул стоимость на счет в магазине. Так что вместо часов жене получился датчик температуры мне любимому. Этот датчик выбран за разумную цену (вообще, а не в DX), широкий диапазон измерений и точность до десятых. Кроме того, в отзывах на DX писали, что он полностью совместим с DHT22, для которого есть готовые библиотеки для Arduino.











Пара слов о продавце на eBay
С одной стороны, в магазине приятные цены, все выслали достаточно быстро, и почти все пришло в рабочем состоянии.

Исключение — один приемник, который не включился. Возможно, он настроен на другую частоту и поэтому я не увидел сигнала на выходе. С этим буду разбираться позже, но пока факт остается фактом — в текущем состоянии один приемник оказался бесполезен.

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

Итог: сначала мне больше недели номер вообще не давали. Потом, когда я пообещал диспут, выдали с интервалом в день сразу два трек-номера. Один был явно левым, поскольку дата приема посылки по нему была раньше даты заказа.

Другой казался нормальным ровно до импорта в России. Как только появился индекс места назначения стало понятно, что это посылка не моя, а какого-то счастливчика из Обнинска.

Ну а потом уже пришла моя посылка — без каких-либо трек-номеров. Поэтому поводу я еще немного поскандалил с продавцом, и в конечном итоге плату за трек-номер мне вернули.

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


ФИЗИЧЕСКИЙ УРОВЕНЬ
За громким заголовком суровая правда: дома на боевом дежурстве живет небольшая коробочка с Arduino Uno, подключенная к сети через Ethernet-шилд.

В этой коробочке также есть копия упомянутого выше ASK/OOK приемника для получения сигналов с домашних датчиков (протечки, открытия дверей и т.п.).

Это определило некое подобие клиент-серверной модели для подключения метеодатчика. То есть, метеодатчик на базе Arduino Pro Mini отправляет данные температуры и влажности коробке, а она, в свою очередь, отправляет их в интернет.

Отвечаю на очевидные вопросы )

Q: Почему примитивные приемники, а не, скажем, рекомендованные ранее чудесные nRF24L01, которым не страшны помехи, которые легко объединяются в сеть и вообще идеальны для такого применения?

A: Во-первых, кажется, я просто боюсь, что потрачу слишком много времени на усвоение методики работы с nRF24L01. Во-вторых, у меня (то есть, у Arduino Uno в коробке) заканчивается все — пины, память. А нужно подключить еще несколько устройств: пищалку, датчик движения.

Между тем, в коробке уже есть все, что нужно для получения метеоданных — и приемник, и библиотека RC-Switch, которая вполне подходит не только для управления розетками, но для передачи нескольких символов. Почему бы не воспользоваться уже имеющимися ресурсами?

Q: Почему тогда не Virtual Wire?

A: Ответ, в общем, выше — еще одна библиотека, еще меньше памяти. С практической точки зрения такой радиоканал можно назвать слабым местом системы. Но, если задуматься, вся моя система — сплошное слабое место, так сказать, by design.

Q: почему бы не подключить Arduino Pro Mini к сети напрямую?

A: Дело в том, что для минимального количества проводов я планирую поставить датчик на окно, а рядом нет ни сетевых, ни электрических розеток. Это раз.

И два: Wi-Fi-шилд для Arduino или комбинация из электрической розетки с Ethernet и обычного Ethernet-шилда Arduino стоят совершенно неразумных для решения этой задачи денег.

Q: Почему не меряем атмосферное давление?

A: Потому что датчик сразу не заказал, и в итоге он еще не приехал. А попробовать очень хотелось.

Q: У тебя же есть метеостанция с беспроводным датчиком. Почему не используешь его, а городишь огород на пустом месте?

A: Честно говоря, огород для меня проще, чем писать код для обработки сигнала. Потом, может быть, попробую. А сейчас так гораздо быстрее.

ЛОГИЧЕСКИЙ УРОВЕНЬ
Для логической основы радиоканала я решил воспользоваться возможностями библиотеки RC-Switch. Она предназначена для управления беспроводными розетками, но методика управления позволяет использовать ее и для передачи данных. Медленно, не очень надежно, но — позволяет.

Суть в том, что команда розетки — всего лишь цифровой код. При этом RC-Switch совершенно безразлично, какой именно код передавать. Главное — не больше 24 бит, то есть не больше 16777216.

В итоге мой протокол передачи метеоданных выглядит следующим образом:

Первые три цифры — идентификатор датчика
Четвертая цифра — тип данных (1 — влажность, 0 — температура)
Пятая цифра — знак температуры (1 — отрицательная, 0 — положительная)
Остальные цифры — величина

Например, чтобы передать температуру 23.5С нужно отправить через RC-Switch код 16100235.

Плюсы примитивного «кодирования»: достаточно всего одного действия арифметики, чтобы выделить передаваемую величину. Минусы — один «пакет» для одного значения.

ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ
Arduino Pro Mini поставляется в комплекте с контактными планками. При желании их можно напаять на плату. А при необходимости сделать максимально компактную конструкцию провода можно паять прямо к контактным площадкам платы.

Я выбрал первый вариант — мне так проще, да и плату, если что, легче использовать повторно.

После беглого ознакомления с датчиком температуры и влажности DHT21 выяснилось, что напрямую подключать его к Arduino не очень правильно. Оказывается, правильная схема включает «подтягивающий» резистор 4.7 кОм между плюсом и линией данных. Мне повезло — нужный резистор выкусил из ненужного беспроводного звонка.

Для питания прототипа я воспользовался ненужной «аварийной» зарядкой для мобильного телефона. Это такой цилиндрик: с одной стороны вставляем батарейку AA 1.5В, а с другой получаем 5.9В (без нагрузки). Для страховки я подключил выход зарядки к входу RAW Arduino Pro Mini, чтобы все компоненты (плата и датчик) получали стабилизированные 5В. По крайней мере, из описания платы можно заключить, что RAW принимает от 5В до 12В, при этом на контактах VCC — стабилизированные 5В.

Дальше все просто. Подключаем передатчик, датчик и пишем простой код. В моем случае для кода потребовались три библиотеки: RC-Switch (передача данных), SimpleTimer (отсчет интервалов для передачи) и DHT22 (получение данных с датчика температуры и влажности).

А вот и прототип:



Схема работы: раз в пять минут опрашиваем датчик и попеременно отправляем температуру и влажность. За одну сессию можно передать только один параметр, поэтому «большая сестра» получает их по очереди, а потом скопом отправляет в Open Weather Map. В результате данные в интернете обновляются раз в десять минут.

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

Во-вторых, я не такой уж и погодный маньяк, чтобы обновлять погоду каждую секунду.

И третье. Интервал в пять минут, по-моему, более-менее рационален с точки зрения энергетики, так как я планирую питать метеодатчик от батареек.

Для записи кода в плату соединяем Arduino Pro Mini с компьютером через преобразователь Serial — USB и не забываем «перекрестить» линии TX/RX, то есть: RX подключаем к TX, и наоборот — TX к RX. Для питания берем пин 5В, потому что эта версия Arduino — 5В.



Секрет: если заливка программы не удается (ошибка типа avrdude: stk500_getsync(): not in sync: resp=0x00), помогает такая процедура:

1) Нажимаем кнопку загрузки программы в среде разработки Arduino
2) Ждем пока загорится красный светодиод на преобразователе Serial — USB
3) Нажимаем кнопку сброса на Arduino Pro Mini

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

Со стороны «большой сестры» нужно только добавить несколько фрагментов кода для получения метеоданных из радиоканала и отправки их в интернет. Для примера — готовый код по ссылке в конце текста, который подходит для использования с Arduino Uno как в монопольном режиме, так и в составе вашего кода (если, разумеется, разобрать исходник на нужные части).

Если будете использовать — не забудьте подставить свои IP/MAC, ключ авторизации OpenWeatherMap и координаты метеодатчика.

А вот так метеодатчик выглядит почти в финальной (ну или вообще финальной, если нет ничего более постоянного, чем временное) версии:







НА ДЕРЕВНЮ, ДЕДУШКЕ
Итак, метеоданные получили, передали и приняли. Ок. И что делать с этим счастьем? Мне советовали отправлять его в Openweathermap.org, поскольку дело хорошее и вообще. Я проникся и немного изучил вопрос, хотя такое ощущение, что Openweathermap это совершенно не нужно.

Так что получилось, скорее, не благодаря, а вопреки. Спасибо нашему чуваку, который сделал интернет-метеостанцию и рассказал о ней, Wiki за описание базовой аутентификации HTTP и чудесному сервису hurl.it, который имитирует HTTP-запросы и показывает их тело, что важно для кода. Ах да, еще большое спасибо онлайновым сервисам кодирования Base64.

Иными словами, документация на Openweathemap upload API говорит, что нужна аутентификация HTTP Basic и описывает имена и форматы полей данных, но не дает практических примеров, что нужно таким безмозглым, как я.

Как все получилось.

Сначала я зарегистрировался на Openweathermap.org.

Потом выяснил, что для HTTP Basic нужна строка авторизации, состоящая из имени и пароля, разделенных двоеточием и кодированных Base64. Так что взял логин и пароль, пошел в онлайновый кодер и на выходе получил нужную строчку.

Например, для имени test и пароля test она выглядит так: dGVzdDp0ZXN0



Как результат, строка авторизации Openweathermap выглядит так:

Authorization: Basic dGVzdDp0ZXN0

Берем ее и составляем тестовый запрос в Openweathermap и смотрим тело запроса:



Обратите внимание, что если все правильно, то «тест» отправляет данные в Openweathermap. Я эту проблему решил просто: подставлял актуальную информацию о погоде из своего региона.

Полученный таким образом текст запроса можно запросто использовать в коде Arduino: строчки печатаются в HTTP-клиент.

Плюсы: в целом все довольно просто.

Минусы: у Openweathermap отсутствуют адекватные (с моей точки зрения, разумеется) методы визуализации данных. Доступны только запросы к БД с выдачей результатов для визуализации «на стороне».

КАК ЭТО РАБОТАЕТ
Все просто. Метеодатчик получает температуру и влажность от DHT21, и отправляет их Arduino Uno, подключенной к интернету.

Оттуда данные уходят на Openweathermap (чего добру пропадать?), где их можно посмотреть в онлайне и где они, вероятно, используются для прогноза погоды.

Желающим понаблюдать за местной (Россия, Москва, СВАО, Лианозово) погодой: мой метеодатчик на Openweathermap.org.

А ТЕПЕРЬ О ПРОБЛЕМАХ
Так как руки у меня растут все-таки не совсем из правильного места, то я закономерно наступил на несколько художественным образом разложенных грабель.

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

Т.е. вместо -4.5С мне показывали 32763,5. Я не стал переписывать библиотеку (см. выше про руки), а просто стал вычитать полученное значение из 32768 (максимальное значение для заданного типа переменной).

Во-вторых, практически сразу после первого включения метеодатчика выяснилась печальная особенность: на кухонном столе (около 2.5 метров до приемника) он еще работал, а вот на балконе (около 4 метров) — нет. После изучения кода и прочего стало понятно, что проблема, все-таки и не в нем, и не в батарейках.

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

В итоге я заменил все проводки на штыри из одножильного медного провода (просто купил пару метров (с запасом, да) 2х1.5 электрического кабеля, и распотрошил его на жилы. Длина штырей как и раньше — около 17.3 см, т.е. четверть волны. Все ориентированы вертикально.

Результат — теперь не только метеодатчик работает на балконе, но и другие беспроводные датчики в квартире работают гораздо более уверенно.

Третья очевидная проблема — совершенно зверское потребление энергии. Двух батареек 14500 по 1000 мАч хватает где-то на пару суток. Т.е., по грубым прикидкам метеодатчик кушает около 20 мА. Говорят, что одна из наиболее прожорливых частей — встроенный стабилизатор напряжения, но от него я избавиться как раз и не могу, потому что пока не вижу, как в батарейный отсек на две АА можно разместить автономный источник 5В.

Поэтому рассматриваю две альтернативы. Первая — эксперименты со «спящим» режимом. Вторая — бросить эти девичьи мечты об автономности и запитать уже от электрической сети.

Ну а пока наслаждаюсь тем, что датчик вообще работает :)

ССЫЛКИ
Библиотека RC-Switch
Библиотека DHT22
Библиотека SimpleTimer
Сервис для тест HTTP-запросов hurl.it
Сервис кодирования Base64
Код метеодатчика
Код принимающей стороны
Планирую купить +105 Добавить в избранное
+113 +198
свернутьразвернуть
Комментарии (73)
RSS
+
avatar
+5
По-моему круто!
+
avatar
+2
  • Sanja
  • 10 июня 2013, 13:14
Отличный текст, спасибо — особенно за ссылки.
+
avatar
+1
  • Den
  • 10 июня 2013, 13:21
Круто! Не всё понял, но буду вникать.
Однозначно +++
+
avatar
+6
Автор явно скромничает. Невооружённым глазом видно, что руки растут именно из плечевого сустава. Зачёт!!!
+
avatar
0
  • moneag
  • 10 июня 2013, 13:28
класс! и тема интересная, и стиль изложения не скучный!
+
avatar
+1
  • Pirate
  • 10 июня 2013, 13:30
Вещь отличная спору нет + ставлю. Автор Самоделкин, с большой буквы, но игрушка для повторения большинству читающих здесь не подвластна. Текст скорее всего был подготовлен для более специализированного сайта. Кидайте тапками не прицельно… Прежде чем кидаться сделаете это.
+
avatar
+1
  • spc
  • 10 июня 2013, 14:26
нет, текст именно сюда, поскольку до специализированных я никак не дотягиваю. Ну и, предположим, большинство не сделает — так и я способен не на все, что здесь описывают. К примеру, местное сыроварение для меня — это уже недостижимая вершина мастерства )
+
avatar
0
Полезный обзор!
+
avatar
+1
  • maksms
  • 10 июня 2013, 13:56
По ссылке «Преобразователь Serial — USB» открывается радиомодули,
Для dht21 и всех остальных можно использовать типа такой универсальной библиотеки homes-smart.ru/upload/arduino/DHTALL.zip

Питание радиопередатчика можно повесить на цифровой пин и включать его только при передаче — может и немного, но возможно будет экономия батареи…

Можно пойти дальше и сделать передатчик например на малютке ATTINY85 (http://www.taydaelectronics.com/attiny85-attiny85-20pu-8-bit-20mhz-microcontroller-ic.html) -он вроде меньше жрет энергии, прошивается через ардиуну…

Сам использую проводные варианты и статистика датчиков, в том числе и давления ведется в своей БД и доступна через самодельный веб интерфейс.
+
avatar
0
  • spc
  • 10 июня 2013, 14:24
спасибо, ссылку на преобразователь поправил.

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

Тоже думал про локальную БД, но, в итоге скатился до наиболее простого варианта — в облако, все в облако.
+
avatar
+1
«неасилил»

з.ы. полезный обзор
+
avatar
0
  • vil2
  • 10 июня 2013, 15:17
те же самое :)
+
avatar
0
  • sav13
  • 10 июня 2013, 14:30
Да. С батарейками нужно что-то делать. У орегоновского датчика алколайновых батареек на пол года хватает.
Читал, что понижают процессору тактовую до 4мГц и после этого плата питается напрямую от 3.7в аккумуляторов.
Или применить спец платку LilyPad Arduino с пониженным энергопореблением.
+
avatar
0
  • spc
  • 10 июня 2013, 14:40
LilyPad, конечно, хорошо, но 150 рублей и 760 — есть ведь разница. Что касается разницы с Oregon, то она закономерна: Arduino в данном случае получилась платформа общего профиля, которая по определению обладает «лишними» ресурсами и потребителями.

Как обычно, в общем: хочешь просто — мирись с неизбежным.
+
avatar
+2
  • x0x01
  • 10 июня 2013, 15:03
Я погоду передаю на narodmon.ru, имхо более вменяем чем OW.
+
avatar
0
  • spc
  • 10 июня 2013, 15:12
Спасибо, записал! Сейчас пойду посмотрю, что это вообще такое.
+
avatar
0
  • spc
  • 10 июня 2013, 15:32
посмотрел и понял, что у нас разные взгляды на ситуацию. Для меня narodmon.ru гораздо более невменяемый сервис.
комментарий скрыт
+
avatar
0
  • spc
  • 13 июня 2013, 12:59
да, все подтверждаю. Сервис совсем не так страшен, как показалось на первый взгляд. Особенно — после вполне разумных и понятных объяснений, почему все это работает именно так.

В общем, если ресурсы в контроллере еще останутся — попробую отправку данных в narodmon помимо прочего )
+
avatar
0
  • Castro
  • 10 июня 2013, 15:05
Для тестирования запросов к сервисам, есть так же плагины, позволяющие делать это прямо с браузера.
Например, chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo
Хотел узнать: а есть какие-то недорогие датчики веса? Нужно измерять вес до 100 грамм, точность в 5 грамм будет достаточной.
+
avatar
0
  • spc
  • 10 июня 2013, 15:23
я об этом пока особо не думал. Была, конечно, идея сделать автокормушку для кота — у нас одному зверю нужно специальное питание по поводу излишнего веса. Но по трезвому размышлению понял, что этот критерий не подходит.

А вообще, если посмотреть, что народ с Arduino делает, то можно поделить на два направления:

— используют электронные весы (подключаются к выходу АЦП)
— используют датчики силы (?) (force sensitive resistor) (https://www.sparkfun.com/categories/143)
+
avatar
+1
Есть такое понятие «тензодатчик». От приложенной силы меняется сопротивление. Видимо, это он понимался во втором случае. В целом штука должна быть копеешной.

ЗЫ: ндэ, не такие уж и копейки…
+
avatar
0
  • maksms
  • 10 июня 2013, 16:07
тензодатчик можно вытащить типа из таких весов www.buyincoins.com/new_en/details/300g-0-01g-digital-diamond-pocket-jewelry-weigh-scale-product-1546.html
+
avatar
0
Да фактически, как я понимаю, из 7.5 долларов цены около 7 приходится на датчик. Остальное — корпус и вольтметр, это гроши. Хотя, например, цифровой безмен и вовсе стоит 4-5 баксов но там точность грешит, конечно, зато и пределы измерения другие (до 40кг что-то).
+
avatar
0
  • Castro
  • 10 июня 2013, 16:28
Придется на eBay покупать и посредником везти, чтобы дешевле получилось. Получится меньше $10
+
avatar
0
  • Castro
  • 10 июня 2013, 15:58
Я вот как раз по поводу автокормушки для кота и думаю. Но самое узкое место пока что — это датчик.
+
avatar
0
Да, наука и жизнь, блин… Ардуинизация котов идёт полным ходом! В этой связи следует ожидать появления фундаментальной монографии «Применение ардуины в котоводстве». :)
+
avatar
0
  • Castro
  • 10 июня 2013, 16:25
Давно об этом думаю. Но кормушка — это не так сложно. Я хоть понимаю как это работать должно. А вот как чистилку лотка сделать?
+
avatar
0
  • spc
  • 10 июня 2013, 17:07
а вот товарищ ремонтировал знаменитый лоток Litter Maid и всю его электронику разложил по полочкам. Вот механика, да, отдельная история.

radiokot.ru/lab/controller/51/
+
avatar
0
Похоже. Уже с АЦП на борту — сразу цифру выдаёт. Удобно. Но по второй ссылке я самого датчика не вижу.
+
avatar
0
Спасибо, за обзор. Я тоже строю что-то подобное — но мне бы хотелось услышать как реализовать питание Arduino по Ethernet-у, с условием соблюдения МИНИАТЮРНЫХ размеров.
Поскольку использование PoE слишком увеличивает габариты устройства.
+
avatar
0
  • x0x01
  • 10 июня 2013, 15:59
Самое простое — использовать одну из не задействованных пар «витой» для передачи питания, при длинне ~10м и входе 5в — будет работать отлично.

Сечение витой маленькое, на самом деле, на бОльшие расстояния надо считать исходя из сопротивления/сечения провода.
+
avatar
0
Эт мы знаем, но задача стоит мониторить температуру в разных серверных.
Днина кабеля будет далеко не 10 м.
Буду искать на ebay может что-то и найдем.
+
avatar
+1
POE «адаптеры» китайские — совсем мелкие. там внутри и нет ничего, собственно, насколько я понимаю. при минимальном потреблении на паре десятков метров проблем быть не должно. в крайнем случае — влупить 12В по свободным парам, а на стороне девайса поставить тупую 78l05 — стабилизировать оставшееся до 5В.

а вообще — у вас что, материнки лишней нету? там ведь есть термодатчик. вынести его из корпуса, или вообще корпус не ставить — и мониторь себе на здоровье. я понимаю, что из пушки по воробьям, но зато 100% надежно, просто, и бесплатно — из подручного овна и палок ;)
+
avatar
0
опять же — зависит от потребляемого девайсом тока. я видеокамеру запитывал по витухе на метров 15 — нормально тянет, даже со включенной подсветкой.
+
avatar
0
Яростно плюсую. Такая фигня будет нужна для наблюдения за загородным домом. Но там всё сложнее — к инету придется ходить через GSM/GPRS-шилд. Но там зато можно и СМСками ограничиться вообще, да и управлять этим импровизированным умным домом через звонок и DTMF.

ЗЫ: Кстати, продавец очень приятный (в плане цен и ассортимента около-ардуинной хрени, много у него накупил уже давно, в т.ч. и пару таких же «апгрейднутых мини».
+
avatar
+1
  • badguy
  • 10 июня 2013, 16:07
насчёт стабилизатора — тот что на ардуинке — весьма паршивый по параметрам (смысл ег оскорее в том чтобы быстро протестировать работоспособность девайса). так что лучше взять нормальный внешний или сделать самому.
+
avatar
0
  • spc
  • 10 июня 2013, 16:31
первое что приходит в голову (оно же и последнее) — L7805. Это тоже плохо?
+
avatar
+1
  • Aahz
  • 10 июня 2013, 19:51
L7805 Является линейным, то есть все напряжение свыше выходного значения переводит в тепло, отсюда невысокий КПД. В данном изделии на входе примерно 2*4В=8В, на выходе 5В, КПД порядка 60%.

Если нужен высокий КПД, смотрим в сторону импульсных стабилизаторов. Хороший вариант — стабилизаторы на основе Kis-3r33s.

Импульсные, опять же, разные бывают.

Пробовал на базе LM2596 (20В -> 5В). Греется, значит КПД чуть получше чем у линейного. Судя по документации, этот стабилизатор способен на большее при правильном обвесе, чего в китайских дешевых поделках ждать не приходится.
+
avatar
0
  • spc
  • 10 июня 2013, 21:53
спасибо, буду иметь в виду!
+
avatar
+4
Когда то давно сделал компьютерный термометр на базе микросхемок DS1621 www.riccibitti.com/pc_therm.htm Где то там же были проги для отправки данных датчиков в инет www.lancos.com/webtherm.html. До Инета дело не дошло, пригодились в другом. Лог файл контроля температуры стояков отопления с интервалом 1 минута, я как то начальнику ЖЭК притащил. Он был впечатлен… лишних вопросов не задавал, а отправил народ решать проблемы с отоплением дома, с тех пор лет 15 прошло… Начальник ЖЭК всегда здоровается и с отоплением дома давным давно полный порядок. :)
+
avatar
0
  • spc
  • 10 июня 2013, 21:53
шикарная история! Ради нее вполне стоило писать этот текст :)
+
avatar
-1
  • Soorin
  • 10 июня 2013, 18:23
Правильно, что не стал заморачиваться с nRF24L01. Два дня убил, пытаясь их друг с другом связать (nRF24L01+, купил 4 штуки). Ни через Mirf, ни через RF24 не работают — а главная проблема, нет никаких диагностических средств. Т.е. никак не понять, работает вообще передатчик на плате, или нет.
+
avatar
0
  • spc
  • 10 июня 2013, 21:46
хм… как-то печально. Хотя на самом деле диагностика, наверное, есть. Если, конечно, сработает примитивный метод, которым я пользовался для опознания команд выключателей. То есть, если взять обычный приемник с той же модуляцией и подключить его к компьютеру на предмет разглядывания сигнала в Audacity, то вполне реально различить момент передачи.
+
avatar
+1
а почему вы не взяли радиодатчик от какой либо метеостанции mysku.club/blog/dealextreme/16259.html и через rc-switch с нее забирать темпу и влажность. и с питанием все будет хорошо — они годами от одной батарейки пашут
+
avatar
0
+
avatar
0
  • spc
  • 10 июня 2013, 21:51
в целом тоже согласен, но у меня было несколько причин.

он, как минимум, немного дороже моего решения. Особенно с учетом того, что на DX зависло какое-то количество денег.

Другие соображения я тоже высказывал — для датчика нужен дополнительный код, а памяти остается не так много. Особенно, с учетом того, что я еще не все сделал, что хотел.

Плюс к тому, Pro Mini в датчике, если я что-то еще придумаю, сможет заниматься и другими задачами в промежутках между погодой. А вот просто метеодатчик — нет.
+
avatar
0
  • spc
  • 10 июня 2013, 21:52
или я не понял вашего замысла, или вы не очень представляете себе, что такое rc-switch. Это не универсальный инструмент связи всего и со всем, а всего лишь средство управления некоторыми радиорозетками.

Протокол никоим образом не совместим с метеостанциями, поэтому rc-switch для работы с готовыми датчиками не подходит. Для готовых необходимо или решение под него, или самостоятельный разбор протокола.
+
avatar
0
ну про замысел Cucumber отписал, там все понятно, протокол дешифрован. А ардуино с ehternet shield'ом все это прекрасно постит в инет. Комп включенный ради это странно иметь, а сервера обычно линуксовые у всех стоят
+
avatar
+1
если заливка программы не удается
Если и дальше будете использовать Arduino Pro Mini, то стоит заказать вот этот FT232RL USB to Serial adapter ebay.com/itm/251155233587, у него на выходе есть сигнал сброса, при заливке не нужны будут танцы с бубном.
+
avatar
0
  • spc
  • 10 июня 2013, 23:18
да я, если честно, уже привык ) Это на самом деле тривиальная операция, даже бубном толком назвать нельзя. Ну и вряд ли я буду все это и дальше в промышленных масштабах клепать.

В любом случае — спасибо! А то я все гадал — и чего у китайцев этих адаптеров море. Оказывается, все по делу.
+
avatar
0
Вот кстати попалась полезная статейка по Вашей проблемке: фридуин.ство.рф/?p=920, дёшево и сердито!
+
avatar
0
  • spc
  • 17 июня 2013, 14:40
спасибо! Теперь осталось перебороть себя и сходить в Чип и Дип за парой конденсаторов )
+
avatar
+1
Вторая — бросить эти девичьи мечты об автономности и запитать уже от электрической сети.
Нет, ни в коем случае НЕ СДАВАЙТЕСЬ!!! :-) Я сам много лет назад столкнулся с проблемой уменьшения потребления схемы собранной на 561 серии, в моменты переключения она не хило кушает, не сдался, решил нетривиальным способом (костылём :-).
Попробуйте простейший «таймер» на МОСФЕТе в цепи по питанию. Алгоритм такой:
1. Вся схема обесточена, ёмкость на затворе заряжается примерно 5 минут;
2. МОСФЕТ открылся, схема работает — измеряет-передаёт;
3. Передача закончена, через вывод Ардуинки ёмкость на затворе разряжается, напряжение питания снимается на 5 минут, СПИМ!
4. И снова… :-).
+
avatar
0
  • spc
  • 10 июня 2013, 23:19
внешний таймер — тоже мысль!
+
avatar
+1
  • SAIRUS
  • 11 июня 2013, 01:11
может мини солнечная панель в этом деле пригодиться для пополнения запаса энергии
+
avatar
0
  • spc
  • 11 июня 2013, 01:30
в принципе, думал про какую-нибудь самую простую и дешевую китайскую зарядку с солнечной батареей. Возможно, и попробую.
+
avatar
+1
еще в плане оптимизации питания. запитаться напрямую от лития, выкинув входной диод, стабилизатор, и, самое главное, светодиод на питании. между измерениями уводить атмегу в глубокий анабиоз (SLEEP), желательно предварительно отключив периферию вроде АЦП, компараторов и т.д. Настроить watchdog в несколько (десятков) секунд и просыпаться по нему. в идеале можно так же отключать питание передатчика и датчика (внешним ключом или брать питание со свободного пина). можно так же внимательно заглянуть внутрь датчика и поиска, а нет ли и там стабилизатора. при необходимости заменить на более достойный LDO или выкинуть вовсе
+
avatar
0
  • spc
  • 11 июня 2013, 13:05
о, это очень круто для меня. Я пока остановился на том, что попробую выпаять светодиод-индикатор питания, действительно перейду на одну батарейку (вторую в параллель) мимо стабилизатора Arduino, и попробую «сонную» библиотеку Narcoleptic.

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

Спасибо за советы!
+
avatar
0
Интересная и «дешевая» идея, можете ткнуть носом в реализацию? ;o)
К сожалению, я в схемотехнике не силен, даже в первом приближении не смогу сформулировать вопрос к гугле… :o(
+
avatar
0
  • ibnteo
  • 17 июня 2013, 13:45
Благодарю за обзор, но энергосбережение осилить нужно, иначе это просто игрушка, а не реально работающее устройство. Если на Arduino не получится, то лучше собирать на MSP430 LaunchPad, в нём и USB порт есть, и куча режимов для энергосбережения, и питание 3 В.
+
avatar
0
  • spc
  • 17 июня 2013, 14:36
дело в том, что для меня это действительно больше игрушка. И, в общем, цель текста была одна — просто показать, что сделать более-менее полезную вещь из Arduino не сложнее, чем заставить плату мигать светодиодом.

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

Спасибо за намек на LaunchPad.
+
avatar
0
  • VoJak
  • 29 ноября 2013, 03:02
Добрый день.
Приобрел данные радиомодуля недавно. Подключил их к USB конвертеру, так при выключенном передатчике у меня мусор идет от приемника, когда к передатчику подключаю питание приемник ловит иногда набор нулей.
Кто-нибудь сталкивался с таким?
+
avatar
+1
  • spc
  • 29 ноября 2013, 08:20
Все с этим сталкивались. Потому что это совершенно естественное поведение аналогового приемника с автоматической регулировкой усиления в условиях большого количества помех. Решается использованием помехозащищенных протоколов программной или аппаратной реализации.
+
avatar
0
  • VoJak
  • 29 ноября 2013, 16:29
Спасибо за оперативный ответ. А то проектов хватает в сети, а траблы никто не описывает. Я изначально думал проверить на 2х юсб шнурках, чтобы знать, что реально на UART МК приходит.
У вас получается пульт передает только в момент нажатия кнопки, т.е. приемник получает все тот же бессмысленный мусор из эфира, пока не будет нажата кнопка на ПДУ?

Просто закупил 4 комплекта приемник/передатчик, хотел задействовать и на этих помехах тормознул.
+
avatar
+1
  • spc
  • 29 ноября 2013, 22:45
Ну, как бы никто эти «траблы» не описывает, потому что это вовсе не траблы, а принцип работы данных устройств :) Мы же не удивляемся, что Солнце восходит на Востоке и заходит на Западе, правда?

С пультом все именно так: передача только в момент нажатия кнопки. Если говорить о тех пультах, что у меня, то они для «синхронизации» с приемником используют специальную преамбулу — включают несущую на время, необходимое, чтобы приемник перестроил настройку уровня сигнала. При таком раскладе он (приемник) перестает слышать более слабые сигналы (подразумевается, что кроме информационного сигнала все остальные — незначительны), и захватывает наиболее сильный.

В остальное время на выходе приемника действительно постоянный ужасный шум. Так что если хотите использовать — нужны соответствующие протоколы/алгоритмы. Для Arduino это, например, VirtualWire. Или, на более примитивном уровне — библиотека RC-Switch и аналогичные ей, имитирующие протокол многих беспроводных пультов/розеток с фиксированным кодом.
+
avatar
0
  • VoJak
  • 30 ноября 2013, 00:23
Ну, как бы никто эти «траблы» не описывает, потому что это вовсе не траблы, а принцип работы данных устройств :) Мы же не удивляемся, что Солнце восходит на Востоке и заходит на Западе, правда?
Существует множество радиомодулей Xbee,nrf24L01 и т.д. в которых не заморачиваешься с этими проблемами, что плюнул в UART или SPI, то и принял. Пишу на асме, поэтому и интересно как бороться с данными модулями, когда на входе мусор. Тем более, что хочу завязать их с какой-нибудь «тинькой», где ардуиной и не пахнет.
+
avatar
+1
  • spc
  • 30 ноября 2013, 21:21
да, но именно поэтому они и стоят заметно дороже элементарных ASK/OOK приемников/передатчиков. А по поводу того, как бороться, я уже рассказал, как с этим борются — аппаратной или программной коррекцией ошибок.

Один из аппаратных вариантов — взять те же кодеры/декодеры SC2260/2262 и передавать данные с их помощью. Но это довольно медленно и неудобно. Возможно, есть другие варианты, я их, если честно, не изучал даже.

Программные варианты — например, адаптировать для себя библиотеку VirtualWire для Arduino (если пишете на ассемблере, это наверняка не должно быть особой проблемой). И уж простите, но я упоминаю Arduino не потому, что нет других решений, а просто потому, что с другими дела не имел.

Другой вариант — использовать методику тех же SC2260. То есть — перед каждой передачей данных выдавать импульс на синхронизацию (предположим, та же единица на вход передатчика на время захвата несущей приемником), а после — данные.

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

Для ориентира — обычных радиорозетках синхронизация что-то около 3-4 тыс. микросекунд.
+
avatar
+1
  • AL_Kur
  • 01 января 2015, 08:35
offtop. много извиняюсь за граммарнацизм, читаю несколько ваших обзоров, везде «суть» ошибочно употреблено в единственном числе. Задевает.
« Глагол быть в настоящем времени имеет лишь две формы: есть (3-е лицо ед. ч.) и суть (3-е лицо мн. ч.).В будущем времени этот глагол имеет все шесть форм:
буд-у, буд-ешь, буд-ет; буд-ем. буд-ете. буд-ут.» ©
+
avatar
0
  • spc
  • 01 января 2015, 12:49
С Новым годом! Спасибо, что заметили и подсказали — в этом тексте я поправил, а в дальнейшем постараюсь таких ошибок больше не совершать. Собственно, там и двойной повтор «сути» уже некрасиво выглядел, а я пропустил.
+
avatar
0
Мой сайт погоды в городе Вознесенске, Украина.
+
avatar
0
Если вы сделали «погодную станцию» и вывели её показания в Интернет — то опишите, это всем будет интересно, а просто выкладывать ссылку на свой сайт не надо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.