Arduino
Termómetro máximos y mínimos con gráfica
DS18B20
LCD Nokia PCD8544
Atmega328 power low
Termómetro máximos y mínimos con gráfica
DS18B20
LCD Nokia PCD8544
Atmega328 power low
Estaba realizando otro montaje para predecir el tiempo atmosférico y me salio este montaje, un termómetro con máximos y mínimos con gráficos. Debía crear una gráfica en un LCD PCD8544 para determinar la probabilidad de lluvia, y como sabeis me gusta realizar mis propias rutinas, y evitar cálculo con comas flotantes, además de intentar reducir lo máximo el tamaño del programa. Lo de reducir el tamaño del programa viene de lejos, cuando programaba micros y había que exprimir la poca memoria que había. La tendencia de la programación de este tiempo, es utilizar librerías donde no se entiende lo que hacen, pero por lo contraría reducen el tiempo de desarrollo del proyecto aumentando considerablemente el tamaño del programa.
También he querido reducir lo máximo el consumo del circuito, para poder alimentarlo mediante pilas o baterías. Para esto he revisado dos de mis anteriores montajes , http://seta43.duckdns.org/ardurab.html y http://seta43.duckdns.org/arduraa.html ,donde explico formas para poner en bajo consumo al arduino.
Como en muchos de mis montajes he querido poner todo el conjunto del programa en un único fichero, de esta forma no se necesita ninguna librería aparte.
El programa funciona de la siguiente manera:
- Al iniciar el programa se realiza una toma de temperatura, colocando la temperatura máxima y mínima a dicho valor.
- Se ponen a cero todos los valores de la gráfica.
En el bucle principal:
- Se toma una temperatura, se muestra en el LCD.
- Se compara con las temperaturas de máximos y mínimos par cambiar si es el caso.
- Se calcula la diferencia con el anterior valor de temperatura para añadirse a los valores de la gráfica.
- El arduino se pone en modo de dormir hasta el próximo despertar, que está puesto a 1S.
Esquema del circuito.
Montaje de circuito. Fig. 1
Montaje de circuito. Fig. 2
void watchdogOn() { MCUSR = MCUSR & B11110111; WDTCSR = WDTCSR | B00011000; //WDTCSR = B00000101; //0.5S WDTCSR = B00000110; //1S //WDTCSR = B00100001; //8S // Activa the watchdog timer interupt. WDTCSR = WDTCSR | B01000000; MCUSR = MCUSR & B11110111; } |
modificamos la rutina watchdogOn() , donde existe 3 posibilidades 0,5mS , 1S y 8 Segundos.
Modelo | Voltios | Consumo |
Arduino nano | 3,31V | 4,31mA |
Arduino mini | 2,4V | 1mA |
Arduino mini | 3,3V | 1,67mA(picos 8mA) |
Arduino mini | 5V | 3,3mA(picos de 17mA) |
Arduino mini | 3V | 1,4mA |
Podemos observar que el consumo del arduino mini a 2,4V es de 1mA , aunque creo que podría ser menor si se quitan todos lo componentes que tiene el propio arduino.
Aún así alimentado el montaje con dos pilas de 1,5V y 1500mA, y haciendo una media de 1.2 mA, la autonomía es de alrededor de 52 días.
PROGRAMA
Saludos.
Juan Galaz
Bibliografía:
http://seta43.duckdns.org/ardurab.html
http://seta43.duckdns.org/arduraa.html
http://www.gammon.com.au/forum/?id=11497
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
http://blog.dosbotones.com/2011/09/reducir-el-consumo-de-arduino.html
http://www.sparkfun.com/tutorials/309
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
http://www.engblaze.com/hush-little-microprocessor-avr-and-arduino-sleep-mode-basics/
http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
http://jeelabs.org/2009/05/16/power-consumption-more-savings/
No hay comentarios:
Publicar un comentario