sábado, 28 de octubre de 2017

Arduino ejemplos: Lectura analógica y led PWM

Muy buenas a todos!!!
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 tabla ciclos de trabajo PWM
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().

Ejemplo esquema analogRead analogWrite
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

No hay comentarios :

Publicar un comentario