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

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.

OndO:
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.

No estoy seguro si se ha entendido lo que digo. Por supuesto imagino que es mejor con MOS. Pero los relés a los que me refiero no son normales con una electrónica de control que permita conmutarlos con sólo un pulso. No llevan nada de electrónica. Tienen una entrada a una bobina que al enviarle un pulso el relé conmuta al estado A. Y otra entrada a otra bobina que al enviarle un pulso el relé conmuta al estado B. El sistema consume igual que cualquier relé sólo el tiempo que dura el pulso. Mientras no se quiera cambiar el estado el consumo es absolutamente cero.

A vale, ya sé cuales quieres decir, no había caido porque no suelo usar relés y demás, sólo los he usado en algunas prácticas de la universidad. El problema es que ya son 2 entradas de control, y con carga altamente inductiva. Cada pulso de estos te comerá unos cuantos mA, aunque sea por poco rato. El circuito con MOS tiene consumo 0 en cerrado, y el consumo de la resistencia en abierto (que como ya he dicho puedes bajar a uA con los transistores adecuados). Además está el tema de que los relés son bastante más caros, los MOS apenas te costaran unos 20cent los dos.

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

OndO, muy buen post, aquí aprendo por momentos.
Podrias poner un ejemplo de filtro.?

flico:
Podrias poner un ejemplo de filtro.?

Esta debe de ser la madre de las preguntas de la electrónica XD. Los filtros tienen su qué, los hay desde lo más chorra del mundo a lo más Hi-tech ultrasofisticado. Si el tema interesa, puedo hacer un post que explique como van, que opciones hay, para que sirven y lo más importante, como diseñarlos y hacerlos, pero en otro post que tampoco es plan de desvirtuar este :wink:

Hola OndO,

Estoy preparando un pedido en rs-online y no tienen los FET BSS296 y BSS110, hay otros BSS*. ¿Puedes indicarme algunos otros equivalentes? Los FET no son mi fuerte. Y puesto a pedir, me interesa un esquema de filtro pasa-bajos para el ADC
Gracias