ENTRADAS

15 ago 2016

CONVERSOR ANALÓGICO-DIGITAL CON ARDUINO

//
Comentarios0
/
Profundizando en  Arduino: Conversor analógico-digital.

En entradas anteriores hemos aprendido qué es Arduino así como una introducción al entorno de desarrollo y a la programación de Arduino. En esta entrada profundizaremos en las funciones de Arduino. En esta ocasión se hablará del conversor analógico-digital o ADC (Analog to Digital Converter).

 

Arduino  LOGO

El ADC (Conversor analógico-digital)

Un conversor analógico-digital es un dispositivo electrónico que permite convertir una señal analógica en una señal digital. Las señales analógicas se caracterizan por poder adoptar infinitos valores mientras que las señales digitales sólo pueden tomar ciertos valores determinados. Un ejemplo de señales analógicas son los valores de voltaje que se alcanzan en un punto de un circuito electrónico.

Así pues, en un conversor analógico-digital se transforma una señal de voltaje (analógica) en unos y ceros (digitales) que representan el voltaje medido. A la hora de utilizar este elemento hay que tener en cuenta las siguientes características:

  • Rango de entrada: valores máximo y mínimo de voltaje que se pueden medir. El conversor de nuestro Arduino tiene un rango de entrada de 0 a 5V.
  • Nº de bits: número de bits utilizados para indicar el valor de la medida. En nuestro caso el conversor es de 10 bits lo que significa que a la salida obtendremos valores comprendidos entre 0 y 1023 (de tal forma que 1023 corresponde a 5V y 0 corresponde a 0V).

 

conversor adc

Esquema de un conversor analógico-digital (a la izquierda está la entrada analógica y a la derecha la salida digital)

 

El programa que vamos a realizar

El programa que vamos a realizar irá tomando medidas del conversor analógico-digital e irá enviando los resultados al ordenador a través de una comunicación serie. Haciendo uso de la herramienta llamada monitor que viene en el IDE podremos ver los resultados.

Una comunicación serie se caracteriza porque los bits se van enviando de uno en uno. Por el contrario, una comunicación paralela se caracteriza por enviar grupos de bits de forma simultánea. A día de hoy, las comunicaciones más extendidas son las comunicaciones serie. Un ejemplo de ello es el conocido USB. De hecho, los datos se envían desde el Arduino hasta el ordenador a través del cable USB.

Preparando la placa

Antes de comenzar a escribir el código debemos preparar la placa. Para ello haremos uso de un potenciómetro. El potenciómetro es un dispositivo de tres terminales que contiene una resistencia en su interior. De esta forma, dos de los terminales están unidos a ambos extremos de la resistencia mientras que el tercero se va desplazando a lo largo de ella. Esto provoca que el valor de la resistencia vista entre éste último terminal y uno de los otros dos sea variable.

Conectaremos los dos extremos del potenciómetro a la salida de 5V de la placa y a la salida de tierra (GND) de la placa. El tercer terminal se conectará a la entrada 0 del conversor analógico-digital.

Con esta configuración conseguimos que la tensión que entra en el conversor analógico-digital varíe entre 0 y 5V (aproximadamente) según vayamos girando el potenciómetro.

Una vez que hemos hecho la conexión sólo queda escribir el programa.

esquema conexion a placa

Esquema de conexión de la placa ARDUINO

 

Escribiendo el código

Una vez que tenemos preparada la placa sólo queda escribir el código que correrá en Arduino y ejecutarlo. El código contendrá dos funciones (setup y loop) como cualquier código de Arduino. Recordamos que las instrucciones contenidas en la función setup se ejecutan una única vez al principio mientras que las instrucciones contenidas en loop se ejecutan continuamente (cuando se han ejecutado todas las instrucciones se vuelve a empezar con la primera instrucción contenida en loop).

De esta forma, comenzamos escribiendo el código de inicialización. Es decir, el código contenido en la función setup. En esta ocasión utilizaremos la función Serial.begin(). Esta función nos inicializa la comunicación serie. Por lo tanto, no podremos enviar ni recibir ningún dato a través de la comunicación serie si no hemos ejecutado esta función. A la función hay que pasarle como parámetro la velocidad. En nuestro caso elegiremos 9600 bits por segundo (no se puede elegir cualquier velocidad por lo que antes de elegir una velocidad hay que consultar el manual):

void setup(){

Serial.begin(9600);

}

A continuación escribiremos el contenido de la función loop (la función que se ejecuta continuamente).

void loop() {

En primer lugar necesitamos un lugar en el que almacenar los datos obtenidos del conversor. Éste lugar se denomina variable. Para declarar una variable (es decir, para solicitar este lugar de almacenamiento) debemos indicar qué tipo de dato vamos a almacenar. Sabemos que el conversor devuelve valores enteros comprendidos entre 0 y 1023 (ya que es de 10 bits). El tipo de variable que permite almacenar un dato entero es el tipo int. A la variable debemos darle un nombre para poder identificarla así que elegiremos el nombre valorADC. Así pues, el código quedará de la forma:

int valorADC;

No obstante, un valor de 0 a 1023 no es intuitivo por lo que necesitamos convertirlo a un valor de voltaje. Dado que este valor tendrá números decimales, el valor obtenido no lo podemos almacenar en esta variable así que creamos otra que sea de tipo float:

float voltaje;

Una vez creadas las variables que necesitamos procedemos a tomar la medida utilizando la función analogRead() y pasándole como argumento el pin desde el cual debe leer el conversor (en este caso el pin 0 del puerto A). Almacenamos el resultado en la variable valorADC:

valorADC = analogRead(A0);

A continuación convertimos este valor a un valor de voltaje sabiendo que un valor de 1023 corresponde a 5V. Por lo tanto, el valor de voltaje será el valor medido multiplicado por 5 y dividido entre 1023:

voltaje = valorADC * 5.0 / 1023.0;

Finalmente enviamos el valor obtenido a través del puerto serie y esperamos 2ms antes de realizar la siguiente medida (ya que el conversor necesita que transcurra un tiempo entre una medida y la siguiente para que los resultados sean correctos):

Serial.println(voltaje);

delay(2);

 

Por último sólo queda compilar el código y descargarlo en la placa. Una vez que esté funcionando sólo tenemos que abrir el monitor serie (“serial monitor”) del IDE de Arduino y ver el valor de tensión. Si vamos girando el potenciómetro comprobamos cómo va cambiando el valor medido.

El código completo es el siguiente:

void setup() {

Serial.begin(9600);

}

void loop() {

int valorADC;

float voltaje;

valorADC = analogRead(A0);

voltaje = valorADC * (5.0 / 1023.0);

Serial.println(voltaje);

delay(2);

}

 

serial monitor IDE ARDUINO

Barra del IDE de Arduino en la que podemos observar la localización del monitor serie

 

Mira aquí, el vídeo tutorial completo de cómo realizar este montaje del CONVERSOR ANALÓGICO-DIGITAL empleando la placa Arduino Uno a partir del post.

 

Autor: ALEJANDRO MARTÍNEZ LÓPEZ.

Más artículos del autor para el blog de FdeT

Si quieres participar en el blog como colaborador en alguna de las secciones, envíanos un mail a info@fdet.es 

Grupo FdeT

Compartir:
Facebooktwittergoogle_pluslinkedin

Leave a Reply

A %d blogueros les gusta esto: