Arduino Power
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Проекты, использующие семейство плат микроконтроллеров Arduino, обычно не нуждаются в каких-либо специальных схемах управления питанием. Вы подключаете источник питания, устройство загружается, выполняет свою работу, а затем останавливается при отключении питания. В отличие от системы Raspberry Pi, нет риска повредить карту памяти SD.
Но для некоторых приложений вам может потребоваться отслеживать состояние питания и реагировать более управляемым образом, а не просто выключаться.
Рассмотрим, например, устройство дистанционного зондирования, которое регистрирует данные о температуре. Если батарея разряжается, когда она остается без присмотра, журналы просто останавливаются. Невозможно сразу сказать, что проблема была в низком заряде батареи. Это мог быть программный или аппаратный сбой.
Точно так же для портативной системы было бы полезно знать, сколько осталось заряда батареи и когда она нуждается в подзарядке.
В этом проекте представлены несколько подходов к управлению питанием Arduino со схемами, программным обеспечением и описаниями каждого из них. Начиная с простого выключателя питания и заканчивая системой регистрации данных, которая включает информацию о состоянии батареи, которая предназначена для автоматического мониторинга окружающей среды.
Вы можете выбрать, какая из подсистем вам интересна. Я опишу их все с возрастающей сложностью, но вы можете закомментировать те части, которые вам не интересны.
Проект основан на идеях проектов LiPoPi и Pi Power, которые обеспечивают аналогичную функциональность для систем Raspberry Pi.
Обзор
В системе предусмотрено несколько функций:
- Включение / выключение с помощью кнопки
- Контролируйте напряжение батареи с помощью АЦП Arduino
- Отключить систему от низкого напряжения.
- Запишите в файл напряжение батареи и сообщение о выключении.
- Отображение состояния батареи с помощью красного / зеленого светодиода.
Я представлю каждый из них по очереди, но их объединяет сочетание Adafruit PowerBoost и Arduino.
С каждой из них вы добавляете и настраиваете две функции: arduinoPowerSetup ()
и arduinoPowerMonitor (
) , в стандартную setup ()
и loop ()
функции в вашем коде.
Щит Adafruit PowerBoost
В системе используется перезаряжаемый литий-полимерный аккумулятор и зарядное устройство Adafruit PowerBoost Charger Shield, которые могут заряжать аккумулятор и повышать его выходное напряжение до 5 В.
Adafruit выпускает три версии Power Boost - две коммутационные платы и Arduino Shield. В большинстве описанных здесь работ используется Power Shield, но об использовании коммутационных плат я расскажу позже.
Прочтите эту страницу о том, как настроить PowerBoost Shield. Чтобы подготовить комплект Shield, вам необходимо:
- Припаяйте полоски заголовка штабелирования.
- Но не прикрепляйте переключатель.
- Припаяйте провод (4 дюйма, сплошной сердечник 22AWG) к контакту включения.
- Соедините контактные площадки аналогового вывода A0 на нижней стороне экрана.
Схема включения / выключения питания
Эта базовая схема использует мгновенное нажатие кнопочного переключателя для включения системы и, во время работы, для ее выключения - аналогично тому, как работает мой телефон.
Когда вы нажимаете и удерживаете выключенную систему, PowerBoost включается и подает питание на Arduino, который затем загружается и запускает программу, которую вы загрузили на него.
Когда вы снова нажимаете кнопку и отпускаете ее, Arduino отключает PowerBoost и, поскольку он больше не подает питание, Arduino выключается.
Пожалуйста, прочтите эту страницу для получения подробной информации. Вот схема:
Примечание. Вам не нужна эта схема для использования остальной части этого проекта. Вы можете использовать дополнительный переключатель, поставляемый с экраном PowerBoost. Основное отличие состоит в том, что основной переключатель просто выключает систему без возможности записи сообщения журнала.
Контроль напряжения батареи
Arduino имеет 6 аналого-цифровых преобразователей . (АЦП) на аналоговых выводах 0-5, что упрощает измерение напряжения. Экран PowerBoost позволяет подключать напряжение аккумулятора ( Vbat ) к одному из них, замкнув соответствующие контактные площадки, как описано на странице PowerBoost Shield. В этом примере я связал его с Аналоговым контактом 0 . .
Напряжение литий-полимерных аккумуляторов составляет примерно 4,25 В . при полной зарядке примерно до 3,7 В при выписке. АЦП преобразует диапазон напряжения от 0 В до 5 В . в целочисленный диапазон от 0 до 1023 , и мы получаем доступ к этому значению, вызывая analogRead () .
В этом фрагменте кода показано, как это сделать, а также показано, как рассчитать относительное состояние батареи с использованием минимального и максимального напряжения батареи.
float maxVoltage =4,25; float minVoltage =3,75; arduinoPowerVoltage =float (analogRead (arduinoPowerVoltagePin)) / 1024.0 * 5.0; float FractionalVoltage =(arduinoPowerVoltage - minVoltage) / (maxVoltage - minVoltage);
LiPoly батареи не теряют напряжение линейно при разряде, но это достаточно что мы можем оценить оставшийся срок службы батареи, используя дробное значение напряжения.
Таким образом, мы можем получить напряжение батареи и оценить оставшийся срок службы, но нам нужен способ сообщить об этом пользователю. Мы могли бы использовать буквенно-цифровой дисплей, и в следующем разделе я покажу, как записать это в файл на SD-карте. Но для многих проектов это может оказаться излишним.
Более простой подход - использовать RGB и изменить цвет, чтобы отразить срок службы батареи. Например:
- Зеленый - более 50%
- Желтый - от 20% до 50%.
- Красный - менее 20% - время зарядки
Чтобы реализовать это, вы просто добавляете в схему светодиод RGB и два резистора 1K и добавляете немного кода в arduinoPowerMonitor () .
В светодиодах RGB обычно используется общий анод . так что эта схема работает с этим:
ПРИМЕЧАНИЕ. На практике я использую источник питания 3,3 В для своих светодиодов.
ПРИМЕЧАНИЕ. Как я покажу позже, в измеряемом напряжении могут быть значительные «колебания» по причинам, которых я не понимаю. Если батарея близка к одному из значений, при котором цвет светодиода меняется, вы можете увидеть, как он переключается между двумя состояниями, что очень раздражает. Быстрое решение - установить конденсатор 0,1 мкФ . между аналоговым выводом A0 и Земля .
Этот макет не показывает батарею или Arduino. Скетч arduino_2_voltage_led реализует включение / выключение питания и светодиодный индикатор напряжения. Код устанавливает зеленую или красную булавку на низкий . чтобы включить светодиод и высокий чтобы выключить его.
ПРИМЕЧАНИЕ. Вы можете проверить измеренные напряжения и / или отладить, раскомментируя вызовы Serial . в коде и запустив Serial Monitor в IDE. Вы увидите фактическое и дробное напряжение батареи. По какой-то причине первый звонок неверен.
Запись напряжения батареи на SD-карту
Светодиодный индикатор напряжения полезен для портативных систем Arduino с батарейным питанием, где вас не слишком заботят детали, вы просто хотите знать, когда вам нужно подзарядить батарею.
Но если вы, скажем, отслеживаете датчики в автономной системе, вы можете записать напряжение батареи вместе с данными датчиков, чтобы получить лучшее представление о энергопотреблении с течением времени.
В этой части проекта я использую Adafruit Data Logging Shield, который может записывать данные в CSV . форматируйте файл на прикрепленной SD-карте вместе с отметками времени. Руководство Adafruit объясняет, как SD и RTC библиотеки работают, и вы должны это понимать, прежде чем работать над этой частью проекта.
Схема не изменилась по сравнению с предыдущим примером - стоит оставить светодиод, поскольку он обеспечивает немедленную обратную связь о состоянии батареи, но в этом нет необходимости.
Поскольку мы записываем данные на карту, важно, чтобы мы регистрировали сообщение о завершении работы. Таким образом, мы можем определить, было ли выключение намеренным или произошла какая-то ошибка в системе.
Кроме того, поскольку мы отслеживаем напряжение, мы можем проверить, когда напряжение упадет ниже некоторого минимального уровня, и безопасно выключить систему. Опять же, мы можем записать сообщение об этом непосредственно перед выключением.
Эскиз для этого находится в arduino_3_voltage_logging. Это включает в себя несколько служебных программ для создания правильно отформатированной строки отметки времени и т. Д., А также включает в себя хитрость для мигания красного светодиода, если вы забываете вставить SD-карту, что я делаю постоянно.
Весь стек Arduino Uno, Data Logging Shield, PowerBoost Shield и макетной платы выглядит так:
Данные о напряжении
Вот график напряжения батареи во времени, показывающий постепенное снижение в течение примерно 20 часов. Спад не является действительно линейным, но для оценки оставшейся мощности он достаточно близок.
Как я упоминал ранее, действительно полезно добавить конденсатор 0,1 мкФ между аналоговым выводом A0 . и Земля . В этом примере фиолетовая линия показывает влияние конденсатора по сравнению с исходным синим цветом.
Запись экологических данных на SD-карту
В завершение еще одно дополнение к проекту. Один из проектов, который я имею в виду, - это автономный монитор состояния окружающей среды для моего сада:температура, влажность почвы и т. Д.
Я установлю Arduino и т. Д. В герметичную коробку, которую какое-то время оставят без присмотра. Помимо того, что батарея разряжена, я хочу убедиться, что внутрь корпуса не попадает влага и что он не испытывает экстремальных температур, которые могут повредить систему. Дешевый и простой способ измерить температуру и влажность - датчик DHT22. Подробности см. В Руководстве Adafruit.
В моем примере кода я использую цифровой контакт 5 . вместо вывода 2, поскольку я уже использую его для прерывания кнопки выключения питания.
Код для этого находится в arduino_4_voltage_temp_humidity_logging. После того, как это работало на макетной плате, я подключил это к Adafruit Proto Shield. Датчик DHT22 довольно громоздкий, но дешевый. Взгляните на другие форумы от Adafruit, Sparkfun и т. Д., Чтобы узнать о других альтернативах.
Энергосбережение в проектах Arduino
Следующим этапом моего проекта является снижение энергопотребления и продление срока службы батареи.
Моей отправной точкой для этого является отличный учебник Adafruit по регистрации данных с низким энергопотреблением от Тони ДиКолы.
Код
Github
https://github.com/craic/arduino_powerhttps://github.com/craic/arduino_powerGithub
https://github.com/NeonHorizon/lipopihttps://github.com/NeonHorizon/lipopiGithub
https://github.com/craic/pi_powerhttps://github.com/craic/pi_powerПроизводственный процесс