Conversor Analógico-Digital (A/D)

Un conversor analógico-digital es un dispositivo electrónico capaz de convertir una señal analógica en un valor binario, en otras palabras, este se encarga de transformar señales análógicas a digitales (0's y 1's).

El dispositivo establece una relación entre su entrada (señal analógica) y su salida (Digital) dependiendo de su resolución . La resolución determina la precisión con la que se reproduce la señal original.

Esta resolución se pude saber, siempre y cuando conozcamos el valor máximo de la entrada a convertir y la cantidad máxima de la salida en dígitos binarios.

Resolución = +Vref/2^n(n-bits)

Por ejemplo, un conversor A/D de 8-bits puede convertir valores que van desde 0V hasta el voltage de referencia (Vref) y su resolución será de:

Resolución = Vref/256 (2^8)

Lo que quiere decir que mapeará los valores de voltage de entrada, entre 0 y Vref voltios, a valores enteros comprendidos entre 0 y 255 (2^n-1).

La tarjeta arduino utiliza un conversor A/D de 10-bits, así que:

Resolución = Vref/1024 (2^10)

Mapeará los valores de voltage de entrada, entre 0 y Vref voltios, a valores enteros comprendidos entre 0 y 1023 (2^n-1). Con otras palabras, esto quiere decir que nuestros sensores analógicos están caracterizados con un valor comprendido entre 0 y 1023. (Ver analogRead()).

Si Vref es igual a 5v, la resolución es aproximadamente de 5 milivoltios. Por lo tanto el error en las medidas de voltage será siempre de sólo 5 milivoltios.

  • Caso de transmisión o envío de datos (comunicación) por el puerto serie:

Al enviar datos por el puerto serie, tenemos que tener en cuenta que la comunicación se realiza a través de valores con una longitud de 8-bits (Ver serialWrite(c) o serialRead(c) ), mientras que como ya se hemos indicado, el A/D (Convertidor) de arduino tiene una resolución de 10-bits.

Por ejemplo, si capturamos los valores de un sensor analógico (e.j. potenciómetro) y los enviamos por el puerto serie al PC, una solución podría se transformarlos en un rango entre 0 y 9 y en modo de codificación ASCII (carater).

(dato capturado del sensor analógico * 9 / 1024) + 48;

0 ASCII -->decimal = 48

1 ASCII -->decimal = 49

etc..

En forma de código podría quedar como:

value1 = analogRead(analogPin1); //captura del valor de sensor analógico (0-1023)

serialWrite(treatValue(value1)); //volcado al puerto serie 8-bits

int treatValue(int data) {

return (data * 9 / 1024) + 48;// fórmula de transformación

}

Otra formúla sería dividiendo por 4 ¿Esto es correcto? (1024/256)los valores capturados de los sensores analógicos, para convertirlos en valor de byte válido (0 - 255).

value = analogRead(analogPin)/4;

serialWrite(value);