Guión
He creado una bonita cerradura electrónica para mi dormitorio. Actualmente es un Arduino Diecimila con un servo [des] cerrando la puerta. Tiene un teclado numérico con botones 3x4 y 5 LED (2 pares de series y un solo LED). Actualmente también funciona con un cargador de teléfono celular.
Ahora lo he rediseñado para funcionar con un Arduino independiente (ATmega328), pero realmente me gustaría que funcione con baterías AA o incluso con una batería de 9V.
Para la parte del software, pensé que podría poner sleep
llamadas para ciertos momentos dentro del método de bucle para mantener el consumo de energía ATmega lo más bajo posible. Y deje que el LED "parpadee" con el mayor tiempo posible.
Pregunta 1
Cuando se presiona un botón durante los pocos milisegundos que duerme el tablero, ¿se "recordará" / "retendrá" hasta que salga del modo de suspensión y luego se lo levante al presionar un botón?
¿Cuál sería la mejor manera de manejar este botón al presionar el botón de reposo? ¿Puedo codificarlo para que se active con la actividad del botón, o debo dejarlo reposar, por ejemplo, 10m.s. en cada vuelta?
Pregunta 2
¿Cómo abordaría la matemática de calcular cuántas baterías AA se necesitan para hacer funcionar este dispositivo durante 10 meses?
Además, no sé cómo medir el uso promedio de energía por minuto, ya que se alterna rápidamente, etc.
Tengo un Arduino Pro Mini en mi escritorio ahora que funciona con 2 baterías AA y podría funcionar durante más de un año si es necesario.
Hay tres aspectos del diseño que lo han logrado.
1. Un regulador diferente
Estoy usando un regulador de impulso LTC3525. Tiene una corriente de reposo muy baja (7uA) y una alta eficiencia (> 90% a 0.2mA). Algo así como esta placa sparkfun https://www.sparkfun.com/products/8999 debería hacer un trabajo similar. Asegúrese de conectarlo al pin de 5 V del Arduino, no al VIN, para que no se use el regulador Arduino.
2. Sleeeeeeep
La proporción de tiempo que el dispositivo está activo será pequeño. Por el resto del tiempo, el dispositivo debe estar dormido en SLEEP_MODE_POWER_DOWN. Puede basar sus rutinas de sueño en la Biblioteca Rocketscreem Low Power . Según ese enlace, debería poder bajarlo a 1.7uA con ADC, BOD y WDT apagados y en modo de apagado.
3. Interrupciones
La otra mitad del sueño es interrupciones para despertarlo. En el modo de apagado automático, solo el nivel interrumpe en INT1 e INT2, TWI coincide, y el WDT lo activará. Por lo tanto, debe tener un botón conectado a INT1 o INT2 para que presionar el botón lo active.
Otras cosas:
Apague todos los LED a menos que sea absolutamente necesario. Si la cerradura está en el interior, los LED no tienen que ser brillantes, ahorrando más energía. Además, si necesita que la MCU realice alguna tarea regularmente, use el temporizador de vigilancia para activarla periódicamente.
Editar:
Un método que puede funcionar es usar la biblioteca de bajo consumo de energía anterior, y dormir durante unos 60 ms cada ciclo gracias al temporizador de vigilancia. Al despertarse, verifique la presión del botón. La función a llamar sería
fuente
Todos estos comentarios son acertados. Me gustaría agregar algunas sugerencias más:
1) Para los LED, use LED de 20 mA de alto rendimiento. Aquí está la lógica. Digamos que desea un LED de estado tenue que parpadea cada 8 segundos. No desea que sea brillante, por lo que utiliza un LED aleatorio. El problema es que un LED tenue todavía usa 20 mA (o más) para emitir solo 100 mcd. En su lugar, obtenga un LED de alto rendimiento que todavía tenga una capacidad nominal de 20 mA pero que pueda generar 4000 mcd (asegúrese de mirar el ángulo de salida, probablemente aún desee que sea de 30 grados o más). Con este LED de 4000 mcd, lo conecta con algo así como una resistencia de 3.3 k Ohm y obtiene alrededor de 100 mcd de salida de luz, pero usa menos de 1 mA. Entonces, en lugar de usar 20 mA para el LED de estado, está usando una fracción de un solo mA. Por lo general, también configuro el tiempo de encendido del LED de estado durante solo 5-15 ms, lo que también puede ahorrar mucha energía si anteriormente tenía el tiempo de encendido del flash a 100 ms.
2) Mi regulador de voltaje de elección es el Microchip MCP1700. Utiliza solo 1.6 µA de corriente de reposo y es súper barato (alrededor de $ 0.30 en pequeñas cantidades). Su única limitación es que el voltaje de entrada máximo es de solo 6 voltios, por lo que no puede usar una batería de 9 voltios. Pero es perfecto para 4 baterías AA, un LiPo de una sola celda o dos celdas de monedas de litio.
3) Para alimentar un circuito ATmega con 4 baterías AA, generalmente uso un diodo 1N4001 en VCC para bajar el máximo de 6 voltios de las 4 baterías a 5.5 voltios. Además, el diodo protege el ATmega del voltaje inverso, por lo que sirve para dos propósitos útiles. Al hacer esto, puedo crear un circuito alimentado por batería que puede usar tan solo 0.1 µA mientras duerme, ya que no hay un regulador de voltaje que consuma corriente todo el tiempo.
fuente
Hice una prueba en un atmega328P-PU desnudo en una placa de prueba usando la biblioteca RocketScream LowPower
Usó este boceto:
Con un uCurrent Gold medí 7.25 uA cuando estaba en modo de apagado.
fuente
Aquí hay dos preguntas, pero solo la segunda es realmente parte del título de la pregunta, por lo que probablemente sea mejor si abre otra para la pregunta de programación de Arduino. Contestaré la segunda pregunta aquí.
Una sola batería alcalina AA de 1.5V de alta gama tiene una capacidad de aproximadamente 2600mAh. Si opta por baterías de litio, puede obtener aproximadamente 3400 mAh si tiene suerte. Vayamos con esa cifra como referencia para el mejor caso absoluto.
La forma de calcular el tiempo de funcionamiento máximo teórico para una carga es simplemente la capacidad dividida por la carga. Si su carga es de 1 mA, puede ejecutarla durante 3400/1 = 3400 horas = 141 días = ~ 5 meses. Sin embargo, esto es solo un máximo teórico , ya que comenzará a caer un voltaje significativo alrededor del 65% en ese momento. Si está regulando la salida, obtendrá un efecto desbocado donde cuanto menor sea el voltaje de la batería, mayor será la corriente necesaria para mantener el voltaje regulado, lo que agota la batería más rápido. Me sorprendería si puede obtener más del 80% de la capacidad anunciada con un voltaje lo suficientemente alto como para ejecutar su dispositivo.
Entonces, supongamos que obtiene el 80% de ese tiempo después de la caída de voltaje y las ineficiencias del regulador. Asumiremos que está funcionando a 3.3V con tres baterías en serie. Esto todavía le dará la misma capacidad, pero el voltaje será suficiente para un regulador. Si su dispositivo funciona a 15 mA (es una estimación bastante conservadora) los números se verán así:
Por lo tanto, necesitaría alrededor de 144 baterías de litio (48 juegos de 3) para funcionar durante un año. ¡No tan bien!
Sugeriría usar un suministro de CC regulado de la red eléctrica en su lugar. Se puede incluir una batería de respaldo, que es fácil de configurar con un relé SPDT: simplemente conecte la bobina a la red de CC y tenga el contacto "apagado" conectado a la batería. Cuando la CC falla, el contacto cae y la batería se usa en su lugar.
fuente
Algo que nadie ha mencionado todavía: debe tener alguna forma de apagar el suministro de + 5V que alimenta el servo, cuando no lo está utilizando. Incluso cuando no se está moviendo, un servo seguirá consumiendo energía.
Un FET con la puerta controlada por un pin de E / S del arduino es una buena manera de hacerlo.
fuente
Puede considerar usar un microcontrolador especialmente optimizado para un bajo consumo de energía para su próximo diseño. Para un bajo consumo de energía, es necesario tomar muy poca energía mientras duerme. Lo que a menudo se pasa por alto es que también es importante qué tan rápido puede despertarse de este sueño.
Lo que cuenta es cuánta carga se necesita del sueño más profundo para manejar una interrupción lo más rápido posible (porque la explosión de energía será muy corta entonces) y volver a dormir nuevamente.
Un ejemplo de tal microcontrolador es MSP430 de Texas Instruments. En su sitio web encontrará notas de aplicación sobre cómo conservar la energía y las aplicaciones de recolección de energía.
fuente