Source: https://controlautomaticoeducacion.com/arduino/entradas-analogicas-adc/
Timestamp: 2019-11-17 00:12:38+00:00

Document:
▷ ADC Arduino - Entradas Analógicas - [noviembre, 2019 ]
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.
1 ADC Arduino – Entradas Analógicas
1.1 Que significa adc en arduino?
1.2 Que es adc en arduino?
2 ADC Arduino
2.1 Sensores de Temperatura
2.3 Salidas Digitales en Arduino
3 analogRead() Arduino
3.2 Retornos
4 LM35 Arduino LCD – ADC Arduino
4.1 Conversor Análogo Digital Arduino – Circuito en Proteus
4.2 Código de Implementación
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.
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 Análogo Digital 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.
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.
A0 to A11*
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 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 valor entero de 1023.
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=\dfrac{V_{ref}}{2^N-1}
R es la resolución, Vref es el voltaje de referencia 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=\dfrac{5v}{2^{10}-1}=\dfrac{5v}{1023}=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,883 mV.
En ocasiones, se hace necesario cambiar el voltaje de referencia del Arduino, usando el PIN (AREF) para poder leer sensores que entreguen menos voltaje, pero eso lo veremos con calma en la siguiente entrada, lo cual puede sernos util para realizar un medidor de voltaje o leer cualquier otro sensor.
analogRead() Arduino
Trabajar con las entradas Análogas de Arduino es bastante sencillo, para eso usamos la siguiente sintaxis:
int Value = analogRead (pin);
(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).
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 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
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.
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 en el 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:
Tension\ en\ A0 = \dfrac{(Valor\ leido\ A0)(5V)}{1023.0}Temperatura = \dfrac{Tension\ A0}{10mV}
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.
Temperatura = [(Valor leído en A0) * (5/1023.0)] / 10mV
Temperatura (TMP36) = [(Valor leído en A0) * (5/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/1023)/0.01; //LM35 temperatura(TMP36) = (float(analogRead(LM35))5/1023-0.5)/0.01; //TMP36
Conversor Análogo Digital Arduino – Circuito en Proteus
A continuación pudes descargar el código 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/1023.0) / 0.01; temperatura = (float(analogRead(LM35))*5/1023)/0.01; //LM35 //temperatura = (float(analogRead(LM35))*5/1023-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); }
//Sensor de temperatura usando el LM35 o TMP36 junto con un LCD
//Pratica para aprender a utilizar las entradas analogicas del Arduino (ADC)
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
LiquidCrystal lcd(10, 8, 5, 4, 3, 2); //(RS, E, D4,D5, D6, D7)
lcd.begin(16, 2); // Inicia el LCD 16x02 (columnas,filas)
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
//Lectura del Pin A0 (ADC)
//value=analogRead(LM35); // Almacena el valor entero.
//Conveierte el valor entero en Temperatura
//temperatura=(value*5/1023.0) / 0.01;
temperatura = (float(analogRead(LM35))*5/1023)/0.01; //LM35
//temperatura = (float(analogRead(LM35))*5/1023-0.5)/0.01; //TMP36
lcd.setCursor(7,1); // Coloca el cursor en las coordenadas (7,1)
lcd.print(temperatura); // Escribe en el LCD
Hola buenas noches, tengo un problema con mi display, todo el circuito me funciona bien, pero si miro el display se ve todo negro y no se distinguen las letras, pero si la miro desde cierto angulo (esquina inferior izquierda) se ve super bien lo que muestra, es normal que haga eso? se puede arreglar o es defecto del display?
Hola David, tienes conectado la luz de fondo del display? pines 15 y 16 a VCC y GND respectivamente. Luego también es necesario conectar el Potenciometro al display que esta en el pin 3 y comenzarlo a variar para modificar el contraste y de esa forma consigas ver las letras. Si has hecho eso y aún asi no funciona, puede que tu display LCD este con defecto.

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución