Consumo Arduino
Consumo Arduino
Resumen
Arduino es una plataforma de electrnica abierta para la creacin de prototipos
basada en software y hardware flexibles y fciles de usar. Se cre para
artistas, diseadores, aficionados y cualquiera interesado en crear entornos u
objetos interactivos.
Arduino puede tomar informacin del entorno a travs de sus entradas y
controlar luces, motores y otros actuadores. Los proyectos hechos con Arduino
pueden ejecutarse de forma autnoma, sin estar conectado a un ordenador.
El abanico de aplicaciones desarrolladas mediante esta plataforma es cada
vez mayor. Muchas de estas aplicaciones tienen limitados los recursos
energticos, por ello se hace necesaria una optimizacin del consumo de
energa.
Se presenta un estudio del sistema valorando soluciones de software y
hardware con el fin del optimizar los recursos del mismo y reducir el consumo
de energa.
A su vez se realiza la medicin de consumos en funcin de distintas
soluciones y alternativas encontradas.
El objetivo final es crear un patrn que permita a cualquier desarrollador que
utilice Arduino reducir el consumo de su proyecto.
Overview
NDICE
INTRODUCCIN ............................................................................................... 1
CAPTULO 1. MARCO TECNOLGICO ........................................................... 2
1.1.
Arduino ............................................................................................................................... 2
1.1.1. Tipos de Arduino .................................................................................................... 2
1.1.2. Arduino UNO .......................................................................................................... 3
1.2.
Sleep modes....................................................................................................................... 6
2.1.1. Modo Idle ................................................................................................................ 7
2.1.2. Modo ADC noise reduction..................................................................................... 7
2.1.3. Modo Power-down .................................................................................................. 7
2.1.4. Modo Power-save ................................................................................................... 7
2.1.5. Modo Stand-by ....................................................................................................... 8
2.1.6. Modo Extended Stand-by ....................................................................................... 8
2.2.
2.3.
2.4.
Bibliotecas........................................................................................................................ 13
2.4.1. Biblioteca Jeelib .................................................................................................... 13
2.4.2. Biblioteca N0m1 ................................................................................................... 14
2.4.3. Biblioteca Low-power ........................................................................................... 16
3.2.
3.3.
CONCLUSIONES ............................................................................................ 49
Objetivos alcanzados ................................................................................................................ 49
Siguientes pasos ....................................................................................................................... 49
BIBLIOGRAFA ............................................................................................... 51
ANEXOS .......................................................................................................... 54
CAPTULO 4. SOLUCIONES HARDWARE .................................................... 54
4.1.
4.2.
4.3.
4.4.
4.5.
NDICE DE FIGURAS
Fig 2.1. Brown-out Detection
8
Fig 2.2. Definicin de pins
10
Fig 2.3. Cdigo con la biblioteca N0m1 y ejemplo de la funcin delay
15
Fig 2.4. Cdigo ejemplo de la biblioteca N0m1 y la funcin para gestionar interrupciones 16
Fig 2.5. Funciones biblioteca Low-power
17
Fig 2.6. Ejemplo de cdigo usando biblioteca Low-power
18
Fig 2.7. Ejemplo de cdigo con biblioteca Low-power y uso de interrupciones
18
Fig 3.1. Medida consumo de corriente
19
Fig 3.2. Cdigo aplicacin Blink
20
Fig 3.3. Cdigo valor inicial
20
Fig 3.4. Grfica de la variacin de consumo de Arduino Uno
21
Fig 3.5. Comparativa de consumos de los modos Sleep ArduinoUno
27
Fig 3.6. Grfica consumo aplicacin Blink
29
Fig 3.7. Comparativa de consumos bibliotecas
31
Fig 3.8. Adaptador FTDI con entrada mini USB
32
Fig 3.9. Conexin de la placa FTDI y el Mini Ultra 8MHz
33
Fig 3.10. Comparativa consumos Mini Ultra 8MHz
37
Fig 3.11. Grfica de consumo Mini Ultra 8MHz aplicacin blink
38
Fig 3.12. Comparativa consumos Mini Ultra a distintas Vin
39
Fig 3.13. Comparativa consumos Arduino Mega
44
Fig 3.14. Mdulos Xbee y adaptador FTDI
44
Fig 3.15. X-CTU
45
Fig 3.16. Consumo mnimo conjunto Xbee
47
Fig 4.1. Vista frontal Arduino Uno r3
54
Fig 4.2. Posterior Arduino Uno r3
55
Fig 4.3. Desmontaje y montaje regulador de tensin en Arduino Uno
56
Fig 4.4. Resultado final con y sin placa FTDI de un Arduino Uno sobre protoboard
58
Fig 4.5. Esquema del montaje con relacin de componentes
58
Fig 4.6. Diagrama del arduino de bajo consumo
59
Fig 4.7. Moteino
61
Fig 4.8. Mini Ultra 8MHz
63
Fig 4.9. Tinyduino
65
NDICE DE TABLAS
Tabla 1.1. Comparativa modelos Arduino
Tabla 1.2. Especificaciones Arduino Uno
Tabla 1.3. Capacidad en mA y descarga de bateras
Tabla 2.1. Modos Sleep del ATMega 328
Tabla 2.2. Mediciones de pins
Tabla 2.3. PRR
Tabla 2.4. Valor divisin del reloj interno
Tabla 2.5. Especificaciones Hardware Arduino Uno
Tabla 3.1. Consumo de Arduino Uno en mA
Tabla 3.2. Consumo en Modo Idle en mA
Tabla 3.3. Consumo en modo ADC en mA
Tabla 3.4. Tabla consumo en modo PWR_SAVE en mA
Tabla 3.5. Tabla consumo en modo EXT_STANBY en mA
Tabla 3.6. Consumo en modo STANDBY en mA
Tabla 3.7. Consumo en modo PWR_DOWN en mA
Tabla 3.8. Consumo de la aplicacin Blink en mA
Tabla 3.9. Consumo de la biblioteca Jeelib en mA
Tabla 3.10. Consumo de la biblioteca N0m1 en mA
Tabla 3.11. Consumo de la biblioteca Low.power en mA
Tabla 3.12. Especificaciones de Hardware Mini Ultra 8MHz
Tabla 3.13. Consumo Mini Ultra 8Mhz en mA
Tabla 3.14. Valores de modos Sleep Mini Ultra a 3.3V en mA
Tabla 3.15. Valores de modos Sleep Mini Ultra a 2.8V en mA
Tabla 3.16. Consumo Mini Ultra 8Mhz en mA. Aplicacin Blink
Tabla 3.17. Medidas bibliotecas Mini Ultra a 3.3 V
Tabla 3.18. Medidas bibliotecas Mini Ultra a 2.8V en mA sin perifricos
Tabla 3.19. Caractersticas mdulo Xbee
Tabla 3.20. Caractersticas Arduino Mega
Tabla 3.21. Consumo de Arduino Mega en mA
Tabla 3.22. Consumo de Arduino Mega en modo PWR_DOWN en mA
Tabla 3.23. Consumo Xbee
Tabla 3.24. Comparativa de consumos minimos distintos modelos
Tabla 4.1. Especificaciones Moteino
Tabla 4.2. Especificaciones Mini Ultra 8MHz
Tabla 4.3. Especificaciones Tinyduino
2
4
4
6
10
11
12
12
21
22
23
23
24
24
25
28
30
30
31
33
34
35
35
38
39
40
40
41
42
43
46
48
62
63
64
INTRODUCCIN
Arduino es una herramienta con la que sentir y controlar el entorno. Su modo
de funcionamiento es simple, consta de una plataforma de cdigo abierto
basada en una placa con un micro controlador y una aplicacin desde la que
desarrollar los programas para la placa.
Puede usarse para infinidad de proyectos ya que permite crear objetos que
interacten con interruptores, sensores, luces, motores y otros dispositivos para
obtener informacin diversa. stos a su vez pueden funcionar comunicndose
con un programa o ser totalmente autnomos, lo que ampla enormemente su
rango de aplicaciones.
Algunos proyectos realizados con Arduino van desde un sencillo pero eficaz
sistema de seguridad para abrir maletines a un complejo sistema domtico. El
lmite est en la imaginacin y talento de los desarrolladores.
Atendiendo a todas las virtudes del sistema es fcil comprender que sean miles
los usuarios de la plataforma y multitud los proyectos llevados a cabo. Uno de
los puntos fuertes de tales proyectos es la capacidad que tiene Arduino para
funcionar autnomamente. Es aqu de donde nace la necesidad de valorar el
consumo de dicha plataforma ya que para que un sistema autnomo sea til es
imperativo poder garantizar su funcionamiento en el tiempo.
En este trabajo se estudiar el consumo de varias placas, con mayor hincapi
en Arduino Uno, y se propondrn diferentes soluciones para optimizar y reducir
el consumo de dichas placas de modo que sean lo ms eficiente posible.
Se ofrece un estudio terico y prctico de soluciones de software y hardware
que pretenden reducir el consumo. Dichas soluciones de software son
fcilmente extrapolables al resto de placas arduino ya que comparten el mismo
sistema de programacin mientras que las de hardware deberan adecuarse a
las necesidades de la placa en cuestin.
Arduino
Tipos de Arduino
Caracterstica de Arduino
UNO
Mega 2560
Leonardo
Atmega 328
Atmega 2560
Atmega 32U4
16 MHz
16 MHz
16 MHz
14
54
20
Entradas analgicas
16
12
Salidas analgicas
32 Kb
256 Kb
32 Kb
2 Kb
8 Kb
2.5 Kb
1 Kb
4 Kb
1 Kb
Tipo de microcontrolador
Velocidad de reloj
DUE
AT91SAM3X8E
84 MHz
54
12
2 (DAC)
512 Kb
96 Kb
0 Kb
Arduino UNO
Microcontrolador
Tensin operativa
Tensin de entrada
(recomendada)
Input Voltage (limits)
Digital I/O Pins
Analog Input Pins
DC Current per I/O Pin
DC Current for 3.3V Pin
Flash Memory
SRAM
EEPROM
Velocidad de reloj
1.2.
ATmega328
5V
7-12V
6-20V
14 (of which 6 provide PWM output)
6
40 mA
50 mA
32 KB (ATmega328)
2 KB (ATmega328)
1 KB (ATmega328)
16 MHz
Tipo
Capacidad (mAh)
Descarga (%mes)
CR1212
18
0,25
CR1620
68
0,95
CR2032
210
NiMH AAA
900
30
375
Alkaline AAA
1250
35
NiMH AA
2400
30
1000
Alkaline AA
2890
80
Una opcin fcil y barata para alimentar nuestro Arduino Uno es utilizar pilas
alcalinas AAA. Teniendo en cuenta que ofrecen aproximadamente unos
1250 mAh y atendiendo al valor de corriente contnua reflejado en la tabla 2.1,
se obtiene la siguiente relacin:
1250
= 25
50
Cada uno de los distintos modos desactiva una cantidad diferente de recursos
del microcontrolador. Se aprecia como el modo Idle es el ms conservador
mientras que el modo Power-down es el ms agresivo. Ser el diseador de la
aplicacin el encargado de escoger qu modo se ajusta mejor a sus
necesidades aunque a priori si el objetivo es reducir el consumo del proyecto el
primer modo a tener en cuenta es el modo Power-Down.
Este modo detiene los relojes I/O, CPU y FLASH dejando funcionar el resto.
Esto mejora la percepcin de ruido del ADC permitiendo una mejor resolucin
de medidas. Se puede despertar de este modo de trabajo mediante un reset
externo, una interrupcin del Watchdog, un reset del Brown-out, una
interrupcin del Timer/Counter2 o una interrupcin externa en INT0 o INT 1
entre otras.
Al entrar en un modo Sleep es necesario configurar los pines para que usen la
mnima cantidad de energa. Si algunos pins no se usan se recomienda que
tengan un nivel definidos. Es importante que no existan cargas resistivas en los
mismos. Hay que tener en cuenta que en ocasiones la entrada lgica ser
necesaria para despertar de un modo sleep usando interrupciones por lo que
deber estar disponible.
10
Para configurar un pin lo nico que hace falta es definir si es INPUT o OUTPUT
y posteriormente el estado, HIGH o LOW. Mediante un sencillo bucle for se
pueden configurar todos a la vez en un sentido.
11
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
12
0000 1
0001 - 2
0010 - 4
0011 - 8
0100 - 16
0101 - 32
0110 - 64
0111 - 128
13
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard
2.4. Bibliotecas
Existe una multitud de bibliotecas para trabajar con Arduino. Al ser una
plataforma que utiliza el mismo programa para todas las placas se hace muy
sencillo utilizar dichas bibliotecas. Para el estudio en el que se centra este
trabajo se focaliza sobre aquellas que permitan modos de trabajo en bajo
consumo. Bsicamente se trata de funciones que permiten acceder de forma
sencilla y eficaz a dichos modos de trabajo.
En un origen se haba planteado la necesidad de realizar una biblioteca propia,
pero al indagar y observar la variedad de bibliotecas existentes para tal fin se
consider ms prctico y eficaz realizar una comparativa de al menos tres de
estas bibliotecas para valorar cul era ms eficiente y adaptable a las
necesidades de los futuros diseadores. Por supuesto existe la posibilidad de
combinar varias de ellas para optimizar todava ms los resultados.
Utilizar una biblioteca es sencillo. Debe descargarse el archivo desde la pgina
del programador. Normalmente se trata de una carpeta que hay que aadir a la
carpeta
Libraries que se encuentra en la ruta C:\Program Files
(x86)\Arduino\libraries. El siguiente paso es incluir la cabecera en el
cdigo que se programa y listo.
En este captulo se describen tres bibliotecas junto a las funciones que
desarrollan. La funcin de estas bibliotecas es optimizar el consumo del
microprocesador. En el captulo posterior se realiza una comparativa prctica
de ellas y se razonan conclusiones respecto a la mismas.
14
Jeelib tiene disponibles varias clases como Port, PortI2C o MilliTimer pero la
que es interesante para el objetivo de este trabajo es la clase Sleepy. Se trata
de una clase que permite codificar un ATmega en un modo bajo consumo y
que se detalla a continuacin.
Jeelib es un cdigo que permite trabajar en modo bajo consumo utilizando el
Watchdog Timer (WDT). Para funcionar correctamente requiere un vector para
manejar una interrupcin del WDT. Est formada por las siguientes funciones:
Sirve para estar un tiempo (definido en milisegundos) en low power mode. Para
usar esta funcin se debe incluir una definicin de la interrupcin del WDT. La
forma ms fcil de hacerlo es mediante la lnea ISR(WDT_vect)
{Sleepy::watchdogEvent ();}
Es una de las funciones ms socorridas a la programar ya que sustituye al
tpico delay. Permite poner Arduino en un modo Sleep Power-down por un
determinado espacio de tiempo.
Void Sleepy::powerDown()
15
Funcin: pwrSaveMode
Pone el Arduino en modo sleep PowerSave. El timer del cristal sigue
funcionando junto el Timer2.
Funcin: extStanbyMode
Pone el Arduino en modo sleep extStanby. Una function identical a la
pwrSaveMode con la excepcin de que el oscilador sigue trabajando para
poder despertar ms rpido.
Funcin: standbyMode
Pone el Arduino en modo sleep standby, modo de trabajo idntico al de la
funcin pwrDownMode con la excepcin de que el oscilador sigue trabajando
para poder despertar ms rpido.
Funcin: pwrDownMode
Pone el Arduino en modo sleep power Down Mode. Todos los sistemas
desactivados except el WDT y el reset externo. Extremadamente til para
modos de trabajo de bajo consumo.
Funcin: sleepDelay
Imita a la funcin de Arduino Delay poniendo el arduino en un modo sleep
durante un perodo determinado de tiempo. El tiempo se especifica en ms.
Funcin: sleepInterrupt
Pone al Arduino en un modo sleep hasta que una interrupcin se activa. Se
basa en dos valores, el valor que devuelve la interrupcin (0,1,etc) y el modo
del trigger (LOW, RISING, FALLING, CHANGE).
Las figuras 2.5 y 2.6 muestran dos ejemplos de cdigos sencillos en los que
usa dicha biblioteca para facilitar la comprensin en el manejo de la misma.
#include <Sleep_n0m1.h>
Sleep sleep;
unsigned long sleepTime; // cuanto tiempo pasara el Arduino en modo sleep
void setup()
{
Serial.begin(9600);
sleepTime = 50000; // define el valor de sleepTime en ms, tiempo mximo 49,7 das
}
void loop()
{
delay(100); // delay para dar tiempo a escribir al serial
16
#include <Sleep_n0m1.h>
Sleep sleep;
void setup()
{
Serial.begin(9600);
}
void loop()
{
delay(100); //tiempo para escribir via serial
Serial.println("ejecuta aqu tu cdigo");
Serial.print("durmiendo hasta interrupcin");
delay(100); //tiempo para escribir via serial
sleep.pwrDownMode(); //escoge sleep mode
sleep.sleepInterrupt(0,FALLING); //duerme hasta interrupcin
}
17
#include "LowPower.h"
void setup()
{
// La biblioteca no necesita setup
}
void loop()
{
// Entra en modo powerdown durante 8 segundos. Desactiva ADC y BOD
18
#include "LowPower.h"
// Se define el pin 2 como pin wake up
const int wakeUpPin = 2;
void wakeUp()
{
// Handler para la interrupcin del pin
}
void setup()
{
// Configura el pin wake up como input
pinMode(wakeUpPin, INPUT);
}
void loop()
{
// La interrupcin salta cuando el pin wake up es LOW
attachInterrupt(0, wakeUp, LOW);
// Entra en modo powerdown con ADC y BOD desactivados
// Despierta cuando el pin wake up es LOW
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
// Desactiva interrupcin.
detachInterrupt(0);
// Realiza cualquier accin. Leer sensor, transmitir, etc.
}
19
20
21
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
12,1
12,1
13,3
14,5
15,7
20,5
20,5
21,7
21,7
22,9
24,2
29,1
29,1
29,1
30,2
31,4
33,2
38,1
35,1
38,6
39,9
41,1
42,3
39,8
38,7
39,8
41,1
44,7
48,3
39,8
39,8
39,8
42,3
44,7
48,3
39,8
39,8
39,8
42,3
44,7
48,3
39,8
39,8
39,8
42,3
44,7
48,3
5v
6v
7v
8v
9v
10v
11v
12v
La Tabla 3.1 y la Figura. 3.3. muestran los valores obtenidos en la medicin del
consumo de la placa en mA. Se mide un valor de 34mA para una alimentacin
de 7V y trabajando a 16Mhz. stos seran los valores standard de trabajo de
Arduino Uno ya que es la alimentacin y frecuencia que recomienda Arduino. Si
se revisan los clculos anteriores se comprueba que sigue siendo un consumo
muy elevado para dispositivos autnomos que deban trabajar con bateras por
lo que el estudio de este TFC queda justificado.
60
Consumoen mA
50
40
500Khz
1MHz
30
2Mhz
4Mhz
20
8Mhz
16Mhz
10
0
5v
6v
7v
8v
9v
10v
11v
Tension de entrada
12v
22
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
13,3
13,3
13,3
14,5
15,7
19,5
21,8
21,8
21,8
24,3
25,5
30,3
30,3
30,3
31,6
31,6
34
38,9
38,9
40,1
41,3
43,7
46,2
41,3
41,3
42,5
42,5
46,2
49,8
41,3
41,3
42,5
42,5
46,2
51
41,3
41,3
42,5
42,5
46,2
51
41,3
41,3
42,5
42,5
46,2
51
23
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
13,3
13,3
13,3
12,1
13,3
21,8
21,8
21,8
21,8
21,8
21,8
30,3
30,3
29,1
29,1
29,1
29,1
40,1
40,1
40,1
40,1
38,9
40,1
40,1
40,1
40,1
40,1
41,3
41,3
40,1
40,1
40,1
40,1
41,3
41,3
40,1
40,1
40,1
40,1
41,3
41,3
40,1
40,1
40,1
40,1
41,3
41,3
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
12,1
12,1
12,1
12,1
13,3
13,3
21,8
21,8
21,8
21,8
21,8
21,8
27,9
27,9
27,9
27,9
26,7
27,9
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
34
Para el modo Pwr_save se mantiene una relacin lineal (Tabla. 3.4 y Figura
3.5) en la que el valor de saturacin a partir de los 8V es idntico para todas las
24
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
12,1
12,1
12,1
12,1
13,3
13,3
21,8
21,8
21,8
21,8
21,8
21,8
27,9
27,9
27,9
27,9
26,7
27,9
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0,
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0,
34,0
34,0
34,0
34,0
34,0
34,0
34,0
34,0
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
12,1
12,1
12,1
12,1
13,3
21,8
20,6
21,8
21,8
20,6
21,8
27,9
27,9
27,9
27,9
27,9
27,9
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
25
vuelve a ser lineal y se siguen manteniendo los 27.9 mA para 7 Vin y 16 MHz.
Ofrece unos valores muy semejantes a los del modo EXT_STANBY. A este
modo de trabajo tampoco le afecta decisivamente la variacin de frecuencia
aunque a 8 MHz el consumo es algo menor por lo que para este modo de
trabajo se recomienda trabajar a 8 MHz.
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
13,3
12,1
13,3
12,1
13,3
20,6
20,6
20,6
20,6
20,6
20,6
27,9
27,9
27,9
27,9
27,9
26,7
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
32,8
Este modo Sleep es tericamente el que menor consumo debe mostrar (Tabla
3.7 y Figura 3.5.). Los valores son muy semejantes al modo STANDBY, algo
totalmente coherente ya que es el mismo modo pero sin oscilador.
Curiosamente la mejor frecuencia de trabajo son los 16 MHz ofreciendo 16,7
mA para los 7 Vin. De todos los modos medidos es que el menor consumo
muestra por lo que tal y como se esperaba ser el modo de trabajo escogido
para tratar de operar en modos de bajo consumo.
26
consumos a pesar de que hay estudios que si que los reflejan. De todos modos
se recomienda configurarlos como salidas y en estado HIGH.
Finalmente en el mejor de los casos se obtiene un consumo de 9.7 mA
teniendo a la placa en el modo Sleep ms profundo sin hacer nada y sin ningn
dispositivo acoplado (antenas, sensores, motores, etc). Si se tiene en cuenta
que la corriente aportada por un pack de pilas AA ser de 2890 mA (Tabla 1.3.)
el consumo estimado (no se tiene en cuenta el factor de descarga de las
propias pilas) ser del orden de 12 das siempre y cuando la placa no haga
nada. No parece ni mucho menos una solucin atractiva para ningn proyecto
que deba funcionar de manera autnoma.
En el siguiente captulo se realizan medidas o una aplicacin simple que
ilumina un led con el fin de valorar el consumo de la placa operando y
comprobar la eficacia de las bibliotecas anteriormente expuestas.
500KHz
40
1MHz
30
2MHz
20
4MHz
8MHz
10
40
40
35
35
Consumo en mA
16MHz
1MHz
25
2Mhz
20
15
4Mhz
10
8Mhz
16Mhz
35
25
1MHz
20
2Mhz
15
4Mhz
10
8Mhz
16Mhz
Modo EXT_STANDBY
1MHz
20
2Mhz
15
4Mhz
10
8Mhz
16Mhz
5v 6v 7v 8v 9v 10v 11v 12v
Tensin de entrada
Modo PWR_SAVE
35
30
Consumo en mA
30
500Khz
25
35
500Khz
Modo ADC
40
30
Modo IDLE
Consumoen mA
500Khz
30
500Khz
25
1MHz
20
2Mhz
15
4Mhz
10
8Mhz
16Mhz
0
5v 6v 7v 8v 9v 10v 11v 12v
Tension de entrada
Modo STANDBY
30
Consumo en mA
Consumo en mA
50
45
Consumo en mA
60
27
500Khz
25
1MHz
20
15
2Mhz
10
4Mhz
8Mhz
16Mhz
5v 6v 7v 8v 9v 10v11v12v
Tension de entrada
Modo PWR_DOWN
28
5v
6v
7v
8v
9v
10v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
13,3
13,3
13,3
13,7
14,6
15,8
21,8
21,8
21,8
23,1
24,3
25,5
30,4
29,1
30,4
31,6
31,6
34,0
40,1
40,1
37,7
40,2
42,5
46,2
40,1
41,3
41,3
42,5
46,2
49,8
40,1
41,3
41,3
42,5
46,2
49,8
29
Consumo en mA
60
50
500KHz
40
1MHz
30
2MHz
20
10
4MHz
8MHz
5v
6v
7v
8v
Tensin de entrada
9v
10v
16MHz
30
5v
6v
7v
8v
9v
10v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
12
12,08
10,9
11,4
10,2
10,2
19,9
19,9
19
19,3
18,7
17,5
26,3
26
25,4
25,4
24,7
23,5
32,6
32,6
27,8
31,4
31,4
29,6
32,6
32,6
31,4
31,4
31,4
31,4
32,6
32,6
31,4
31,4
31,4
31,4
5v
6v
7v
8v
9v
10v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
11,5
11,5
11,5
11,5
12,7
13,3
18,7
18,7
19,9
19,9
21,1
22,1
27,8
27,8
27,8
26,6
28,3
29,6
35
35
36,2
36,2
37,5
38,6
37,5
37,5
37,4
38
37,5
38,6
37,5
37,5
37,4
38
37,5
38,6
31
5v
6v
7v
8v
9v
10v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
12,1
12,1
12,1
12,1
12,1
10,8
19,9
19,9
18,7
19,3
19,3
18,4
27,2
27,2
25,9
25,9
25,6
24,7
31,4
31,4
31,4
31,4
31,1
30,2
31,4
31,4
31,4
31,4
31,4
31,4
31,4
31,4
31,4
31,4
31,4
31,4
32
Para poder trabajar cmodamente con las placas, se opta por soldar cables en
los pines DTR (Data Terminal Ready), GND, TX y RX del adaptador FTDI y a la
vez en los mismo pines ms los que corresponden al Vin y GND de la placa
Mini Ultra 8MHz. Una vez Hecho esto lo nico que hay que hacer es conectar
ambos DTR y GND, el pin TX de la placa FTDI con el RX del Mini Ultra 8Mhz y
el RX de la placa FTDI con el TX de la placa Mini Ultra 8MHz. Slo que
alimentar la placa Mini Ultra a 3.3V y conectarla a tierra (Ver Fig.3.8.)
Usando el Arduino IDE hay que seleccionar la tarjeta Arduino pro o pro mini
(3.3, 8MHz) w/ ATmega328 en la opcin Herramientas/Tarjetas. El siguiente
paso es cargar los programas de la misma manera que con cualquier otra placa
de Arduino.
Hay que tener presente que la placa Mini Ultra 8MHz tiene un rango de
alimentacin de 3.3 a 6V, por lo que hay que ser cuidadoso con la fuente de
alimentacin y aplicar la tensin adecuada en todo momento.
33
34
pro328.build.core=arduino
pro328.build.variant=standard
500KHz 1MHz
2MHz
4MHz
8MHz
2,8V
0,56
0,76
1,13
1,86
2,94
3,3V
0,64
0,9
1,34
2,23
3,59
Al medir el consumo de la placa los valores obtenidos son realmente
interesantes. Si bien es cierto que se parte de la mitad de frecuencia de trabajo,
comparando el consumo mnimo del Arduino Uno (ver tabla 3.1) se pasa de
unos 13mA, a frecuencias inferiores a 4 MHz a aproximadamente 0,5 mA. Si
se opera a una frecuencia ms elevada, por ejemplo 8 MHz se miden alrededor
de 3 mA lo cual sigue siendo un valor a tener en cuenta.
Se aprecia claramente el descenso de consumo conforme se disminuye la
frecuencia de trabajo. La diferencia entre valores al disminuir la tensin de
entrada es mayor conforme mayor es la frecuencia de trabajo.
El siguiente paso es medir el consumo de la placa para los distintos modos
Sleep y comparar los resultados con los obtenidos sobre la placa de Arduino
Uno.
Se realiza una comparativa de los modos Sleep alimentando la placa a 2.8V y a
3.3V y trabajando a varias frecuencias.
35
Las medidas alimentando a 3.3V (ver tabla 3.14) muestran un valor de apenas
120A en el modo ms restrictivo. Si se compara con los 3.52mA que ofrece el
modo Idle a 8MHz se obtiene una mejora ms que considerable.
IDLE
ADC
PWR_SAVE
EXT_STANDBY
STANBY
PWR_DOWN
500KHz 1MHz
2MHz
4MHz
8MHz
0,64
0,89
1,34
2,23
3,52
0,39
0,41
0,45
0,62
0,7
0,35
0,35
0,38
0,44
0,52
0,33
0,35
0,35
0,44
0,53
0,31
0,31
0,31
0,31
0,31
0,12
0,12
0,12
0,13
0,12
500KHz
1MHz
2MHz
4MHz
8MHz
IDLE
0,56
0,77
1,13
1,87
2,95
ADC
0,36
0,37
0,4
0,46
0,57
PWR_SAVE
0,32
0,33
0,35
0,4
0,46
EXT_STANDBY
0,32
0,32
0,36
0,4
0,46
STANDBY
0,28
0,28
0,28
0,28
0,28
PWR_DOWN
0,12
0,12
0,11
0,12
0,11
Se observa una mejora en los consumos pero el consumo mnimo trabajando
a PWR_DOWN vuelve a ser el mismo. Dado que normalmente se usar este
modo de trabajo para diseos de bajo consumo y que el fabricante establece
los 3.3V como tensin operativa se recomienda operar a esa tensin y modo
36
37
38
5
4,5
Consumo en mA
4
3,5
500KHz
3
2,5
1Mhz
2Mhz
1,5
4Mhz
8MHz
0,5
0
2,8V
3,3V
Tensin de entrada
2,8V
3,3V
500KHz 1Mhz
2Mhz
4Mhz
8MHz
1,2
1,5
1,8
2,6
3,6
1,8
2,1
2,4
3,2
4,3
39
1MHz
Jeelib
N0m1
Low.power
2MHz
1,5
1,6
1,5
4MHz
1,5
1,7
1,5
8MHz
1,5
1,8
1,4
1,6
1,8
1,5
40
1MHz
2MHz
4MHz
8MHz
Jeelib
0,845
0,845
0,845
0,845
N0m1
1
1,2
1,3
1,6
Low.power
0,845
0,845
0,845
0,845
41
Microcontrolador
Voltaje de funcionamiento
Voltaje de entrada
(recomendado)
ATmega1280
5V
7-12V
6-20V
16
40 mA
50 mA
128 KB de las cuales 4 KB las
usa el gestor de
arranque(bootloader)
8 KB
EEPROM
4 KB
Velocidad de reloj
16 MHz
42
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
18,1
18,8
19,6
21,8
25,4
35,2
26,2
26,9
28
30,7
35,3
44,2
49
49,8
51,2
54,3
58,3
67,4
49,7
50,3
51,4
54,8
59,7
71,3
49,7
50,3
51,4
54,8
59,7
71,3
49,7
50,3
51,4
54,8
59,7
71,3
49,7
50,3
51,4
54,8
59,7
71,3
49,7
50,3
51,4
54,8
59,7
71,3
43
5v
6v
7v
8v
9v
10v
11v
12v
500KHz 1MHz
2MHz
4MHz
8MHz
16MHz
16,9
16,7
16,8
16,8
17,3
17,1
23,8
23,4
23,3
23,3
23,7
23,7
31,2
31,2
31,2
31,2
31,2
31,2
31,3
31,2
31,2
31,2
31,2
31,2
31,3
31,2
31,2
31,2
31,3
31,2
31,3
31,3
31,3
31,3
31,3
31,2
31,4
31,3
31,3
31,3
31,3
31,2
31,4
31,3
31,4
31,4
31,4
31,2
44
45
46
SM1
SM2
SM3
SM4
SM5
SM6
Consumo total en
Consumo XBEE en
mA
mA
69,4
0,1
70,1
0,8
114,1
44,8
114,1
44,8
114,1
44,8
114,1
44,8
47
48
embargo el coste de un starter kit de Arduino oscila entre los 95 y los 100 lo
que supone la mitad del coste de Waspmote.
Dado que para optmizar el consumo de cualquier aplicacin es imprescindile
trabajar en modos de bajo consumo Arduino no puede considerarse una opcin
real a un nodo comercial dado el elevado consumo de su modo bajo consumo
(13,3mA vs 55A). En cambio dado que su coste es aproximadamente la mitad
(97 vs 199) es una alternativa perfectamente vlida para diseos poco
exigentes en consumo.
La placa Mini Ultra 8MHz otorga un consumo de 3.6mA en modo operativo y
120A en modo reposo por lo que s es una alternativa real en cuanto a
consumos se refiere. El reducido coste de la placa, aproximadamente 9, la
define como una aternativa a tener en cuenta a falta de comprobar la
adaptabilidad y consumo una vez incorporados los perifricos externos.
Arduino
Uno
Arduino
Arduino
Mini Ultra Mega
8MHz
Waspmote
Libelium
Consumo operativo
12.1 mA
0.76 mA
18.1 mA
15 mA
Consumo en reposo
12.1 mA
0.12 mA
16.7mA
0.05 mA
Kit 97
Unidad 9
Unidad
47,19
Kit 199
Precio
Unidad 14
49
CONCLUSIONES
Objetivos alcanzados
El objetivo de este trabajo es evaluar el consumo de Arduino y valorar su
adecuacin para entornos de bajo consumo. Al realizar las mediciones se
comprueba que Arduino no es un sistema pensado para trabajar en estos
entornos y que aparentemente no proporciona soluciones inmediatas. Se ha
planteado afrontar esta situacin estudiando dos vas posibles de modificacin,
una alternativa va hardware y otra va software. Debido a la facilidad de
implementacin se han considerado de mayor utilidad las soluciones de
software y por ello se ha hecho ms hincapi sobre stas.
A pesar de que no se ha conseguido un consumo que realmente pueda
considerarse de bajo consumo para la placa Arduino Uno, s que se han
registrado mejoras importantes. Adems se ha comparado la efectividad de
distintas bibliotecas diseadas para modos de trabajo bajo consumo con
resultados positivos. De las tres bibliotecas estudiadas se muestra cul es la
que mejor rendimiento ofrece. Todo esto otorga a futuros diseadores una gua
sencilla y til para optimizar el consumo de proyectos en Arduino.
El xito del estudio se logra con la placa Arduino Mini Ultra 8 MHz alcanzando
consumos de apenas 25 A para el modo en reposo. Si por ejemplo se
diseara una aplicacin que trabajara un segundo cada minuto, teniendo en
cuenta que el consumo en modo trabajo obtenido es de 1.5 mA, se obtendra
un consumo medio de solamente 45 A. Alimentando con una batera estndar
de 2890 mAh se logra una vida til de algo ms de 7 aos. Obviamente habra
que valorar la descarga de la propia batera y el consumo de posibles
dispositivos aadidos. Con todo, es un resultado muy positivo y que aporta una
solucin real a diseos pensados para trabajar en modo bajo consumo.
Por ltimo se ha valorado el conjunto de una placa de Ardunio Mega con un
modlo Xbee. Es un sistema que claramente no est pensado para entornos de
bajo consumo y con el cual no se logra un resultado del todo eficaz. De todos
modos s que se logra reducir el consumo original en un 83% trabajando con
los modos Sleep y las frecuencias de trabajo, lo que resulta muy til de cara a
optimizar recursos de futuras aplicaciones.
Siguientes pasos
De cara a profundizar en la investigacin lo primero que se recomienda es
llevar a cabo las pruebas de hardware estudiadas para con el Arduino Uno. El
controlador de potencia externo unificado a una placa de Arduino mejorada
(sustitucin del regulador de tensin) y configurada para un modo de trabajo en
bajo consumo puede dar resultados ptimos en cuanto a mejora de
rendimiento.
50
Estudio de ambientalizacin
Gran cantidad de diseos con Arduino funcionan con baterias y pilas alcalinas.
Existen gran variedad de estudios que demuestran el impacto negativo que
producen estas baterias cuando no se desechan correctamente. Cursos de
agua y suelos se ven muy afectados por el mercurio de las pilas y la flora y la
fauna se resienten considerablemente.
Optimizar la vida til de dichas pilas y bateras as como la correcta gestin de
los residuos repercute directamente sobre nuestro ecosistema. Por lo tanto,
gestionar y optimizar la vida til de las baterias, pilas y fuentes de alimentacin
repercute directamente y de forma positiva en la conservacin y mejora del
medio ambiente.
51
BIBLIOGRAFA
[1]
[2]
[3]
Wiki espacio de Arduino, espacio donde compartir ideas sobre Arduino
URL: http://arduino720.wikispaces.com/Power+Saving+Techniques
[4]
Surprisingedege, Espacio destinado a la electrnica en general URL:
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
[5]
The green jornal. Blog destinado a la implementacin de soluciones
domticas
URL: http://tae09.blogspot.com.es/2012/10/arduino-low-power-tutorial.html
[6]
Blog personal del Dr. Jeffrey Groff
URL:
ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
http://www.fiz-
[7]
Electrical Engineering Stack Exchange, lugar de encuentro de ingenieros
elctronicos.
URL: http://electronics.stackexchange.com/questions/49182/how-can-a-let-myatmega328-run-for-a-year-on-batteries
[8]
Seta43. Blog de artculos de diseos electrnicos. URL:
http://seta43.blogspot.com.es/2013/03/arduino-reduciendo-consumo-parte2.html
[9]
EngBlaze.
Web
abierta
de
recursos
electrnicos.
URL:
http://www.engblaze.com/low-power-libraries-for-arduino-control-sleep-withsingle-function-calls/
[10] Blog
personal
de
Donald
Morrisey
URL:
http://donalmorrissey.blogspot.com.es/2010/04/putting-arduino-diecimila-tosleep-part.html
[11] Citizen-sensing. Site de la universidad de St. Andrews, departamento de
ciencia
computacional.
URL:
http://citizen-sensing.org/2013/07/arduinowatchdog/
[12] Openhomeautomation. Site de automatismos para el hogar. URL:
http://www.openhomeautomation.net/arduino-battery/
[13] Laboratoriy
for
Experimental
Computer
Science
at
the
Academy
of
Media
Arts
Cologne.
URL:
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
[14] Hackaday. Blog personal de proyectos electrnicos. URL:
http://hackaday.com/2012/08/18/making-the-arduino-sleep-the-long-sleep/
52
[15] Olimex.
Web
de
herramientas
de
desarrollo.
URL:
http://olimex.wordpress.com/2013/11/05/experimenting-with-low-power-modesand-arduino/
[16] Blog
personal
de
Alan
Mitchel.
URL:
http://alanbmitchell.wordpress.com/2011/10/02/operate-arduino-for-year-frombatteries/
[17] RocketScream. Enlace a la placa Arduino Mini Ultra 8MHz. URL:
http://www.rocketscream.com/shop/mini-ultra-8-mhz-arduino-compatible
[18] Lowpowerlab.
Web
http://lowpowerlab.com/moteino/
de
diseo
de
Moteino.
URL:
[19] Geekfactory.
Web/blog
de
suministros
electrnicos.
http://www.geekfactory.mx/arduino/mitos-de-arduino-las-baterias-duran-pocopara-alimentar-un-arduino/
[20] Blog personal de Hans Crijns, ingeniero elctrico y desarrollador. URL:
http://hwstartup.wordpress.com/2013/03/11/how-to-run-an-arduino-on-a-9vbattery-for-weeks-or-months/
[21] Gammon Software Solutions. Web dedicada a soluciones electrnicas.
URL: http://www.gammon.com.au/forum/?id=11497
[22] Rocket
Scream.
Acceso
a
biblioteca
low.power.
URL:
http://www.rocketscream.com/blog/2011/07/04/lightweight-low-power-arduinolibrary/
[23] Sparkfun. Web de suministros electrnicos y soporte al diseo de
aplicaciones. URL: https://www.sparkfun.com/tutorials/309
[24] Tim.cexx.org.
Web
de
http://tim.cexx.org/?page_id=760
desarrollo
de
mosquino.
URL:
[25] Blog
personal
de
Patrick
Thalin.
URL:
http://www.thalin.se/2013/04/arduino-pro-mini-low-power-modification.html
[26]
electrnicos.
URL:
53
apoyo
electrnico.
[36] Makezine.
Revista
digital
sobre
electrnica.
http://makezine.com/2012/04/24/soapbox-my-top-10-favorite-arduinocompatible-clones-and-derivatives/
URL:
URL:
[37] Sutsburbiablog.
Blog
ingls
sobre
electrnica.
URL:
http://sustburbia.blogspot.co.uk/2014/03/further-wanderings-in-low-powerland.html
[38] Socgadget. Web sobre gadgets electrnicos y configuraciones. URL:
http://www.socgadget.com/2011/07/low-power-xbee-module/
[39] Internet de las cosas. Web sobre diseos wireless e internet de las
cosas. URL: http://www.socgadget.com/2011/07/low-power-xbee-module/
[40] Blog personal de John Henry Sammer. Detalla modos de trabajo del
mdulo
Xbee
S1.
URL:
http://www.johnhenryshammer.com/WOW2/pagesHowTo/xbeeSeries1.php#ind
ex
[41] Fiz-ix. Blog sobre electrnica general. URL: http://www.fizix.com/2012/11/low-power-xbee-sleep-mode-with-arduino-and-pin-hibernation/
[42] Arduino
projects.
URL:
http://arduprojects.blogspot.com.es/2013/05/comunicacion-entre-arduinosmediante.html
[43] Sustitucin
regulador
de
http://5hertz.com/tutoriales/?p=377#4.ardconv
tensin
[44] Especificaciones
wapsmote
http://www.libelium.com/products/waspmote-mote-runner-6lowpan/
URL:
URL:
54
ANEXOS
CAPTULO 4. SOLUCIONES HARDWARE
A lo largo de este captulo se presentan diferentes soluciones de
implementacin fsica con el fin de optimizar el consumo de la placa Arduino
Uno. Se explica cmo cambiar componentes de la placa, crear una placa en
una protoboard con los componentes mnimos, el uso de un controlador
externo y el estudio de distintos clones de la placa.
Los estudios de este captulo son tericos. No se comprueba empricamente el
resultado de las soluciones presentadas.
La figura 4.1. muestra los componentes bsicos que conforman la placa. Nos
encontramos con el microprocesador ATM328, un cristal de 16Mhz, un
regulador de tensin que es una variante del LM1117, el puerto USB, la
alimentacin y un botn de reset junto a varios leds. Estas piezas son
susceptibles a ser estudiadas. El resto de componentes (pines de entrada y
salida, condensadores y resistencias) a priori no deben afectar
considerablemente en el consumo de la placa y su modificacin es ms
compleja.
55
La figura 4.2 muestra la parte trasera de la placa. Tiene unos orificios que
permite su acoplamiento a otros dispositivos o placas de mayores de
dimensiones para integrarla a distintos proyectos. Todos los elementos estn
soldados a la placa.
56
57
Fig. 4.4. Resultado final con y sin placa FTDI de un Arduino Uno sobre
protoboard.
58
59
= 166,6 = 6,9
0.045
60
.035 = 0.583
600(10)
A este valor hay que aadir los 11W que consume el propio controlador de
potencia por lo que se obtiene un valor total de 0.594mW.
7.5
= 12.864 = 536 = 17
0.583
61
Moteino
62
Microcontroller
Transceiver
Transceivers frequencies
Operating Voltage
Input Voltage
(recommended)
Input Voltage (max limits)
Digital I/O Pins
Analog Input Pins
DC Current per I/O Pin
DC Current for 3.3V Pin
Flash Memory
SRAM
EEPROM
Clock Speed
MISC
4.5.2.
ATmega328
RFM12B (all revisions) and RFM69
W/HW/CW (R3, R4)
434Mhz (universal), 868Mhz (EU), 915Mhz
(US, Australia, etc.)
3.3V
3.3V-9V
3.3V 13V
14+6 (6 PWM capable: marked with ~
symbol)
8 (2 analog-only pins more than regular
Arduinos)
30 mA
40 mA
32 KB of which 1 KB used by DualOptiboot
bootloader
2 KB
1 KB
16 MHz
Onboard LED on pin D9 instead of D13 (D9 is
PWM!)
RFM12B or RFM69 SPI-CS on D10
FLASH SPI-CS on D8
A6 and A7 are analog pins only, cannot be
used as digital pins
Esta placa se ha diseado con el claro objetivo de realizar una placa Arduino
de bajo consumo. Uno de los puntos fuertes es que adems proporciona una
biblioteca para poder gestionar esos modos de trabajo en bajo consumo.
Ademas incorpora un reloj de 8Mhz respecto al de 16Mhz de Arduino Uno y su
tensin de trabajo es de 3.3V respecto a los 5 de Arduino Uno. Tamben
incorpora un regulador de tensin con apenas 1,6A de quiescent current. Se
hace necesario un dispositivo externo FTDI para cargar los programas dado
que no incorpora ningn puerto USB. El coste ronda los 12 lo que supone la
mitad de lo que cuesta Arduino Uno.
63
64
Tinyduino
65
66
67
68
69
70
71
72