Haciendo algo de bricolaje como pasatiempo, estoy haciendo un pequeño sensor de humedad y temperatura por radio.
Un ATmega328 está leyendo de un sensor DHT11 y luego transmitiendo datos a una Raspberry Pi por un transmisor de radio STX882. Está alimentado por una batería de 9 V usando un regulador de 5 V 7805 con capacitancias de 10 µF y 100 µF.
El código en C en el ATmega está leyendo humedad y temperatura y luego enviándolo cada 30 minutos:
const unsigned long DELAY = 30*60*1000UL; // 30 minutos
void loop() {
delay(DELAY);
send_data(); // Tal vez un poco complicado, pero creo que no es el punto
}
Esto funcionaba perfectamente, pero la duración de la batería ha sido inesperadamente corta. Era nueva y hice algunas pruebas esporádicas con un corto retraso, sin calor anormal proviniendo de ningún lugar.
Cuando estaba satisfecho, puse el retraso de 30 minutos y lo dejé solo (¿quizás un poco arriesgado?), pero después de menos de 24 horas, la batería estaba muerta a 5.4 V. Sin embargo, el retraso de 30 minutos aproximadamente se respetó para su vida útil.
¿Qué podría explicar una duración tan corta de la batería? ¿Podría ser el regulador de 5 V? ¿Cómo podría construir un circuito de larga duración?
PD: Todavía estoy intentando crear un diagrama en Fritzing, pero esto lleva tiempo para novatos como yo...
Usé una batería alcalina genérica de 9 V de marca 6lp3146 que aparentemente proporciona 300-500 mAh a 100 mA de corriente, que es mucho más de lo que utiliza mi circuito.
Aquí está toda la información que pude recopilar del datasheet:
+-----------------+-------------+----------+-----------+---------+
| | DHT11 | STX882 | ATmega328 | 7805reg |
+-----------------+-------------+----------+-----------+---------+
| Voltaje | 3-5.5 V | 1.2-6 V | 2.7-5.5 V | |
+-----------------+-------------+----------+-----------+---------+
| Corriente activa | 0.5-2.5 mA | 34 mA | 1.5 mA | |
+-----------------+-------------+----------+-----------+---------+
| Corriente en espera | 0.1-0.15 mA | <0.01 µA | 1 µA | 4-8 mA* |
+-----------------+-------------+----------+-----------+---------+
*"corriente de polarización"
Si entiendo correctamente, mi sistema está activo durante unos segundos cada 30 minutos, por lo que la corriente en espera es todo lo que debería importar, y efectivamente es controlada por el regulador 7805.
Por lo tanto, sí, en el peor de los casos, con 300 mAh debería poder mantener el sistema funcionando durante solo 40 horas.
¿Hay alguna forma en la que podría alimentar mi sistema con 5 V durante mucho más tiempo sin aumentar mucho el tamaño?
Para que quede constancia, aquí hay un video muy bueno sobre los reguladores LM frente a los convertidores buck: Convertidor buck vs. regulador de voltaje lineal - comparación práctica
3 votos
Sugiero usar la biblioteca LowPower o similar para poner el ATmega en modo de suspensión entre las mediciones.
2 votos
¿Qué tan corto es corto?
0 votos
Nota: una batería estándar de 9V contiene 6 celdas AAAA .... estas tienen mucha menos capacidad que las celdas AA
0 votos
Este Tx y uC se combinan mejor con una celda de ion de litio 18650 o 3 pilas alcalinas AA de buena calidad.
0 votos
No estoy seguro si el ATmega328 tiene un modo de suspensión y cuánta corriente consume. Pero para este modo de suspensión (consumiendo uA o menos de corriente) es mejor alimentar esto (o un mejor uP) directamente desde la batería de 9V usando un resistor y utilizar algún tipo de señal de activación para encender (el regulador o mejor:) el convertidor cuando sea necesario realizar mediciones.
1 votos
@Jasen Según este enlace, el 78L05 tiene una corriente de polarización de 3mA, que es más baja pero está lejos de ser suficiente para corregir mi problema.
0 votos
Pensé que era mucho mejor que eso, debería haberlo comprobado.
4 votos
LP2950 es <140uA. MCP1703 es 2uA. "Aquí está toda la información que pude recopilar de la hoja de datos:" - no confíes en las hojas de datos, mide las corrientes en espera.
4 votos
¿Estás absolutamente casado/a con la batería de 9v? ¿Por qué?
0 votos
¿Por qué los estás llamando "reguladores de LM"?
0 votos
El actual activo de 1.5 mA del ATmega328 que especificas es para 3 V @ 4 MHz. Estás funcionando a 5V, y no especificas la frecuencia. El actual activo típico varía desde ~3 mA @ 4 MHz hasta ~9 mA @ 16 MHz (ver Fig 29-1 en la hoja de datos). Además, a menos que tu código específicamente ponga el ATmega328 en modo de bajo consumo de energía, estará en estado "inactivo", no "en espera". El actual típico en estado inactivo a 5 V es aproximadamente de ~0.5 mA @ 4 MHz a ~1.8 mA @ 16 MHz (Fig 29-2 en la hoja de datos).
0 votos
¿Estás seguro de que tu función
delay()
realmente pone todos esos periféricos y el Atmega en sus modos de bajo consumo de energía? Si ese es el código usandoavr-libc
, esperaría ver algún código de interrupción de temporizador configurado para despertar posteriormente al Atmega, y luego algunas de las funcionessleep_*
para realmente poner al Atmega a dormir. Las funciones dedelay
deavr-libc
son funciones de espera ocupada.0 votos
@ndim Estaba seguro, pero según la respuesta de AndreKR, existe un modo de "Deep Sleep" en el que tengo que profundizar.
0 votos
Solo quería decir que es posible que también te guste el TI LM2736.
0 votos
@echo esto es muy cierto, ¡voy a prestar más atención a esto!
0 votos
Dan, si aún no te has comprometido con una solución, es posible que encuentres útil mi respuesta.
0 votos
Aparte de las especificaciones de consumo actuales de las hojas de datos, ¡no olvides medir cuánto consumen en realidad tus diversas partes! Es fácil pensar que has puesto algo en modo de bajo consumo, cuando en realidad no lo has hecho.