86

Выход ардуинки из сна по таймеру

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


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

Детальнее о прерываниях и о том, какие входа можно использовать под прерывания можно прочитать здесь  https://www.arduino.cc/en/Reference/AttachInterrupt

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


Следующая возможность ардуинки - уходить в сон для сбережения энергопотребления. Детальнее о режимах сна и потреблениях тока в разных режимах можно прочитать здесь https://www.gammon.com.au/forum/?id=11497


Самый экономный режим - это SLEEP_MODE_PWR_DOWN : 0.36 mA

Теперь рассмотрим каким образом можно выйти из сна.

Выход из может осуществлятся двумя методами:

1) WatchDog Timer - грубо говоря внутренний таймер. Максимальное время сна от 7-9 секунд. Можно использовать и его, как таймер. Например если вам надо, чтобы ардуинка выполняла какое-то деуствие каждый час, а между этим спала, то можно просыпаться каждые 7-9 секунд, суммировать время сна и если набежал час, то выполнять действие. Недостатком этого метода является то, что нужно часто просыпаться и время сна 7-9 секунд не является константой, а колебается постоянно в этих пределах, соответственно на большом отрезке времени будет большая ошибка суммарного времени.

2) по внешнему прерыванию (нажатие кнопки, геркон и т.д.)

Об этих методах вы также можете прочитать здесь https://www.gammon.com.au/forum/?id=11497


В методе рассмотреном  в данном посте мы будем использовать внешнее прерывания и модуль часов (RTC DS3231), который будет выполнять функцию будильника.


Собираем схемку как показано на картинке

Выход ардуинки из сна по таймеру

Модуль RTC DS3231 работает по I2C и на нем можно запрограммировать будильники (возможно установить 2 будильника). В обычном режиме на выходе SQW сигнал HIGH, при срабатывании будильника сигнал будет LOW - это мы и будем использовать на прерывании.


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


Для работы с будильниками нужно скачать библиотеку https://github.com/jarzebski/Arduino-DS3231


И пример моего кода я выложил тут http://paste.ofcode.org/7DPT3ZmdjEe5NjqS2jrEX2


Вот то, что вы должны видеть в мониторе последовательного порта


21-02-2000 00:58:52 - Wednesday

Sleep

Wake UP

21-02-2000 00:59:52 - Wednesday

Sleep


таймер выставляется в минутах тут

setSleepTimer(1); - в данном случае стоит 1 минута


также, если вам нужно, чтобы платка перезагружалась после выхода из сна и заново выполнялся бы setup(), вы можете раскомментировать строку resetFunc();


В данном посте я не рассматривал примеры работы с модулем RTC DS3231, для этого есть примеры в библиотеке. Но если нужно, могу ответить на вопросы или сделать пост.


В следующем посте собираюсь описать возможности прошивки WiFi модуля ESP8266

Arduino & Pi

1.5K пост20.9K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу

1
Автор поста оценил этот комментарий

А можно ещё раз пример кода?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Помогите разобраться.  Почему не выводится в монитор порта, время и дата?(пустая строка, потом строка Sleep, потом строка Wake UP и опять пустая строка. Хотя таймер работает. С ардуинкой только знакомлюсь. Пробовал другой скетч с таймером, таже ерунда, а если залить просто время, то выводится .

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

попробуйте вот эту библиотеку - https://github.com/levkovigor/sleep-by-timer/blob/master/Ard... Возможно у Вас версия библиотеки отличается

1
DELETED
Автор поста оценил этот комментарий

Идея статьи хорошая, реализация так себе.

1) Уход в PWR_DOWN - далеко не все что нужно сделать, для настоящего энергосбережения на AVR. Поддержка работоспособности портов будет жрать около 0.3 мА, поэтому нужно перед сном полностью выключить порты. Все это и многое другое делает, например, либа https://github.com/n0m1/Sleep_n0m1

2) Такой сон не очень полезен на ардуине, потому что она обвешана всяким мусором вроде лампочек и конвертеров, которые будут жрать ток даже когда МК спит. Поэтому реально все это работает только на голом МК или порезанной ардуине. Замеры на Arduino NANO показали, что утекает около 1 мА. Отрывание всех лампочек и конвертеров в сочетании с нормальной либой для сна срезало потребление до 6 мкА - вот это уже энергосбережение.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Там не только pwr_down, а и adcsra=0 и power_all_disable. Конечно же на голых мк потребление меньше
показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества