Originalmente publicado en «ATDT magaZINE 0x03», una zine en modo texto. Los gráficos son capturas de pantalla. El archivo original se puede ver en el enlace que se encuentra al final del artículo.
En el artículo anterior les hablé un poco sobre entradas analógicas y digitales. Hoy es el turno de trabajar con salidas analógicas.
Salidas Analógicas
La placa Arduino UNO no tiene un periférico de hardware capaz de convertir una señal digital a analógica (DAC, Digital to Analogue Converter) por lo que se vale de señales PWM (Modulación por Ancho de Pulso) para «simular» valores analógicos. Las patitas que tienen la capacidad de generar señales PWM son las que se encuentran en la bornera Digital y tienen el símbolo ~ al lado del número identificatorio: 3, 5, 6, 9, 10 y 11.
Vagamente, podríamos pensar a una señal PWM como una onda cuadrada de una frecuencia fija, con una amplitud entre 0 y 5 V a la que podemos cambiarle el ancho (o tiempo) del estado encendido (1) y del estado apagado (0) a voluntad.
Para generar y manipular este tipo de señales, Arduino cuenta con una función llamada analogWrite(), la cual se escribe de la siguiente manera:
analogWrite(pin, valor)
Los parámetros que acepta son: número de pin a utilizar como salida y el valor a escribir que va desde 0 (apagado) hasta 255 (encendido), es decir que tiene una resolución de 8 bits. Como podrán imaginar con este tipo de salida podemos controlar el brillo de un LED o la velocidad de giro de un pequeño motor.
Controlar un LED
Vamos a controlar el brillo de un LED mediante el uso de un contador por software para obtener un efecto lumínico ascendente. La variable llamada «contador» se incrementará en uno cada 500 milisegundos, acto seguido se escribirá su contenido en el pin donde tenemos conectado el LED.
Las conexiones que tenemos que hacer son las siguientes:
El firmware que tendremos que escribir en el IDE de Arduino y luego subir a la placa es el siguiente:
/* CONTROL DE UN LED MEDIANTE PWM
APRENDIENDO ARDUINO EN TEXTO PLANO
*/
const int LED = 3; // pin donde conectaremos el LED
int contador = 0; // declaración de una variable
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
contador = contador + 1; // incrementamos el contador
analogWrite(LED, contador); // escribimos un valor en el LED
delay(500);
}
El programa tiene algunas fallas que las solucionaremos en un próximo artículo.
¡Hasta la próxima!