- Режимы сна Arduino
- Необходимые компоненты
- USB амперметр
- Принципиальная электрическая схема
- Код Пояснение
Энергопотребление является критической проблемой для устройства, которое долгое время работает без выключения. Таким образом, для решения этой проблемы почти каждый контроллер имеет спящий режим, который помогает разработчикам разрабатывать электронные устройства с оптимальным энергопотреблением. В спящем режиме устройство переходит в режим энергосбережения путем отключения неиспользуемого модуля.
Ранее мы объясняли режим глубокого сна в ESP8266 для энергосбережения. Сегодня мы узнаем о режимах сна Arduino и продемонстрируем энергопотребление с помощью амперметра. Спящий режим Arduino также называется режимом энергосбережения Arduino или режимом ожидания Arduino.
Режимы сна Arduino
Спящие режимы позволяют пользователю останавливать или выключать неиспользуемые модули микроконтроллера, что значительно снижает потребление энергии. Arduino UNO, Arduino Nano и Pro-mini поставляются с ATmega328P и имеют детектор пониженного напряжения (BOD), который контролирует напряжение питания во время спящего режима.
ATmega328P имеет шесть спящих режимов:
Для входа в любой из спящих режимов нам необходимо включить бит спящего режима в регистре управления спящим режимом (SMCR.SE). Затем биты выбора спящего режима выбирают спящий режим из режима ожидания, снижения шума АЦП, отключения питания, энергосбережения, режима ожидания и внешнего режима ожидания.
Внутреннее или внешнее прерывание Arduino или сброс могут вывести Arduino из спящего режима.
Режим ожидания
Для перехода в спящий режим ожидания запишите биты SM контроллера «000». Этот режим останавливает ЦП, но позволяет работать SPI, 2-проводному последовательному интерфейсу, USART, Watchdog, счетчикам, аналоговому компаратору. В режиме ожидания в основном останавливаются ЦП CLK и флэш-память CLK. Arduino можно разбудить в любое время с помощью внешнего или внутреннего прерывания.
Код Arduino для спящего режима ожидания:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
В ардуино есть библиотека для настройки различных режимов пониженного энергопотребления. Поэтому сначала загрузите и установите библиотеку по указанной ссылке и используйте приведенный выше код, чтобы перевести Arduino в спящий режим ожидания. Используя приведенный выше код, Arduino перейдет в режим сна на восемь секунд и автоматически проснется. Как видно из кода, в режиме ожидания отключаются все таймеры, SPI, USART и TWI (двухпроводной интерфейс).
Режим шумоподавления АЦП
Чтобы использовать этот спящий режим, запишите бит SM в «001». Этот режим останавливает ЦП, но позволяет работать АЦП, внешнему прерыванию, USART, 2-проводному последовательному интерфейсу, сторожевому таймеру и счетчикам. Режим шумоподавления АЦП в основном останавливает ЦП CLK, ввод / вывод CLK и флэш-память CLK. Вывести контроллер из режима шумоподавления АЦП можно следующими способами:
- Внешний сброс
- Сброс системы сторожевого таймера
- Сторожевое прерывание
- Сброс отключения электроэнергии
- Соответствие адреса 2-проводного последовательного интерфейса
- Прерывание внешнего уровня на INT
- Прерывание смены пина
- Прерывание таймера / счетчика
- Прерывание готовности SPM / EEPROM
Режим пониженного энергопотребления
Режим Power-Down останавливает все генерируемые часы и разрешает работу только асинхронных модулей. Его можно включить, записав бит SM в «010». В этом режиме внешний генератор отключается, но 2-проводной последовательный интерфейс, сторожевой таймер и внешнее прерывание продолжают работать. Его можно отключить только одним из следующих способов:
- Внешний сброс
- Сброс системы сторожевого таймера
- Сторожевое прерывание
- Сброс отключения электроэнергии
- Соответствие адреса 2-проводного последовательного интерфейса
- Прерывание внешнего уровня на INT
- Прерывание смены пина
Код Arduino для периодического режима отключения питания:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
Код используется для включения режима отключения питания. Используя приведенный выше код, Arduino перейдет в режим сна на восемь секунд и автоматически проснется.
Мы также можем использовать режим отключения питания с прерыванием, когда Arduino переходит в спящий режим, но просыпается только при наличии внешнего или внутреннего прерывания.
Код Arduino для режима прерывания при отключении питания:
void loop () { // Разрешить вывод пробуждения запускать прерывание на низком уровне. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Отключить прерывание внешнего вывода на выводе пробуждения. detachInterrupt (0); // Сделайте что-нибудь здесь }
Энергосберегающий режим
Чтобы войти в режим энергосбережения, нам нужно записать вывод SM на «011». Этот спящий режим аналогичен режиму отключения питания, только за одним исключением, т.е. если таймер / счетчик включен, он останется в рабочем состоянии даже во время спящего режима. Устройство можно разбудить с помощью таймера переполнения.
Если вы не используете счетчик времени, рекомендуется использовать режим пониженного энергопотребления вместо режима энергосбережения.
Режим ожидания
Режим ожидания идентичен режиму Power-Down, единственная разница между ними заключается в том, что внешний генератор продолжает работать в этом режиме. Для включения этого режима запишите вывод SM на «110».
Расширенный режим ожидания
Этот режим похож на режим энергосбережения, только за одним исключением: генератор продолжает работать. Устройство перейдет в режим расширенного ожидания, когда мы запишем вывод SM на «111». Устройство выйдет из расширенного режима ожидания за шесть тактов.
Ниже приведены требования для этого проекта после подключения цепи согласно принципиальной схеме. Загрузите код режима сна в Arduino с помощью Arduino IDE. Arduino перейдет в спящий режим ожидания. Затем проверьте потребление тока на USB-амперметре. В противном случае вы также можете использовать для этого токоизмерительные клещи.
Необходимые компоненты
- Arduino UNO
- Датчик температуры и влажности DHT11
- USB амперметр
- Макетная плата
- Подключение проводов
Чтобы узнать больше об использовании DHT11 с Arduino, перейдите по ссылке. Здесь мы используем USB-амперметр для измерения напряжения, потребляемого Arduino в спящем режиме.
USB амперметр
USB-амперметр - это устройство Plug and Play, используемое для измерения напряжения и тока с любого USB-порта. Ключ подключается между источником питания USB (USB-порт компьютера) и USB-устройством (Arduino). В этом устройстве есть резистор 0,05 Ом, установленный на линии вывода питания, через который он измеряет значение потребляемого тока. Устройство оснащено четырьмя семисегментными дисплеями, на которых мгновенно отображаются значения тока и напряжения, потребляемые подключенным устройством. Эти значения меняются с интервалом в три секунды.
Спецификация:
- Диапазон рабочего напряжения: от 3,5 В до 7 В
- Максимальный ток: 3А
- Компактный размер, легко носить с собой
- Внешний источник питания не требуется
Заявка:
- Тестирование USB-устройств
- Проверка уровней нагрузки
- Отладка зарядных устройств аккумуляторов
- Заводы, электроника и личное использование
Принципиальная электрическая схема
В приведенной выше настройке для демонстрации режимов глубокого сна Arduino Arduino подключен к USB-амперметру. Затем USB-амперметр вставляется в USB-порт ноутбука. Контакт данных датчика DHT11 прикреплен к контакту D2 Arduino.
Код Пояснение
Полный код проекта с видео приведен в конце.
Код начинается с включения библиотеки для датчика DHT11 и библиотеки LowPower . Для скачивания библиотеки Low Power перейдите по ссылке. Затем мы определили номер вывода Arduino, к которому подключен вывод данных DHT11, и создали объект DHT.
#включают
В функции настройки void мы инициировали последовательную связь с помощью serial.begin (9600), здесь 9600 - это скорость передачи данных. Мы используем встроенный светодиод Arduino в качестве индикатора спящего режима. Итак, мы установили контакт как выход и цифровую запись на низкий уровень.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
В функции пустого контура мы делаем встроенный светодиод ВЫСОКИМ и считываем данные о температуре и влажности с датчика. Здесь DHT.read11 (); команда читает данные с датчика. После расчета данных мы можем проверить значения, сохранив их в любой переменной. Здесь мы взяли две переменные типа с плавающей запятой: «t» и «h» . Следовательно, данные о температуре и влажности последовательно выводятся на серийный монитор.
void loop () { Serial.println ("Получить данные из DHT11"); задержка (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 с плавающей запятой t = DHT.temperature; float h = DHT. влажность; Serial.print ("Температура ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Влажность ="); Серийный отпечаток (ч); Serial.println ("%"); задержка (2000);
Перед включением спящего режима мы печатаем «Arduino: - Я собираюсь вздремнуть» и делаем встроенный светодиод Low. После этого спящий режим Arduino включается с помощью команды, упомянутой ниже в коде.
Приведенный ниже код включает периодический спящий режим простоя Arduino и дает спящий режим на восемь секунд. Он переводит АЦП, таймеры, SPI, USART, 2-проводный интерфейс в состояние ВЫКЛ.
Затем он автоматически выводит Arduino из спящего режима через 8 секунд и печатает «Arduino: - Привет, я только что проснулся».
Serial.println («Arduino: - Я собираюсь вздремнуть»); задержка (1000); digitalWrite (LED_BUILTIN, LOW); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println («Arduino: - Эй, я только что проснулся»); Serial.println (""); задержка (2000); }
Таким образом, при использовании этого кода Arduino будет просыпаться только на 24 секунды в минуту и оставаться в спящем режиме в течение остальных 36 секунд, что значительно снижает мощность, потребляемую метеостанцией Arduino.
Следовательно, если мы используем Arduino в спящем режиме, мы можем примерно удвоить время работы устройства.