Reducir el consumo de energía del sensor Lora
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.
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.
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
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).
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.
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
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!
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
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.
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.
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.