Reducir el consumo de energía del sensor Lora

Reducir el consumo de energía del sensor Lora

noviembre 06, 2020

Cómo reducir-lora-comunicación-poder-consumo
En este proyecto, aprenderemos cómo reducir el consumo de energía del sensor Lora, nuestro objetivo era hacer que el sensor de humedad del suelo Lora pueda operarse a largo plazo.


La última vez, compartí el funcionamiento básico delSensor de suelo de comunicación Lorade Makerfabs y confirmó que la distancia de transmisión es de 300 metros o más. Mira mi post anterior aquí:Comience con el sensor de humedad del suelo Lora.

Este sensor de suelo puede funcionar con dos baterías AAA.
Lora-Suelo-Humedad-Sensor-Makerfabs

Aquí, estamos tratando de reducir el consumo de energía del sensor de humedad del suelo Lora observando el consumo de diferentes modos, con el objetivo de la operación a largo plazo del sensor Lora.

1. Corriente de reserva

Medimos la corriente de la fuente de alimentación de reserva cuando no se comunicaba.

El voltaje de la fuente de alimentación fue3.3V.

(1)Incumplimiento

Esta es la corriente de espera cuando el código de ejemploLoraTransmitterADCAHT10.inoestá escrito como está.
16,5 mA

(2) Apagado del sensor

Anular el comentario L. 149 del código de ejemploLoraTransmitterADCAHT10.inoy apague el sensor de temperatura / humedad Lora AHT10 después de la medición.
15,5 mA
 
La corriente tienecayó ligeramente.

(3) Suspensión del microcontrolador

Además, el microcontrolador del sensor ATmega328P se puso en reposo durante el modo de espera. Usé una biblioteca que controla el sueño con Adafruit's Sleepdog://github.com/adafruit/Adafruit_SleepyDog
11,2 mA

(4) Restablecimiento del módulo Lora

Además, reinicié el módulo Lora y lo apagué antes de que el microcontrolador duerma.
0,1 mA o menos

Como resultado, la corriente de espera se puede reducir significativamente.

2. Consumo de energía por comunicación

Potencia de transmisión 23dBm:Aproximadamente 12,0 μW

Potencia de transmisión 5dBm:Aproximadamente 1,2 μW

El consumo de comunicación fue muy pequeño. ¡Como era de esperar!

Puede esperar un menor consumo de energía al reducir la potencia de transmisión o limitar el número de comunicaciones de acuerdo con la distancia de transmisión (naturalmente).

3. Consumo de energía

Medí el consumo de energía durante 1 minuto.

Lo configuré para enviar valores de sensor cada 9 segundos.

1) Incumplimiento

Cuando el código de ejemploLoraTransmitterADCAHT10.inoestá escrito tal como está
1,1 mW de consumo por minuto

(4) Restablecimiento del módulo Lora

Se agregó sensor OFF, suspensión del microcontrolador y restablecimiento del módulo Lora al código de muestra.
Consume 0,3 mW por minuto

Hemos logrado reducir el consumo de energía en menos de1/3!

4. Código Arduino (4) Restablecimiento del módulo Lora

Aquí está el código de Arduino para la versión de bajo consumo de energía.

Basado en código de ejemploLoraTransmitterADCAHT10.ino
Introdujo y codificó la biblioteca de perros dormidos de Adafruit://github.com/adafruit/Adafruit_SleepyDog
#include 
#include "RH_RF95.h"
#include 
 
#include "I2C_AHT10.h"
#include 
AHT10 humedadSensor;
 
int sensorPin = A2;    Seleccione el pin de entrada para el potenciómetro
int sensorValue = 0;  variable para almacenar el valor procedente del sensor
int sensorPowerCtrlPin = 5;
 
void sensorPowerOn(void){
  digitalWrite(sensorPowerCtrlPin, HIGH);//Encendido del sensor
}
 
void sensorPowerOff(void){
  digitalWrite(sensorPowerCtrlPin, LOW);//Encendido del sensor
}
 
#define RFM95_CS 10
#define RFM95_RST 4
#define RFM95_INT 2
 
Cambie a 434.0 u otra frecuencia, ¡debe coincidir con el freq de RX!
#define RF95_FREQ 915.0
 
Instancia única del controlador de radio
RH_RF95 rf95(RFM95_CS, RFM95_INT);
 
void setup() {
  pinMode(RFM95_RST, SALIDA);
  digitalWrite(RFM95_RST, LOW);
  retraso(100);
  digitalWrite(RFM95_RST, ALTA);
 
pinMode(sensorPowerCtrlPin, OUTPUT);
  sensorPowerOn();
  
mientras que (! Serie);
  Serial.begin(115200);
  retraso(100);
 
Wire.begin(); Únete al autobús I2C
  Compruebe si el AHT10 reconocerá
  if (humiditySensor.begin() == false){
    Serial.println("AHT10 no detectado. Por favor, compruebe el cableado. Congelación.");
    mientras que (1);
  }
  más
    Serial.println("AHT10 reconocido.");
    
Serial.println("Marduino LoRa TX Test!");
 
}
 
int16_t packetnum = 0;  contador de paquetes, incrementamos por xmission
temperatura de flotación = 0.0;//
humedad flotante = 0.0;
 
void loop(){
  setModule();
  
sensorPowerOn();
  retraso(100);
  sensorValue = analogRead(sensorPin);
  retraso(200);
 
if (humiditySensor.available() == true){
    Obtenga el nuevo valor de temperatura y humedad
    temperatura = humedadSensor.getTemperature();
    humedad = humedadSensor.getHumidity();
 
Imprimir los resultados
    Serial.print("Temperatura: ");
    Serial.print (temperatura, 2);
    Serial.print(" C\t");
    Serial.print("Humedad: ");
    Serial.print (humedad, 2);
    Serial.println("% HR");
 
Sensor apagado
    sensorPowerOff();
 
Serial.print(F("ADC de humedad : "));
    Serial.println(sensorValue);
  
Serial.print(F("Humedad: "));
    Serial.print (humedad);
    Serial.print(F("% Temperatura: "));
    Serial.print (temperatura);
    Serial.println("La humedad es " + (cadena)humedad);
    Serial.println("La temperatura es " + (cadena)temperatura);
  
String message = "#"+(String)packetnum+" Humedad:"+(String)humidity+"% Temperature:"+(String)temperature+"C"+" ADC:"+(String)sensorValue;
    Serial.println(mensaje);
    packetnum++;
    Serial.println("Transmitir: Enviar a rf95_server");
    
Enviar un mensaje a rf95_server
  
uint8_t radioPacket[message.length()+1];
    message.toCharArray(radioPacket, message.length()+1);
    
radioPacket[message.length()+1]= '\0';
  
Serial.println("Enviando..."); retraso(10);
    rf95.send((uint8_t *)radioPacket, message.length()+1);
    Serial.println("Esperando a que se complete el paquete..."); retraso(10);
    rf95.waitPacketSent();
    Ahora espera una respuesta
    uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
  
Serial.println("Esperando respuesta..."); retraso(10);
    if(rf95.waitAvailableTimeout(8000)){
      Debería ser un mensaje de respuesta para nosotros ahora  
      if (rf95.recv(buf, &len)){
        Serial.print("Got reply: ");
        Serial.println((char*)buf);
        Serial.print("RSSI: ");
        Serial.println(rf95.lastRssi(), DEC);  
      }
      else{
        Serial.println("Error de recepción");
      }
    }
    else{
      Serial.println("Sin respuesta, ¿hay un oyente alrededor?");
    }
 
Serial.print("¡¡Duerme!!");
        
Restablecimiento del módulo Lora
    digitalWrite(RFM95_RST, LOW);
    retraso(10);
    digitalWrite(RFM95_RST, ALTA);
    retraso(10);
      
8 segundos de sueño
    int sleepMS = Watchdog.sleep();
  }
}
 
void setModule(void){
  Restablecimiento manual
  digitalWrite(RFM95_RST, LOW);
  retraso(10);
  digitalWrite(RFM95_RST, ALTA);
  retraso(10);
 
while(!rf95.init()) {
    Serial.println("LoRa radio init failed");
    mientras que (1);
  }
  Serial.println("LoRa radio init OK!");
 
rf95.setModemConfig(Bw125Cr48Sf4096);
 
Los valores predeterminados después de init son 434.0MHz, modulación GFSK_Rb250Fd250, +13dbM
  if (!rf95.setFrequency(RF95_FREQ)) {
    Serial.println("setFrequency failed");
    mientras que (1);
  }
  Serial.print("Establecer frecuencia en: ");
  Serial.println(RF95_FREQ);

Los valores predeterminados después de la entrada son 434.0MHz, 13dBm, Bw = 125 kHz, Cr = 4/5, Sf = 128chips/símbolo, CRC activado

La potencia predeterminada del transmisor es de 13dBm, utilizando PA_BOOST.
  Si está utilizando módulos RFM95/96/97/98 que utilizan el pin del transmisor PA_BOOST, entonces
  puede ajustar las potencias del transmisor de 5 a 23 dBm:
  rf95.setTxPower(23, false);
}
Después de medir el sensor, apague el sensor de temperatura/humedad Lora en L.84.

Después de enviar los datos de medición, restablezca el módulo Lora en L. 137-140.

Después de restablecer el módulo Lora, duerma el microordenador con L.143.
El sueño se libera después de 8 segundos (temporizador máximo de vigilancia).

Después de cancelar Sleep, inicialice el módulo Lora con L. 63
Encienda el sensor de temperatura/humedad Lora en L. 65.

Lo anterior se repite y los datos del sensor se transmiten aproximadamente cada 9 segundos.

5. Conclusión

Desde elComunicación Lorase ha reducido el consumo de energía del sensor de suelo, ¿cuánto durará con baterías AAA?
Me gustaría experimentar.

La fecha límite para la notificación de casos especiales como experimentos con equipos que no han adquirido idoneidad técnica en enero del próximo año. Estoy deseando ver cuál caducará primero.

Este es un proyecto compartido porHomeMadeGarbge, bajo su autorización, lo traducimos al inglés y lo compartimos aquí. Si puedes leer japonés, por favor revisa elArtículo original.

Contáctenos