domingo, 21 de febrero de 2016

Arduino power low. Termómetro máximos y mínimos con gráfica DS18B20 LCD Nokia PCD8544.

Página principal


Arduino
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;
}
Si queremos modificar el tiempo en el cual el arduino se despierta para realizar una toma de temperatura,
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