You are on page 1of 16

ADC EN ARDUINO

Convertidor Anlogo Digital en Arduino


Al principio, solo existan los circuitos anlogos. La
electrnica digital y su uso generalizado es relativamente
reciente, antes de ello los circuitos electrnicos anlogos
eran la regla.
Lo anlogo y lo digital
La diferencia entre ambos tipos de circuitos es bastante
sencilla: Mientras que en los circuitos digitales su
funcionamiento est determinado por las combinaciones de
estados lgicos que usualmente identificamos como 1s y 0s.
En la electrnica anloga los valores son continuos es decir
que una seal puede tomar cualquier valor de voltaje o
corriente dentro del rango para el que fue diseado. Si en la
electrnica digital solo tenemos blanco o negro, en la
electrnica anloga las seales son todas escalas de gris.
ADC
El convertidor Anlogo-Digital (ADC por sus siglas en ingls)
es un dispositivo que toma una seal anloga (corriente,
voltaje, temperatura, presin, etc.), cuantifica la seal y le
asigna un valor que se muestra a su salida en formato
digital.

Los ADC ms comunes son aquellos que convierten seales
de voltaje o corriente a su equivalente digital aunque
podemos encontrarlos para medir diversidad de magnitudes
anlogas. Afortunadamente los Arduinos incluyen de fbrica
uno o varios ADC que nos permiten convertir niveles de
voltaje a valores digitales.

En general hay tres cosas que nos interesa saber sobre un
ADC:
La resolucin
El tiempo de conversin
El rango de trabajo

La resolucin del convertidor

Uno de los mayores incovenientes de convertir seales
anlogas a su equivalente en digital es que pasamos de una
seal que por naturaleza es continua y sin cortes a un dato
discreto, que solo puede tener ciertos valores. Este proceso es
conocido como "cuantificacin".
Generalmente la cantidad de valores discretos en los que un
ADC puede traducir una seal anloga a digital se conoce
como su resolucin y usualmente es medida en base al nmero
de bits que el ADC tiene a su salida. El nmero de bits
representa la cantidad mxima de valores discretos o de pasos
que un ADC puede tener.


Supongamos por ejemplo que tenemos un convertidor ADC de 3
bits. Este convertidor podr tener solo 8 valores diferentes a su
salida. Esto significa que nuestros voltajes al ser convertidos
podran tener mas o menos la siguiente distribucin (asumiendo un
voltaje mximo de 5V):

Entrada anloga (V) Salida digital
0.000 - 0.625 0
0.625 - 1.250 1
1.250 - 1.875 2
1.875 - 2.500 3
2.500 - 3.125 4
3.125 - 3.750 5
3.750 - 4.375 6
4.375 - 5.000 7


El tiempo de conversin y la
frecuencia de muestreo

Lstimosamente la conversin de una seal anloga a su equivalente
valor digital no es instantnea, esto significa que el convertidor tarda
algn tiempo (usualmente muy pequeo) en realizar el proceso de
conversin. Esto limita el nmero de conversiones que podemos
realizar en una unidad de tiempo, a este nmero de conversiones que
puede realizar un ADC usualmente se le conoce como frecuencia de
muestreo o en ingles "sampling rate".

Podemos entender este parmetro como la precisin del convertidor en
el tiempo. Un ADC con un tiempo de conversin de 1 segundo es ms
lento que uno que tarde 0.001segundos en hacer una conversin. La
frecuencia de muestreo mxima del ADC se calcula utilizando el
inverso del tiempo de conversin:

= 1/





El rango de trabajo

La tercer caracterstica, pero no la menos importante, que
debemos tomar en consideracin al elegir un ADC es el rango
de voltajes/corrientes que acepta en su entrada, este parmetro
es escencial para evitar "quemar" (literalmente) nuestro ADC.

La nica forma de saber el rango del ADC es revisando su hoja
tcnica, usualmente encontraremos el rango de valores de
voltaje y de corriente aceptados en la entrada como tambin las
tolerancias aceptadas.

Para el Arduino Mega, segn las especificaciones tcnicas el
rango de entrada va desde 0v hasta Vcc (5V).
El dimmer digital

Un "dimmer" o un "atenuador" es un sencillo dispositivo que
atenua la intensidad de una luz.

Atenuar un LED es un poco ms complicado, el problema es
que los LED no funcionan calentando un filamento como los
focos incandescentes sino que convierten directamente la
energa elctrica en luz. Esto los hace muy eficientes, tan
eficientes que si los hacemos funcionar fuera de su rango
optimo de trabajo, por ejemplo reduciendo la corriente,
desperdiciaremos mucha energa en forma de calor y
adicionalmente podriamos notar algunas diferencias en el color
del LED en tanto reducimos su intensidad.

Una solucin sencilla muy prctica para atenuar LEDs con
circuitos digitales es utilizar "modulacin de pulsos". La
ventaja de utilizar esta tcnica es que permite que el led
mantenga su color (ya que siempre funciona utilizando la
misma corriente) y simplemente cambia la intensidad de la
luz emitida. Realmente lo que sucede es que el led se esta
apagando y encendiendo muy rapidamente lo que reduce la
cantidad de luz que emite, esto ocurre tan rapido que
nuestro ojo no lo nota y pareciera que el led esta reduciendo
su intensidad.

Arduino ya incluye la funcionalidad para generar seales
PWM
Programando nuestro Arduino
void setup()
{ pinMode(2,OUTPUT); }

En el setup no es requisito configurar como salida el PIN donde conectaremos el LED, sin
embargo lo dejo indicado solo para que quien lea el cdigo sepa que en esa lnea es donde lo
conectaremos.

Para el loop principal utilizaremos el siguiente cdigo:

El cdigo funciona en tres pasos:

int value;
void loop()
{
value = analogRead(0);
value = map(value,0,1023,0,255);
analogWrite(2,value);
delay(20);
}
Leemos el dato del voltaje del potenciometro.
Usamos la funcion map para cambiar el rango de entrada de 0-
1023 a 0-255 (el rango que soporta analogWrite)
Escribimos el nuevo valor mapeado como PWM a la salida
donde est conectado el LED.
Utilizo un pequeo delay para evitar que el valor cambie muy
frecuentemente.
La funcin map permite convertir un rango especificado en otro.
Esto es muy til cuando uno necesita que el valor anlogo de la
entrada se corresponda con un rango diferente en la salida. En
este caso nuestro valor de entrada vara entre 0 y 1023 pero la
funcin analogWrite est esperando un mximo de 255.

Entradas y salidas digitales y
analgicas

Funcin pinMode(pin, mode)
Funcin usada en la function setup() para configurar un pin dado para comportarse como
INPUT o OUTPUT. Ej. pinMode(pin, OUTPUT); configura el pin nmero 'pin' como de salida.
Los pines de Arduino funcionan por defecto como entradas, de forma que no necesitan
declararse explcitamente como entradas empleando pinMode().
Funcin digitalRead(pin)
Lee el valor desde un pin digital especfico. Devuelve un valor HIGH o LOW. El pin puede ser
especificado con una variable o una constante (0-13). Ej. v = digitalRead(Pin);
Funcion digitalWrite(pin, value)
Introduce un nivel alto (HIGH) o bajo (LOW) en el pin digital especificado. De nuevo, el pin
puede ser especificado con una variable o una constante 0-13. Ej. digitalWrite(pin, HIGH);
Funcin analogRead(pin)
Lee el valor desde el pin analgico especificado con una resolucin de 10 bits. Esta funcin
solo funciona en los pines analgicos (0-5). El valor resultante es un entero de 0 a 1023. Los
pines analgicos, a diferencia de los digitales no necesitan declararse previamente como
INPUT o OUTPUT.
Funcin analogWrite(pin, value)
Escribe un valor pseudo-analgico usando modulacin por ancho de pulso (PWM) en un pin
de salida marcado como PWM. Esta funcin est activa para los pines 3, 5, 6, 9, 10, 11. Ej
analogWrite(pin, v); // escribe 'v' en el 'pin' analgico. Puede especificarse un valor de 0 - 255.
Un valor 0 genera 0 V en el pin especificado y 255 genera 5 V. Para valores de 0 a 255, el pin
alterna rpidamente entre 0 V y 5 V, cuanto mayor sea el valor, ms a menudo el pin se
encuentra en HIGH (5 V). Por ejemplo, un valor de 64 ser 0 V tres cuartas partes del tiempo
y 5 V una cuarta parte. Un valor de 128 ser 0 V la mitad del tiempo y 5 V la otra mitad. Un
valor de 192 ser 0 V una cuarta parte del tiempo y 5 V tres cuartas partes.

You might also like