De toda esta experiencia que debería de haber durado dos semanas y ya ha llegado a los tres meses la parte en la que he pasado mayor impotencia ha sido la de las medidas de la energía. Medir microAmperios es un gran problema, generalmente las medidas de corriente se hacen midiendo diferencias de tensión en los extremos de un resistor que se pone en serie con la alimentación (burden). Para que haya una caída medible la resistencia tiene que ser alta, pero en el momento en el que el nodo sale del bajo consumo una resistencia tan alta provoca una caída de tensión que hace que no llegue a arrancar. A lo máximo que se puede aspirar es a hacer una medida puntual de la corriente en Deep Sleep.
Buscando buscando (y os aseguro que hay mucho que buscar), Encontré una placa que se llama power profiler de Nordic. Esta placa está pensada para hacer las medidas de sus kits de desarrollo, pero permite también medir proyectos fuera de su placa, como se comunica por Segger, una especie de puerto de depuración del entorno de Nordic (y os pido perdon por mi ignorancia si lo he entendido mal) hay que comprar la placa de desarrollo y cargar un FW que lo emula por USB. Al final, por unos 100€ tienes un sistema que es capaz de medir el bajo consumo, sacar promedios, consumos y energías.
El fallo en la segunda serie de PCB
También he estado bastante enganchado con otro tema, En un artículo anterior teorizaba sobre la tensión en vacío de la batería (al tener tan bajo consumo) que llegaba a los 4V. Por otro lado descubrimos que la lectura de la tensión de la batería en el ESP no es válida si no se enciende la Wifi, por eso añadimos un divisor de tensión. Pues no ligué un tema con el otro y para resolver el primero problema (inexistente porque lo que estaba mal era la lectura) pusimos un regulador LDO para la alimentación en la PCB y otro para los sensores. Una vez probado en la placa de prototipos parece que todo funcionó.
Pero al montar las primeras placas nada funcionó. Esperé durante días que me llegaran los ESP-12E que me faltaron, al final me llegaron con retraso, pero ninguno parecía funcionar. Mirando vi que eran ESP-12F, probé con unos ESP-12E y parece que lo hacía algo mejor, aunque el comportamiento con la wifi era errático. pensé que no tuviera que ver con la soldadura de los modems Sifgox, con Lora parecía ir mejor, pero incluso con Wifi solo fallaba. ¿cual era el problema?
Como el regulador es de 3,0V y cuando se enciende la Wifi tiene picos de consumo de 90mA necesita un condensador electrolítico para almacenar esa energía que necesita, a 3,6V o a 3,3V la bajada de tensión que produce el incremento puntual de consumo no llega a un nivel tan bajo que de problemas, pero a 3V si, la solución sería poner un condensador más grande (y más caro y voluminoso), pero tomando la medida de nuevo con algo que no sea el ESP he decidido prescindir del primer regulador. Afortunadamente solo implica sacarlo y poner un puente en la placa, por lo que se pueden aprovechar, una vez quitado todo funciona a las mil maravillas además de reducir 60 ó 70 céntimos el coste por placa.
¿y ahora que?
Pues con el tema de las mediciones resuelto y las PCB funcionando vamos a ir liquidando los flecos:
- He implementado un algoritmo para que no envíe de forma regular, si hay cambios enviará más si no hay cambios enviará menos.
- Para resolver posibles errores de lectura he implementado un filtro median y la realización de una segunda medida si la que tomo no coincide con la última.
- Me he sacado de en medio muchas líneas de Debug, para poder tomar medidas de tiempo real.
He empezado con el Lora, lo primero que he visto es que el consumo en deep-sleep después de enviar un paquete era correcto, pero después de una lectura de sensor subía a 1,5 mA hasta la siguiente lectura.
Por algún motivo el RFM95W se pone en modo idle cuando se alimenta que consume aprox 1,5mA, tal como comenté la función de shutdown en la librería no está implementada. Después de muchas horas he visto que con el LMIC_Shutdown() lo pone en el modo que me interesa, después de unas más he visto que solo funciona si previamente lo has iniciado. La solución final es poner un flag para ver si se ha iniciado y si no se ha iniciado hacerlo antes de ponerlo en shutdown. Consume mucho menos tiempo del que intuitivamente hubiera supuesto.
Os dejo una foto del nodo de pruebas, las medidas de energía en el proximo post..