Actividad 3 – Variando el brillo de un LED


En el proyecto anterior un LED era encendido y apagado de forma intermitente. Ahora bien como podemos variar el brillo de un LED. Una forma análoga de hacerlo era aumentando o disminuyendo la corriente eléctrica a través de el. Para ello usamos la ley de Ohm I=V/R , es decir si disminuimos la resistencia aumentamos la corriente. Por ello podemos probar con diferentes resistencias.

Sin embargo hay otro método de hacerlo y este es una variación del programa Blink. El principio a utilizar es llamado Modulación por ancho de pulso o (PWM Pulse Width Modulation en ingles). Este principio nos dice que el brillo de un LED está dado por el valor promedio de la corriente que atraviesa un LED, es decir si yo tengo un voltaje de 5 V y hago circular una corriente a través de una resistencia de 1 Kohm., circula una corriente de 5 mA. Pero que sucede si se prende y apaga el LED varias veces por segundo, el promedio sería de 2.5 mA, si lo prendo y apago dos veces por segundo tendré el caso del LED intermitente, pero si aumento por ejm. A 50 veces por segundo el ojo no es capaz de seguir esta variación rápida y el ojo lo tomará como que el LED emite un brillo menor.

Bajo este principio es que el cine no es más que una sucesión de fotografías.


y su esquema:

Empecemos con el último sketch blink .

Para entender las funciones usadas, hay que usar la documentación del Arduino:

https://www.arduino.cc/reference/es

hemos usado la función delay(), el manual nos dice:

Descripción

La documentación solo está disponible en 3 idiomas , Ingles, Alemán y Portugues. Cada vez que no entiendas como se usa una función , allí es el lugar para buscar como usarla.

Reescribimos el sketch blink

long value_on = 1000;

long value_off = 1000;

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(LED_BUILTIN, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)

  delay(value_on);                      // wait for a second

  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW

  delay(value_off);                      // wait for a second

}

Y ahora cambiamos los valores

long value_on = 10;

long value_off = 10;

observamos que la intensidad del LED permanece constante pero su intensidad era menor que cuando era intermitente. Es decir a 50 veces por segundo el ojo no puede distinguir los cambios tal rápidos, luego pruebe con valores como:

long value_on = 15;

long value_off = 5;

long value_on = 5;

long value_off = 15;

y puede ver los cambios de intensidad.

Arduino introduce la función “analogWrite()”. Sabemos que una puerta digital solo tiene estados de 0 y 1. Entonces, ¿cómo se envía un valor analógico a un puerto digital? En este caso, se requiere la función analogWrite().

Al mirar la placa Arduino puedes encontrar 6 pines marcados con el símbolo “~”, lo que representa que pueden emitir señales PWM.

El formato de la función es el siguiente: analogWrite(pin, value), Esto se utiliza para enviar un valor analógico de 0~255 a un puerto PWM. Presta atención, ya que sólo es posible utilizar pines digitales que tengan la función PWM, como los pines 3, 5, 6, 9, 10 y 11.

PWM es una tecnología para obtener cantidades analógicas mediante un método digital. El control digital forma una onda cuadrada, y la señal de onda cuadrada tiene sólo dos estados de encendido y apagado (es decir, niveles alto o bajo). Al controlar la relación entre el tiempo de encendido y apagado, se puede simular un voltaje que oscila entre 0 y 5 V. El tiempo de activación (comúnmente denominado nivel alto) se denomina ancho de pulso, por lo que PWM también se denomina modulación de ancho de pulso.


En la figura anterior, la línea verde representa un período, y el valor de analogWrite() corresponde a un porcentaje que también se denomina ciclo de trabajo. El ciclo de trabajo implica que la duración de alto nivel se divide por la duración de bajo nivel en un ciclo. De arriba a abajo, el ciclo de trabajo de la primera onda cuadrada es 0% y su valor correspondiente es 0. El brillo del LED es menor, es decir, apagado.

Cuanto más dure el nivel alto, más brillante será el LED.
Por lo tanto, el último ciclo de trabajo es del 100%, que corresponde a 255, donde el LED es más brillante. PWM se utiliza principalmente para ajustar el brillo del LED o la velocidad de rotación de un motor, y desempeña un papel vital en el control de los coches robot inteligentes.

El programa usado es una variación del programa Fade

El código del programa es:

int ledPin = 9; // establece el pin LED en D9

int value;

void setup () {

  pinMode (ledPin, OUTPUT); // inicializa ledPin como salida.

}

void loop () {

  for (value = 0; value <255; value = value + 1) {

    analogWrite (ledPin, value); // las luces LED se encienden gradualmente

    delay(5); // delay 5MS

}

  for (value = 255; value> 0; value = value-1) {

    analogWrite (ledPin, value); // LED se apaga gradualmente

    delay(5); // delay 5MS

}

}