El consumo de energía es un problema crítico para un dispositivo que se ejecuta continuamente durante mucho tiempo sin estar apagado. Por lo tanto, 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.
Componentes requeridos
- Arduino UNO
- Sensor de temperatura y humedad DHT11
- Amperímetro USB
- Tablero de circuitos
- Cables de conexión
Modos de sueño 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 Brown-out (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, debemos 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 inactivo seleccionan el modo inactivo entre Inactivo, reducción de ruido ADC, Apagado, Ahorro de energía, En espera y En espera externo.
Un Arduino interno o externo interrumpe o un Reset puede despertar al Arduino del modo de suspensión.
Modo inactivo
Para ingresar al modo de reposo inactivo, escriba los bits SM [2,0] del controlador ‘000’. Este modo detiene la CPU, pero permite que funcione el SPI, interfaz serial de 2 hilos, USART, Watchdog, contadores, comparador analógico. El modo inactivo básicamente detiene la CPU CLK y CLK FLASH . Arduino se puede activar en cualquier momento mediante interrupción externa o interna.
Código Arduino para el modo de reposo inactivo:
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 baja potencia en arduino. Así que 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 se dormirá durante ocho segundos y se despertará automáticamente. Como puede ver en el código, el modo inactivo desactiva todos los temporizadores, SPI, USART y TWI (interfaz de 2 hilos).
Modo de reducción de ruido ADC
Para usar este modo de suspensión, escriba el bit SM [2,0] en ‘001’. El modo detiene la CPU pero permite que funcionen el ADC, la interrupción externa, el USART, la interfaz serial de 2 hilos, el Watchdog y los contadores. El modo de reducción de ruido ADC básicamente detiene la CPU CLK, CLK I / O y CLK FLASH . Podemos activar el controlador desde el modo de reducción de ruido ADC mediante los siguientes métodos:
- Restablecimiento externo
- Restablecimiento del sistema de vigilancia
- Interrupción de vigilancia
- Restablecimiento de oscurecimiento
- Coincidencia de dirección de interfaz serie de 2 hilos
- Interrupción de nivel externo en INT
- Interrupción de cambio de pin
- Temporizador / Contador de interrupción
- Interrupción preparada SPM / EEPROM
Modo de apagado
El modo de apagado detiene todos los relojes generados y permite solo la operación de módulos asíncronos. Se puede habilitar escribiendo los bits SM [2,0] en ‘010’. En este modo, el oscilador externo se apaga, pero la interfaz serial de 2 hilos, el watchdog y la interrupción externa continúan funcionando. Se puede deshabilitar solo con uno de los siguientes métodos:
- Restablecimiento externo
- Restablecimiento del sistema de vigilancia
- Interrupción de vigilancia
- Restablecimiento de oscurecimiento
- Coincidencia de dirección de interfaz serie de 2 hilos
- 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 usa para activar el modo de apagado. Al usar el código anterior, el Arduino se dormirá durante ocho segundos y se despertará automáticamente.
También podemos usar el modo de apagado con una interrupción, donde el Arduino se irá a dormir, pero solo se activa cuando se proporciona 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, wakeUp, LOW);
LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF);
// Deshabilita la interrupción del pin externo en el pin de activación.
detachInterrupt (0);
// Haz algo aquí
}
Modo ahorro de energía
Para ingresar al modo de ahorro de energía, necesitamos escribir el pin SM [2,0] 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 ejecución incluso en el momento de la suspensión. El dispositivo se puede activar 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 que el oscilador externo se mantiene en funcionamiento en este modo. Para habilitar este modo, escriba el pin SM [2,0] 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 [2,0] en ‘111’. El dispositivo tomará seis ciclos de reloj para despertarse del modo de espera extendido.
A continuación se detallan 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 un medidor de pinza para el mismo.
Amperímetro USB
El amperímetro USB es un dispositivo plug and play que se usa para medir el voltaje y la corriente de cualquier puerto USB. El dispositivo de seguridad 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 conectado. Estos valores cambian en un intervalo de cada tres segundos.
Especificación:
- Rango de voltaje de funcionamiento: 3.5V a 7V
- Corriente nominal máxima: 3A
- Tamaño compacto, fácil de transportar.
- No se necesita suministro externo
Solicitud:
- Prueba de dispositivos USB
- Comprobación de niveles de carga
- Depuración de cargadores de batería
- Fábricas, productos electrónicos y uso personal.
Explicación del código
#include <dht.h>
#include <LowPower.h>
#define dataPin 2 dht
DHT;
En la función de configuración nula , 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. Entonces, hemos configurado el pin como salida y la escritura digital baja.
configuración nula () {
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 leyendo 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.
void loop () {
Serial.println ("Obtener datos de DHT11");
retraso (1000);
digitalWrite (LED_BUILTIN, ALTO);
int readData = DHT.read11 (dataPin); // DHT11
flotante t = temperatura DHT;
flotante 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, imprimimos «Arduino: – Voy a tomar una siesta» y hacemos que el LED incorporado sea bajo. Después de eso, el modo de suspensión de Arduino se habilita mediante el comando mencionado a continuación en el código.
El siguiente código habilita el modo inactivo de suspensión periódica del Arduino y proporciona una suspensión de ocho segundos. Convierte el ADC, Timers, SPI, USART, interfaz de 2 hilos en la condición OFF.
Luego, automáticamente despierta a Arduino del sueño después de 8 segundos e imprime «Arduino: – Hola, 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: - Hola, acabo de despertar");
Serial.println ("");
retraso (2000);
}
Entonces, al usar este código, Arduino solo se despertará durante 24 segundos en un minuto y permanecerá en modo de reposo durante el resto de los 36 segundos , lo que reduce significativamente la energía consumida por la estación meteorológica Arduino.
-
Arduino ATmega 2560 R3¡Oferta!
$20.50$19.00 -
Arduino Uno Wifi¡Oferta!
$15.00$13.00 -
Arduino Mini USB Nano V3.0 CH340 Chip Board 5V 16M + Cable¡Oferta!
$9.00$8.50