Az áramfogyasztás kritikus kérdés egy hosszú ideig folyamatosan működő, kikapcsolás nélküli eszköz számára. Tehát ennek a problémának a kiküszöbölésére szinte minden vezérlő alvó üzemmóddal rendelkezik, amely segít a fejlesztőknek az optimális energiafogyasztás érdekében elektronikus modulok tervezésében. Alvó üzemmódban a készülék energiatakarékos üzemmódba kapcsol a nem használt modul kikapcsolásával.
Korábban elmagyaráztuk a mély alvás módot az ESP8266-ban az energiatakarékosságról. Ma megismerjük az Arduino alvó módokat, és bemutatjuk az energiafogyasztást az Ammeter használatával. Az Arduino alvó módot Arduino energiatakarékos módnak vagy Arduino készenléti módnak is nevezik.
Arduino alvó üzemmódok
Az alvó üzemmódok lehetővé teszik a felhasználó számára, hogy leállítsa vagy kikapcsolja a mikrovezérlő nem használt moduljait, ami jelentősen csökkenti az energiafogyasztást. Az Arduino UNO, az Arduino Nano és a Pro-mini ATmega328P-vel érkezik, és rendelkezik egy Brown-out detektorral (BOD), amely figyeli a tápfeszültséget alvó üzemmódban.
Az ATmega328P-ben hat alvási mód van:
Bármelyik alvó üzemmódba való belépéshez engedélyeznünk kell az alvó bitet az alvó üzemmód vezérlő nyilvántartásában (SMCR.SE). Ezután az alvó üzemmód kiválasztó bitjei az alapértelmezett üzemmódot, az ADC zajcsökkentést, a kikapcsolást, az energiatakarékosságot, a készenlétet és a külső készenlétet választják.
A belső vagy külső Arduino megszakítja, vagy a Reset felébresztheti az Arduino-t alvó üzemmódból.
Üresjárati mód
A készenléti alvó üzemmódba való belépéshez írja be a "000" vezérlő SM bitjeit. Ez az üzemmód leállítja a CPU-t, de lehetővé teszi az SPI, a 2-vezetékes soros interfész, az USART, a Watchdog, a számlálók és az analóg komparátor működését. A készenléti üzemmódban alapvetően leáll a CLK CPU és a CLK FLASH. Az Arduino bármikor felébreszthető külső vagy belső megszakítással.
Arduino kód készenléti állapotban:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Van egy könyvtár különféle alacsony fogyasztású üzemmódok beállítására az arduino-ban. Tehát először töltse le és telepítse a könyvtárat a megadott linkről, és a fenti kód segítségével állítsa az Arduino tétlen alvó üzemmódba. A fenti kód használatával az Arduino nyolc másodpercet alszik és automatikusan felébred. Amint a kódban láthatja, hogy a tétlen üzemmód kikapcsolja az összes időzítőt, az SPI, az USART és a TWI (2-vezetékes interfész).
ADC zajcsökkentési mód
Ennek az alvó módnak a használatához írja be az SM bitet „001” -re. Az üzemmód leállítja a CPU-t, de lehetővé teszi az ADC, a külső megszakítás, az USART, a kétvezetékes soros interfész, a Watchdog és a számlálók működését. Az ADC zajcsökkentési módja alapvetően leállítja a CLK CPU-t, a CLK I / O és a CLK FLASH funkciókat. A vezérlőt az ADC zajcsökkentési módból a következő módszerekkel ébreszthetjük fel:
- Külső visszaállítás
- A Watchdog rendszer visszaállítása
- Watchdog megszakítás
- Brown-out Reset
- 2 vezetékes soros interfész cím egyezés
- Külső szintű megszakítás az INT-n
- Tűcsere megszakítás
- Időzítő / számláló megszakítása
- SPM / EEPROM kész megszakítás
Kikapcsolási mód
A kikapcsolás mód leállítja az összes generált órát, és csak az aszinkron modulok működését engedélyezi. Engedélyezhető, ha az SM biteket „010” -re írja. Ebben az üzemmódban a külső oszcillátor kikapcsol, de a 2-vezetékes soros interfész, a watchdog és a külső megszakítás továbbra is működik. Csak az alábbi módszerek egyikével lehet letiltani:
- Külső visszaállítás
- A Watchdog rendszer visszaállítása
- Watchdog megszakítás
- Brown-out Reset
- 2 vezetékes soros interfész cím egyezés
- Külső szintű megszakítás az INT-n
- Tűcsere megszakítás
Arduino kód a kikapcsolás időszakos módjához:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
A kódot a kikapcsolási mód bekapcsolására használják. A fenti kód használatával az Arduino nyolc másodpercet alszik és automatikusan felébred.
Használhatjuk a kikapcsolási módot megszakítással is, ahol az Arduino alvó állapotba kerül, de csak akkor ébred fel, ha külső vagy belső megszakítás biztosított.
Arduino kód kikapcsolási megszakítási módhoz:
void loop () { // Engedje meg, hogy az ébresztőcsap alacsony szinten megszakítsa a megszakítást. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // A külső csapszakadás letiltása az ébresztőcsapon. detachInterrupt (0); // Tegyen itt valamit }
Energiatakarékos mód
Az energiatakarékos módba való belépéshez be kell írnunk az SM-PIN-t a „011” -be. Ez az alvó üzemmód hasonló a kikapcsolási módhoz, csak egy kivétellel, azaz ha az időzítő / számláló engedélyezve van, akkor alvó állapotban is futó állapotban marad. Az eszközt az időzítő túlcsordulásával lehet felébreszteni.
Ha nem az időt / számlálót használja, akkor ajánlott az energiatakarékos mód helyett a kikapcsolási módot használni.
Készenléti mód
A készenléti üzemmód megegyezik a Power-Down üzemmóddal, az egyetlen különbség közöttük az, hogy a külső oszcillátor folyamatosan működik ebben az üzemmódban. Ennek a módnak az engedélyezéséhez írja be az SM tűt '110'-re.
Kiterjesztett készenléti mód
Ez az üzemmód csak az energiatakarékos módhoz hasonlít, azzal az egyetlen kivétellel, hogy az oszcillátor folyamatosan működik. Az eszköz kiterjesztett készenléti üzemmódba lép, amikor az SM-típust '111' -re írjuk. A készüléknek hat órajelre van szüksége, hogy felébredjen a kiterjesztett készenléti üzemmódból.
Az alábbiakban bemutatjuk a projekt követelményeit, miután az áramkört csatlakoztattuk a kapcsolási rajz szerint. Töltse fel az alvó mód kódját az Arduino-ba az Arduino IDE használatával. Az Arduino készenléti állapotba lép. Ezután ellenőrizze az áramfogyasztást az USB ampermérőn. Egyébként ehhez használhat bilincsmérőt is.
Szükséges alkatrészek
- Arduino UNO
- DHT11 hőmérséklet- és páratartalom-érzékelő
- USB ampermérő
- Kenyérlemez
- Vezetékek csatlakoztatása
Ha többet szeretne megtudni a DHT11 Arduinóval történő használatáról, kövesse a linket. Itt USB-ampermérővel mérjük az Arduino által alvó üzemmódban fogyasztott feszültséget.
USB ampermérő
Az USB ampermérő egy plug and play eszköz, amely bármely USB port feszültségét és áramát méri. A hardverkulcs az USB tápegység (a számítógép USB portja) és az USB eszköz (Arduino) közé csatlakozik. Ennek az eszköznek 0,05ohmos ellenállása van egy vonalban a tápcsappal, amelyen keresztül méri a lehúzott áram értékét. A készülék négy hét szegmenses kijelzővel rendelkezik, amelyek azonnal megjelenítik a csatlakoztatott eszköz által fogyasztott áram és feszültség értékeit. Ezek az értékek három másodpercenként elfordulnak.
Leírás:
- Üzemi feszültségtartomány: 3,5 V-7 V
- Maximális áramérték: 3A
- Kompakt méret, könnyen hordozható
- Nincs szükség külső áramellátásra
Alkalmazás:
- USB-eszközök tesztelése
- A terhelés szintjének ellenőrzése
- Az akkumulátortöltők hibakeresése
- Gyárak, elektronikai termékek és személyes használat
Kördiagramm
Az Arduino Deep alvó módok bemutatására szolgáló fenti beállításban az Arduino csatlakozik az USB ampermérőhöz. Ezután az USB-ampermérőt csatlakoztatja a laptop USB-portjához. A DHT11 érzékelő adatcsapja az Arduino D2 érintkezőjéhez van rögzítve.
Kód Magyarázat
A projekt teljes kódját egy videóval együtt a végén adjuk meg.
A kód azzal kezdődik, hogy tartalmazza a DHT11 érzékelő könyvtárát és a LowPower könyvtárat. Az alacsony fogyasztású könyvtár letöltéséhez kövesse a linket. Ezután meghatároztuk az Arduino pin számát, amelyhez a DHT11 adatcsapja csatlakozik, és létrehoztunk egy DHT objektumot.
#include
A void setup függvényben a soros kommunikációt a serial.begin (9600) használatával indítottuk el, itt a 9600 az adatátviteli sebesség. Az Arduino beépített LED-jét használjuk az alvó üzemmód indikátoraként. Tehát a tűt kimenetként állítottuk be, és a digitális írást alacsony szintre állítottuk be.
void setup () { Soros.kezdés (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
A void loop funkcióban elkészítjük a beépített HIGH LED-et, és leolvassuk az érzékelő hőmérsékleti és páratartalmi adatait. Itt a DHT.read11 (); parancs beolvassa az adatokat az érzékelőből. Az adatok kiszámítása után ellenőrizhetjük az értékeket bármely változóba mentve. Itt két úszó típusú t és h változót vettünk. Ezért a hőmérsékleti és páratartalmi adatokat sorosan nyomtatják a soros monitorra.
void loop () { Serial.println ("Adatok lekérése a DHT11-ből"); késés (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); DHT11 úszó t = DHT.hőmérséklet; úszó h = DHT. páratartalom; Soros nyomtatás ("Hőmérséklet ="); Soros nyomtatás (t); Soros nyomtatás ("C -"); Soros.nyomtatás ("Páratartalom ="); Soros nyomtatás (h); Soros.println ("%"); késés (2000);
Az alvó üzemmód engedélyezése előtt kinyomtatjuk az "Arduino: - Napra megyek" szót, és a beépített LED-et alacsonyra állítjuk. Ezt követően az Arduino alvó üzemmód engedélyezése az alább említett parancs használatával történik a kódban.
Az alábbi kód engedélyezi az Arduino tétlen, időszakos alvó üzemmódját , és nyolc másodpercet alszik. Kikapcsolja az ADC, Timers, SPI, USART, 2 vezetékes interfészt.
Ezután 8 másodperc múlva automatikusan felébreszti Arduinót az alvásból, és kinyomtatja az „Arduino: - Hé, most keltem” feliratot.
Serial.println ("Arduino: - Napért megyek"); késés (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: - Hé, most keltem fel"); Soros.println (""); késés (2000); }
Tehát ennek a kódnak a használatával az Arduino csak 24 másodpercre fog ébredni egy perc alatt, és alvó üzemmódban marad a 36 másodperc hátralévő részében, ami jelentősen csökkenti az Arduino meteorológiai állomás által fogyasztott energiát.
Ezért, ha az Arduino- t alvó üzemmóddal használjuk, körülbelül megduplázhatjuk az eszköz futási idejét.