TEORÍA: PWM y analogWrite

En esta práctica vamos a aprender un comando nuevo («analogWrite») que nos vale para controlar de cierta manera los pines digitales marcados con el símbolo ~ (PWM). Todo ello nos valdrá para controlar un led RGB. Este led tiene 3 colores que podemos combinar para conseguir una gama muy amplia de colores.

PWM

La modulación por ancho de pulsos (también conocida como PWM, siglas en inglés de pulse-width modulation) de una señal o fuente de energía es una técnica en la que se modifica el ciclo de trabajo de una señal periódica (una senoidal o una cuadrada, por ejemplo), ya sea para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga.

Las salidas digitales de el Arduino sólo tienen dos opciones: encendido (HIGH) y apagado (LOW). Sin embargo, si los encendemos y apagamos por ciclos muy cortos, podemos conseguir que, mediante esta reducción del tiempo en que están encendidos (ciclo de trabajo), puedan hacer funcionar un led o un motor a un porcentaje de su capacidad total.

Resultado de imagen de pwm

analogWrite

Esta instrucción sirve para escribir un pseudo-valor analógico utilizando el procedimiento de modulación por ancho de pulso (PWM) a uno de los pines de Arduino marcados como PWM.

analogWrite(pin, valor);    // escribe 'valor' en el 'pin'
                            // definido como analógico

Si enviamos el valor 0 genera una salida de 0 voltios en el pin especificado; un valor de 255 genera una salida de 5 voltios de salida en el pin especificado. Para valores de entre 0 y 255, el pin saca tensiones entre 0 y 5 voltios – cuanto mayor sea el valor, más a menudo estará a HIGH (5 voltios). Teniendo en cuenta el concepto de señal PWM , por ejemplo, un valor de 64 equivaldrá a mantener 0 voltios de tres cuartas partes del tiempo y 5 voltios a una cuarta parte del tiempo; un valor de 128 equivaldrá a mantener la salida en 0 la mitad del tiempo y 5 voltios la otra mitad del tiempo, y un valor de 192 equivaldrá a mantener en la salida 0 voltios una cuarta parte del tiempo y de 5 voltios de tres cuartas partes del tiempo restante.

EJERCICIO 1 OBLIGATORIO

Debes completar la práctica 4 del CD de Elegoo: «Lección 4: RGB LED».

Debes copiar el cableado y subir el código que encontrarás en la carpeta del proyecto en el CD (Espanhol/code/Lección 4 RGB LED/RGB_LED). Si no tienes el cd puedes bajarte los archivos desde aquí: CD_ELEGOO_ESPANOL

Este es el esquema de cableado.

Esta es la manera correcta de conectar el led: La patilla más larga al negro. Una vez conectada esa conecto el resto.

Resultado de imagen de rgb led

EJERCICIO 2 OPCIÓN

Una vez ejecutado el programa debes modificarlo para que funcione con un semáforo, como en la práctica anterior pero sólo con un led que haga la función de los anteriores. Con el analogWrite tienes que dar una intensidad (de 0 a 255) a cada uno de los colores para conseguir el color objetivo, mezclándolos. Por ejemplo: para conseguir el color amarillo debo poner el rojo y el verde al máximo (255) y el azul al mínimo (0). Puedes ampliar conocimientos sobre el sistema RGB aquí.

Para esto es importante que entiendas cómo funciona analogWrite sobre las clavijas que aceptan PWM.

//www.elegoo.com
 //2016.06.13

// Define Pins
 #define RED 3
 #define GREEN 5
 #define BLUE 6

#define delayTime 10 // fading time between colors
 void setup()
 {
 pinMode(RED, OUTPUT);
 pinMode(GREEN, OUTPUT);
 pinMode(BLUE, OUTPUT);
 digitalWrite(RED, HIGH);
 digitalWrite(GREEN, HIGH);
 digitalWrite(BLUE, HIGH);
 }

// define variables
 int redValue;
 int greenValue;
 int blueValue;
 // main loop
 void loop()
 {
 redValue = 255; // choose a value between 1 and 255 to change the color.
 greenValue = 0;
 blueValue = 0;

analogWrite(RED, 0);
 delay(1000);

for(int i = 0; i < 255; i += 1) // fades out red bring green full when i=255
 {
 redValue -= 1;
 greenValue += 1;
 analogWrite(RED, 255 - redValue);
 analogWrite(GREEN, 255 - greenValue);
 delay(delayTime);
 }

redValue = 0;
 greenValue = 255;
 blueValue = 0;

for(int i = 0; i < 255; i += 1) // fades out green bring blue full when i=255
 {
 greenValue -= 1;
 blueValue += 1;
 analogWrite(GREEN, 255 - greenValue);
 analogWrite(BLUE, 255 - blueValue);
 delay(delayTime);
 }

redValue = 0;
 greenValue = 0;
 blueValue = 255;
 for(int i = 0; i < 255; i += 1) // fades out blue bring red full when i=255
 {
 redValue += 1;
 blueValue -= 1;
 analogWrite(RED, 255 - redValue);
 analogWrite(BLUE, 255 - blueValue);
 delay(delayTime);
 }
 }
Práctica 4 – LED RGB, PWM y analogWrite

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *