Panel solar y autonomía con Atmega328p

En el último tiempo he estado probando diferentes formas para aumentar y optimizar la autonomía de un Arduino en proyectos donde se requiere un uso 24/7.

Hasta ahora tengo montado un chip Atmega328p (UNO) y lo uso con su reloj interno a 8 mhz para la mayoría de los casos esta velocidad es más que suficiente. En este mismo montaje tengo un nRF24l01 y un sensor de humedad y temperatura HTU21D de sparkfun, como la mayoría de los módulos funcionan a 3.3V estoy alimentado el circuito con un Step Down XL4015 a 3.3 v, esta fuente soporta hasta 5A.

Circuito.jpg

El consumo total de este circuito es de 36mA

Ningún problema hasta ahí, por ahora alimento el Step Down con otra fuente externa, pero el siguiente paso de este experimento es hacer dos cosas;

1. Alimentar todo el circuito con pilas recargables AA, todavía no llego a la conclusión de cuantas son ideales en relación a tiempo de autonomía.

2. Conectar un panel solar que cargue constantemente (obviamente en el día) estas pilas.

El panel que quiero usar en esta ocasión lo he reciclado de un cargador solar como este:

1.0x0.jpg

El panel solar mide 7x10 cm y entrega 0.4w. El cargador tiene una salida 5v y 800mA internamente usa una batería Li-Po de la cual he prescindido por que no es mi objetivo.

Panel.jpg

Lo que pretendo hacer es tomar ese panel y conectarlo a un nuevo circuito que alimente a las baterías que serían 3 (3.6v) o 4 (4.8v).

La ayuda que necesito es generar este circuito para alimentar las baterías. Luego de tener el hardware funcionando habrá que optimizar el software, pero vamos por parte.

Saludos.

Lo que no me queda claro es que tipo de baterias usarás. dices pilas AA recargables pero de que tipo?
Hay muchos cargadores faciles de armar de la empresa Maxim y de Linear Technologies.
Incluso algunos son multiquimicos como le dicen, o sea, puedes cargar cualquier tipo de batería.
Aca un ejemplo de lo que te comento, MAX846A

Gracias surbyte!, tengo pensado en baterías tipo Ni-MH, he encontrado unas de hasta 3000mAh, pero no me cierro a otras alternativas que supongan una simplificación en la carga, no conozco mucho del tema de recargas, ni tampoco de los tipos de baterías más allá de su existencia y composición.

¿Cuál/es serían los problemas si cargo una batería solo con un regulador de voltaje?

Ahora revisaré el link que me has dejado

En todo caso debes usar un regulador de corriente, o sea, un regulador de tensión con una R que fije la corriente de salida en tantos mA.
Pero si no usas un cargador como los que te sugiero o uno especídfico para NiMH es que acortarás la vida ultil de las pilas.
El regimen de carga tiene tres pasos, una carga rápida, una carga lenta y una carga de mantenimiento. Lo que se conoce como cargador de 3 etapas.

Lee este artículo para que veas que no es una tarea simple armar un cargador para NiMH

Y aca se ve mejor Recarga baterias NiMh

Gracias nuevamente surbyte, me he leído ambas páginas ya me ha quedado claro por qué no se debería hacer con un circuito tan simple. Comenzaré a ver lo que posteó ehrja.

Estuve buscando el MAX846A pero parece que no es tan fácil de encontrar, al menos en ebay no existe. Por ahí encontré los MAX712 y MAX713 que son solo para Ni-MH pero creo que requiere de más componentes externos. La página del fabricante tiene la opción de pedir muestras, pedí 2 del MAX846A veremos si llega, por mientras seguiré probando otras alternativas.

Yo miraré alguna opcion en Linear Technologies que también tiene propuestas excelentes.
LTC4060 (es la simpleza personificada) y LTC4011 tal vez mas complicado pero también es la opción mas profesional.
Para algo simple usa el LTC4060 que creo es lo que buscas, una solución no demasiado compleja y que satisfaga tu necesidad de cargar las pilas de NiMh.
El LTC4060 cuesta 4 USD y puedes pedir muestras gratis también.
La placa de evaluación esta algo cara 150 USD.

Miré ambos modelos y ambos son interesantes, intenté pedir muestras pero no tienen disponibles para mi país y el costo de envío por comprar algunos para probar es demasiado caro (40 $USD)

Tal vez deba reconsiderar el tipo de batería, estos cargadores son muy baratos pero cargan baterías de litio, voy a ver los pro y contras de cada opción

Exacto, el replanteo del proyecto muchas veces es lo mas conveniente

Creo que es la mejor opción encontré estas baterías que son de 3.7v y 6000mAh lo cual me parece una excelente opción.

Con el cargador que dejé más arriba, me da un total de aproximadamente
$ 4.7 USD con una batería
$ 7.3 USD con dos

lo cual me parece una opción mucho más viable.

Por mientras espero, revisaré que más hacer antes de llegar a la parte del código.
Quiero poder detectar si las baterías están cargando y obtener su porcentaje pero supongo que para eso también será mejorar esperar a que llegue el pedido.

Como idea general, si el consumo es importante, el problema que tiene arduino como placa completa es el consumo en stanby.

Yo según en que aplicaciones no he podido bajarlo de 40 mA ( 10 h x 40 mA) 400 mA. si trabajas con baterias de reducido tamaño, solo en un día de reposo, ya la agotas.

En aplicaciones muy especiales, he tenido que optar por micros tipo ATTINY85, que en modo sleep, el consumo es de microA.

La programación es similar a Arduino ( no identica) y lo puedes programar desde la misma placa de Arduino, utilizando la placa base como Arduino ISP.

Yo es el problema que le veo a las Base de Arduino, que tienen exceso de componentes que en la mayoría de ocasiones son inecesarios. Es un absurdo querer encender 4 leds con una placa tan completa, cuando con un simple micro los 4 leds y 4 resistencias ( o una solo), haces la misma función. Aparte el tema precio, un micro tiene un coste de 1 € ( tirando largo).

Hola JordiWR, esa es una de las razones por las cuales el proyecto lo he comenzado usando simplemente el chip, reduciendo lo más que puedo los componentes innecesarios. Por lo mismo eliminé el cristal de 16mhz y estoy usando el interno de 8mhz, según los cálculos de este sitio un arduino a 3.3v serían de aproximadamente 3mA.

Las pruebas que he realizado hasta ahora me dan un consumo mayor en modo sleep, pero creo que tiene que ver con la optimización del código, mi intención es poder llegar a un consumo muy reducido pensando en aplicaciones que necesiten de mucho tiempo.

Los micros ATTINY85 parecen una buena opción cuando tu proyecto no es muy grande, pero cuando necesitas un poco más, solo queda intentar optimizar lo que hay.

Gracias por compartir tus experiencias, me sirven para compararlas con lo que he hecho hasta ahora.

Como van a pasar “algunos” días hasta que lleguen el resto de las cosas para continuar con el proyecto, he comenzando a realizar las primeras pruebas para disminuir el consumo bajando la velocidad y he tenido éxito.

En un comienzo, pensé que al haber quemado el bootloader para trabajar a 8mhz bastaba, pero basado en mis pruebas, no fue así. Trabajando con una librería para dormir el chip, este no bajaba de los 25mA, entonces agregué el siguiente código:

CLKPR = (1<<CLKPCE);
CLKPR = B00000011;

Este habilita el funcionamiento a 8mhz, al hacerlo el consumo bajó hasta los 6.5mA al estar dormido. Esto, en un circuito que tenía montado con un LED para comprobar que existe energía además de 2 resistencia y un condensador para el nRF24.

Cuando monté el chip sin ningún otro componente, el consumo bajó a 0.02mA lo cual creo que es normal, si le resto el LED que queda encendido.

Más adelante haré una prueba para ver si es posible hacer lo que quiero hacer bajando el reloj a 4mhz, en donde el consumo baja casi a la mitad.

Porque no lo pones en sleep?
Lo despiertas, haces lo que tengas que hacer, transmites, etc etc y lo apagas. Ahora si debe esperar comandos... estamos en problemas a menos que hagas una secuencia luego de que se despierte pero tal vez sea mas complicado si usas varios.

Es lo que estoy haciendo, estoy usando esta librería, pero con las pruebas que hice, en un Arduino "normal", al dormirlo el consumo no me bajó de los 40mA, ¿eso es normal?

Lo del RF lo tengo más o menos pensado, aún no hago las pruebas, pero usando la librería de TMRh se hace más fácil resolver ese problema, en la teoría.

Lo importante es que ya he conseguido bajar el consumo a niveles más que aceptable.

Es que justamente ese es el problema a resolver, cambiar el ENFOQUE de como va a trabajar Arduino.
Si lo haces consumir menos luego resulta que tu autonomía se vuelve increíblemente suficiente para soportar las situaciones mas adversas... algo no considerado al comenzar la idea del proyecto.

Respecto a que no baja el consumo... no es normal. Debería cambiar.
Voy a probar tu librería a ver que mido.

Las no consideraciones de la autonomía al comienzo de un proyecto creo que se debe, en la mayoría de los casos, a la inexperiencia o falta de conocimientos, o también porque se trabaja en un proyecto que va evolucionando sobre la marcha.

Hace un tiempo creo haber probado con otra librería y obtuve resultados similares.

Otra opción seria que entrara el atmel en sleep matando todo excepto las interrupciones externas y lo despertaras con la alarma de un RTCC tipo DS1341 o incluso algún otro que tienen consumos de unos 200-900 nA, e incluso hay otros fabricantes que bajan de los 100nA...
Lo bueno de implementar algo asi en la placa es que se despertaría justo al tiempo que quisieras, dando te más versatilidad al proyecto y alargarías muchísimo la vida de la batería.
Por cierto las baterias que has puesto de ebay, yo no me fiaría mucho que esas baterías sean de 6000 mA, creo que es la suma de las 4, siendo 1500mA por batería un valor muchisimo más realista

Según lo que leí, eso es lo que debería haber hecho la librería, pero extrañamente no bajó de los 40mA seguramente debo probar otra que funcione mejor.
Lo del RTC es una buena idea, pero eso lo tengo como última opción, porque me significaría replantearme todo lo que estoy haciendo debido al comunicación de los RFs.

Respecto a las baterías, si no son lo que dicen, gano más de lo que pierdo. Si son menores a 6000mAh, puedo obtener mi dinero de vuelta, si son lo que prometen gano en autonomía. No son 1500 cada una, ya que las imágenes dicen 6000 en la misma batería.

Veremos que sucede cuando lleguen

Hola:

Verás yo también pensé un proyecto similar. En primer lugar, en modo sleep el ATMEGA328P consume al rededor de los 7-12uA. Al hacer las pruebas de consumo, observé que las distintas versiones del programa afectaban al consumo…Yo conseguí el menor consumo con la 1.0.5…
Deberás de poner también en modo bajo consumo el NRF24L01, que es bastante sencillo hacerlo y consume muy muy poco, creo recordar que 900nA.

El problema principal que observo es que el regulador de continua (reductor) es excesivo, deberías de saber cuanto gasta este elemento. Yo personalmente no lo usaba…
Para cargar las pilas usaba esta:
http://www.ebay.es/itm/5V-Mini-Usb-1A-Bateria-Litio-18650-Cargador-Carga-Junta-Modulo-Led-Tp4056-BC-/181903539681?hash=item2a5a4bbde1:g:EgQAAOSwcF9UV01j

Y en la salida, conectada directamente atmega a la baterías.
Como has dicho que necesitas el 3.3v para el funcionamiento, pues si no quieres poner un regulador (si lo pones que sea ultra low quiscient current), usa dos pilas AA.

Recomendación: Tienes que ver el tiempo necesario para tomar la medida y enviarlo correctamente, y el tiempo restante dormir todo hasta repetir el ciclo… Por ejemplo, tomar medidas cada 2 minutos, 5 minutos etc… Ademas de usar los leds mínimos posibles, si acaso 1 cuando despiertes el atmega para saber que todo está correcto. Ah, y habilitar los sensores con corriente solo cuando sea necesario tomar la medida, no conectarlos siempre.

Para modo de bajo consumo, no recuerdo el nombre de la librería, pero podría buscarlo si te interesa, es “#include <LowPower.h>” y “#include <avr/sleep.h>” que tiene una función:
“LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);”
donde puedes establecer el tiempo (8segundos máximo) y lo que quieres inhabilitar, en este caso el BOD (Control de voltaje) y ADC (Conversor analógico digital). Y después habilitarlos si los quieres “ADC_ON;” y " BOD_ON;"

Para el NRF24L01 yo uso la librería de maniac…Para su bajo consumo usamos los comandos “radio.powerDown();” y “radio.powerUp();”

Sigo a tu disposición por si necesitar algo más concreto.