Fuente de alimentación autónoma de larga duración [¡Eureka!]

Lo primero se calcula todo y después se multiplican los resultados por 5 o por 10 :smiley:

Aunque lo digo en broma lo cierto es que no dista mucho de la realidad. Cuando intervienen placas solares hay que establecer unos márgenes muy amplios para asegurar que no te vas a quedar corto. Los márgenes que hay que aplicar son tan grandes porque intervienen algunos factores que pueden ser complicados de cuantificar de antemano. Lo principal, por supuesto, la insolación que recibirá la placa.

JRodrigo:
Luego las baterías hay un mundo en el calculo de las instalaciones, por ejemplo depende del tipo de batería (c10,c20,c100c...) cXX son las horas que funciona ininterrumpidamente, osea si la batería se descarga más lento tiene más capacidad que si la descargas más rápida.

El dato CXX indica la autodescarga de la batería siendo XX los días que tarda en descargarse sin recibir recargas. Para este tipo de aplicaciones sin duda yo pondría una batería solar. Nada de utilizar baterías de coche o similares. El problema es precisamente la autodescarga. Con una batería de coche se está utilizando una parte de la potencia de las placas en la pérdida por autodescarga que sufre.

Mis cálculos serían los siguientes:

Tal como ha explicado muy bien ionhs lo primero medir el consumo promediado de toda la electrónica. Pongamos por poner una cifra redonda que salen una media de 100 mA. El consumo de energía por día será de 24 x 0,1 = 2,4 Ah/día.

Lo siguiente calcular la potencia del panel. Para ello hay que ir al caso más restrictivo, en invierno. En esta web

http://re.jrc.ec.europa.eu/pvgis/apps/radmonth.php?lang=es&map=europe

puedes calcular la radiación media diaria indicando el ángulo de inclinación del panel. Pongamos que al elegir la zona y la inclinación, que para España lo óptimo es unos 40º, nos da una radiación de unos 3000 Wh/m2. Como la potencia de los paneles está calculada para una radiación de 1000 W/m2 (día a pleno sol en verano) tenemos que nuestro panel va a producir el equivalente a 3 horas a su plena potencia. En nuestro caso el panel mínimo necesario será de 2,4 / 3 = 0,8 A. Según la tensión del panel, multiplicando tendremos la potencia del mismo. Ahora bien, ese panel nos cubre lo mínimo, el consumo total. Necesitamos un panel mayor para que, tras unos días nublados que hayan hecho reducir la carga almacenada en la batería, tengamos potencia suficiente para alimentar la electrónica y el resto para cargar la batería. Aquí entra el coeficiente que queramos poner. A falta de poder hacer pruebas yo pondría coeficiente 2, es decir, un panel de unos 1,6 A.

Calculado el panel ya podemos pasar a la batería. Será suficiente con aplicar un factor de 12. Si nuestro panel puede proporcionar 1,6 A, la capacidad de la batería tiene que ser de 1,6 x 12 = 19,2 Ah.

Por último comprobamos que el resultado de esa batería nos va bien ya que la carga total de la batería nos da suficiente energía para que la electrónica esté funcionando durante 19,2 / 2,4 = 8 días. Tenemos margen suficiente ya que difícilmente vamos a tener 8 días seguidos sin ningún momento de luz.

Hola,
esta noche me desperté y vi la luz: la solución está en que el Arduino (y todo lo que tiene alrededor) no debe estar conectado, debe estar desconectado. Lo único que necesito es conectarlos cada 10 minutos durante un segundo. Y cuando se conecte abrirá un fichero de la SD y escribirá un registro de datos: año;mes;día;hora;minuto;peso;temperatura;humedad;sol(sí/no), y cerrará el fichero. Esto lo hará desde el setup() para que solo haga un registro, y el loop() estará vacío ( o con unos Serial.print() para cuando esté conectado por usb). Lo de los 10 minutos no es crítico, pueden ser 10, como 8 como 13 minutos.
Tan solo me haría falta una fuente con pilas a 6V y un temporizador, que consuma poquito, porque sería lo único conectado de continuo. Y para encender el Arduino usaría un relé? Para el temporizador se suele usar 555? Seguro que alguien tiene algún esquemilla por ahí.
Con esto evito que se dispare el presupuesto de mi proyecto.
El tema de los paneles solares me interesa, pero por ahora lo dejaré en la recámara.

Pregunta final: este tema de encender el Arduino cada x tiempo para ahorra pilas, merecería un nuevo Subject?

Aún se puede reducir más el consumo poniendo el microcontrolador en modo de reposo (sleep), aunque este modo implica no ejecutar ninguna instrucción

Del primer enlace...

tendras que mirar ese modo y si, creo que seria interesante nuevo hilo para esto.

Curro92, solo a modo informativo...

Hace un par de años hice una prueba con un Arduino + 7 sensores PIR (Alarma) + 9 Leds (no se decirte el consumo general), todo encendido 24 horas al día y conectado a una tipica bateria de "Moto", 12v 7Ah. regulado con un simple LM7808... Resultado, el sistema permanecio encendido aproximadamente 29 días...

Supongo que si en vez de una bateria le pones 4 (o una de coche) te permitiria ir de visita a ver como va todo cada 3 meses.

El micro ya tiene implementado modos para ahorro de energia.
Yo escribí cuando hice un inventillo ésto => Tinkering with Electronics...: Power Sleep Mode
Lo usaba para sustituir todos los delays, y ahorrar bastante consumo. Hay diferentes tipos de "sleep modes".

Otra cosa recomendable, es que uses alguna de las versiones de Arduino a 8Mhz, ya que consume mucho menos.

Salu2

Igor R.

Usa un attiny45, no necesita cristal ni nada, le pones que cada 10min se Active un rele que alimente el arduino. Luego a los x minutos que se apague. Como el attiny tiene entrada analógica puedes controlar la tensión de la batería

curro92:
Hola, flico,
Intento seguir la evolución del peso de una colmena, y he pensado utilizar el cuerpo y la parte analógica (4 células de carga) de una báscula de baño, como lo hace Joe Desbonnet con su báscula de cocina Random Tech Stuff: October 2010

Usar 10bit para el rango 0-5V no te dará apenas precisión en la medida, puedes usar un LTC2400 de 24bit y baja figura de ruido. La referencia usa 3.3V.
En este enlace han trabajado con el.
http://interface.khm.de/index.php/lab/experiments/connect-a-ltc2400-high-precision-24-bit-analog-to-digital-converter/

Muchas basculas "made in china" llevan un CS5532

Hola,
estuve buscando un esquema de temporizador astable con un 555 ( tON=1sec, tOFF=600sec), pero la idea de usar attiny me gusta más. He encontrado un sitio donde se explica muy bien cómo programar un attiny45 con el Arduino
http://hlt.media.mit.edu/?p=1229. Usaría millis() para contar el tiempo y digitalWrite() para activar/desactivar el relé, en una temporización de tiempoON 1sec y tiempoOFF 600sec

Lo utilizaría a 3V (2 pilas de las 4 que irían en serie para Arduino)

Respecto al consumo, en el datasheet dice:

• Low Power Consumption
– Active Mode:
• 1 MHz, 1.8V: 300 µA
– Power-down Mode:
• 0.1 µA at 1.8V

Dudas:

  • 1.8V: 300 µA cuánto supone a 3V?
  • Cómo se le pone en "Power-down Mode"? En ese estado puede correr el programa y activar el relé?

Cómo se le pone en "Power-down Mode"?

En el datasheet (página 35)

Power-down Mode
When the SM[1:0] bits are written to 10, the SLEEP instruction makes the MCU enter Power-
down mode. In this mode, the Oscillator is stopped, while the external interrupts, the USI start
condition detection and the Watchdog continue operating (if enabled). Only an External Reset, a
Watchdog Reset, a Brown-out Reset, USI start condition interupt, an external level interrupt on
INT0 or a pin change interrupt can wake up the MCU. This sleep mode halts all generated
clocks, allowing operation of asynchronous modules only.

Si no vas a poner nada externo que despierte al micro, tendrías que usar Idle Mode, así podrías usar un timer para despertar a tu micro cada x tiempo.

:wink:

curro92:
Hola,
estuve buscando un esquema de temporizador astable con un 555 ( tON=1sec, tOFF=600sec), pero la idea de usar attiny me gusta más. He encontrado un sitio donde se explica muy bien cómo programar un attiny45 con el Arduino
http://hlt.media.mit.edu/?p=1229. Usaría millis() para contar el tiempo y digitalWrite() para activar/desactivar el relé, en una temporización de tiempoON 1sec y tiempoOFF 600sec

....

Inizul lo tradujo al español.

y además tienes un ejemplo de uso.

Gracias a todos.
Gracias flico, lo tenía tan cerca y no lo había visto...
En la cita del datasheet dices In this mode, the Oscillator is stopped..., eso es compatible con usar timer()?

El tiempo de encendido que menciono como 1sec lo decidiría el mismo Arduino, que al terminar de grabar el registro de datos y cerra el fichero en la SD, enviaría al attiny un pulso. Seguro que no llega al segundo.

Cuando tenga todo montado y programado abriré un nuevo Subject informativo sobre este tema, así espero ayudar a ahorra muchas baterías, porque creo que se puede usar en muchos proyectos de Arduino.

Hola Curro

Quizás te interese utilizar el Arduino en modo Sleep y despertarlo automáticamente mediante el Watchdog (es un contador que se ejecuta automáticamente y puede despertar al Arduino). Existe una librería que te permite hacerlo.

Debes tener en cuenta que el Arduino tiene incorporado un chip USB que consume innecesariamente, y si lo alimentas a través del regulador de tensión las pérdidas son muy importantes. Quizás te interese montar un Arduino sin estos elementos .

Un ejemplo lo tienes en:

http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/

donde dice:

When we assume that the time to measure a sensor and making some decisions will take 10 millisecond and the watchdog is set to 8 seconds the on/off ratio is 800 which extends the battery live time by this factor.
...
In normal operation with a current of 20mA the battery will last 2000/20 = 100 hours or about 4 days.
In intermittent operation with a factor of 800 the operating current is reduced to 20mA/800 = 0.025mA plus the current that is drawn in sleep mode 0.05mA.
Now with 2000/(0,025+0,05) we come to 27000 hours lifetime which is about 3 years.

[Edito]
Debes de tener en cuenta que casi va a consumir más el regulador que el propio micro (siempre que no uses relés)
Para trabajar con baterías, se suelen utilizar reguladores de conmutación (eficiencia ~90%), puedes utilizar uno de conmutación utilizando un LM2575 en vez de uno lineal (tipo 78xx o el de Lowdrop LM2937):

http://www.circuit-projects.com/power-supply/using-a-step-down-converter-instead-of-a-linear-voltage-regulator.html

Saludos

Sí, el Arduino tiene el regulador de alimentación, y un led PWR, cuyo consumo no puedo controlar. Veo dos alternativas, construirme un Arduino minimalista con ese regulador que comenta Inizul, o poner de temporizador un attiny en modo Sleep, y que de vez en cuando active un relé y encienda el Arduino estándar con todo lo que lleva conectado.

Pero sigo con una: suponiendo que uso un attiny, porque solo consume algunos uA, este podría ir sin regulador? Por ejemplo, con 3 pilas de 1.5V? Es que si le pongo regulador, ya estamos de nuevo gastando pila...

~~Inizul, una pregunta: si conecto el attiny al arduino (MISO, MOSI, SCK) puedo conectar también a estos pines el módulo SD? O hay que desconectar uno para poner el otro? ~~ Ya visto que sí, con una línea ss (slave select) por cada dispositivo
Gracias

curro92:
....
~~Inizul, una pregunta: si conecto el attiny al arduino (MISO, MOSI, SCK) puedo conectar también a estos pines el módulo SD? O hay que desconectar uno para poner el otro? ~~ Ya visto que sí, con una línea ss (slave select) por cada dispositivo
Gracias

Curro92 porque vas a usar SPI para comunicar con el ATtiny?

Hola, flico,
no necesito esa conexión para el funcionamiento normal, pero sí para cargarle el sketch al attiny por el método Txapuzas Txapuzas electrónicas: PaperATtinyProgrammer: Un programador para ATtiny usando un Arduino como ISP. Como pienso montar el atmega328 y el attiny85 en una misma placa, junto con el módulo SD y un LTC2400 (24 bit ADC para las báscula, que también va por SPI) me surgió la duda. Luego he visto que se pueden conectar simultáneamente varios slave a un master, simplemente para seleccionar un esclavo se necesita una salida digital del maestro para cada uno.

Mirate este link, hay celulas de carga y amplificadores, te puede servir a sacar ideas.

flico:
Usar 10bit para el rango 0-5V no te dará apenas precisión en la medida, puedes usar un LTC2400 de 24bit y baja figura de ruido. La referencia usa 3.3V.
En este enlace han trabajado con el.
http://interface.khm.de/index.php/lab/experiments/connect-a-ltc2400-high-precision-24-bit-analog-to-digital-converter/

En realidad, con 10 bits le vale, sólo necesita hacer las cosas bien. Sólo hay que buscar ADCs más grandes si necesitas más resolución, 24 bits = 16 millones de niveles. De hecho, usando 3,3V, tendrá un paso mínimo de 0,2uV, cuando así a "pelo" tendrá ruido de mV. Eso básicamente quiere decir que le sobran 10 bits...

-Las galgas extensiométricas que se usan para esos sensores son muy ruidosas, mi consejo es que hagas un buen acondicionamiento del señal:

  1. Amplificador diferencial (busca puente de Wheadstone). Esto depende de como sea tu sensor, ya que algunos ya tienen el puente integrado.

  2. Filtro anti-aliasing. Esto básicamente es un filtro pasa-bajas vulgaris, que te ayudará a limpiar mucho ruido.

  3. Te recomiendo que tomes varias muestras a la vez y hagas una media. Eso te permite eliminar ruido (generas filtros digitales) y te dá más bits de resolución (si haces dos muestras y obtienes 1 y 0, la media te dará 0,5 que es un valor que supuestamente no deberías ser posible de generar, acabas de ganar un bit :D). Para que el arduino no sufra con la división (a los micros no les gusta) usa un 'shifting', es decir, usas un múltiple de 2 y el operador '>>'

a>>b     // esto divide a por 2^b
  • Tendrás que hacer pruebas sin peso, ya que las galgas también tienen una variación grande en temperatura. Tendrias que probar algunos dias y hacer una corrección, lo ideal sería poder parametrizarlo bien, pero con 0 (sin poner nada en la báscula) y con un valor de peso fijo (lo más cercano al máximo que quieras llegar a medir) deberías de poder obtener una buena compensación lineal (la variación es lineal, así que debería bastar).

  • Respecto a lo del relé, yo no te lo aconsejaría, porque requieren un consumo potentillo, por no decir que se tira consumiendo todo el rato que el arduino tenga que estar "trabajando". Con un par de FETs puedes conseguir algo muchísimo más eficiente.

  • Una buena opción es que el Arduino (o micro principal) tenga un pin conectado al tiny (o el que uses como temporizador), en un pin que sirva de interrupción. De esta forma puedes desconectar el Arduino justo cuando acabas. Por cierto, el tiny que tenga un oscilador lo más lento possible, nada de MHz, puedes poner un cristal de 400KHz (y seguramente menos, pero el datasheet no lo especifica o no lo veo ahora mismo). El resto de clocks, desconectalos porque los osciladores consumen mucho para no hacer nada.

Hay más cositas, opciones y circuitos que podrían ser algo más eficientes, pero con eso deberías tener más que suficiente.

Si no sabes cómo hacer el filtro, el ampli o lo de los FETs, ya te colgaré un pequeño esquemático.

OndO:

  • Respecto a lo del relé, yo no te lo aconsejaría, porque requieren un consumo potentillo, por no decir que se tira consumiendo todo el rato que el arduino tenga que estar "trabajando". Con un par de FETs puedes conseguir algo muchísimo más eficiente.

A mí tampoco me gusta nada la solución del relé pero en el caso de querer hacerlo así existen unos relés con enclavamiento en los dos estados de modo que sólo es necesario dar un pulso para cambiar entre uno y otro. Estos relés son los que se montan por ejemplo en termostatos de calefacción en viviendas.

Cheyenne:
A mí tampoco me gusta nada la solución del relé pero en el caso de querer hacerlo así existen unos relés con enclavamiento en los dos estados de modo que sólo es necesario dar un pulso para cambiar entre uno y otro. Estos relés son los que se montan por ejemplo en termostatos de calefacción en viviendas.

Si, pero el funcionamiento es el mismo que el de cualquier relé, campo magnético y interruptor ferromagnético, por lo que aunque haya una electrónica de control, sigue consumiendo mucho. Ahí tienes el circuito que te comentaba. El de abajo es un nMOS el de arriba un pMOS.

Cuando EN=0, Q1 está cerrado, la tensión Q2 entre surtidor y puerta es 0, y por tanto también está cerrado. Cuando EN=1, el Q1 conduce, y tendrás un pequeño corriente Vin/R1 (puedes augmentar R1 hasta megas si coges los transistores apropiados) entonces se genera una tensión entre surtidor y puerta de Q2 y tienes conducción. La única limitación de este circuito es que Vout<Vin (siendo estrictos Vout+Vfb<Vin) debe cumplirse siempre. Porque el diodo de bulk de Q2 permite que haya conducción en sentido inverso. En tu caso, IN es la batería, así que siempre lo cumplirás.

EDIT: también es más barato :smiley:

Gracias OndO y Cheyenne,
Miraré los nMOS y pMOS, para mí es un tema nuevo.
Aunque el tema se aleje de la fuente de alimentación, para el pesaje creo que voy a decidirme por hackear una balanza de baño (bathroom scale), las hay en ebay por 7-8€). Comprar galgas sueltas sale caro, en robot-italy he visto galgas que para pesar 100 kg pueden costar más de 50€. Se trata de quitar a la balanza la parte electrónica (porque solo tiene precisión de 100g), y dejar el bastidor con las cuatro galgas extensiométricas. He encontrado un ADC de 18bits con código para arduino (MCP3424, va por I2C), tiene amplificador interno de ganancia hasta x8; creo que la resolución se aproxima al gramo, lo cual me bastaría. Tomaré en cuenta lo de acondicionar la señal, los filtros, etc.
Cuando vaya concretando el proyecto, abriré on topic nuevo.