Ayuda con el consumo eléctrico de mi proyecto

Saludos foreros,

Llevo dias intentando finiquitar mi proyecto pero no encuntro ninguna manera de reducir el consumo eléctrico. Resulta que tengo una especie de taquilla, la cual se abre con una llave común y eso me molesta bastante ya que siempre tengo que llevar esa llave conmigo, por ende he decidido automatizarla :slight_smile:

Para ello estoy utilizando un Arduino Pro Mini 3.3v a 8MHz el cual tiene un consumo en Deep Sleep de 2.7mA sin ningun módulo conectado, aunque aún no he retirado los 2 leds ni el regulador de voltaje (Aquí surge una de mis dudas, ya que si retiro este regulador, ¿Podré alimentar el arduino con una bateria LiPo de 3.7v directamente al pin RAW sin quemarlo? (El Arduino no tiene un enchufe cerca, por tanto no lo puedo alimentar desde este, la batería es indispensable. Por ello he pedido 2 18650 de 2500mAh)).

Todo esto realmente no genera ningún problema excepto por el hecho de que no hay ningun módulo conectado al arduino, y, es en la conexión de estos cuando el consumo se dispara. Os cuento... Utilizo un modulo RFID (RC522), el cual se encarga de autentificarme, además de un servomotor (De momento un SG90 para probar, aunque en un futuro quiero poner uno con engranajes de metal), el cual actua como un "cerrojo" a modo de cerradura para abrirla una vez el modulo RFID me ha identificado. El problema viene ahora, puesto que el consumo de todo este invento es de 20-30mA en modo normal, y de unos 15-20mA en Deep Sleep, inviable para tenerlo conectado a baterías todo el día. Además cuando el servo se mueve, el consumo asciende hasta los 250mA en ocasiones. Este movimiento del servo ocurriria 3 veces al día como mucho así que tampoco me preocupa mucho, puesto que dura solo unos segundos. El que si me preocupa es el consumo en modo "normal" de todo el arduino (Encendido con todo conectado), ya que como he mencionado antes es de unos 20mA en Deep Sleep.

He encontrado una solución más o menos viable, y es que si desconecto GND y VCC del módulo RFID, el consumo vuleve a los 2.7mA de antes. De esta solución surge otro problema ya que no encuentro una manera viable de conectar y desconctar estos cables automáticamente. En un principio había pensado utilizar un par de transistores NPN a modo de switch, pero creo que no sería posible el controlar ambos cables (VCC y GND) por las limitaciones del NPN (Ya que creo que tiene que ir conectado a GND, y eso generaría un problema al controlar VCC), cosa que no tengo clara para nada, asi que si me pudierais dejar eso claro os lo agradecería mucho, y si eso es posible y además me pudierais sugerir el NPN ideal ya estará agradecido de por vida :wink:

Por otra parte, también pensé utilizar simples relés para el control de estos 2 cables, pero al hacer pruebas me he dado cuenta de que mientras están encendios consumen unos buenos 50mA, que en comparación con un NPN es una barbaridad.

Finalmente, ya no os doy más el tostón jeje, ¿Me podríais explicar como calcular el tiempo que durará una batería? Entiendo que si una batería tiene 2500mAh de capacidad, quiere decir que puede proporcionar 2500mA en una hora o 1250mA en 2 horas y así... Pero lo que no se calcular es este tiempo cuando el consumo es irregular. Os pongo este proyecto como ejemplo: El arduino estará encendido 24/7 con un consumo de 2.7mA en Deep Sleep (Vuelvo a destacar que aún no he quitado los LEDs ni el regulador de voltaje) durante 23 horas y 55 min, puesto que esos 5 minutos restantes son los que el arduino permanecerá despierto (tendré abierta la taquilla), utilizando unos 20-30mA durante ese tiempo y elevando ese consumo a 200-250mA durante los movimentos del servo, que vamos a suponer que duran 2 segundos y que de media al dia se hacen 6 movimientos de servo al dia (3 ciclos de abrir y cerrar la taquilla). Resumiendo, 2.7mA durante 23 horas y 55 minutos, 5 minutos al dia donde utilizará 20-30mA y 12 segundos donde se utilizarán 200-250mA. La pregunta es, ¿Como calculo la duración de la batería en este caso si sé que es una 18650 de 2500mAh (He pedido 2 18650, pero prefiero poner solo una para tener la otra siempre preparada a modo de backup e ir intercambiándolas cuando se gasten)? ¿Existe alguna fórmula o algo?

Muchísimas gracias por leer todo el mensaje,
Alex

Si quieres ahorro extremo de energía, que tal si mantienes todo apagado hasta que un pequeño botón pulsador encienda todo por un tiempo determinado.

Supongamos que pulsas un botón, el sistema se activa, pasas la nfc y abre, después de unos segundos se apaga todo y queda en espera nuevamente.

No has planteado ninguna razón para mantener el arduino y sus periféricos encendidos haciendo nada.

No tienes Logger, no recoges, recibes o envías data durante 23 horas y 55 minutos... Entonces... ¿Para qué mantenerlo encendido?

Ponle un pulsador, el que más te guste, que al pulsarlo mantenga todo encendido digamos 6 segundos, eso será suficiente para pasar la tarjeta y listo.

Saludos

El problema es que la taquilla estará en un lugar más o menos público no en mi domicilio o empresa, por tanto, no puedo modificar el exterior de la taquilla, pero ahora que lo he pensado si que puedo colocar un pequeño boton el el interior y aprovechar el juego que tiene la puerta para presionarlo. Si lo hiciera de esta manera, ¿Como podría encender el arduino al presionar el boton y mantenerlo encendido hasta que se volviese a presionar (Al cerrar la puerta)?

alex2000lopez:
.... , ¿Como podría encender el arduino al presionar el boton y mantenerlo encendido hasta que se volviese a presionar (Al cerrar la puerta)?

¿Colocar un monoestable? . Más sencillo que eso es creo no hay

Visionario:
¿Colocar un monoestable? . Más sencillo que eso es creo no hay

Un monoestable como interruptor on/off sería perfecto si el circuito utilizara algun tipo de cerradura de acción rápida, o que se cerrara al desconectar el arduino de la corriente, pero en este caso de utiliza un servo, el cual tarda en moverse un poco.

He encontrado este link: Interruptor ON-OFF con 555 y 2 pulsadores (Cir. impreso) - Electrónica Unicrom que muestra como hacer el circuito con 2 botones, lo que se traduciría en utilizar uno de esos botones para encender el arduino (de manera física, es decir, presionando el botón) y el otro para apagarlo, de manera virtual, es decir, controlado por el arduino, el cual "presionará" el botón después de cerrar la taquilla completamente y mover el servo, o, en su defecto, cuando pasen más de 15 segundos y no haya interacción (No se pasa ningún tag RFID, o el tag que se pasa es incorrecto).

Esto me lleva a una pregunta, ¿Cómo simulo la acción de un botón desde el arduino? Se que con un relé se podría hacer sin problemas, pero, ¿Existe otro modo mejor de hacerlo que consuma menos mA?

Por otra parte, como he mencionado antes utilizo una batería de 3.7v para alimentarlo todo, lo que genera un problema con el 555, ya que trabaja a partir de 5v, aunque he encontrado un modelo de 555, en concreto el TLC555CP , que trabaja a partir de 2v. ¿Serviría este para mi propósito, siendo las conexiones las mismas que las de la página web mencionada anteriormente? ¿Cuanto amperaje consumiría en estado de "espera"?

Pregunto lo del amperaje porque, aunque mi arduino pro mini consume 2.7mA en deep sleep, no he quitado el regulador de voltaje ni los leds aún, lo que de acuerdo con este tutorial: http://bit.ly/1XGzuIy reduciría el consumo del proyecto a 54 μA, pudiendo llegar, y hablo desde la ignorancia, a consumir menos que el 555, pero entonces estaría con el mismo problema que he presentado al principio.

Creo que estas enfocando mal desde el principio...

Utiliza el monoestable para activar el arduino, éste espera un tiempo prudencial para recibir una nfc, si no recibe en ese tiempo entonces se vuelve a apagar (tiempo de corte del monoestable), si lo recibe entonces haga lo que tenga que hacer con el servo y todo lo demás, en el camino mantenga una señal positiva en el monoestable para que no apague y cuando finaliza se apaga de nuevo totalmente el circuito y comienza el ciclo.

No requieres mantener energizado el 555, se activará con el pulsador puesto a vcc o algo similar, también podrías hacerlo con un par de transistores, resistencia y condensador calculando el tiempo máximo de encendido.

Por otro lado hay dos versiones del 555, la versión TTL y la versión CMOS, esta última consume mucho menos.

Lo veo así de sencillo a menos que no hayas descrito otros detalles que faltan.

Saludos

Visionario:
No requieres mantener energizado el 555, se activará con el pulsador puesto a vcc o algo similar, también podrías hacerlo con un par de transistores, resistencia y condensador calculando el tiempo máximo de encendido.

Por otro lado hay dos versiones del 555, la versión TTL y la versión CMOS, esta última consume mucho menos.

Muchas gracias por tu ayuda,
No entiendo lo de que no hace falta mantener energizado el 555, ya que si utilizo un pulsador, ¿En cuanto suelte el pulsador el 555 se apagará, no?

alex2000lopez:
¿En cuanto suelte el pulsador el 555 se apagará, no?

En modo monoestable no, ya que el circuito seguirá energizado solo porque su tiempo está definido por los cálculos de ese estado, si lo pones a 15 segundos, pues estará encendido ese tiempo y así.

Visionario:
En modo monoestable no, ya que el circuito seguirá energizado solo porque su tiempo está definido por los cálculos de ese estado, si lo pones a 15 segundos, pues estará encendido ese tiempo y así.

Por lo que tengo entendido, y corrígeme si me equivoco, habría que poner el botón entre el pin 2 (trigger) y GND, pero mientras el 555 no esté activo, ¿Cuanto amperaje consumirá? Lo pregunto porque VCC y GND están conectados al IC

Un 555 conectado a 5V y en "reposo" consume apenas 3-6ma, creo que eso te servirá, pero si quieres menos consumo tal vez haciendo un monoestable con transistores, pero no estoy seguro.

Si lo pones en modo biestable podrías hacer que el mismo arduino envié el "off", creo que ambas formas sub posibles dado tu requerimiento.

Hola. Espero se entienda mi idea, pudiera tener errores, esto lo acabo de hacer para mostrar mi planteamiento..

El enfoque de visionario esta bien pero hay otra alternativa mas simple y sin compentes externos que ahora explico:

Para que usar algo que se puede hacer con el mismo Arduino.
Dejas al Arduino en modo SLEEP y entonces consumirá menos aún, pero lo despiertas usando ese interruptor que accionará la interrupción que despierte al Arduino de modo Sleep.
Luego usando un MOSFET CANAL P o PMOS como switch de potencia energizas el NFC, lo lees y si no es correcto el código lo desconectas de nuevo.
El PMOS es del mismo tipo que el usado arduino para manejar la potencia via USB o via conector externo.

Agrego este link de Instructables para que complementes el Sleep con modificaciones como las que planteas que haran bajar el consumo.

surbyte:
El enfoque de visionario esta bien pero hay otra alternativa mas simple y sin compentes externos...

Pero mi diseño no consume energía durante 23 horas y 55 minutos jejejeje.

Bueno era solo una idea, me pareció que el amigo quiere ahorrar cada microamperio posible.

Saludos

Un 555 conectado a 5V y en "reposo" consume apenas 3-6ma

y esto es gratis?

El arduino modificado en modo sleep consume nA

surbyte:
y esto es gratis?

El arduino modificado en modo sleep consume nA

Muchas gracias a ambos por vuestras respuestas,

Eso el lo que me parecía raro de lo que me comentaba Visionario, ya que el consumo del arduino una vez quitados los LEDs y el regulador de voltaje es ínfimo en comparación con el 555.
De ahí me surge una pregunta: Si elimino el regulador de voltaje como en este tutorial: http://bit.ly/1XGzuIy , ¿Podré alimentar al arduino con una bateria LiPo de 3.7v directamente, o me haría falta hacer algo más? Según el post, al alimentar el arduino con 3.7v, el resto de sensores, etc... se alimentarían tambien con 3.7v, lo que no creo que suponga un problema para el servo, ya que funciona bien a 3.3v y a 5v, pero no sé si supondrá algún problema para el RC522 (RFID).

Lo que recomiendan en la página mancionada es utilizar un regulador más eficiente en amperajes bajos para no depender del 10-20% de eficiencia que tiene el que ya va instalado, pero según he leido en esta página: Mini Ultra 8 MHz (Arduino Compatible) – Rocket Scream (Que tiene arduinos con el mismo regulador modificado para amperajes bajos que recomienda el autor del post), este regulador solo puede suministrar hasta 250mA, o eso el lo que me ha parecido leer aquí: "Low quiescent current (1.6 μA) on-board 3.3 V 250 mA regulator" , lo que dificulta la realización de mi proyecto, debido a que el servo, mientras se mueve utiliza 250mA, y a eso hay que añadir el consumo del arduino y del RFID.

Y respecto al PMOS, ¿Se podrían "apagar"/"encender" tanto VCC como GND con 2 mosfets diferentes, o solo se podría controlar uno de los dos? Lo digo porque el consumo de el arduino solo se rebaja hasta un punto útil cuando las dos lineas, tanto VCC como GND, no están conectadas? Utilizar un relé para esto me parece un poco exagerado, debido a que en parte, consumen unos buenos 50mA y ocupan bastante, encareciendo la PCB en el caso de que la pidiese fabricar.

Bueno. Creo que no han visto bien el plano, en el diseño el circuito NUNCA está energizado hasta que se pulsa S1, así que el consumo sigue siendo Cero durante esas 23 horas y 55 minutos
El 555 solo se energiza al pulsar S1, de resto todo el circuito esta muerto y desconectado
Saludos

Visionario:
Bueno. Creo que no han visto bien el plano, en el diseño el circuito NUNCA está energizado hasta que se pulsa S1, así que el consumo sigue siendo Cero durante esas 23 horas y 55 minutos
El 555 solo se energiza al pulsar S1, de resto todo el circuito esta muerto y desconectado
Saludos

Gracias por tu ayuda,

¿Me podrías dibujar el circuito un poco mejor y explicarme como funciona por encima? Soy un novato en electrónica y me cuesta seguir el boceto que me has puesto.
De todas formas,
Gracias

Bueno ahora que vi el circuito de visionario tiene razón. El 555 no esta energizado. Solo cuando pulsas accionas el rele, y el 555 genera un pulso de X mseg que serán suficientes para el arduino.
Bueno tienes dos opciones.

surbyte:
Bueno ahora que vi el circuito de visionario tiene razón. El 555 no esta energizado. Solo cuando pulsas accionas el rele, y el 555 genera un pulso de X mseg que serán suficientes para el arduino.
Bueno tienes dos opciones.

Vale, ya entiendo el circuito, pero tengo una pequeña duda, ¿Una vez el arduino haya acabado de abrir/cerrar la taquilla y deje de alimentar el trigger del 555, este permanecerá encendido durante esos 15-20 segundos aunque el arduino ya haya acabado? Es decir, por lo que entiendo se reiniciará el ciclo una vez el arduino deje de aplicar voltaje al trigger, por tanto el 555 permanecerá encendido 15-20 segundos más de lo habitual.

Ahora pensando se me ha ocurrido una cosa que podría funcionar, ya que si prescindimos del 555, y de los sleeps, etc... Aún tenemos un microcontrolador capaz de encender y apagar cosas. Esto viene porque he pensado que si en lugar de el monoestable simplemente utilizamos un relé, el cual vaya conectado por una parte a un botón, que lo active al pulsarlo y por otra a un pin digital del arduino, nos podemos olvidar de todo lo anterior.

El ciclo que se me ha ocurrido es este:

1-Llegamos a la taquilla y apretamos el botón (Que estará detrás de la puerta oculto y que se presionará aprovechándome del juego que tiene la puerta)
2-El botón acciona el relé activando el arduino.
3-Mantenemos el botón un par de segundos para dejar bootear al arduino.
4-Una vez el arduino se encienda en el void setup ponemos que se active el pin digital al que va conctado el servo, retroalimentando a este y "liberándonos" de la carga de mantener pulsado el botón por más tiempo (Se podría indicar cuando se puede soltar el boton con un avido sonoro). Desde este punto el arduino controla su encendido/apagado manteniendo el pin en HIGH hasta acabar todas las operaciones y entonces poner el pin en LOW (Bueno, con los relés va al revés, HIGH lo apaga y LOW lo enciende, pero para el caso lo explico así), o en su defecto hasta que el timer INTERNO (Añadido en el código) supera más o menos los 15-20 segundos. De las dos acciones mencionadas con anterioridad la que suceda antes apagará el pin del arduino, apagando el relé y por tanto, cortando corriente al arduino.

¿Podría funcionar esta idea? Yo no le veo ninguna pega, puesto que durante la mayor parte del dia todo el conjunto no consumiría nada y solo estaía activo cuando se desea que este activo, reduciendo el número de componentes de la PCB, al prescindor del 555, los transistores, etc...

Hola, disculpen la tardanza en responder.

alex2000lopez, es correcto como dice surbyte, el circuito no esta energizado hasta que pulsas el pulsador o lo que sea que lo sustituya, calculando R1 Y C1 sabrás las valores según el tiempo que requieres activo.

Verás que del arduino hay una conexión que termina con una rotulación "P" y hay otra en la base del transistor por la resistencia R3, eso lo puse para referenciar que desde el mismo arduino cuando se encienda mantenga un pulso HIGH en ese pin (P) para que aunque el 555 haya expirado su tiempo aún lo mantengas energizado, eso es por ejemplo si tu tarjeta se leyó en el segundo 13 y se apagará en el 15 pero tu servo tarda 4 segundos en hacer el recorrido antes de apagarse, entonces el arduino toma el control de su propio encendido, de tal manera que al poner el pulso en LOW todo el circuito se apagará totalmente.

Es posible que no esté completo el diseño en cuanto a componentes pero ya comprendiste la idea.

Usé un pequeño relé que es el que mantiene toda la conexión cerrada hasta que se caiga la tensión en su bobina, el circuito podría ser mucho mas simple, sustituyendo el 555 por un par de transistores, resistencia y condensadores, al final de cuentas lo que deseas es un tiempo activo.

Por otro lado alex2000lopez, en tu mensaje pones

3-Mantenemos el botón un par de segundos para dejar bootear al arduino.

, eso no hace falta, porque al pulsar el boton todo el ciclo comienza solo, no necesitas dejarlo pulsado

Saludos