ADC Arduino – Entradas Analógicas


Hola controleros y controleras en el día de hoy vamos a aprender a usar las entradas analógicas (ADC Arduino) usando el comando analogRead, con el cual podremos capturar los valores de diferentes sensores para proyectar sistemas automáticos y de control en nuestros proyectos.
Antes de comenzar, te hago la invitación para que veas nuestro CURSO GRATIS DE ARDUINO.
Todas las señales físicas que captamos con nuestros sentidos, al igual que toda variable que existe en el entorno (temperatura, velocidad, peso, caudal, etc) son señales analógicas, es decir señales que varían con el tiempo, y que pueden tomar diferentes valores a diferencia de la señal digital que solo presenta dos valores.
En la siguiente figura podemos ver una señal analógica, que representa una función sinusoidal junto con una aproximación discreta.
analogo digital
El Arduino tiene la capacidad de leer señales analógicas realizando aproximaciones discretas a través de pequeños rectángulos digitales como fue observado en la figura anterior, donde podemos ver fácilmente, que entre más pequeños sean los rectángulos, más parecido será la aproximación digital con relación a la señal analógica.

Que significa adc en arduino?

ADC en Arduino es la abreviación del Conversor Analógico Digital Arduino o con sus siglas en Ingles Analog Digital Converter

Que es adc en arduino?

El conversor ADC Arduino es el encargado de la conversión analógica digital empleada en la placa para poder leer todos los sensores disponibles en el mercado para nuestro proyecto de automatización con Arduino.

ADC Arduino

Cuando se trabaja con el ADC Arduino (conversor análogo digital) se debe tener en consideración que solo podemos colocar voltajes de máximo 5v o de 3.3v si trabajamos con un Arduino con este voltaje como el Mini. De lo contrario podremos quemar nuestra placa.
A continuación se muestra una tabla con los voltajes máximos de operación y la máxima resolución de cada placa Arduino. Aquí podrás ver el convertidor análogo digital – ADC de Arduino Mega 2560, UNO, NANO, etc.







Voltaje Operación
PINES
MAX RESOLUTION
Uno
5 Volts
A0 to A5
10 bits
Mini, Nano
5 Volts
A0 to A7
10 bits
Mega, Mega2560, MegaADK
5 Volts
A0 to A14
10 bits
Micro
5 Volts
A0 to A11*
10 bits
Leonardo
5 Volts
A0 to A11*
10 bits
Zero
3.3 Volts
A0 to A5
12 bits**
Due
3.3 Volts
A0 to A11
12 bits**
MKR Family boards
3.3 Volts



A0 to A6





12 bits**





Como podemos ver en la tabla anterior, la lectura que haga el Arduino en la entrada analoga va a depender de la resolución ADC del Arduino que tenga. Por ejemplo, si estamos leyendo voltajes en un Arduino UNO, como es de 10 bits en realidad el Arduino va a ver una variación de un entero entre 0 a 1023. ¿Pero por qué?
Un bit es un binario que puede tomar dos valores (0 o 1), o sea que si tiene una resolución de 10 bits indica que (2^10 = 1024), pero como empezamos desde 0, se dice que el valor entero toma valores entre 0 a 1023. Esto quiere decir que si Arduino mide:
el máximo voltaje (5v) va a almacenar un v
Voltaje intermedio (2.5v) va a almacenar un valor entero de 512.
Voltaje mínimo (0v) va a almacenar un entero de 0.

A través de lo visto anteriormente podemos mostrar entonces la ecuación de la resolución del ADC Arduino

R=2N1Vref

R es la resolución, Vref es el voltaje de referencia ADC de la Placa (por defecto es el voltaje de alimentación de la placa) y N son los bits del convertidor ADC Arduino (análogo digital).

Es decir que para el Arduino UNO la resolución es

R=21015v=10235v=4,88mV


Eso quiere decir que, en el caso de un arduino Uno, el valor de 0V analógico es expresado en digital como B0000000000 (0) y el valor de 5V analógico es B1111111111 (1023). Por lo tanto, todo valor analógico intermedio es expresado con un valor entre 0 y 1023, es decir, se suma 1 en binario cada 4,8 mv.

En ocasiones, se hace necesario cambiar el voltaje de referencia ADC del Arduino, usando el PIN (AREF) para poder leer sensores que entreguen menos voltaje, lo cual puede sernos util para realizar un medidor de voltaje o leer cualquier otro sen


analogRead() Arduino

Entendamos rápidamente que hace la función analogRead() en Arduino para comenzar a usar el convertidor Analógico Digital de la placa.
Trabajar con las entradas Análogas de Arduino es bastante sencillo, para eso usamos la siguiente sintaxis:

int Value = analogRead (pin);

parámetros

(A0 a A5 en la mayoría de las placas, A0 a A6 en placas MKR, A0 a A7 en el Mini y Nano, A0 a A15 en el Mega).

Retornos

La lectura analógica es retornada como una variable entera, que está limita a la resolución del convertidor analógico digital Arduino (0-1023 a 10 bits o 0-4095 a 12 bits).

LM35 Arduino LCD – ADC Arduino

El LM35 es un sensor de temperatura del tipo semiconductor el cual proporciona una salida de voltaje que es proporcional a la temperatura.
El sensor de temperatura LM35 entrega una relación lineal en su salida la cual va incrementando a una razón de 10mV por 1 grado centígrado. Su rango de medición va desde los -55ºC (-550mV) hasta los 150ºC (1500mV) con una precisión de 0.5ºC. una de las ventajas de este integrado es su bajo precio, por lo cual se a tornado en el sensor de temperatura análogo digital más utilizado con microcontroladores.


El integrado LM35 tiene 3 Pines, donde los extremos son la alimentación y el pin del medio entrega el valor de voltaje a una razón de 10mV/ºC

Sensor de temperatura LM35

Para poner en práctica lo aprendido en esta entrada, vamos a construir un sensor de temperatura Arduino. Para esto utilizaremos el LM35 y el display LCD Arduino visto en la entrada anterior. Vamos a usar el siguiente esquema, PERO: quien quiera usar el TINKERCAD para simular el Arduino, notará que el LM35 no existe en esta plataforma, por lo tanto deberá obtar por el TMP36 que es parecido con el LM35 solo que debera restasle 500mV en la programación para que la medida se muestre adecuadamente.

Arduino ADC

Como podemos ver en el circuito de sensor de temperatura lm35 arduino y LCD la idea es mostrar la temperatura en la pantalla realizando la conversión análoga digital del microcontrolador (ADC Arduino UNO).
El programa tendrá que leer el valor de la señal del pin analógico de arduino denominado PIN A0, que varía de 0 a 1023, donde 0 corresponde a 0Volts y 1023 corresponde a 5Volts. Como sabemos, 1ºC es igual a 10mV. Siendo así, tenemos:

Temperatura = \dfrac{Tension\ A0}{10mV}


IMPORTANTE:
Esta forma de converción, requiere que se ponga el punto decimal al 1023.0 de lo contrario el Arduino hará un cálculo como un ENTERO.

Entonces:
Temperatura = [(Valor leído en A0) * (5.0/1023.0)] / 10mV
Temperatura (TMP36) = [(Valor leído en A0) * (5.0/1023.0) – 0.5] / 10mV


Tambien es posible hacerlo de la siguiente forma donde todo el calculo es hecho en forma de FLOTANTE:
temperatura = (float(analogRead(LM35))5.0/1023.0)/0.01; //LM35 temperatura(TMP36) = (float(analogRead(LM35))5.0/1023-0.5)/0.01; //TMP36

Conversor Análogo Digital Arduino – Circuito en Proteus




LM35 Arduino Proteus

Código de Implementación

A continuación pudes descargar el código convertidor analógico digital arduino del ejemplo, para desbloquearlo solo basta compartir esta entrada para que más personas aprendan a programar Arduino.

//Sensor de temperatura usando el LM35 o TMP36 junto con un LCD
//Pratica para aprender a utilizar las entradas analogicas del Arduino (ADC)
//Definiciones
const int LM35 = A0; // Define el pin analogico del LM35
float temperatura; // Variable que armazenará la temperatura medida
int value;         //Variable entera para almacenar la conversión ADC
//Bibliotecas
#include <LiquidCrystal.h> 
LiquidCrystal lcd(10, 8, 5, 4, 3, 2); //(RS, E, D4,D5, D6, D7)
void setup() {
lcd.begin(16, 2);   // Inicia el LCD 16x02 (columnas,filas)
lcd.home();         // Coloca el cursor en las coordenadas (0,0)
lcd.print("ADC Arduino");   // Escribe en el LCD 
lcd.setCursor(0,1);         // Coloca el cursor en las coordenadas (0,1)
lcd.print("Temp: ");   // Escribe en el LCD 
//Función que será ejecutada continuamente
void loop() {
//Lectura del Pin A0 (ADC)
//value=analogRead(LM35); // Almacena el valor entero.
//Conveierte el valor entero en Temperatura
//temperatura=(value*5.0/1023.0) / 0.01;
temperatura = (float(analogRead(LM35))*5.0/1023.0)/0.01;     //LM35
//temperatura = (float(analogRead(LM35))*5.0/1023.0-0.5)/0.01; //TMP36
lcd.setCursor(7,1);         // Coloca el cursor en las coordenadas (7,1)
lcd.print(temperatura);   // Escribe en el LCD 
lcd.setCursor(14,1);
lcd.print("C    ");
delay(1000);
}























No hay comentarios:

Publicar un comentario