Потрошња енергије је критичан проблем за уређај који непрекидно ради дуже време без искључивања. Дакле, да би се решио овај проблем, готово сваки контролер долази са режимом спавања, који помаже програмерима да дизајнирају електронске уређаје за оптималну потрошњу енергије. Режим спавања ставља уређај у режим уштеде енергије искључивањем неискоришћеног модула.
Раније смо објаснили режим дубоког спавања у ЕСП8266 за уштеду енергије. Данас ћемо научити о режимима спавања Ардуино и демонстрирати потрошњу енергије помоћу Амперметра. Режим спавања Ардуино такође се назива и режимом Ардуино уштеде енергије или режимом приправности Ардуино.
Режими спавања Ардуино
Режими мировања омогућавају кориснику да заустави или искључи неупотребљене модуле у микроконтролеру који значајно смањују потрошњу енергије. Ардуино УНО, Ардуино Нано и Про-мини долазе са АТмега328П и имају Бровн-оут детектор (БОД) који надгледа напон напајања у тренутку мировања.
У АТмега328П постоји шест режима спавања:
За улазак у било који режим мировања морамо да омогућимо бит за спавање у регистру контроле режима спавања (СМЦР.СЕ). Затим битови за избор режима спавања одабиру режим мировања између Идле, АДЦ смањења шума, Повер-Довн, Повер-Саве, Стандби и Ектернал Стандби.
Унутрашњи или спољни Ардуино прекида или Ресетовање може пробудити Ардуино из режима спавања.
Режим мировања
За улазак у режим мировања, напишите СМ битове контролера '000'. Овај режим зауставља ЦПУ, али омогућава СПИ, двожични серијски интерфејс, УСАРТ, Ватцхдог, бројаче, аналогни компаратор. Режим мировања у основи зауставља ЦЛК ЦПУ и ЦЛК ФЛАСХ. Ардуино се може пробудити у било ком тренутку помоћу спољних или унутрашњих прекида.
Ардуино код за режим мировања у празном ходу:
ЛовПовер.идле (СЛЕЕП_8С, АДЦ_ОФФ, ТИМЕР2_ОФФ, ТИМЕР1_ОФФ, ТИМЕР0_ОФФ, СПИ_ОФФ, УСАРТ0_ОФФ, ТВИ_ОФФ);
Постоји библиотека за подешавање различитих режима мале снаге у ардуину. Дакле, прво преузмите и инсталирајте библиотеку са дате везе и користите горњи код да бисте Ардуино ставили у пасивни режим спавања. Коришћењем горњег кода, Ардуино ће прећи у сан од осам секунди и аутоматски се пробудити. Као што видите у коду, режим мировања искључује све тајмере, СПИ, УСАРТ и ТВИ (двожични интерфејс).
АДЦ режим смањења буке
Да бисте користили овај режим спавања, напишите СМ бит на '001'. Режим зауставља ЦПУ, али омогућава АДЦ, спољни прекид, УСАРТ, двожични серијски интерфејс, Ватцхдог и бројаче. Режим смањења шума АДЦ у основи зауставља ЦЛК ЦПУ, ЦЛК И / О и ЦЛК ФЛАСХ. Контролер можемо пробудити из АДЦ режима смањења шума следећим методама:
- Спољно ресетовање
- Враћање система Ватцхдог система
- Ватцхдог Интеррупт
- Бровн-оут Ресетовање
- Подударање адресе двожичног серијског интерфејса
- Прекид спољног нивоа на ИНТ
- Прекид промене пин-а
- Прекид тајмера / бројача
- СПМ / ЕЕПРОМ спреман прекид
Режим искључивања
Режим искључивања зауставља све генерисане сатове и омогућава само рад асинхроних модула. Може се омогућити писањем СМ битова у '010'. У овом режиму, спољни осцилатор се ИСКЉУЧУЈЕ, али двожични серијски интерфејс, чувар и спољни прекид настављају да раде. Може се онемогућити само једним од доленаведених метода:
- Спољно ресетовање
- Враћање система Ватцхдог система
- Ватцхдог Интеррупт
- Бровн-оут Ресетовање
- Подударање адресе двожичног серијског интерфејса
- Прекид спољног нивоа на ИНТ
- Прекид промене пин-а
Ардуино код за периодични режим искључивања:
ЛовПовер.поверДовн (СЛЕЕП_8С, АДЦ_ОФФ, БОД_ОФФ);
Код се користи за укључивање режима искључивања. Коришћењем горњег кода, Ардуино ће прећи у сан од осам секунди и аутоматски се пробудити.
Такође можемо користити режим искључивања са прекидом, где ће Ардуино прећи у стање спавања, али се буди само када је обезбеђен спољни или унутрашњи прекид.
Ардуино код за режим прекида напајања:
воид лооп () { // Дозволи игле за буђење да покрене прекид на лов. аттацхИнтеррупт (0, вакеУп, ЛОВ); ЛовПовер.поверДовн (СЛЕЕП_ФОРЕВЕР, АДЦ_ОФФ, БОД_ОФФ); // Онемогућите спољни прекид пина на пробудном пину. детацхИнтеррупт (0); // Уради нешто овде }
Режим уштеде енергије
Да бисмо ушли у режим уштеде енергије, потребно је да напишемо СМ пин на „011“. Овај режим мировања је сличан режиму искључивања, само уз један изузетак, тј. Ако је тајмер / бројач омогућен, остаће у радном стању чак и у време спавања. Уређај се може пробудити помоћу преливања тајмера.
Ако не користите бројач времена / времена, препоручује се коришћење режима искључивања уместо режима уштеде енергије.
Режим приправности
Режим приправности је идентичан режиму искључивања, једина разлика између њих је спољни осцилатор који је и даље радио у овом режиму. Да бисте омогућили овај режим, запишите СМ пин на '110'.
Проширени режим приправности
Овај режим је сличан режиму уштеде енергије, само уз један изузетак што осцилатор и даље ради. Уређај ће ући у режим проширеног стања приправности када напишемо СМ пин на '111'. Уређају ће бити потребно шест циклуса сата да се пробуди из продуженог режима приправности.
Испод су захтеви за овај пројекат, након повезивања кола према схеми кола. Отпремите код режима спавања у Ардуино помоћу Ардуино ИДЕ-а. Ардуино ће ући у пасивни режим мировања. Затим проверите тренутну потрошњу на УСБ амперметру. Иначе, за исто можете користити и стезаљку.
Компоненте потребне
- Ардуино УНО
- ДХТ11 Сензор температуре и влажности
- УСБ амперметар
- Бреадбоард
- Повезивање жица
Да бисте сазнали више о коришћењу ДХТ11 са Ардуином, следите везу. Овде користимо УСБ амперметар за мерење напона који троши Ардуино у режиму спавања.
УСБ амперметар
УСБ амперметар је плуг анд плаи уређај који се користи за мерење напона и струје са било ког УСБ порта. Донгле се укључује између УСБ напајања (рачунарски УСБ порт) и УСБ уређаја (Ардуино). Овај уређај има отпорник од 0,05 ома у линији са каблом за напајање кроз који мери вредност повучене струје. Уређај долази са четири седмосегментна дисплеја, који тренутно приказују вредности струје и напона које троши прикључени уређај. Ове вредности се окрећу у интервалу од сваке три секунде.
Спецификација:
- Опсег радног напона: 3.5В до 7В
- Максимална јачина струје: 3А
- Компактне величине, једноставан за ношење
- Није потребно спољно напајање
Апликација:
- Тестирање УСБ уређаја
- Провера нивоа оптерећења
- Отклањање грешака у пуњачима батерија
- Фабрике, електронски производи и лична употреба
Кружни дијаграм
У горњој поставци за демонстрацију режима дубоког спавања Ардуино, Ардуино је прикључен на УСБ амперметар. Затим се УСБ амперметар прикључи на УСБ порт лаптопа. Прикључак за податке ДХТ11 сензора повезан је са Д2 пином Ардуина.
Објашњење кода
Комплетна шифра пројекта са видео записом дата је на крају.
Код започиње укључивањем библиотеке за сензор ДХТ11 и библиотеке ЛовПовер . За преузимање библиотеке Лов Повер следите везу. Затим смо дефинисали Ардуино пин број на који је повезан дата пин ДХТ11 и креирали ДХТ објекат.
#инцлуде
У функцији воид сетуп , покренули смо серијску комуникацију помоћу сериал.бегин (9600), овде је 9600 брзина преноса. Користимо уграђену Ардуино ЛЕД диоду као индикатор за режим спавања. Дакле, поставили смо пин као излаз, а дигитално писање ниско.
воид сетуп () { Сериал.бегин (9600); пинМоде (ЛЕД_БУИЛТИН, ИЗЛАЗ); дигиталВрите (ЛЕД_БУИЛТИН, ЛОВ); }
У функцији воид лооп вршимо уграђени ЛЕД ХИГХ и очитавамо податке о температури и влажности са сензора. Ево, ДХТ.реад11 (); наредба је очитавање података са сензора. Једном када се подаци израчунају, можемо проверити вредности тако што ћемо их сачувати у било којој променљивој. Овде смо узели две променљиве типа флоат 'т' и 'х' . Стога се подаци о температури и влажности серијски штампају на серијском монитору.
воид лооп () { Сериал.принтлн ("Преузми податке са ДХТ11"); кашњење (1000); дигиталВрите (ЛЕД_БУИЛТИН, ВИСОКО); инт реадДата = ДХТ.реад11 (датаПин); // ДХТ11 флоат т = ДХТ.температуре; пловак х = ДХТ.влажност; Сериал.принт ("Температура ="); Сериал.принт (т); Сериал.принт ("Ц -"); Сериал.принт ("Влажност ="); Сериал.принт (х); Сериал.принтлн ("%"); кашњење (2000);
Пре него што омогућимо режим спавања, штампамо „Ардуино: - Идем на дремку“ и уграђену ЛЕД лампицу смањујемо. Након тога, режим спавања Ардуино је омогућен употребом наредбе поменуте у коду.
Испод кода омогућава неактивни режим периодичног спавања Ардуина и даје мировање од осам секунди. Претвара АДЦ, тајмере, СПИ, УСАРТ, двожични интерфејс у стање ИСКЉУЧЕНО.
Затим аутоматски буди Ардуино из сна након 8 секунди и исписује „Ардуино: - Хеј, управо сам се пробудио“.
Сериал.принтлн („Ардуино: - Идем на дремку“); кашњење (1000); дигиталВрите (ЛЕД_БУИЛТИН, ЛОВ); ЛовПовер.идле (СЛЕЕП_8С, АДЦ_ОФФ, ТИМЕР2_ОФФ, ТИМЕР1_ОФФ, ТИМЕР0_ОФФ, СПИ_ОФФ, УСАРТ0_ОФФ, ТВИ_ОФФ); Сериал.принтлн ("Ардуино: - Хеј, управо сам се пробудио"); Сериал.принтлн (""); кашњење (2000); }
Дакле, коришћењем овог кода Ардуино ће се пробудити само 24 секунде у минути и остаће у режиму мировања током преосталих 36 секунди, што значајно смањује снагу коју Ардуино метеоролошка станица троши.
Стога, ако користимо Ардуино у режиму спавања, можемо приближно удвостручити време рада уређаја.