adc en arduino

Upload: lonzho934

Post on 14-Oct-2015

16 views

Category:

Documents


0 download

TRANSCRIPT

  • 5/24/2018 Adc en Arduino

    1/16

    ADC EN ARDUINOConvertidor Anlogo Digital en Arduino

  • 5/24/2018 Adc en Arduino

    2/16

    Al principio, solo existan los circuitos anlogos. La

    electrnica digital y su uso generalizado es relativamentereciente, antes de ello los circuitos electrnicos anlogos

    eran la regla.

  • 5/24/2018 Adc en Arduino

    3/16

    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 ocorriente 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.

  • 5/24/2018 Adc en Arduino

    4/16

    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 formatodigital.

    Los ADC ms comunes son aquellos que convierten sealesde voltaje o corriente a su equivalente digital aunquepodemos encontrarlos para medir diversidad de magnitudes

    anlogas. Afortunadamente los Arduinos incluyen de fbricauno o varios ADC que nos permiten convertir niveles devoltaje a valores digitales.

  • 5/24/2018 Adc en Arduino

    5/16

    En general hay tres cosas que nos interesa saber sobre un

    ADC:La resolucin

    El tiempo de conversin

    El rango de trabajo

  • 5/24/2018 Adc en Arduino

    6/16

    La resolucin del convertidor

    Uno de los mayores incovenientes de convertir seales

    anlogas a su equivalente en digital es que pasamos de unaseal que por naturaleza es continua y sin cortes a un datodiscreto, que solo puede tener ciertos valores. Este proceso esconocido como "cuantificacin".

    Generalmente la cantidad de valores discretos en los que unADC puede traducir una seal anloga a digital se conocecomo su resolucin y usualmente es medida en base al nmero

    de bits que el ADC tiene a su salida. El nmero de bitsrepresenta la cantidad mxima de valores discretos o de pasosque un ADC puede tener.

  • 5/24/2018 Adc en Arduino

    7/16

    Supongamos por ejemplo que tenemos un convertidor ADC de 3bits. 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

  • 5/24/2018 Adc en Arduino

    8/16

    El tiempo de conversin y la

    frecuencia de muestreo

    Lstimosamente la conversin de una seal anloga a su equivalentevalor digital no es instantnea, esto significa que el convertidor tardaalgn tiempo (usualmente muy pequeo) en realizar el proceso de

    conversin. Esto limita el nmero de conversiones que podemosrealizar en una unidad de tiempo, a este nmero de conversiones quepuede realizar un ADC usualmente se le conoce como frecuencia demuestreo 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 mslento que uno que tarde 0.001segundos en hacer una conversin. Lafrecuencia de muestreo mxima del ADC se calcula utilizando elinverso del tiempo de conversin:

    = 1/

  • 5/24/2018 Adc en Arduino

    9/16

    El rango de trabajo

    La tercer caracterstica, pero no la menos importante, que

    debemos tomar en consideracin al elegir un ADC es el rangode voltajes/corrientes que acepta en su entrada, este parmetroes escencial para evitar "quemar" (literalmente) nuestro ADC.

    La nica forma de saber el rango del ADC es revisando su hojatcnica, usualmente encontraremos el rango de valores de

    voltaje y de corriente aceptados en la entrada como tambin lastolerancias aceptadas.

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

  • 5/24/2018 Adc en Arduino

    10/16

    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 esque los LED no funcionan calentando un filamento como losfocos incandescentes sino que convierten directamente laenerga elctrica en luz. Esto los hace muy eficientes, tan

    eficientes que si los hacemos funcionar fuera de su rangooptimo de trabajo, por ejemplo reduciendo la corriente,desperdiciaremos mucha energa en forma de calor yadicionalmente podriamos notar algunas diferencias en el colordel LED en tanto reducimos su intensidad.

  • 5/24/2018 Adc en Arduino

    11/16

    Una solucin sencilla muy prctica para atenuar LEDs concircuitos digitales es utilizar "modulacin de pulsos". Laventaja de utilizar esta tcnica es que permite que el ledmantenga su color (ya que siempre funciona utilizando lamisma corriente) y simplemente cambia la intensidad de la

    luz emitida. Realmente lo que sucede es que el led se estaapagando y encendiendo muy rapidamente lo que reduce lacantidad de luz que emite, esto ocurre tan rapido quenuestro ojo no lo nota y pareciera que el led esta reduciendosu intensidad.

    Arduino ya incluye la funcionalidad para generar sealesPWM

  • 5/24/2018 Adc en Arduino

    12/16

  • 5/24/2018 Adc en Arduino

    13/16

    Programando nuestro Arduino void setup()

    { pinMode(2,OUTPUT); }

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

    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);

    }

  • 5/24/2018 Adc en Arduino

    14/16

    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 salidadonde 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 laentrada se corresponda con un rango diferente en la salida. Eneste caso nuestro valor de entrada vara entre 0 y 1023 pero lafuncin analogWrite est esperando un mximo de 255.

  • 5/24/2018 Adc en Arduino

    15/16

  • 5/24/2018 Adc en Arduino

    16/16

    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 necesitandeclararse 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 serespecificado 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 comoINPUT 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. EjanalogWrite(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 pinalterna rpidamente entre 0 V y 5 V, cuanto mayor sea el valor, ms a menudo el pin seencuentra 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. Unvalor de 192 ser 0 V una cuarta parte del tiempo y 5 V tres cuartas partes.