Оглавление:

Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3: 7 шагов
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3: 7 шагов

Видео: Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3: 7 шагов

Видео: Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3: 7 шагов
Видео: 14 июня 2023 г. 2024, Ноябрь
Anonim
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3
Easy Very Low Power BLE в Arduino Часть 2 - Монитор температуры / влажности - Ред. 3

Обновление: 23 ноября 2020 г. - Первая замена 2 батареек AAA с 15 января 2019 г., т. Е. 22 месяца для 2xAAA Alkaline Обновление: 7 апреля 2019 г. - 3-я версия lp_BLE_TempHumidity, добавляет графики даты / времени с использованием pfodApp V3.0.362 + и автоматическое регулирование при отправке данные

Обновление: 24 марта 2019 г. - 2-я версия lp_BLE_TempHumidity, добавляет дополнительные параметры сюжета и i2c_ClearBus

Этот поучительный прибор для измерения температуры и влажности с очень низким энергопотреблением является частью 2 из 3.

Часть 1 - Создание устройств BLE с очень низким энергопотреблением, упрощенное с помощью Arduino, охватывает настройку Arduino для кодирования устройств с низким энергопотреблением nRF52, модуль программирования и измерение тока питания. Он также охватывает специализированные таймеры и компараторы с низким энергопотреблением, входы с устранением дребезга и использование pfodApp для подключения к устройству nRF52 и управления им.

Часть 2 - Монитор температуры и влажности с очень низким энергопотреблением, в этой части рассматривается использование модуля Redbear Nano V2 и датчика температуры / влажности Si7021 для создания маломощной батареи / солнечного монитора. В нем также рассматривается изменение библиотеки Si7021 на низкое энергопотребление, настройка устройства BLE для снижения потребления тока до <25 мкА и разработка настраиваемого дисплея температуры / влажности для вашего мобильного телефона.

Часть 3 - Замена Redbear Nano V2 касается использования других модулей на основе nRF52 вместо Nano V2. Он охватывает выбор компонентов питания, конструкцию, удаление защиты программирования микросхемы nRF52, использование контактов NFC в качестве обычного GPIO и определение новой платы nRF52 в Arduino.

Это руководство представляет собой практическое применение Части 1 «Создание устройств BLE с очень низким энергопотреблением», упрощенное с помощью Arduino путем создания монитора температуры и влажности BLE с очень низким энергопотреблением. Монитор будет работать годами от Coin Cell или двух батареек AAA, а с солнечной батареей - еще дольше. В этом руководстве рассказывается о настройке параметров BLE для низкого энергопотребления и о том, как запитать ваше устройство от батареи ИЛИ батареи + солнечной ИЛИ только солнечной энергии.

Помимо отображения текущей температуры и влажности, монитор сохраняет последние 36 часов из 10-минутных показаний и последние 10 дней почасовых показаний. Они могут быть отображены на вашем мобильном телефоне Android, а значения сохранены в файле журнала. Программирование под Android не требуется, pfodApp все это берет на себя. Отображение и построение диаграмм Android полностью контролируются вашим эскизом Arduino, поэтому вы можете настроить его по своему усмотрению.

Плата Redbear Nano V2 используется для компонента nRF52832 BLE, а коммутационная плата Sparkfun Si7021 используется для датчика температуры / влажности. В Si7021 используется модифицированная библиотека с низким энергопотреблением. Небольшая печатная плата была разработана для размещения NanoV2 и компонентов питания. Однако, поскольку здесь не используются компоненты для поверхностного монтажа, вы можете так же легко построить это на плате Vero. Охватываются три версии блока питания. i) Аккумулятор плюс солнечная батарея, ii) Только аккумулятор, iii) Только солнечная батарея. Вариант «Только солнечная энергия» не имеет аккумуляторной батареи, поэтому он будет работать только при наличии некоторого света. Достаточно яркого комнатного света или настольной лампы.

Контур

Этот проект состоит из 4 относительно независимых частей:

  1. Выбор и конструкция компонентов
  2. Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
  3. Измерение тока питания и срока службы батареи
  4. Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный

Шаг 1: выбор компонентов

Выбор компонентов

Как упоминалось в Части 1. Уловка для получения решения с действительно низким энергопотреблением заключается в том, чтобы большую часть времени ничего не делать, минимизировать ток через внешние подтягивающие / понижающие резисторы на входах и не иметь никаких дополнительных компонентов. В этом проекте будет использоваться каждый из этих приемов для получения решения с низким энергопотреблением.

Компонент nRF52832

Микросхема nRF52832 может работать с напряжением питания от 1,7 В до 3,6 В (абсолютное максимальное напряжение 3,9 В). Это означает, что вы можете запитать чип напрямую от плоского элемента или двух батареек AAA. Однако разумно добавить регулятор напряжения для защиты микросхемы от перенапряжения. Этот дополнительный компонент требует затрат на электроэнергию, но в случае платы NanoV2 встроенный регулятор TLV704 потребляет не более 5,5 мкА, обычно всего 3,4 мкА. Для этого небольшого дополнительного энергопотребления вы получаете защиту для входов питания до 24 В.

Компонент Si7021

Сам датчик Si7021 обычно потребляет <1 мкА, когда измерения не проводятся, то есть в режиме ожидания, и до 4 мА при передаче данных через I2C. Поскольку мы не проводим измерения постоянно, 4 мА не являются значительной частью среднего тока питания. Снятие показаний через 30 секунд добавляет менее 1 мкА к среднему току питания, см. Измерения тока питания ниже.

Есть две готовые к продаже платы расширения Si7021. Один от Adafruit и один от Sparkfun. Беглый взгляд на две платы скажет вам, что плата Adafruit имеет намного больше компонентов, чем плата Sparkfun, поэтому вы склонны выбрать плату Sparkfun. Глядя на схемы каждой платы, видно, что плата Sparkfun - это всего лишь голый датчик и два подтягивающих резистора 4k7, в то время как на плате Adafruit есть встроенный регулятор MIC5225, который обычно постоянно потребляет 29uA. Это важно, когда общий ток остальной цепи составляет <30 мкА. Поскольку у нас уже есть стабилизатор для микросхемы nRF52832, этот дополнительный компонент не нужен, и Si7021 может питаться от этого источника питания 3,3 В. Таким образом, в этом проекте будет использоваться коммутационная плата Si7021 от Sparkfun.

минимизировать ток через внешние подтягивающие / понижающие резисторы на входах

Подтягивающие резисторы 4K7 I2C имеют не очень высокое значение и потребляют 0,7 мА при низком уровне. Это было бы проблемой, если бы они были подключены к переключателю, который был заземлен в течение длительного времени. Однако в этом проекте ток через эти резисторы минимизирован за счет нечастого и непродолжительного использования интерфейса I2C. В большинстве случаев линии I2C не используются и находятся в высоком / трехфазном состоянии, поэтому через эти резисторы не протекает ток.

Шаг 2: Строительство

Строительство
Строительство
Строительство
Строительство
Строительство
Строительство

Проект построен на небольшой печатной плате, но поскольку в нем нет SMD-компонентов, его так же легко можно построить с помощью платы Vero. Печатная плата была изготовлена pcbcart.com из этих файлов Gerber, TempHumiditySensor_R1.zip. Печатная плата является достаточно универсальной для использования в других проектах BLE.

Схема показана выше. Вот версия в формате pdf.

Список деталей

Приблизительная стоимость единицы по состоянию на декабрь 2018 г. ~ 62 доллара США, без учета доставки и программного обеспечения из части 1.

  • Redbear NanoV2 ~ 17 долларов США
  • Коммутационная плата Sparkfun Si7021 ~ 8 долларов США
  • 2 x 53 мм x 30 мм солнечные элементы 0,15 Вт 5 В, например Overfly ~ 1,10 доллара США
  • 1 x PCB TempHumiditySensor_R1.zip ~ 25 долларов США за 5 скидок на сайте www.pcbcart.com ИЛИ Плата Vero (медная полоса), например Jaycar HP9540 ~ 5 австралийских долларов
  • 2 x 1N5819 диодов Шоттки, например Digikey 1N5819FSCT-ND ~ 1 доллар США
  • 1 резистор 470R 0,4 Вт 1%, например Digikey BC3274CT-ND ~ 0,25 доллара США
  • 6 x 6-контактных штыревых разъемов, например, Sparkfun PRT-00116 ~ 1,5 доллара США
  • женщина-женщина-джемпер, например ID Adafruit: 1950 ~ 2 доллара США
  • Нейлоновые винты 3 мм x 12 мм, например Jaycar HP0140 ~ 3 австралийских доллара
  • Нейлоновые гайки 3 мм x 12 мм, например Jaycar HP0146 ~ 3 австралийских доллара
  • Скотч для постоянного крепления Cat 4010 например. от Amazon ~ 6,6 долларов США
  • Держатель батареи AAA x 2, например Sparkfun PRT-14219 ~ 1,5 доллара США
  • 2 щелочные батареи AAA 750 мА, например Sparkfun PRT-09274 ~ 1,0 долл. США Этих батарей должно хватить на срок службы> 2 лет. Щелочные батареи Energizer имеют большую емкость
  • Пластиковая коробка (АБС) 83 мм x 54 мм x 31 мм, например Jaycar HB6005 ~ 3 австралийских доллара
  • pfodApp ~ 10 долларов США
  • 1 x 22 мкФ 63 В конденсатор с низким ESR (опционально), например Jaycar RE-6342 ~ 0,5 австралийских доллара или Digikey P5190-ND ~ 0,25 доллара США

Конструкция проста. Держатель батареи и солнечные элементы прикреплены к пластиковому корпусу с помощью прочной двусторонней ленты.

Обратите внимание на соединительный провод Gnd от CLK к GND в готовой детали. Он устанавливается ПОСЛЕ программирования, чтобы предотвратить переключение микросхемы nRF52 в сильноточный режим отладки из-за шума на входе CLK

Шаг 3. Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino

Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino
Код - библиотека датчиков с низким энергопотреблением, пользовательский интерфейс и эскиз Arduino

Загрузите заархивированный код lp_BLE_TempHumidity_R3.zip и распакуйте его в каталог Arduino Sketches. Вам также необходимо установить библиотеку lp_So7021 из этого zip-файла, а также установить библиотеку pfodParser.

Библиотека датчиков малой мощности, lp_Si7021

И Adafruit, и Sparkfun предоставляют библиотеки поддержки для доступа к датчику Si7021, однако обе эти библиотеки не подходят для использования с очень низким энергопотреблением. Оба используют задержку (25) в коде, чтобы задержать считывание датчика во время измерения. Как отмечалось в Части 1, задержки - зло. Arduino delay () просто поддерживает работу микропроцессора с использованием питания, пока он ожидает истечения времени задержки. Это нарушает первое правило BLE с низким энергопотреблением: большую часть времени ничего не делать. Заменяющая библиотека lp_Si7021 заменяет все задержки на lp_timers, которые переводят микропроцессор в спящий режим в ожидании завершения измерения датчиком.

Насколько важна библиотека lp_Si7021? Используя оригинальную библиотеку поддержки SparkFun Si7021 и считывая одно чтение в секунду без каких-либо последовательных отпечатков, в среднем потребляется ~ 1,2 мА. Замена библиотеки Sparkfun библиотекой lp_Si7021 снижает средний ток до ~ 10 мкА, т.е. в 100 раз меньше. В этом проекте самая быстрая скорость измерения - каждые 30 секунд, когда мобильный телефон подключен, что приводит к среднему току датчика менее 1 мкА. Когда нет соединения BLE, частота измерений составляет один раз в 10 минут, а средний ток питания датчика незначителен.

Пользовательский интерфейс

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

Пользовательский интерфейс кодируется в эскизе Arduino, а затем отправляется в pfodApp при первом подключении, где он кэшируется для повторного использования и обновлений. Графический дисплей построен из примитивов рисования. См. «Пользовательские элементы управления Arduino для Android», чтобы узнать, как создавать собственные элементы управления. Файлы Thermometer, RHGauge и Button содержат команды рисования для этих элементов.

Примечание: нет, если этот дисплей встроен в pfodApp. Весь дисплей полностью контролируется кодом вашего скетча Arduino

Метод sendDrawing_z () в скетче lp_BLE_TempHumidity_R3.ino определяет пользовательский интерфейс.

void sendDrawing_z () {dwgs.start (50, 60, dwgs. WHITE); // фон по умолчанию БЕЛЫЙ, если он опущен, т.е. start (50, 60); parser.sendRefreshAndVersion (30000); // повторно запрашиваем DWG каждые 30 сек. это игнорируется, если версия парсера не установлена // нажмите кнопки выше для принудительного обновления отображения dwgs.touchZone (). cmd ('u'). size (50, 39).send (); dwgs.pushZero (35, 22, 1.5); // перемещаем ноль в центр чертежа на 35, 22 и масштабируем в 1,5 раза rhGauge.draw (); // рисуем элемент управления dwgs.popZero (); dwgs.pushZero (18, 33); // перемещаем ноль в центр чертежа на 18, 33 масштаб равен 1 (по умолчанию) thermometer.draw (); // рисуем элемент управления dwgs.popZero ();

dwgs.pushZero (12,5, 43, 0,7); // перемещаем ноль в центр чертежа на 12,5, 43 и масштабируем на 0,7

hrs8PlotButton.draw (); // рисуем элемент управления dwgs.popZero (); dwgs.pushZero (37,5, 43, 0,7); // перемещаем ноль в центр чертежа на 37,5, 43 и масштабируем на 0,7 дня1PlotButton.draw (); // рисуем элемент управления dwgs.popZero ();

dwgs.pushZero (12,5, 54, 0,7); // перемещаем ноль в центр чертежа на 12,5, 54 и масштабируем на 0,7

days3PlotButton.draw (); // рисуем элемент управления dwgs.popZero (); dwgs.pushZero (37,5, 54, 0,7); // перемещаем ноль в центр чертежа на 37,5, 54 и масштабируем на 0,7 дня 10PlotButton.draw (); // рисуем элемент управления dwgs.popZero (); dwgs.end (); }

Команды pushZero изменяют исходную точку и масштаб для рисования следующего компонента. Это позволяет легко изменять размер и положение кнопок и датчиков.

При первом подключении начальному дисплею требуется 5 или 6 секунд для загрузки ~ 800 байтов, которые определяют дисплей. pfodApp кэширует дисплей, поэтому в будущих обновлениях нужно будет отправлять только изменения, положения датчиков и показания. Эти обновления занимают всего пару секунд, чтобы отправить 128 байтов, необходимых для обновления дисплея.

На дисплее определены пять (5) активных сенсорных зон. Каждая кнопка имеет один определенный в своем методе draw (), поэтому вы можете щелкнуть по ней, чтобы открыть соответствующий график, а верхняя половина экрана настроена как третья сенсорная зона.

dwgs.touchZone (). cmd ('u'). size (50, 39).send ();

Когда вы нажимаете на экран над кнопками, на ваш эскиз отправляется команда u dwg для принудительного выполнения нового измерения и обновления экрана. Обычно при подключении обновления происходят каждые 30 секунд. Каждый щелчок или обновление чертежа вызывает новое измерение. Ответ от скетча Arduino на pfodApp откладывается до завершения нового измерения (~ 25 мс), так что последнее значение может быть отправлено в обновлении.

Эскиз Arduino

Скетч Arduino, lp_BLE_TempHumidity_R3.ino, представляет собой улучшенную версию примера скетча, использованного в Части 1. Скетч lp_BLE_TempHumidity_R3.ino заменяет меню на рисунок, показанный выше. Он также добавляет поддержку датчика lp_Si7021 и массивы данных для хранения 10-минутных и ежечасных исторических измерений.

Основная сложность в скетче lp_BLE_TempHumidity_R3.ino заключается в обработке отправки данных графика. По мере выполнения измерений readRHResults () обрабатывает результаты и сохраняет их в исторических массивах. Массивы имеют длину 120, но когда данные отправляются, первые 30 точек данных относятся к более мелкому временному интервалу.

При отправке 200 нечетных точек графика для отображения необходимо позаботиться о нескольких моментах:

  1. Каждая точка данных имеет длину ~ 25 байт в текстовом формате CSV. Итак, 150 точек - это 3750 байтов данных. Класс lp_BLESerial имеет буфер размером 1536 байт, 1024 байта достаточно велики для самого большого сообщения pfod. Остальные 512 байтов зарезервированы для отправки данных. Как только исторические данные заполнят 512 байтов, отправка дальнейших данных откладывается до тех пор, пока в буфере не останется свободного места.
  2. Чтобы данные графика не замедляли обновление основного дисплея, данные графика отправляются только во время отображения экрана графика. Как только пользователь переключается обратно на главный экран, отправка данных графика приостанавливается. Отправка данных графика возобновляется, когда пользователь нажимает кнопку графика, чтобы отобразить график снова.
  3. Исторические сюжеты начинаются с 0 (сейчас) и идут назад во времени. Если с момента отображения последнего графика не было новых измерений, то предыдущие данные, которые уже были загружены, сразу же отображаются снова. Если есть новое измерение, оно добавляется к данным предыдущего графика.
  4. При первом включении монитора нет исторических показаний, и 0 сохраняется в массивах как недопустимое показание. При отображении графика недопустимые показания просто пропускаются, что приводит к более короткому графику.

Цельсия и Фаренгейта

Скетч lp_BLE_TempHumidity_R3.ino отображает и отображает данные в градусах Цельсия. Чтобы преобразовать результаты в градусы Фаренгейта, замените все вхождения

parser.print (sensor. Temp_RawToFloat (..

с участием

parser.print (sensor. CtoF (sensor. Temp_RawToFloat (…

И замените символ Unicode degC в Octal / 342 / 204 / 203 символом degF / 342 / 204 / 211

pfodApp будет отображать любой Unicode, который вы можете отображать на мобильном устройстве.

Подробнее см. Использование символов, отличных от ASCII, в Arduino. Также измените настройки MIN_C, MAX_C в Thermometer.h. Наконец, отрегулируйте пределы сюжета по своему усмотрению, например. изменение | Температура C ~ 32 ~ 8 ~ deg C |

сказать

| Температура F ~ 90 ~ 14 ~ град F |

Шаг 4: Измерение тока питания

Измерение тока питания
Измерение тока питания

Используя библиотеку lp_Si7021, даже измерение температуры / влажности каждые 10 секунд дает только ~ 1 мкА в средний ток питания, поэтому основным фактором в токе питания и, следовательно, сроке службы батареи является ток, используемый для рекламы BLE, подключения и передачи данных..

Подключите плату температуры / влажности к программатору, описанному в части 1, как показано выше.

Когда солнечные элементы и батареи отключены, Vin и Gnd подключаются к Vdd и Gnd программатора (желтый и зеленый выводы), а SWCLK и SWDIO подключаются к Clk и SIO платы заголовка программатора (синий и розовый выводы)

Теперь вы можете запрограммировать NanoV2 и измерить ток питания, как описано в Части 1.

Установите библиотеку Si7021 с низким энергопотреблением из этого zip-файла, lp_Si7021.zip, и установите библиотеку pfodParser, распакуйте lp_BLE_TempHumidity_R3.zip в свой каталог эскизов Arduino и запрограммируйте плату Temp / Humditiy с lp_BLE_TempHumidity_R3.ino

Как упоминалось выше, вклад датчика составляет <1 мкА, в среднем, при самой высокой скорости измерения, используемой в этом проекте, поэтому параметры рекламы и подключения BLE являются определяющим фактором для срока службы батареи.

Параметры рекламы и подключения BLE, влияющие на потребление тока: -Tx Power, Advertising Interval, Max и Min Connection Intervals, Slave Latency.

Примечание. Используя указанные выше соединения, в блоке питания есть два (2) регулятора, один на плате NanoV2 через Vin и MAX8881 в блоке питания программатора. Это означает, что измеренные токи питания будут на ~ 5 мкА выше фактических из-за второго регулятора. Приведенные ниже значения представляют собой измеренные токи без дополнительных 5 мкА.

Tx Power

Эффекты Tx Power подают ток как при подключении, так и при рекламе (не подключенном). В этом проекте используется максимальная мощность (+4) и обеспечивается лучший диапазон и наибольшая помехозащищенность для наиболее надежных соединений. Вы можете использовать метод lp_BLESerial setTxPower (), чтобы изменить настройку мощности. Допустимые значения при увеличении мощности: -40, -30, -20, -16, -12, -8, -4, 0 +4. Вы должны вызвать метод lp_BLESerial begin () ПЕРЕД вызовом setTxPower (). См. Скетч lp_BLE_TempHumidity_R3.ino.

Вы можете поэкспериментировать с уменьшением Tx Power, но компромисс - более короткий диапазон и большее количество пропаданий соединения из-за помех. В этом проекте Tx Power оставлен по умолчанию, +4. Как вы увидите ниже, даже при этой настройке возможен очень низкий ток потребления.

Рекламный интервал

Для заданной мощности передачи, когда нет соединения, интервал рекламы устанавливает среднее потребление тока. Рекомендуемый диапазон от 500 до 1000 мс. Здесь использовалось 2000 мс. Компромисс заключается в том, что более длинные рекламные интервалы означают, что ваш мобильный телефон медленнее обнаруживает устройство и устанавливает соединение. Внутренние рекламные интервалы устанавливаются кратными 0,625 мс в диапазоне от 20 мс до 10,24 с. Для удобства метод lp_BLESerial setAdvertisingInterval () принимает в качестве аргумента mS. Для +4 TxPower и рекламного интервала 2000 мс потребление тока составляло ~ 18 мкА. Для рекламного интервала 1000 мс это было ~ 29 мкА. В Rev 2 использовался рекламный интервал 2000 мс, но это приводило к медленным соединениям. Версия 3 изменена на рекламный интервал 1000 мс, чтобы соединения стали быстрее.

Максимальные и минимальные интервалы подключения

Как только соединение установлено, интервал соединения определяет, как часто мобильный телефон связывается с устройством. Lp_BLESerial setConnectionInterval () позволяет вам установить предлагаемые максимальные и минимальные значения, однако мобильный телефон контролирует фактический интервал подключения. Для удобства аргументы setConnectionInterval () указаны в миллисекундах, но внутренне интервалы соединения кратны 1,25 мс, в диапазоне от 7,5 мс до 4 сек.

Значение по умолчанию - setConnectionInterval (100, 150), то есть от мин. 100 мс до макс. 150 мс. Увеличение этих значений снижает ток питания при подключении, но компромисс - более медленная передача данных. Каждое обновление экрана занимает около 7 сообщений BLE, в то время как полные 36 часов 10-минутных измерений занимают около 170 сообщений BLE. Таким образом, увеличение интервалов подключения замедляет обновление экрана и отображение графика.

Класс lp_BLESerial имеет буфер отправки 1536 байтов и отправляет только один блок из 20 байтов из этого буфера, каждый максимальный интервал соединения, чтобы предотвратить переполнение канала BLE данными. Также при отправке данных графика эскиз отправляет данные только до тех пор, пока 512 байт не ожидают отправки, а затем задерживает отправку дополнительных данных до тех пор, пока не будут отправлены некоторые данные. Это позволяет избежать переполнения буфера отправки. Такое регулирование посылов делает передачу данных на мобильный телефон надежной, но не оптимизирован для максимальной пропускной способности.

В этом проекте интервалы подключения оставлены значениями по умолчанию.

Задержка ведомого

Когда нет данных для отправки на мобильный телефон, устройство может опционально игнорировать некоторые сообщения о подключении с мобильного телефона. Это экономит мощность передачи и ток питания. Настройка Slave Latency - это количество игнорируемых сообщений о подключении. По умолчанию - 0. Для изменения этого параметра можно использовать метод lp_BLESerial setSlaveLatency ().

Задержка ведомого устройства по умолчанию, равная 0, дает ток питания ~ 50 мкА, без учета обновления экрана каждые 30 секунд, но включая сообщения keepAlive на протяжении 5 секунд. Установка задержки ведомого на 2 дала средний подключенный ток питания ~ 25 мкА. Значение задержки ведомого устройства равное 4 дало ~ 20 мкА. Кажется, что более высокие настройки не уменьшают ток питания, поэтому была использована настройка Slave Latency, равная 4.

При подключении каждые 30 секунд pfodApp запрашивает обновление дисплея. Это вызывает измерение датчика и отправку данных для обновления графического дисплея. Это обновление приводит к дополнительным ~ 66 мкА на 2 секунды каждые 30 секунд. Это в среднем 4,4 мкА за 30 секунд. Если добавить это к 20uA, то получится средний ток питания ~ 25uA.

Шаг 5: общий ток питания и срок службы батареи

Используя настройки выше, как установлено в lp_BLE_TempHumidity_R3.ino, общий ток питания при подключении и обновление дисплея каждые 30 секунд, примерно 25uA. В не подключенном состоянии это примерно 29 мкА.

Для расчета срока службы батареи предполагается постоянное потребление тока ~ 29 мкА.

Различные аккумуляторы имеют разную емкость и вольт-фарадные характеристики. Здесь рассматриваются батарейки типа «таблетка» CR2032, плоская батарея CR2450 (N), 2 щелочных элемента AAA, 2 литиевых элемента AAA и LiPo.

Сводка по батареям

Если вы используете Solar Assist, добавьте 50% к этим показателям времени автономной работы (при условии 8 часов дневного света)

Примечание. Конденсатор LowESR 22 мкФ (C1), в дополнение к встроенному конденсатору NanoV2 22 мкФ, накапливает ток солнечного элемента и затем подает его для импульсов тока TX. В противном случае батарея обеспечивает часть тока передачи. Эти дополнительные 22 мкФ LowESR добавляют около 10% к току батареи, когда солнечный элемент не является источником питания, но также продлевают срок службы батареи, компенсируя возрастающее внутреннее сопротивление батареи по мере того, как батарея достигает конца срока службы. Приведенные ниже измерения были выполнены БЕЗ дополнительного конденсатора емкостью 22 мкФ.

CR2032 - 235 мАч - срок службы батареи 10 месяцев CR2450 (N) - 650 мАч (540 мАч) - срок службы батареи 2,3 года (2 года) 2 щелочных аккумулятора AAA - 1250 мАч - срок службы батареи 3,8 года 2 литиевых аккумулятора AAA - 1200 мАч - срок службы батареи 4,7 года LiPo перезаряжаемый - не рекомендуется из-за высокого саморазряда.

CR2032

Эта плоская таблетка обычно имеет емкость 235 мАч (батарея Energizer), номинальное напряжение 3 В и заданное напряжение разряда 2 В. Это подразумевает время автономной работы 8100 часов или ~ 0,9 года. Однако внутреннее сопротивление элемента увеличивается по мере того, как батарея подходит к концу срока службы, и поэтому может быть не в состоянии обеспечить пиковые импульсы тока Tx. Для уменьшения этого эффекта можно использовать конденсатор питания большего размера, но, скажем, срок службы 10 месяцев.

CR2450 (N)

Этот монетный элемент обычно имеет емкость 620 мАч (540 мАч для CR2450N), номинальное напряжение 3 В и указанное напряжение разряда 2 В. Это подразумевает время автономной работы 22, 400 часов или ~ 2 года 6 м (18600 ч ~ 2 года 2 м для CR2450N). Однако внутреннее сопротивление элемента увеличивается по мере того, как батарея достигает конца срока службы, и поэтому может быть не в состоянии обеспечить пиковые импульсы тока Tx. Для уменьшения этого эффекта можно использовать конденсатор питания большего размера, но, скажем, срок службы составляет 2 года 4 м (2 года N).

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

2 щелочных элемента AAA

Эти батареи имеют емкость около 1250 мАч (батарея Energizer) для очень низких токов, номинальное напряжение 2x1,5 В = 3 В и указанное напряжение разряда 2x0,8 В = 1,6 В. Но это указанное напряжение разряда меньше, чем рабочее напряжение датчика Si7021 (1,9 В), поэтому каждый аккумулятор можно использовать только до ~ 1 В. Это снижает емкость примерно на 10-15%, то есть на ~ 1000 мАч.

Это подразумевает время автономной работы 34, 500 часов или ~ 4 года. Однако внутреннее сопротивление элемента увеличивается по мере того, как батарея достигает конца срока службы, и поэтому может быть не в состоянии обеспечить пиковые импульсы тока Tx. Для уменьшения этого эффекта можно использовать конденсатор питания большего размера, но, скажем, срок службы 3 года 10 м. Примечание. Саморазряд щелочных батарей составляет от 2% до 3% в год.

2 литиевых элемента AAA

Эти батареи имеют емкость около 1200 мАч (батарея Energizer), номинальное напряжение 2x1,7 В = 3,4 В при малых токах и напряжение разряда 2x1,4 В = 2,4 В. Это подразумевает время автономной работы 41, 400 часов или 4 года 8 минут.

LiPo аккумулятор

Эти батареи бывают разной емкости от 100 мАч до 2000 мАч, в плоских форматах, с напряжением заряда 4,2 В и напряжением разряда> 2,7 В. Однако они имеют высокий саморазряд от 2% до 3% в месяц (т.е. от 24% до 36% в год) и поэтому не так подходят для этого применения, как другие батареи.

Шаг 6: Альтернативные источники питания - вспомогательная солнечная энергия, только аккумулятор, только солнечная энергия

Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный
Альтернативные источники питания - Solar Assist, только аккумулятор, только солнечный

Аккумулятор плюс Solar Assist

В приведенной выше конструкции используется источник питания Battery plus Solar Assist. Когда солнечные панели генерируют больше напряжения, чем напряжение батареи, солнечные элементы питают монитор, тем самым продлевая срок службы батареи. Обычно время автономной работы можно продлить еще на 50%.

Используемые солнечные панели небольшие, 50 мм x 30 мм, дешевые, ~ 0,50 доллара США и маломощные. Номинально это панели на 5 В, но для генерации 5 В требуется прямой яркий солнечный свет. В этом проекте две панели соединены последовательно, так что размещения монитора где-нибудь рядом с окном, вдали от прямых солнечных лучей, достаточно для замены заряда батареи. Даже хорошо освещенной комнаты или настольной лампы достаточно, чтобы солнечные элементы генерировали> 3,3 В при> 33 мкА и заменяли аккумулятор.

Была построена простая тестовая панель, чтобы определить, где можно разместить монитор температуры / влажности, вдали от солнца и при этом работать от солнечной энергии. Как вы можете видеть на фотографии выше, две панели, подключенные к резистору 100 кОм, выдают 5,64 В на 100 кОм, то есть ток 56 мкА при 5,64 В. Этого более чем достаточно для питания монитора от батареи. Любое значение напряжения выше номинального напряжения батареи 3 В означает, что солнечные элементы будут питать монитор вместо батареи.

Два диода в цепи монитора температуры и влажности изолируют солнечные элементы и батареи друг от друга и предотвращают их подключение в обратной полярности. Стабилитрон 10 В, 1 Вт и резистор серии 470R защищают встроенный стабилизатор NanoV2 от перенапряжения от двух солнечных элементов на полном солнце, особенно если элементы на 12 В используются вместо 5 В. При нормальной работе при <5 В стабилитрон 10 В потребляет только ~ 1 мкА.

Только батарея

Для источника питания только от батареи просто опустите R1, D1 и D3 и солнечные элементы. Вы также можете заменить D1 куском провода, если вам не нужна защита от обратной полярности.

Только солнечная энергия

Для питания монитора только от солнечных батарей без батареи требуется другая цепь питания. Проблема в том, что, хотя монитор будет работать от 29 мкА, при включении nRF52 потребляет ~ 5 мА в течение 0,32 секунды. Схема, показанная выше (версия в формате pdf), удерживает стабилизатор MAX8881 в выключенном состоянии до тех пор, пока входные конденсаторы 2 x 1000 мкФ не зарядятся до 4,04 В. Затем MAX6457 освобождает вход MAX8881 SHDN для включения nRF52 (NanoV2). 2 конденсатора по 1000 мкФ обеспечивают необходимый пусковой ток.

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

Шаг 7: Заключение

В этом руководстве в качестве примера проекта BLE с очень низким энергопотреблением в Arduino для чипа nRF52832 был представлен монитор температуры и влажности с питанием от батареи / солнечной батареи. Потребляемые токи ~ 29 мкА достигаются настройкой параметров подключения. В результате срок службы батарейки типа «таблетка» CR2032 превысил 10 месяцев. Более длинный для монетных элементов и батарей большей емкости. Добавление двух дешевых солнечных элементов легко продлило срок службы батареи на 50% и более. Для питания монитора от солнечных батарей достаточно яркого комнатного света или настольной лампы.

Была представлена специальная схема питания, позволяющая использовать монитор исключительно от солнечных батарей малой емкости.

Бесплатный pfodDesigner позволяет вам разрабатывать меню / подменю, строить график по дате / времени и регистрировать данные, а затем генерировать для вас скетч Arduino с низким энергопотреблением. Здесь пользовательский интерфейс был написан с использованием примитивов рисования pfodApp. При подключении к pfodApp отображается пользовательский интерфейс и обновляются показания, пока монитор использует ~ 29 мкА.

Никакого программирования под Android не требуется. Всем этим занимается pfodApp.

Рекомендуемые: