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.
ADC Arduino – Entradas Analógicas
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 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.
Placa | 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 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 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
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 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 sensor.
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).
Sensores disponibles en Amazon
Aprendiendo a utilizar la conversión ADC, puedes integrar cualquier tipo de sensor con tu placa de desarrollo del arduino para darle vida a tus proyectos, puedes darle un vistazo a los siguientes sensores que puedes encontrar en Amazon:
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
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 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:
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
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.
[sociallocker id=»948″]
>> DESCARGAR CÓDIGO Y ARCHIVO DE PROTEUS 8.7 <<
//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); }
[/sociallocker]
Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:
👉 Invitar a Sergio a un Café ☕️
Que esten muy bien, nos vemos en la siguiente entrada.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.