Включайте Arduino по таймеру каждые 24 часа.
В настоящее время я работаю над проектом Arduino, который раз в день передает мне заряд аккумулятора моего автомобиля через ESP8266. Зимой я не вожу машину и хочу получать информацию, когда уровень заряда аккумулятора упадет ниже критического значения, чтобы я мог зарядить его и предотвратить повреждение.
Поэтому для проекта важна энергоэффективность, поэтому сам аккумулятор не разряжается. Я много читал о спящем режиме, эффективных понижающих регуляторах и т. д. Все это объединяет то, что регулятор напряжения всегда работает, а это не то, что мне нужно.
Я ищу какую-то «схему таймера включения». Он должен отсчитать 24 часа, а затем включить реле или MOSFET, которое подключает стабилизатор напряжения к питанию и тем самым включает Arduino и ESP8266. Когда Arduino завершает передачу, он сбрасывает таймер, который отключает регулятор напряжения от питания и так далее. Конечно, схема таймера должна потреблять очень мало энергии.
Кто-нибудь знает такую схему? Я искал на AliExpress все варианты слов, которые пришли мне в голову, но безуспешно. Или, может быть, микросхема, которую можно (легко) использовать для создания такой схемы?
@Dirk Pitt, 👍9
Обсуждение4 ответа
Лучший ответ:
Одним из подходов было бы использование модуля DS3231 (Precision Real Time Clock). Такие модули продаются на Ebay по цене менее 1 доллара. Найдите ds3231 arduino
.
Обычно эти модули имеют шестиконтактный разъем с контактами, обозначенными как 32K, SQW, SCL, SDA, VCC и GND. Как отмечено в спецификациях DS3231, контакт INT/SQW используется либо для вывода прямоугольных импульсов, либо для вывода прерываний. На странице 13 спецификаций в разделе «Управляющий регистр» говорится:
Бит 2: Управление прерываниями (INTCN). Этот бит управляет сигналом INT/SQW. Когда бит INTCN установлен в логический 0, на вывод INT/SQW выводится прямоугольная волна. Когда бит INTCN установлен в логическую 1, совпадение между регистрами хронометража и любым из регистров будильника активирует выход INT/SQW (если будильник также включен).
Сначала вам нужно запустить скетч для настройки DS3231: включить ежедневный будильник, разрешить прерывание вместо прямоугольного сигнала, установить текущее время и т. д. Затем загрузите рабочую программу, которая считывает напряжение аккумулятора автомобиля при каждом запуске и действует соответствующим образом.
Вывод DS3231 INT/SQW будет подключен к затвору P-канального МОП-транзистора, который переключает питание 12 В на Arduino. P-полевой транзистор включится, когда включится выходной вывод будильника с открытым стоком INT/SQW. Операционная программа выполняет свою работу, а затем очищает флаг прерывания DS3231, чтобы отключить питание до тех пор, пока не сработает следующий будильник. (Для отладки установите более короткие интервалы, чем день; например, раз в минуту, как описано в Таблице 2, Биты маски будильника, на странице 12 спецификаций.)
Обычно DS3231 потребляет 0,84 мкА при работе от батареи 3,3 В или 1 мкА от 5 В. См. Электрические характеристики, стр. 3 спецификаций.
Затвор P-fet, вероятно, следует подтянуть к +12 через что-то вроде резистора сопротивлением 1 МОм; в противном случае он будет фактически открыт, когда вывод INT/SQW выключен, и может колебаться до произвольных уровней., @James Waldby - jwpat7
Сам таймер или схема таймера должны потреблять некоторый ток. Любой из микросхем AVR пико-мощности потребляет очень мало тока в спящем режиме — в десятках микроампер для 328, если я правильно помню. Для спящего режима AVR с наименьшим потреблением тока нужно отключить почти все, кроме сторожевого таймера, а максимальный период WDT составляет 8 секунд. Библиотека вроде Narcoleptic справится с более длительными периодами. Однако вам нужно будет обеспечить гораздо более эффективный регулируемый источник питания, чем тот, что встроен в плату Arduino (если вы будете его использовать). После этого нагрузка Arduino на аккумулятор вашего автомобиля должна быть микроскопической.
Одной из возможных конструкций эффективного источника питания является массив щелочных батарей, скажем, 3 последовательно для выходного напряжения 4,5 В (пока они свежие), умноженное на 2 или более таких цепочек параллельно, подключенных напрямую к шине 5 В.
Я не делал расчета мощности, чтобы знать, какая емкость вам понадобится и нужны ли вам элементы D или вы можете сделать практичный массив из более мелких, скажем, AA, но это способ достичь нулевой нагрузки на автомобильный аккумулятор (не принимая во внимание требования датчика напряжения автомобильного аккумулятора). Вы можете включить состояние массива аккумуляторов Arduino в ежедневный отчет, или, за цену нескольких щелочных батареек, вы можете так перепроектировать аккумулятор Arduino, что его мониторинг станет ненужным.
Несколько данных указывают на то, что использование отдельной батареи является возможным подходом:
- Одной щелочной батарейки на 9 В достаточно для питания дымового извещателя на протяжении года, включая зиму на неотапливаемом чердаке (по моему собственному опыту), а щелочные батарейки на 9 В не известны своей емкостью.
- Мой цифровой термостат с функцией понижения температуры работал пару лет на двух батарейках типа АА, пока а) они не сдохли, и б) я не поумнел и не начал менять их ежегодно. :)
У меня есть ATmega48 (очень похож на 328P), работающий от пары батареек AA с июня 2012 года. Он бодрствует чуть больше 4 минут в день, остальное время спит. Батарейки пока не менял., @Edgar Bonet
Это впечатляющее время работы - спасибо за дополнительные данные, @EdgarBonet! Я ожидал, что спящий Arduino и комплект щелочных батареек могут быть системой "установил и забыл", но без расчета энергопотребления я не предполагал, что она будет работать так хорошо. Итак, @DirkPitt, есть некоторые реальные данные поддержки., @JRobert
Это не полноценный Arduino: мне не удалось опуститься ниже ~40 мА с моим Uno, в то время как голый ATmega в SLEEP_MODE_PWR_SAVE
, когда активен только асинхронный таймер, потреблял что-то около 2 мкА., @Edgar Bonet
Вы можете использовать таймер. Его можно купить на eBay примерно за 5 евро. Я использую этот
https://www.ebay.com/itm/CN101-DC-12V-16A-Digital-LCD-Power-Programmable-Timer-Time-Relay-Switch-New/401190616827?hash=item5d68d2fefb:g:K3sAAOSwNRdX3ggT
Я также пробовал ds3231, но Arduino находится в режиме ожидания и потребляет энергию. Это лучшее решение, которое я нашел
Рассмотрите возможность использования «Таймера питания Adafruit TPL5110»
https://learn.adafruit.com/adafruit-tpl5110-power-timer-breakout/overview
Это скорее комментарий. Если вы хотите оставить это как ответ, добавьте дополнительное объяснение вашего решения., @MichaelT
- Странная проблема. Ардуино перестает работать через несколько часов. Мнения, пожалуйста
- Таймер обратного отсчета для управления реле (множество функций в пустом контуре)
- Как отслеживать миллисекунды в спящем режиме
- ESP8266 отключается через несколько часов
- Как сохранить данные в arduino при отключении питания
- Понимание того, как запитать объекты с помощью реле (featherwing, feather huzzah)
- Подключите реле 5 В к плате ESP32 WROVER B
- Настройка таймера ATMega328p (Arduino)
Не все регуляторы напряжения одинаковы. Некоторые будут использовать всего несколько микроампер., @Gerben
Нестандартное мышление... Не будет ли стандартного [таймера-переключателя](https://www.amazon.com/Intermatic-TN311-Heavy-Grounded-Timer/dp/B005MMSTNG/ref=sr_1_12?ie=UTF8&qid =1507208986&sr=8-12&keywords=time%20switch%20on%20off) достаточно?, @user31208