Как стать автором
Обновить

Автономный радиоТермометр на msp430, NRF24L01+ и солнечных батареях

Время на прочтение 3 мин
Количество просмотров 118K

Начиная упражнения с серией микроконтроллеров msp430 сразу обратил внимание на мизерные потребления энергии в дежурных (low power mode) режимах. Всегда хотелось собрать максимально автономный радиотермометр, чтобы прибить его гвоздями к дереву напротив дома и максимально уменьшить влияние выходящего из дома тепла на точность показаний. Радиотермометр на батарейках, даже если их хватает на годы — тоже не особо гуд, лазить на дерево с целю замены батарейки не всегда здорово, особенно в плохую погоду. Решил попробовать схему питания от солнечных батарей.


Система состоит из набора датчиков (в моём случае внешний термометр), отсылающих данные на центральный узел (приемник), подключенный к нетбуку с FreeBSD, осуществляющему роль хранилища (а в будущем — центрального процессора умного дома)
Рассмотрим все по порядку.
Внешний датчик

Состав:
1. Микроконтроллер msp430g2553 с кварцем 32768Гц
2. Термометр от Maxim DS1621 Почему он? потому что был.
3. Радиомодуль на NRF24L01
4. Ионистор 1Ф
5. 2 солнечные батареи SINONAR SS-3514 (pdf не нашёл)

Нюансы по электронике:

1. Термометр работает по i2c а радиомодуль по SPI. Объединим сигнальные линии интерфейсов SDA с MOSI, а SCK с MISO. (Работая по-очереди они мешать друг другу не будут. Могу конкретизировать, если нужно)
2. Питательную ногу термометра а также резисторы подтяжки i2c подключим к одному из выходов msp430. Зачем? В спящем режиме отключаем термометр и подтяжки от питания вообще, снижая потребление энергии.
3. В качестве накопителя энергии применил ионистор на 1Ф. Хотел использовать аккумулятор, но модные литийионные и литийполимерные не заряжаются при отрицательных температурах. NiMH большой по габаритам, да и саморазряд достаточно большой, что критично при микропотреблении.
4. В качестве защиты от перезаряда ионистора, ровно как и от перенапряжения питания включаем 2 светодиода параллельно питанию. Падение на одном диоде 1.8В на двух — 3.6В. Кстати идею о создании генератора опорного напряжения на светодиоде прочитал в детстве в журнале Юный техник.

Вот, собственно, схема внешнего датчика:


Нюансы по алгоритму работы:
1. Включаем термометр, ждём готовности данных, периодически кладя процессор спать в режиме lpm3 (работает только ACLK на 32кГц).
2. Меряем напряжение питания процессора (11-й канал АЦП) относительно 2.5В опорного напряжения
3. Будим радиомодуль, формируем 8-байтный пакет, содержащий id датчика, состояние, напряжение питания и температуру.
4. Выключаем свет Переводим радиомодуль в дежурный режим, кладём процессор спать на 2 минуты в lpm3.
5. При обнаружении падения напряжения питания ниже критической границы — просыпаемся не каждые 2 а каждые 10 минут.

В режиме глубокой спячки, а это основное состояние системы общее потребление тока составляет 1.5 — 1.8 мкА. До отключения не гонял, но через сутки работы напряжение на ионисторе упало с 3.6В до 2.2В. Т.е. в отсутствии ядерной зимы полярной ночи, устройство с запасом переживает 16-ти часовое темное время суток. Зарядка при наличии 2-х соленчных батарей начинает происходить при комнатном освещении.

Макет:



Прототип:



Конструктивно внешний датчик решил разместить в пустой прозрачной банке от какого-то химикалия. Для исключения образования влаги положил внутрь пакетик селикогеля.

Фото готового устройства — в начале статьи.

Исходники (в картинке архив): image

Приемник

Состав:
1. Микроконтроллер msp430g2553
2. Радиомодуль NRF24L01+
3. Преобразователь USB-COM для подключения к серверу.

Схема включения NRF24L01+ к микроконтроллеру такая же как и во внешнем датчике.
Алгоритм: сидим на приеме. При поступлении пакета, посылаем его uart, ждём следующего пакета.

Мозг

Интеллектуальная часть системы сделана на остатках Asus EEE PC. Почему на остатках? Потому что нет экрана и клавы. Установлена FreeBSD 9.0.
Из ПО:
1. lighttpd — web сервер
2. rrdtool — пакет хранения и визуализации статистических данных
Написанный на PERLе демон слушает приём от USB2COM преобразователя, при обнаружении принятого пакета от датчика — складывает данные о температуре и напряжении питания в RRD-базу.
При подключении браузером к web-серверу, наблюдаем текущие значения температуры и напряжения питания датчика


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

Жду комментариев и вопросов.
Теги:
Хабы:
+93
Комментарии 127
Комментарии Комментарии 127

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн