Skip to Content

¿Cómo despierto mi Arduino del modo de reposo?

¿Cómo despierto mi Arduino del modo de reposo?

Hay varias formas de poner a dormir un Arduino. Saber cómo despertar el Arduino le permite programar proyectos de gran eficiencia energética y facilidad de uso.

Este tutorial le mostrará varias formas de poner a Arduino en reposo y cómo despertar el Arduino una vez que se pone en modo de reposo

Verás las distintas fuentes de eventos de activación, cómo configurar los eventos de activación y cuáles son las diferencias entre ellos.

Knowing wakeup sources can come a long way in creating power-efficient projects. This enables you to develop projects which can be responsive yet battery friendly.

Comencemos.

Overview

Componentes necesarios para poner el Arduino en modo de reposo

Componentes de hardware 

Software

Makerguides.com is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to products on Amazon.com. As an Amazon Associate we earn from qualifying purchases.

¿Qué son los modos de sueño?

Puedes usar los modos de reposo para poner el Arduino en modos de bajo consumo, donde sólo los bloques esenciales del MCU estarán activos mientras el resto de los periféricos están apagados.

La aplicación práctica de los modos de bajo consumo le ayuda a ahorrar en el consumo de corriente. 

Una vez que reduzcas el consumo de energía, podrás usar baterías más pequeñas, o las baterías vendrán por mucho tiempo.

De cualquier forma, se ahorra en costes y se reduce el tamaño del producto.

Hay seis modos de suspensión diferentes (modos de bajo consumo). Son los siguientes

  1. Modo de reposo
  2. Modo de reducción de ruido del ADC
  3. Modo de apagado
  4. Modo de ahorro de energía
  5. Modo de espera
  6. Modo de espera ampliado

En las próximas secciones te daré una visión crítica de los modos de bajo consumo, que te ayudará a tomar la decisión correcta sobre los modos de suspensión y a obtener el máximo jugo de tus baterías.

Puntos clave sobre los modos de bajo consumo en Arduino

En esta sección se compartirán los puntos clave sobre todos los modos de suspensión. Después de los puntos clave están los métodos de despertar disponibles para cada modo de bajo consumo. 

Tenga en cuenta que no todos los modos están disponibles en todas las MCU. Puede consultar la hoja de datos de la MCU para ver los métodos presentes en la MCU concreta.

Los detalles estarán en los capítulos de gestión de energía y modos de suspensión.

Para poner el Arduino en uno de los modos de energía, puede utilizar SM[2:0] en el registro SMCR (control del modo de reposo).

Arduino en uno de los modos de alimentación

¿Cómo despertar a Arduino del modo inactivo?

1) Puntos clave del modo inactivo

  • CPUCLK y FLASHCLK se detendrán
  • Otros relojes (ADC, UART, etc.) estarán funcionando
  • Si el ADC está habilitado, se inicia una conversión automáticamente después de entrar en el modo de reposo
  • Puedes desactivar el ADC manualmente para reducir aún más el consumo de energía
  • SM[2:0] = 000

2) Fuentes de activación cuando Arduino está en modo inactivo

  • Interrupciones de disparo externo
  • Interrupciones internas como desbordamiento del temporizador, transmisión UART completa, etc.
  • Comparador analógico

¿Cómo despertar a Arduino del modo de reducción de ruido ADC?

1) Modo de reducción de ruido ADC Puntos clave

  • CPUCLK, I/OCLK , y FLASHCLK se detendrán
  • Ayuda a reducir el ruido en la sección ADC
  • Puede obtener una mejor resolución del ADC gracias a la reducción del ruido
  • SM[2:0] = 001

2) Fuentes de activación cuando Arduino está en modo de reducción de ruido ADC

  • Evento de conversión ADC completa
  • Reinicio externo
  • Reinicio del sistema de vigilancia
  • Interrupción del perro guardián
  • Restablecimiento de la caída de tensión
  • Coincidencia de dirección de 2 hilos
  • Interrupción por cambio de pin
  • Interrupción de nivel externo (INT0 / INT1)

¿Cómo despertar a Arduino del modo de apagado?

1) Puntos clave del modo de apagado

  • La MCU entra en modo de apagado
  • El oscilador externo está parado
  • Detiene todos los relojes generados
  • Habrá un retraso entre el evento de activación y la reanudación del modo normal (para permitir que el reloj se asiente)
  • SM[2:0] = 010

2) Fuentes de activación cuando Arduino está en modo de apagado

  • Reinicio externo
  • Reinicio del sistema Watchdog
  • Interrupción del perro guardián
  • Restablecimiento de la caída de tensión
  • Interrupción por cambio de pin
  • Interrupción de nivel externo (INT0 / INT1)

¿Cómo despertar a Arduino del modo de ahorro de energía?

1) Puntos clave del modo de ahorro de energía

  • Todas las características son comunes al modo de apagado, excepto que el temporizador/contador2 está habilitado; seguirá funcionando.
  • Si no se utiliza la función de temporizador, utilice el propio modo de apagado 
  • SM[2:0] = 011

2) Fuentes de activación cuando Arduino está en modo de ahorro de energía

  • Igual que el modo de apagado
  • Timer/counter2 overflow interrupt /compare output interrupt

¿Cómo despertar a Arduino del modo de espera?

1) Standby Mode Key Points

  • El modo de espera es el mismo que el modo de apagado, excepto que el oscilador externo estará funcionando
  • El tiempo de activación será menor (6 ciclos de reloj) 
  • SM[2:0] = 110

2) Fuentes de activación cuando Arduino está en modo de espera

  • Similar to Power-down mode

La siguiente sección le ofrece el procedimiento paso a paso para instalar la biblioteca de bajo consumo de Arduino.

Usando la librería "LowPower", puedes poner rápidamente a Arduino en reposo después de configurar las opciones de despertar en consecuencia.

Procedimiento paso a paso para instalar la librería Arduino de bajo consumo

Puedes instalar la librería LowPower en Arduino siguiendo los siguientes pasos.

El sketch de Arduino permite añadir fácilmente la biblioteca descargada.

Te mostraré cómo añadir las librerías en el Arduino.

Descargar la biblioteca de bajo consumo

La biblioteca de bajo consumo está en GitHub, siga los sencillos pasos que se indican a continuación para descargar el archivo zip
Visite el enlace de GitHub.

Encontrará la opción de descargar el archivo zip bajo el botón Código.

La imagen que aparece a continuación le permite localizar fácilmente la opción de descarga del zip.

Descargar la biblioteca de bajo consumo

Instalar la Biblioteca de baja potencia

1) Abre la aplicación Arduino y haz clic en la opción Sketch de la barra de menús

Instalar la Biblioteca de baja potencia

2) Seleccione la opción (para instalar la biblioteca como un archivo zip) siguiendo los pasos que se muestran en la siguiente imagen

Seleccione la opción

3) Busque el archivo de descarga y selecciónelo

Busque el archivo de descarga y selecciónelo

Enhorabuena, ahora has instalado con éxito la librería de bajo consumo. En el siguiente paso, le mostraré cómo añadir la biblioteca a su proyecto.

4) Añade la biblioteca a tu proyecto

Para añadir la biblioteca al proyecto, vaya a Sketch → Incluir biblioteca → Bajo consumo (en la sección de bibliotecas contribuidas)

Añade la biblioteca a tu proyecto

5) Comprobar que la biblioteca está añadida

 Si la adición es exitosa, puede ver la siguiente línea en su código.

#include "LowPower.h"

En la siguiente imagen, puede ver que la biblioteca está "incluida" en el código. 

Ahora está listo para usar la biblioteca.

la biblioteca está "incluida" en el código

En las siguientes secciones le mostraré cómo configurar varias fuentes de despertar.

Proyecto de ejemplo 1 - Despertar del modo de apagado

En este proyecto, el Arduino entrará en reposo durante 2 segundos. Esto le permite probar dos cosas. En primer lugar, el temporizador de sueño de 2 segundos. En segundo lugar, usted puede medir la corriente de sueño también. 

En este proyecto, parpadeará el LED de la placa del Arduino UNO cada 2 segundos. El LED está conectado al PIN 13 del Arduino.

La forma convencional de hacer parpadear el LED es encenderlo, seguido de 2 segundos de retardo, luego apagar el LED, y finalmente 2 segundos de retardo más. 

Este método convencional desperdicia energía en la función de retardo.

En este proyecto, pondrás el Arduino en reposo durante 2 segundos.

De este modo, se ahorra considerablemente la vida de la batería.  

Código Arduino

#include "LowPower.h"
 
void setup()
{
  pinMode(13,OUTPUT);
}
 
void loop()
{
  digitalWrite(13,HIGH);
  delay(2000);
  digitalWrite(13,LOW);
  LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
}

¿Cómo se ahorra la vida de la batería?

He aquí cómo. La corriente activa de la MCU ATMEGA328P presente en el Arduino UNO es de unos 14 mA a 5 V y 16 MHz. La corriente de reposo es de unos 6 uA.

Dado que en nuestro código utilizamos el modo de reposo el 50 % del tiempo, el consumo medio de corriente es de unos 7 mA. 

Si no has utilizado el modo de reposo, el consumo de corriente de la MCU será siempre de 14 mA.

Si ves, hay una reducción de aproximadamente el 50% de la corriente media en el modo de baja potencia.

Por lo tanto, la duración de la batería es casi el doble.

Examinemos la función de cerca.

  LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);

En esta función, enviamos el primer parámetro como el tiempo. En este ejemplo, el parámetro se establece en 2 segundos. La CC se apaga.

Esto ayudará a reducir aún más la potencia, como hemos visto en la sección anterior. 

En este caso, el Arduino será despertado por la interrupción del temporizador internamente.

El despertar con la función Timer es una forma valiosa de planificar el evento de despertar en su proyecto. 

Using the timer function is a synchronous wake-up event since you plan when to wake up the Arduino before you put it to sleep.

Example Project 2 – Waking Up From Power-down Mode

En este proyecto de ejemplo, le mostraré cómo despertar a Arduino desde el sueño usando un evento de despertar externo. 

A diferencia del ejemplo anterior, este es un evento asíncrono. No sabemos cuándo se producirá el evento.

Cuando se produzca el evento, realizará un trabajo determinado y volverá a poner el Arduino en reposo.

Código Arduino

#include "LowPower.h"
 
// Use pin 2 as wake up pin
const int wakeUpPin = 2;
 
void wakeUp()
{
    // Just a handler for the pin interrupt.
}
 
void setup()
{
    // Configure wake up pin as input.
    // This will consumes few uA of current.
    pinMode(wakeUpPin, INPUT);  
}
 
void loop()
{
    // Allow wake up pin to trigger interrupt on low.
    attachInterrupt(0, wakeUp, LOW);
   
    // Enter power down state with ADC and BOD module disabled.
    // Wake up when wake up pin is low.
    LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
   
    // Disable external pin interrupt on wake up pin.
    detachInterrupt(0);
   
    // Do something here
    // Example: Read sensor, data logging, data transmission.
}

En este ejemplo, la línea de abajo.

   LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);

Se pone el Arduino en reposo para siempre. Significa que, a menos que haya un evento externo, no despertamos al Arduino.

Esto es útil cuando se quiere realizar una acción sólo cuando hay un evento externo deseado.

Esto es muy útil para usted en proyectos como

  • un módulo RTC temporizado que dará una interrupción al Arduino. Arduino puede entonces, hacer algunas tareas predefinidas (ejemplo: enviar los datos de temperatura, o medir la humedad en el suelo)
  • Encender el potente ordenador Pi cuando se detecta un movimiento mediante el sensor de movimiento

La parte del código que se muestra a continuación no tiene otro propósito que el de ser un marcador de posición.

Si quieres, puedes ejecutar algunas instrucciones en la función.

void wakeUp()
{
    // Sólo un manejador para la interrupción del pin.
}

La siguiente instrucción desactiva la interrupción para que el Arduino no llame a la función wakeUp() continuamente.

Una vez realizadas las tareas planificadas, se vuelve a activar la interrupción externa en la función de bucle.

  // Disable external pin interrupt on wake up pin.
    detachInterrupt(0);

Puede encontrar más proyectos en la sección de ejemplos de la biblioteca. Puede encontrarlos aquí.

encuentre más proyectos en la sección de ejemplos de la biblioteca

Preguntas frecuentes sobre cómo despertar a Arduino del modo de reposo

Estas son las preguntas más frecuentes sobre los modos de reposo y los métodos de despertar de un Arduino

¿Cuáles son los posibles pines que se pueden utilizar para activar los eventos externos de despertar con Arduino?

Para la opción de interrupción externa, el Arduino UNO soporta eventos de activación en dos pines.

Son el PIN 2 y el PIN 3

Son el PIN 2 y el PIN 3

¿Qué modo de alimentación consume menos energía con Arduino?

El modo de apagado es el que menos energía consume, es decir, el que proporciona la máxima duración de la batería.

Hay algunos efectos secundarios, como una mayor lentitud en el despertar, ya que el reloj tardará un tiempo en estabilizarse.

Qué modo de alimentación consume menos energía con Arduino

En la imagen de arriba, se puede ver que, a temperatura ambiente, el consumo de energía está muy cerca de 1 uA o menos.

Conclusión

En este artículo, hemos aprendido varias formas de despertar a Arduino del sueño. He dado un par de plantillas de ejemplo que puedes utilizar para tus futuros proyectos. 

Será una gran experiencia saber en qué proyectos estáis trabajando y cómo vais a utilizar los modos de suspensión. Puedes hacérmelo saber en la sección de comentarios. 

Estoy seguro de que puedes construir tu próximo proyecto de Arduino que implique modos de sueño y despertar de la manera que necesites.

Si tienes alguna duda o pregunta, siempre puedes ponerte en contacto conmigo a través de la sección de comentarios más abajo.

¿Qué le gustaría leer a continuación?

¿Tiene alguna sugerencia sobre los temas sobre los que debería escribir más?

Por favor, hágamelo saber.

saad

Sunday 29th of January 2023

thank you very much

Frans

Wednesday 11th of January 2023

Hello, Interesting article. I want to put Arduino in Power Down. I want to wake it up by a switch which goes open. When the switch is closed the Arduino must go Power Down. Can you help me with the code so I can try this? I’m a beginner. Thanks, Frans