Acerca del proyecto
En este post vamos a conocer y explicar el funcionamiento del ADC en arduino, veremos un breve repaso de como se hace la conversión de análogo a digital y la instrucción en lenguaje arduino para obtener el valor digital de la señal análoga.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Conversor análogo a digital | Este post proporciona una breve panorámica del procesamiento digital de la señal, donde vamos a centrarnos principalmente en las características del sistema ideal y también mencionaremos algunos métodos de conversion A/D. |
Resumen de lectura ADC
Cuando se lee un voltaje analógico desde uno de los pines del arruino, el converso de análogo a digital (ADC) realiza una conversión de ese voltaje en un número que podamos manipular con el programa. El voltaje que soporta el arduino es de 0 a 5V y su valor de conversión va a hacer entre 0 a 1023 a 10bit de resolución.
Si realizamos la gráfica con los datos de voltaje y el valor de conversión, podemos observar que nos genera una gráfica lineal, en donde los resultados son proporcionales, observemos la siguiente imagen.
Si deseamos obtener el valor del voltaje de la entrada analógica teniendo en cuenta los parámetros mencionados en el párrafo anterior, podemos multiplicar el valor leído del pin analógico por 5 voltios que es lo máximo que puede llegar y dividirlo por 1023 que es el mas grande dentro del rango de 10 bits.
De este modo, tenemos relacionada el voltaje de salida del sensor con los valores digitales de Arduino.
analogread()
Lee el valor del pin analógico especificado[1]. Arduino contienen un convertidor de analógico a digital multicanal de 10 bits. Esto significa que mapeará voltajes de entrada entre 0 y el voltaje de operación (5V o 3.3V) en valores enteros entre 0 y 1023.
El Arduino UNO, por ejemplo, esto produce una resolución entre lecturas de: 5 voltios / 1024 unidades o , 0.0049 voltios (4.9 mV) por unidad.
El rango de entrada se puede cambiar usando analogReference()
, mientras que la resolución se puede cambiar usando analogReadResolution()
.
En las tarjetas basadas en ATmega (UNO, Nano, Mini, Mega), se tarda unos 100 microsegundos (0,0001 s) en leer una entrada analógica, por lo que la velocidad de lectura máxima es de aproximadamente 10,000 veces por segundo.
Placa | Voltaje de funcionamiento | Pines utilizables | Resolución máxima |
---|---|---|---|
Uno | 5 voltios | A0 a A5 | 10 bits |
Mini nano | 5 voltios | A0 a A7 | 10 bits |
Mega, Mega2560, MegaADK | 5 voltios | A0 a A14 | 10 bits |
Micro | 5 voltios | A0 a A11 * | 10 bits |
Leonardo | 5 voltios | A0 a A11 * | 10 bits |
Cero | 3.3 voltios | A0 a A5 | 12 bits ** |
Debido | 3.3 voltios | A0 a A11 | 12 bits ** |
MKR Family Boards | 3.3 voltios | A0 a A6 | 12 bits ** |
* A0 a A5 están etiquetados en la placa, A6 a A11 están disponibles respectivamente en los pines 4, 6, 8, 9, 10 y 12
** La resolución predeterminada de analogRead()
para estas tablas es de 10 bits, por compatibilidad. Debe usar analogReadResolution()
para cambiarlo a 12 bits.
Sintaxis
int value = analogRead(pin);
Parámetros
- pin: el nombre del pin de entrada analógica para leer (A0 a A5 en la mayoría de las tarjetas, A0 a A6 en las tarjetas MKR, A0 a A7 en la Mini y Nano, A0 a A15 en la Mega).
Retorna
La lectura analógica en el pin (int). Aunque está limitado a la resolución del convertidor analógico a digital (0-1023 para 10 bits o 0-4095 para 12 bits).
Referencias
[1] arduino, https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/ Consultado febrero 2019