Muchos de los sensores que utilizamos para Arduino son sensores analógicos como potenciómetros, fotoresistencias, etc.
Para esto Arduino utiliza unos pines específicos, que van desde el A0 al A5 en Arduino UNO y del A0 al A7 en el Arduino Nano.
El ADC:
Para poder leer correctamente los valores se utilizan 3 pines por sensor, +5V An GND.
Por si mismo Arduino es incapaz de realizar lecturas analógicas y para esta función utiliza un conversor ADC (Analog Digital Converter) que convierte la entrada analógica en una digital soportada por la lógica TTL (0 - 5V) de Arduino.
Para la lectura de las entradas analógicas Arduino Uno tiene una resolución de 10 bits, o lo que es lo mismo puede leer valores desde 0 hasta 1023. En cada paso aumentamos la lectura en 5 / 1024 = 0.00488V.
El ADC en Arduino:
Para leer una señal Analógica Arduino UNO utiliza los pines arriba descritos (del A0 al A5).
Procesaremos esta señal mediante la función analogRead() de la siguiente manera:
valor = analogRead(pin);
Donde pin sera el pin analógico que queramos y valor la variable donde guardaremos la lectura.
La variable donde guardamos la lectura del potenciómetro (valor) no la podemos aplicar directamente a la salida PWM ya que esta solo admite de 0 a 255 y con analogRead() los valores almacenados van de 0 a 1023.
Para esto tenemos que dividir entre 4 la variable valor de este modo:
valor = valor / 4 ;
o
valor /= 4;
El PWM:
PWM (Pulse Width Modulation) o modulación por ancho de pulsos es una técnica que consigue reproducir el efecto de una señal analógica en una carga. Esto lo logra con la variación de la frecuencia y el ciclo de trabajo de una señal digital.
Ciclo de trabajo: Es la cantidad de tiempo que la señal esta en estado lógico alto.
La frecuencia: es la rapidez con la que se completa un ciclo ( 50Hz = 50 ciclos por segundo)
Cuando cambiamos un señal de alto a bajo lo suficientemente rápido con ciclo de trabajo dado, la salida parecerá comportarse como una señal analógica constante y la podremos aplicar al dispositivo (por ejemplo un motor).
Ejemplo ciclos de trabajo PWM
PWM en Arduino:
Arduino UNO tiene pines específicos para este propósito y son el 3, 5, 6, 9, 10 y 11.
Para activar en uno de estos pines la función PWM usaremos: analogWrite().
analogWrite(pin, valor);
Donde pin sera el pin que queramos para este propósito y valor el ciclo de trabajo (0-255).
analogWrite() no necesita llamar a pinMode() en el setup para establecer el pin como salida ya que esta función no tiene nada que ver con los pines analógicos o la función analogRead().
Esquema analogRead() analogWrite()
Programa:
int led = 10; // define el pin 10 como led
int analog = 0; // define el pin 0 como analog
int valor; // define la variable valor
void setup(){} // no es necesario configurar
// entradas y salidas
void loop()
{
valor = analogRead(analog); // lee el pin 0 y lo asocia a
// la variable valor
valor /= 4; // divide valor entre 4 y lo
// reasigna a valor
analogWrite(led, value); // escribe en el pin 10 valor
}
Espero que les ayude a comprender el funcionamiento de las funciones analogRead() y analogWrite(). Saludos!!!
Fuentes:
Arduino Playground
digital.ni.com