- Modes de son Arduino
- Components necessaris
- Amperímetre USB
- Esquema de connexions
- Explicació del codi
El consum d’energia és un problema crític per a un dispositiu que funciona de forma continuada durant molt de temps sense estar apagat. Per superar aquest problema, gairebé tots els controladors inclouen un mode de suspensió, que ajuda els desenvolupadors a dissenyar aparells electrònics per a un consum òptim d’energia. El mode de repòs posa el dispositiu en mode d’estalvi d’energia desactivant el mòdul no utilitzat.
Abans hem explicat el mode de son profund a ESP8266 per estalviar energia. Avui coneixerem els modes de son Arduino i demostrarem el consum d'energia mitjançant l'amperímetre. Un mode de repòs Arduino també es coneix com el mode d'estalvi d'energia Arduino o el mode d' espera Arduino.

Modes de son Arduino
Els modes de repòs permeten a l’usuari aturar o apagar els mòduls no utilitzats del microcontrolador, que redueixen significativament el consum d’energia. Arduino UNO, Arduino Nano i Pro-mini inclou ATmega328P i disposa d’un detector Brown-out (BOD) que controla la tensió d’alimentació en el moment de la suspensió.
Hi ha sis modes de son a l'ATmega328P:

Per entrar a qualsevol dels modes de repòs, hem d’habilitar el bit de repòs al registre de control del mode de repòs (SMCR.SE). A continuació, els bits de selecció del mode de repòs seleccionen el mode de repòs entre el mode d’espera, reducció de soroll ADC, apagat, estalvi d’energia, standby i standby extern.
Un Arduino intern o extern interromp o un reinici pot activar l'Arduino des del mode de repòs.
Mode d’espera
Per entrar al mode de repòs inactiu, escriviu els bits SM del controlador '000'. Aquest mode atura la CPU, però permet que funcioni el SPI, la interfície sèrie de 2 fils, USART, Watchdog, comptadors i comparador analògic. El mode d’espera bàsicament atura la CPU CLK i el CLK FLASH. Arduino es pot despertar en qualsevol moment mitjançant una interrupció externa o interna.
Codi Arduino per al mode de repòs inactiu:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Hi ha una biblioteca per configurar diversos modes de baix consum en arduino. Per tant, primer descarregueu i instal·leu la biblioteca des de l'enllaç indicat i utilitzeu el codi anterior per posar l'Arduino en mode de repòs inactiu. En utilitzar el codi anterior, l’Arduino durarà vuit segons en son i es despertarà automàticament. Com podeu veure al codi, el mode d’espera desactiva tots els temporitzadors, SPI, USART i TWI (interfície de 2 fils).
Mode de reducció de soroll ADC
Per utilitzar aquest mode de repòs, escriviu el bit SM a '001'. El mode atura la CPU, però permet que funcionin l'ADC, la interrupció externa, l'USART, la interfície sèrie de 2 fils, el Watchdog i els comptadors. El mode de reducció de soroll ADC bàsicament atura la CPU CLK, E / S CLK i CLK FLASH. Podem activar el controlador des del mode de reducció de soroll ADC mitjançant els mètodes següents:
- Restabliment extern
- Restabliment del sistema de vigilància
- Interrupció del gos de vigilància
- Restabliment marró
- Adreça de la interfície sèrie de 2 fils
- Interrupció de nivell extern a INT
- Interrupció del canvi de pin
- Interrupció del temporitzador / comptador
- Interrupció preparada per SPM / EEPROM
Mode d’apagada
El mode d’apagada atura tots els rellotges generats i només permet el funcionament de mòduls asíncrons. Es pot habilitar escrivint els bits SM a '010'. En aquest mode, l'oscil·lador extern s'apaga, però la interfície sèrie de 2 fils, el gos de vigilància i la interrupció externa continuen funcionant. Només es pot desactivar mitjançant un dels mètodes següents:
- Restabliment extern
- Restabliment del sistema de vigilància
- Interrupció del gos de vigilància
- Restabliment marró
- Adreça de la interfície sèrie de 2 fils
- Interrupció de nivell extern a INT
- Interrupció del canvi de pin
Codi Arduino per al mode periòdic d'apagada:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
El codi s'utilitza per activar el mode d'apagada. En utilitzar el codi anterior, l’Arduino durarà vuit segons en son i es despertarà automàticament.
També podem fer servir el mode d’apagada amb una interrupció, on l’Arduino entra en repòs, però només es desperta quan es proporciona una interrupció externa o interna.
Codi Arduino per al mode d'interrupció d'apagada:
void loop () { // Permet que el pin de despertador activi la interrupció al mínim. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Desactiva la interrupció del pin extern al pin de despertador. detachInterrupt (0); // Fes alguna cosa aquí }
Mode d'estalvi d'energia
Per entrar al mode d’estalvi d’energia, hem d’escriure el pin SM al número ‘011’. Aquest mode de repòs és similar al mode d’apagat, només amb una excepció, és a dir, si el temporitzador / comptador està habilitat, es mantindrà en estat d’execució fins i tot en el moment de dormir. El dispositiu es pot despertar mitjançant el desbordament del temporitzador.
Si no feu servir el comptador de temps / temps, es recomana utilitzar el mode d’apagat en lloc del mode d’estalvi d’energia.
Mode d'espera
El mode d’espera és idèntic al mode d’apagada, l’única diferència entre ells és que l’oscil·lador extern es manté funcionant en aquest mode. Per habilitar aquest mode, escriviu el pin SM a '110'.
Mode d'espera ampliat
Aquest mode és similar al mode d'estalvi d'energia només amb una excepció que l'oscil·lador continua funcionant. El dispositiu entrarà en el mode d'espera estesa quan escrivim el pin SM a "111". El dispositiu trigarà sis cicles de rellotge a despertar-se del mode d'espera ampliat.
A continuació es mostren els requisits per a aquest projecte, després de connectar el circuit segons el diagrama del circuit. Pengeu el codi del mode de repòs a Arduino mitjançant Arduino IDE. Arduino entrarà en mode de repòs inactiu. A continuació, comproveu el consum actual a l'amperímetre USB. Altrament, també podeu utilitzar un pinçòmetre per al mateix.
Components necessaris
- Arduino UNO
- Sensor de temperatura i humitat DHT11
- Amperímetre USB
- Taula de pa
- Connexió de cables
Per obtenir més informació sobre l’ús de DHT11 amb Arduino, seguiu l’enllaç. Aquí fem servir un amperímetre USB per mesurar el voltatge consumit per Arduino en mode de repòs.
Amperímetre USB
L’amperímetre USB és un dispositiu plug and play que s’utilitza per mesurar el voltatge i el corrent de qualsevol port USB. El dongle es connecta entre la font d'alimentació USB (port USB de l'ordinador) i el dispositiu USB (Arduino). Aquest dispositiu té una resistència de 0,05 ohm en línia amb el pas de potència a través del qual mesura el valor del corrent extret. El dispositiu inclou una pantalla de quatre segments, que mostra instantàniament els valors de corrent i tensió consumits pel dispositiu connectat. Aquests valors es canvien en un interval de tres segons.

Especificació:
- Rang de tensió de funcionament: 3,5V a 7V
- Potència màxima actual: 3A
- Mida compacta, fàcil de transportar
- No es necessita subministrament extern
Sol·licitud:
- Prova de dispositius USB
- Comprovació dels nivells de càrrega
- Depuració de carregadors de bateries
- Fàbriques, productes electrònics i ús personal
Esquema de connexions

A la configuració anterior per demostrar els modes de son profund Arduino, l'Arduino està connectat a l'amperímetre USB. A continuació, l'amperímetre USB es connecta al port USB de l'ordinador portàtil. El pin de dades del sensor DHT11 està connectat al pin D2 de l’Arduino.
Explicació del codi
Al final es proporciona el codi complet del projecte amb un vídeo.
El codi comença incloent la biblioteca del sensor DHT11 i la biblioteca LowPower . Per descarregar la biblioteca Low Power, seguiu l'enllaç. A continuació, hem definit el número de pin Arduino al qual està connectat el pin de dades del DHT11 i hem creat un objecte DHT.
#incloure
A la funció de configuració del buit , hem iniciat la comunicació serial mitjançant serial.begin (9600), aquí el 9600 és la velocitat en bauds. Estem utilitzant el LED integrat d’Arduino com a indicador del mode de repòs. Per tant, hem definit el pin com a sortida i l’escriptura digital baixa.
configuració nul·la () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, BAIX); }
A la funció de bucle buit , estem realitzant el LED incorporat ALT i la lectura de les dades de temperatura i humitat del sensor. Aquí, DHT.read11 (); L'ordre és llegir les dades del sensor. Un cop calculades les dades, podem comprovar els valors desant-les en qualsevol variable. Aquí hem pres dues variables de tipus flotant 't' i 'h' . Per tant, les dades de temperatura i humitat s’imprimeixen en sèrie al monitor sèrie.
bucle buit () { Serial.println ("Obtenir dades de DHT11"); retard (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.temperature; flotador h = DHT.humitat; Serial.print ("Temperatura ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Humitat ="); Serial.print (h); Serial.println ("%"); endarreriment (2000);
Abans d'activar el mode de repòs, estem imprimint "Arduino: - Vaig a fer una migdiada" i farem que el LED incorporat sigui baix. Després d'això, el mode de repòs Arduino s'activa mitjançant l'ordre esmentada a continuació al codi.
A sota del codi s’activa el mode de repòs periòdic inactiu de l’Arduino i proporciona una suspensió de vuit segons. Converteix la interfície ADC, temporitzadors, SPI, USART, de 2 fils a la condició OFF.
Aleshores, desperta automàticament Arduino del son després de 8 segons i imprimeix "Arduino: - Ei, m'acabo de despertar".
Serial.println ("Arduino: - Vaig a fer una migdiada"); retard (1000); digitalWrite (LED_BUILTIN, BAIX); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino: - Ei, m'acabo de despertar"); Serial.println (""); endarreriment (2000); }
Per tant, en utilitzar aquest codi, Arduino només es despertarà durant 24 segons en un minut i romandrà en mode de repòs durant la resta dels 36 segons, que redueixen significativament la potència consumida per l’estació meteorològica Arduino.


Per tant, si fem servir l’Arduino amb el mode de repòs, podem duplicar aproximadament el temps d’execució del dispositiu.
