- Modos de suspensión de Arduino
- Componentes requeridos
- Amperímetro USB
- Diagrama de circuito
- Explicación del código
El consumo de energía es un problema crítico para un dispositivo que funciona de forma continua durante mucho tiempo sin estar apagado. Entonces, para superar este problema, casi todos los controladores vienen con un modo de suspensión, que ayuda a los desarrolladores a diseñar dispositivos electrónicos para un consumo de energía óptimo. El modo de suspensión pone el dispositivo en modo de ahorro de energía al apagar el módulo no utilizado.
Anteriormente, explicamos el modo de suspensión profunda en ESP8266 para ahorrar energía. Hoy aprenderemos sobre los modos de suspensión de Arduino y demostraremos el consumo de energía mediante el uso de amperímetro. Un modo de suspensión de Arduino también se conoce como modo de ahorro de energía de Arduino o modo de espera de Arduino.
Modos de suspensión de Arduino
Los modos de suspensión permiten al usuario detener o apagar los módulos no utilizados en el microcontrolador, lo que reduce significativamente el consumo de energía. Arduino UNO, Arduino Nano y Pro-mini viene con ATmega328P y tiene un Detector de caída (BOD) que monitorea el voltaje de suministro en el momento del modo de suspensión.
Hay seis modos de suspensión en ATmega328P:
Para entrar en cualquiera de los modos de suspensión, necesitamos habilitar el bit de suspensión en el Registro de control del modo de suspensión (SMCR.SE). Luego, los bits de selección del modo de suspensión seleccionan el modo de suspensión entre Inactivo, Reducción de ruido ADC, Apagado, Ahorro de energía, Espera y Espera externa.
Una interrupción interna o externa de Arduino o un reinicio pueden despertar al Arduino del modo de suspensión.
Modo inactivo
Para ingresar al modo inactivo de suspensión, escriba los bits SM del controlador '000'. Este modo detiene la CPU pero permite que SPI, interfaz serial de 2 cables, USART, Watchdog, contadores, comparador analógico operen. El modo inactivo básicamente detiene la CPU CLK y CLK FLASH. Arduino se puede activar en cualquier momento mediante interrupciones externas o internas.
Código Arduino para el modo inactivo de suspensión:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Hay una biblioteca para configurar varios modos de bajo consumo en arduino. Primero descargue e instale la biblioteca desde el enlace dado y use el código anterior para poner el Arduino en modo inactivo. Al usar el código anterior, el Arduino entrará en un modo de suspensión de ocho segundos y se despertará automáticamente. Como puede ver en el código, el modo inactivo apaga todos los temporizadores, SPI, USART y TWI (interfaz de 2 cables).
Modo de reducción de ruido ADC
Para usar este modo de suspensión, escriba el bit SM en '001'. El modo detiene la CPU pero permite que el ADC, la interrupción externa, USART, la interfaz serial de 2 cables, el Watchdog y los contadores funcionen. El modo de reducción de ruido ADC básicamente detiene la CPU CLK, CLK I / O y CLK FLASH. Podemos reactivar el controlador desde el modo de reducción de ruido ADC mediante los siguientes métodos:
- Reinicio externo
- Reinicio del sistema de vigilancia
- Interrupción del perro guardián
- Reinicio de caída
- Coincidencia de dirección de interfaz serial de 2 cables
- Interrupción de nivel externo en INT
- Interrupción de cambio de pin
- Interrupción del temporizador / contador
- Interrupción preparada para SPM / EEPROM
Modo de apagado
El modo de apagado detiene todos los relojes generados y solo permite el funcionamiento de módulos asíncronos. Se puede habilitar escribiendo los bits SM en '010'. En este modo, el oscilador externo se apaga, pero la interfaz en serie de 2 cables, el perro guardián y la interrupción externa continúan funcionando. Solo se puede desactivar mediante uno de los métodos siguientes:
- Reinicio externo
- Reinicio del sistema de vigilancia
- Interrupción del perro guardián
- Reinicio de caída
- Coincidencia de dirección de interfaz serial de 2 cables
- Interrupción de nivel externo en INT
- Interrupción de cambio de pin
Código Arduino para el modo periódico de apagado:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
El código se utiliza para activar el modo de apagado. Al usar el código anterior, el Arduino entrará en un modo de suspensión de ocho segundos y se despertará automáticamente.
También podemos usar el modo de apagado con una interrupción, donde el Arduino entrará en suspensión pero solo se despertará cuando se proporcione una interrupción externa o interna.
Código Arduino para el modo de interrupción de apagado:
void loop () { // Permitir que el pin de activación active la interrupción en baja. attachInterrupt (0, despertar, BAJO); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Deshabilitar la interrupción del pin externo en el pin de activación. detachInterrupt (0); // Haz algo aquí }
Modo ahorro de energía
Para entrar en el modo de ahorro de energía, necesitamos escribir el pin SM en '011'. Este modo de suspensión es similar al modo de apagado, solo con una excepción, es decir, si el temporizador / contador está habilitado, permanecerá en estado de funcionamiento incluso en el momento de la suspensión. El dispositivo se puede reactivar utilizando el desbordamiento del temporizador.
Si no está utilizando el tiempo / contador, se recomienda utilizar el modo de apagado en lugar del modo de ahorro de energía.
Modo de espera
El modo de espera es idéntico al modo de apagado, la única diferencia entre ellos es el oscilador externo que sigue funcionando en este modo. Para habilitar este modo, escriba el pin SM en '110'.
Modo de espera extendido
Este modo es similar al modo de ahorro de energía solo con una excepción de que el oscilador sigue funcionando. El dispositivo entrará en el modo de espera extendido cuando escribamos el pin SM en '111'. El dispositivo tardará seis ciclos en despertarse del modo de espera extendido.
A continuación se muestran los requisitos para este proyecto, después de conectar el circuito según el diagrama del circuito. Cargue el código del modo de suspensión en Arduino usando Arduino IDE. Arduino entrará en el modo inactivo de suspensión. Luego verifique el consumo de corriente en el amperímetro USB. De lo contrario, también puede usar una pinza amperimétrica para lo mismo.
Componentes requeridos
- Arduino UNO
- Sensor de temperatura y humedad DHT11
- Amperímetro USB
- Tablero de circuitos
- Conexión de cables
Para obtener más información sobre el uso de DHT11 con Arduino, siga el enlace. Aquí estamos usando un amperímetro USB para medir el voltaje consumido por Arduino en modo de suspensión.
Amperímetro USB
El amperímetro USB es un dispositivo plug and play que se utiliza para medir el voltaje y la corriente desde cualquier puerto USB. El dongle se conecta entre la fuente de alimentación USB (puerto USB de la computadora) y el dispositivo USB (Arduino). Este dispositivo tiene una resistencia de 0.05ohm en línea con el pin de alimentación a través del cual mide el valor de la corriente consumida. El dispositivo viene con cuatro pantallas de siete segmentos, que muestran instantáneamente los valores de corriente y voltaje consumidos por el dispositivo adjunto. Estos valores cambian en un intervalo de cada tres segundos.
Especificación:
- Rango de voltaje de funcionamiento: 3,5 V a 7 V
- Clasificación de corriente máxima: 3A
- Tamaño compacto, fácil de transportar.
- No se necesita suministro externo
Solicitud:
- Prueba de dispositivos USB
- Comprobación de los niveles de carga
- Depuración de cargadores de batería
- Fábricas, productos electrónicos y uso personal
Diagrama de circuito
En la configuración anterior para demostrar los modos de suspensión profunda de Arduino, el Arduino está conectado al amperímetro USB. Luego, el amperímetro USB se conecta al puerto USB de la computadora portátil. El pin de datos del sensor DHT11 está conectado al pin D2 del Arduino.
Explicación del código
El código completo del proyecto con un video se da al final.
El código comienza por incluir la biblioteca para el sensor DHT11 y la biblioteca LowPower . Para descargar la biblioteca de bajo consumo, siga el enlace. Luego, definimos el número de pin de Arduino al que está conectado el pin de datos del DHT11 y creamos un objeto DHT.
#incluir
En la función de configuración de vacío , hemos iniciado la comunicación en serie utilizando serial.begin (9600), aquí el 9600 es la velocidad en baudios. Estamos utilizando el LED incorporado de Arduino como indicador del modo de suspensión. Por lo tanto, hemos configurado el pin como salida y la escritura digital baja.
configuración vacía () { Serial.begin (9600); pinMode (LED_BUILTIN, SALIDA); digitalWrite (LED_BUILTIN, BAJO); }
En la función de bucle vacío , estamos haciendo que el LED incorporado sea ALTO y la lectura de los datos de temperatura y humedad del sensor. Aquí, DHT.read11 (); El comando está leyendo los datos del sensor. Una vez que se calculan los datos, podemos verificar los valores guardándolos en cualquier variable. Aquí, hemos tomado dos variables de tipo flotante 't' y 'h' . Por lo tanto, los datos de temperatura y humedad se imprimen en serie en el monitor en serie.
bucle vacío () { Serial.println ("Obtener datos de DHT11"); retraso (1000); escritura digital (LED_BUILTIN, ALTA); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.temperature; flotar h = DHT.humedad; Serial.print ("Temperatura ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Humedad ="); Serial.print (h); Serial.println ("%"); retraso (2000);
Antes de habilitar el modo de suspensión, estamos imprimiendo "Arduino: - Voy a tomar una siesta" y haciendo que el LED incorporado sea bajo. Después de eso, el modo de suspensión de Arduino se habilita mediante el comando que se menciona a continuación en el código.
El siguiente código habilita el modo inactivo de suspensión periódica del Arduino y da una suspensión de ocho segundos. Convierte el ADC, temporizadores, SPI, USART, interfaz de 2 cables en la condición de APAGADO.
Luego, automáticamente despierta a Arduino de la suspensión después de 8 segundos e imprime "Arduino: - Hey, acabo de despertar".
Serial.println ("Arduino: - Voy a tomar una siesta"); retraso (1000); digitalWrite (LED_BUILTIN, BAJO); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino: - Oye, acabo de despertar"); Serial.println (""); retraso (2000); }
Entonces, al usar este código, Arduino solo se activará durante 24 segundos en un minuto y permanecerá en modo de suspensión por el resto de los 36 segundos, lo que reduce significativamente la energía consumida por la estación meteorológica Arduino.
Por lo tanto, si usamos el Arduino con el modo de suspensión, podemos aproximadamente duplicar el tiempo de ejecución del dispositivo.