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