You are on page 1of 17

LUIS LLAMAS

INGENIERA, INFORMTICA Y DISEO

INICIO INGENIERIA INFORMTICA DISEO 3D ACERCA DE MI CONTACTO

TUTORIALES ARDUINO
Search

ENTRADAS SIGUENOS EN

ANALGICAS EN
ARDUINO
TWITTER G+ LINKEDIN RSS

SIGUE LEYENDO EN

23 SEPTIEMBRE, 2014 SHARE ON:


TUTORIALES
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
TUTORIALES
ARDUINO

MT O DO S PARA CO NVERT IR
T EXT O A NMERO EN
ARDUINO

L IBRERA ARDUINO
L INKEDL IST

IMPL EMENT AR UNA L INKED


L IST EN ARDUINO

En entradas anteriores hemos visto cmo emplear las


entradas digitales de nuestro Arduino. Tambin hemos
usado estas entradas para leer el estado de un pulsador. L IBRERA ARDUINO L IST
En esta entrada vamos a ver las entradas analgicas, su
funcionamiento y caractersticas.

Las entradas analgicas funcionan de una forma


similar a las entradas digitales, por lo que en la prctica el IMPL EMENT AR UN ARRAY DE
montaje y cdigo final son muy similares. Por tanto, es de T AMAO DINMICO EN
aplicacin la mayora de lo que vimos en esta entrada. Sin ARDUINO

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
aplicacin la mayora de lo que vimos en esta entrada. Sin
embargo en ciertos aspectos son radicalmente
distintos, por lo que para entender correctamente su uso
y funcionalidad es necesario veamos un mnimo de teora.

OTRAS
QU ES UNA ENTRADA CATEGORIAS
ANALGICA? DISEO
Una seal analgica es una magnitud que puede
tomar cualquier valor dentro de un intervalo Vcc y
+ Vcc. Por ejemplo, una seal analgica de tensin entre
0V y 5V podra valer 2,72V, o cualquier otro valor con
cualquier nmero de decimales. Por contra, recordemos
que una seal digital de tensin terica nicamente poda
registrar dos valores (en el ejemplo, 0V o 5V). INFORMTICA
Por norma general en los autmatas las entradas
analgicas son ms escasas, ms lentas y ms caras
que las entradas digitales. En el caso de Arduino uno
disponemos de un nmero variable de entradas
analgicas, que en el caso de Arduino Uno y Mini Pro son
6, y en el Arduino Mega son 16. Este es un nmero ms
que respetable de entradas analgicas, que rivaliza o
INGENIERIA
supera a autmatas tradicionales de coste muy superior.

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Como vimos al explicar las entradas digitales, una
entrada digital supone un proceso de transformacin de
una seal en un valor digital, atribuyendo un valor HIGH a
las medidas que superen un valor umbral, y LOW a lo que
quedan por debajo. Por el contrario, una entrada PROGRAMACION
analgica proporciona una medicin codificada en
forma de un valor digital con un nmero N de bits.

Es importante entender que en el mundo real


cualquier seal de tensin es siempre analgica. Un valor
digital es un concepto, una abstraccin. Sin embargo
conviene sealar que la medicin que proporciona una
ZONA GEEK
entrada analgica tambin es un valor digital, por lo
que igualmente es una abstraccin. Esto nos lleva al
concepto de precisin de la medicin.

PRECISIN DE LA MEDICIN
Para entender la precisin de una entrada analgica es
FREEWARE
necesario entender cmo funciona un conversor analgico
digital (ADC), que es su componente fundamental. Un ADC
es un dispositivo que convierte una medicin
analgica en una medicin digital codificada con un CALCULADORAS
nmero N de bits.

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Existen muchas formas de construir un ADC, pero lo

MIS LIBRERIAS
importante es entender que en realidad no medimos el
valor analgico con todos sus decimales, sino que lo
clasificamos dentro de 2^N niveles, que definen 2^N-1 ARDUINO
intervalos. El ancho de este intervalo medido en mV es
la precisin de la seal. Cuanto mayor sea el nmero de
bits, mayor ser el nmero de intervalos, menor ser el
ancho del intervalo, y por tanto mejor la precisin de la
medicin.

En el caso de Arduino Uno, Mini Pro, y Mega, las


entradas analgicas disponen de 10 bits de resolucin, lo
que proporciona 1024 niveles digitales, lo que a 5V
supone una precisin de la medicin de +-2,44mV.
Arduino Due tiene una resolucin de 12bits, 4096 niveles
digitales, lo que supone una precisin de 0,61 mV.

PRECISIN RELATIVA
Hasta ahora hemos supuesto un autmata alimentado
entre 0V y 5V, que mide una seal analgica de tensin
entre 0V a 5V. En este caso, con un ADC de 10 bit tenemos
una precisin de 4,88mV, lo que supone una precisin
relativa respecto a la seal de entrada de 0,1%
(1/1024).

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Sin embargo, supongamos que medimos una seal
que vara entre 0V y 1V. En este caso, con el mismo ADC
de 10 bit tendramos la misma precisin absoluta de
4,88mV, pero una menor precisin relativa respecto a la
seal, que caera hasta 0,5%.

Es decir, si realizamos una medicin a una seal


que vara en un lmite inferior a Vcc estamos
perdiendo precisin relativa. Esto es la consecuencia de
no aprovechar todo el rango de la medicin, por lo que en
realidad el ADC se comporta como si tuviera un nmero
inferior de bits.

REFERENCIA DE TENSIN ANALGICA


(AREF)
Para resolver esta situacin Arduino permite cambiar
la tensin tomada como referencia por el conversor
analgico digital. El valor de la referencia se cambia con la
funcin AnalogRef, y los valores posibles son:

DEFAULT: Valor por defecto, correspondiente con Vcc


(5V o 3.3V, segn modelos)
INTERNAL: Corresponde a 1.1V (en Atmega 168 y 328)
EXTERNAL: Voltaje aplicado de forma externa en el pin
Vref (siempre entre 0 y Vcc
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
INTERNAL1V1 y INTERNAL2V56, correspondientes a
1.1V y 2.56V (slo en Mega)

En el caso de usar la referencia de tensin externa


(EXTERNAL), si sabemos con total seguridad que una seal
no va a superar de un cierto valor de tensin, por ejemplo
0.7V, podemos proporcionar este valor como
referencia a travs del Pin Aref . La medicin se
realizar tomando esta tensin como referencia en lugar
de Vcc, por lo que recuperamos toda la precisin relativa.

Si modificamos la tensin de referencia, debemos


definir el modo mediante la funcin AnalogRef
antes de realizar cualquier lectura analgica.

En caso de introducir un valor de tensin en el pin


Aref no debemos superar este valor en las
entradas analgico. Adems, en ningn caso

superaremos la tensin de alimentacin de


Arduino. De lo contrario podramos daar los pines
analgicos.

CONEXIN DE ENTRADAS
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
CONEXIN DE ENTRADAS
ANALGICAS EN ARDUINO
Supongamos que dispongamos un sensor analgico
que proporciona una seal analgica entre 0V a 5V. El
esquema de conexin es similar al que empleamos para
realizar la lectura digital.

CDIGO EN ARDUINO
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
El cdigo para realizar la lectura es realmente sencillo,
y similar al que vimos para las entradas digitales.
Simplemente realizamos la lectura mediante AnalogRead()
y almacenamos el valor devuelto.
1 const int sensorPin = A0; // seleccionar la entrada para el sensor
2 int sensorValue; // variable que almacena el valor raw (0 a 1023)
3
4 void setup()
5 {
6 Serial.begin(9600);
7 }
8
9 void loop()
10 {
11 sensorValue = analogRead(sensorPin); // realizar la lectura
12
13 //mandar mensaje a puerto serie en funcin del valor leido
14 if (sensorValue > 512)
15 {
16 Serial.println("Mayor que 2,5V");
17 }
18 else
19 {
20 Serial.println("Menor que 2,5V");
21 }
22 delay(1000);
23 }

El valor devuelto por la funcin AnalogRead() se


codifica como un nmero entero 0 a 1023. En caso de
querer convertir este valor en un valor de tensin
podemos usar la siguiente variacin:

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
1 const int sensorPin = A0; // seleccionar la entrada para el sensor
2 int sensorValue; // variable que almacena el valor raw (0 a 1023)
3 float value; // variable que almacena el voltaje (0.0 a 5.0)
4
5 void setup()
6 {
7 Serial.begin(9600);
8 }
9
10 void loop()
11 {
12 sensorValue = analogRead(sensorPin); // realizar la lectura
13 value = fmap(sensorValue, 0, 1023, 0.0, 5.0); // cambiar escala a 0.0 - 5.0
14
15 Serial.println(value); // mostrar el valor por serial
16 delay(1000);
17 }
18
19 // cambio de escala entre floats
20 float fmap(float x, float in_min, float in_max, float
21 {
22 return (x - in_min) * (out_max - out_min) / (in_max
23 }

Sin embargo tener en cuenta que las operaciones en


coma flotante (con decimales) son mucho ms lentas que
con enteros por lo que intentar evitar tener que
realizar esta conversin y trabajar siempre que sea
posible con nmeros enteros.

FRECUENCIA DE MUESTREO
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Con el cdigo empleado la frecuencia de muestreo
es aproximadamente 9600 Hz, es decir, unos 100 micro
segundos para la medicin. En comparacin, la funcin
digitalRead tiene una frecuencia de 15000Hz, unos 66
micro segundos por medicin, levemente ms rpido.

Sin embargo, mediante otros cdigos la lectura


analgica puede aumentarse hasta aproximdamente 1,5
Mhz, o 660 nano segundos por entrada. Por contra, las
entradas digitales pueden acelerarse hasta casi 15 Mhz, 66
nano segundos, leyendo todas las entradas de forma
simultnea. Por lo tanto, vemos que realmente las
entradas digitales pueden ser mucho ms rpidas
que las analgicas.

LECTURA DE VALORES
MAYORES DE 5V
En caso de necesitar leer una entrada de nivel de
tensin superior, por ejemplo de 12V, debemos realizar
una adaptacin de tensin. La forma mejor de realizar la
adaptacin es emplear un simple divisor de tensin.

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Con esta configuracin el pin digital de Arduino
recibir una tensin que vara entre 0 a 3,84V por lo que,
como hemos explicado, estaramos perdiendo precisin
relativa. Una opcin sera ajustar las resistencias para que
los lmites estn lo ms cercanos posible a 0 y 5V, o usar
otro divisor de tensin para alimentar el pin Aref.

Los valores de las resistencias a emplear dependen del


voltaje que queremos leer, y de la impedancia del sensor.
En general, deben cumplir las siguientes condiciones:

Deben convertir la seal en un rango inferior pero


similar a la tensin de alimentacin.
Deben ser muy superiores a la impedancia
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
equivalente del dispositivo a medir.
Deben despreciables respecto a la impedancia de la
entrada Arduino.
Deben limitar la corriente que circula por ellas para
minimizar prdidas.
Deben ser capaces de disipar la potencia que van a
soportar.

Podis ayudaros de la calculadora de divisores de


tensin para calcular valores de resistencia que cumplan
estos requisitos.

No empleis este sistema para leer tensiones


superiores a 35V, o para dispositivos de corriente
alterna sin estar muy seguros de lo que estis
haciendo. Es muy posible que las resistencias no
aguanten.

En la siguiente entrada veremos cmo emplear las


entradas analgicas para leer el estado de un
potencimetro o el valor de una resistencia variable, algo
habitual a la hora de leer sensores cuya lectura se realiza a
travs de la medicin de su resistencia.

Si te ha gustado esta entrada y quieres leer ms


sobre Arduino puedes consultar la seccin
Tutoriales de Arduino

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
TAGS:
AN ALO G ICAS AR D UIN O AR D UIN O B ASICO EN TR AD AS I/ O

PREVIO US PO ST NEXT PO ST
CUMPLIMOS CMO

TRES AOS! DESCARGAR
DESDE
YOUTUBE

RELATED POSTS
MTODOS PARA LIBRERA ARDUINO
CONVERTIR TEXTO A LINKEDLIST
NMERO EN ARDUINO

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
Lo sentimos, el navegador que ests usando no est soportado actualmente. Disqus soporta de manera activa los
siguientes navegadores:

Firefox
Chrome
Internet Explorer 11+
Safari

albert Hace 5 meses

hola
sr. Luis pagina muy buena.
tengo la necesidad de saber que voltaje estoy trabajando para crear un watimetro. y tengo una tensin continua que
varia , y su valor mximo ser de 200 voltios ,
seria correcto trabajar con un divisor de tensin 100K y 2k2
puedo encontrarme con algn problema?
doy por supuesto que la precisin solo la ser de 1024 bits..

hiddenotebook rules Hace 7 meses

Hola Sr.Luis desde que hice mi fuente de alimentacin gracias a tu pagina te suelo visitar y tengo muchas dudas con

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
LICENCIA ENTRADAS POLTICA DE
Excepto notacin expresa, los RECIENTES COOKIES
contenidos de este sitio se
Mtodos para convertir Este web utiliza cookies
ofrecen bajo licencia Creative
texto a nmero en Arduino propias y de terceros para
Commons License BY-NC-SA.
Librera Arduino LinkedList ofrecerle una mejor
Implementar una Linked experiencia y servicio. Al
List en Arduino navegar o utilizar nuestros
servicios el usuario acepta el
Ms informacin Librera Arduino List
uso de las mismas. El usuario
Implementar un array de
tiene la opcin de impedir la
tamao dinmico en
generacin de cookies y la
Arduino
eliminacin de las mismas
mediante la seleccin de la
correspondiente opcin en su
navegador.

Copyright , All Rights Reserved. Back to top

open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com