- Arduino Sleep Modes
- Componentes necessários
- Amperímetro USB
- Diagrama de circuito
- Explicação do código
O consumo de energia é um problema crítico para um dispositivo funcionando continuamente por um longo tempo sem ser desligado. Portanto, para superar esse problema, quase todo controlador vem com um modo de espera, que ajuda os desenvolvedores a projetar dispositivos eletrônicos para um consumo de energia ideal. O modo de suspensão coloca o dispositivo no modo de economia de energia, desligando o módulo não utilizado.
Anteriormente, explicamos o modo de suspensão profunda no ESP8266 para economia de energia. Hoje vamos aprender sobre os modos de dormir do Arduino e demonstrar o consumo de energia usando o amperímetro. Um modo Arduino Sleep também é conhecido como modo Arduino Power Save ou Arduino Standby Mode.
Arduino Sleep Modes
Os modos de repouso permitem que o usuário pare ou desligue os módulos não utilizados no microcontrolador, o que reduz significativamente o consumo de energia. O Arduino UNO, o Arduino Nano e o Pro-mini vêm com ATmega328P e possui um Detector Brown-out (BOD) que monitora a tensão de alimentação no momento do modo sleep.
Existem seis modos de espera no ATmega328P:
Para entrar em qualquer um dos modos de hibernação, precisamos habilitar o bit de hibernação no Registro de controle do modo de hibernação (SMCR.SE). Em seguida, os bits de seleção do modo de suspensão selecionam o modo de suspensão entre Ocioso, redução de ruído ADC, Desligamento, Economia de energia, Espera e Espera externa.
Uma interrupção interna ou externa do Arduino ou uma reinicialização podem despertar o Arduino do modo de hibernação.
Modo Inativo
Para entrar no modo de espera inativo, escreva os bits SM do controlador '000'. Este modo pára a CPU, mas permite que o SPI, interface serial de 2 fios, USART, Watchdog, contadores e comparador analógico funcionem. O modo inativo basicamente para o CLK CPU e CLK FLASH. O Arduino pode ser ativado a qualquer momento usando uma interrupção externa ou interna.
Código Arduino para modo de suspensão inativa:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
Existe uma biblioteca para definir vários modos de baixo consumo de energia no arduino. Portanto, primeiro baixe e instale a biblioteca do link fornecido e use o código acima para colocar o Arduino no modo de espera inativo. Usando o código acima, o Arduino entrará em hibernação por oito segundos e será ativado automaticamente. Como você pode ver no código, o modo inativo desativa todos os temporizadores, SPI, USART e TWI (interface de 2 fios).
Modo de redução de ruído ADC
Para usar este modo de hibernação, escreva o bit SM em '001'. O modo para a CPU, mas permite que o ADC, interrupção externa, USART, interface serial de 2 fios, Watchdog e contadores operem. O modo de redução de ruído ADC basicamente pára o CLK CPU, CLK I / O e CLK FLASH. Podemos acordar o controlador do modo de redução de ruído ADC pelos seguintes métodos:
- Reinicialização externa
- Reinicialização do sistema de watchdog
- Interrupção do Watchdog
- Redefinição de Brown-out
- Correspondência de endereço de interface serial de 2 fios
- Interrupção de nível externo em INT
- Interrupção de mudança de pino
- Interrupção do temporizador / contador
- SPM / EEPROM pronto para interrupção
Modo de desligamento
O modo Power-Down para todos os relógios gerados e permite apenas a operação de módulos assíncronos. Ele pode ser habilitado escrevendo os bits SM em '010'. Neste modo, o oscilador externo é desligado, mas a interface serial de 2 fios, watchdog e interrupção externa continuam a operar. Ele pode ser desativado por apenas um dos métodos abaixo:
- Reinicialização externa
- Reinicialização do sistema de watchdog
- Interrupção do Watchdog
- Redefinição de Brown-out
- Correspondência de endereço de interface serial de 2 fios
- Interrupção de nível externo em INT
- Interrupção de mudança de pino
Código Arduino para modo periódico de desligamento:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
O código é usado para ligar o modo de desligamento. Usando o código acima, o Arduino entrará em hibernação por oito segundos e será ativado automaticamente.
Também podemos usar o modo de desligamento com uma interrupção, onde o Arduino entrará em hibernação, mas só será ativado quando uma interrupção externa ou interna for fornecida.
Código Arduino para modo de interrupção de desligamento:
void loop () { // Permitir que o pino de ativação acione a interrupção em baixa. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // Desativa a interrupção do pino externo no pino de ativação. detachInterrupt (0); // Faça algo aqui }
Modo de economia de energia
Para entrar no modo de economia de energia, precisamos escrever o pino SM em '011'. Este modo de hibernação é semelhante ao modo de desligamento, apenas com uma exceção, ou seja, se o cronômetro / contador estiver habilitado, ele permanecerá em funcionamento mesmo durante o hibernação. O dispositivo pode ser ativado usando o estouro do temporizador.
Se você não estiver usando o tempo / contador, é recomendável usar o modo de desligamento em vez do modo de economia de energia.
Modo de espera
O modo standby é idêntico ao modo Power-Down, a única diferença entre eles é o oscilador externo mantido funcionando neste modo. Para ativar este modo, escreva o pino SM em '110'.
Modo de espera estendido
Este modo é semelhante ao modo de economia de energia apenas com uma exceção de que o oscilador continua funcionando. O dispositivo entrará no modo Extended Standby quando escrevermos o pino SM em '111'. O dispositivo levará seis ciclos de clock para sair do modo de espera estendido.
Abaixo estão os requisitos para este projeto, após conectar o circuito conforme o diagrama do circuito. Faça upload do código do modo de suspensão para o Arduino usando o IDE do Arduino. O Arduino entrará no modo de suspensão inativo. Em seguida, verifique o consumo de corrente no amperímetro USB. Caso contrário, você também pode usar um alicate amperímetro para o mesmo.
Componentes necessários
- Arduino UNO
- Sensor de Temperatura e Umidade DHT11
- Amperímetro USB
- Tábua de pão
- Fios de conexão
Para saber mais sobre como usar DHT11 com Arduino, siga o link. Aqui estamos usando um amperímetro USB para medir a tensão consumida pelo Arduino no modo de hibernação.
Amperímetro USB
O amperímetro USB é um dispositivo plug and play usado para medir a tensão e a corrente de qualquer porta USB. O dongle é conectado entre a fonte de alimentação USB (porta USB do computador) e o dispositivo USB (Arduino). Este dispositivo possui um resistor de 0,05 ohm em linha com o pino de alimentação através do qual ele mede o valor da corrente consumida. O dispositivo vem com quatro telas de sete segmentos, que exibem instantaneamente os valores de corrente e tensão consumidos pelo dispositivo conectado. Esses valores mudam em um intervalo de três segundos.
Especificação:
- Faixa de tensão de operação: 3,5 V a 7 V
- Avaliação máxima de corrente: 3A
- Tamanho compacto, fácil de transportar
- Nenhuma fonte externa necessária
Inscrição:
- Testando dispositivos USB
- Verificando os níveis de carga
- Depuração de carregadores de bateria
- Fábricas, produtos eletrônicos e uso pessoal
Diagrama de circuito
Na configuração acima, para demonstrar os modos de sono profundo do Arduino, o Arduino é conectado ao amperímetro USB. Em seguida, o amperímetro USB é conectado à porta USB do laptop. O pino de dados do sensor DHT11 é conectado ao pino D2 do Arduino.
Explicação do código
O código completo do projeto com um vídeo é fornecido no final.
O código começa incluindo a biblioteca para o sensor DHT11 e a biblioteca LowPower . Para fazer o download da biblioteca Low Power siga o link. Em seguida, definimos o número do pino do Arduino ao qual o pino de dados do DHT11 está conectado e criamos um objeto DHT.
#incluir
Na função de configuração de void , iniciamos a comunicação serial usando serial.begin (9600), aqui o 9600 é a taxa de transmissão. Estamos usando o LED integrado do Arduino como um indicador do modo de espera. Portanto, definimos o pino como saída e a gravação digital baixa.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
Na função void loop , estamos tornando o LED integrado HIGH e lendo os dados de temperatura e umidade do sensor. Aqui, DHT.read11 (); comando está lendo os dados do sensor. Depois que os dados são calculados, podemos verificar os valores salvando-os em qualquer variável. Aqui, pegamos duas variáveis do tipo float 't' e 'h' . Portanto, os dados de temperatura e umidade são impressos em série no monitor serial.
void loop () { Serial.println ("Obter dados de DHT11"); atraso (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT.temperature; flutuante h = DHT.umidade; Serial.print ("Temperatura ="); Serial.print (t); Serial.print ("C -"); Serial.print ("Umidade ="); Serial.print (h); Serial.println ("%"); atraso (2000);
Antes de habilitar o modo de hibernação, estamos imprimindo "Arduino: - Vou tirar uma soneca" e tornando o LED embutido baixo. Depois disso, o modo de suspensão do Arduino é ativado usando o comando mencionado abaixo no código.
O código abaixo ativa o modo de hibernação periódica ociosa do Arduino e oferece um hibernação de oito segundos. Ele transforma ADC, Timers, SPI, USART, interface de 2 fios na condição OFF.
Em seguida, ele automaticamente desperta o Arduino do sono após 8 segundos e imprime “Arduino: - Ei, acabei de acordar”.
Serial.println ("Arduino: - Vou tirar uma soneca"); atraso (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: - Ei, acabei de acordar"); Serial.println (""); atraso (2000); }
Portanto, ao usar esse código, o Arduino será ativado por apenas 24 segundos em um minuto e permanecerá no modo de hibernação pelo restante dos 36 segundos, o que reduz significativamente a energia consumida pela estação meteorológica do Arduino.
Portanto, se usarmos o Arduino com o modo de suspensão, podemos aproximadamente dobrar o tempo de execução do dispositivo.