¿Cómo controlar el brillo de varios LEDs con un potenciómetro en Arduino?

¿Cómo controlar el brillo de varios LEDs con un potenciómetro en Arduino?

En esta ocasión vas a aprender a conectar cuatro LEDS y a controlar el brillo o intensidad de ellos con un potenciómetro en Arduino. Además, aprovecharemos el mismo circuito para crear una secuencia de luces con los LEDs mediante el movimiento del potenciómetro.

Componentes necesarios

Los componentes que necesitas, son los siguientes:

CantidadComponente
1Arduino UNO
4330/220 Ω Resistencia
4LEDs
1Potenciómetro 10k Ω
1Placa de pruebas
9Cables de conexión

¿Como conectar varios LEDs?

Estos LEDs no van a tener conexión entre ellos. Vamos a conectar cuatro LEDs individuales. Si quieres conectar más, tendrás que modificar ligeramente el código (cualquier duda, déjame un comentario).

Las resistencias pueden ir directamente al bus, no necesitas llevar un cable.

En el ánodo (+) conectamos los cables que van a pines con PWM. Esto son las siglas para Pulse Width Modulation (Modulación de ancho de pulso).

Potenciómetro con LEDs Arduino

¿Qué son los pines PWM de Arduino y para qué sirven?

Arduino no tiene realmente salidas analógicas. En realidad, las tomas PWM son digitales disfrazadas de analógicas.

Arduino solo es capaz de proporcionar o 5v (HIGH) o 0v (LOW) (Dejando aparte que algunos modelos llevan una toma de 3v o 3.3v).

Lo que hace Arduino, es simular una señal analógica. Da 5v durante equis tiempo y da 0v el resto. La media de tensión de ese período es el valor "analógico" que recibimos. Esto se denomina como Duty Cycle (ciclo de trabajo).

Los LEDs, en realidad, van a encenderse y apagarse muy rápido para emular esta señal analógica. Acciones que ocurren tan rápido que nuestros ojos no serán capaces de ver. De esta forma, vamos a crear el efecto visual de que el LED está con menos brillo o con más. Si pasa todo el tiempo a 5v (potenciómetro al máximo), los LEDs van a tener constantemente su máxima intensidad.

En cambio, si tenemos el potenciómetro a la mitad (50%), los LEDs van a estar la mitad del ciclo de trabajo apagados y la otra mitad encendidos.

Si lo tenemos a un 25%, los LEDs van a brillar muy poco, ya que tendrán un 75% del ciclo de trabajo con 0v.

Finalmente, si tenemos el potenciómetro al nivel mínimo, los LEDs se apagan, ya que el ciclo de trabajo es el 100% del tiempo con 0v.

¿Cómo se conecta y cómo funciona un potenciómetro en Arduino?

El potenciómetro cuenta con tres pines. Los dos extremos son para el positivo y negativo.

El pin central es para la salida analógica. Va a ir conectado a uno de los pines de la zona "ANALOG IN" (A0, A1, A2...).

El uso más común de estos pines, es permitir la lectura de dispositivos analógicos como el potenciómetro.

El potenciómetro cuenta con 1024 valores posibles, en un rango de 0 a 1023. Esa lectura es la que vamos a obtener con analogRead() (lectura analógica) sobre el pin analógico.

Por lo tanto, si tenemos el potenciómetro en el nivel más bajo, obtenemos un 0. En el más alto, un 1023. Esta lectura irá cambiando a medida que vayamos moviendo la rueda del potenciómetro.

Código para controlar el potenciómetro

Es el momento de añadir al circuito el código necesario para que funcione.

Lo primero es declarar constantes para los LEDs y el potenciómetro. Además, una variable para almacenar las lecturas del potenciómetro.

// Constantes y variables
const int POTENCIOMETRO = 0;
const int LED1 = 11;
const int LED2 = 10;
const int LED3 = 9;
const int LED4 = 6;

int intensidad;

Configuramos los pines de los LEDs:

void setup(){
  // Configuración de los pines de los LEDs
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
}

Los pines analógicos de ANALOG IN, a diferencia de los digitales, no hace falta configurarlos como INPUT u OUTPUT, ya que solo sirven de entrada.

Finalmente, escribiremos el loop().

Por un lado, a la variable intensidad, le pasamos la lectura del potenciómetro con analogRead() que va a ser de 0 a 1023 como he explicado. El motivo de que se divida entre 4 es que el analogWrite() requiere valores de entre 0 y 255 (256 valores). Entonces, para que nos cuadre el valor leído del potenciómetro, hay que dividirlo por cuatro. 1023/4 = 255,75 (se redondea a la baja, trabajamos con números enteros. Nos quedamos con 255), de ese modo, los valores se van a ir ajustando solos.

Por ejemplo, ¿tenemos el potenciómetro a la mitad? Entonces, el valor que se lee, es de 511,5 (511 redondeando a la baja) 511/4 = 127,75 (127) que es justo el rango intermedio entre 0 y 255.

A analogWrite(), le pasamos dos parámetros. El pin que queremos y el valor de intensidad, que va a ser lo que vaya devolviendo el potenciómetro. analogWrite() es como el digitalWrite() pero para pines PWM, así podemos "escribir" y mostrar los valores mediante los LEDs.

void loop(){
  // Se divide el valor del potenciómetro entre 4
	intensidad = analogRead(POTENCIOMETRO) / 4;
  
  // Se le pasa la intensidad a los 4 LEDs
  analogWrite(LED1, intensidad);
  analogWrite(LED2, intensidad);
  analogWrite(LED3, intensidad);
  analogWrite(LED4, intensidad);
}

Dejo el código completo para que puedas copiarlo de una sola vez.

// Constantes y variables
const int POTENCIOMETRO = 0;
const int LED1 = 11;
const int LED2 = 10;
const int LED3 = 9;
const int LED4 = 6;

int intensidad;

void setup(){
  	// Configuración de los pines de los LEDs
  	pinMode(LED1, OUTPUT);
 	  pinMode(LED2, OUTPUT);
	  pinMode(LED3, OUTPUT);
	  pinMode(LED4, OUTPUT);
}

void loop(){
  	// Se divide el valor del potenciómetro entre 4
	  intensidad = analogRead(POTENCIOMETRO) / 4;
  
  	// Se le pasa la intensidad a los 4 LEDs
    analogWrite(LED1, intensidad);
    analogWrite(LED2, intensidad);
    analogWrite(LED3, intensidad);
    analogWrite(LED4, intensidad);
}

Controlar encendido de LEDs individuales con potenciómetro en Arduino

Esta vez, vamos a hacer, que los LEDs se vayan encendiendo a su máximo valor (HIGH), pero que nunca haya más de uno encendido a la vez. Es decir, vamos a dibujar el recorrido del potenciómetro con los LEDs. Primero se encenderá el LED1, cuando se llegue al nivel del LED2, el primero se apagará y se encenderá el segundo. Así lo mismo con el resto.

El diseño del circuito, es exactamente igual, solo vamos a cambiar el código.

Cambiamos la variable intensidad por nivel para que tenga mayor sentido en este contexto (línea 8 del código).

El resto lo dejamos igual y nos fijamos en el loop(). Aquí, reemplaza todas las llamadas de la variable intensidad por nivel. En el IDE de Arduino lo puedes hacer pulsando las teclas CTRL+ F. Este panel sirve para buscar algo en el código y para reemplazar cosas. En el panel "Buscar", vamos a escribir lo que queremos reemplazar y en "Reemplazar con", escribiremos lo que queremos que lo sustituya. Si hacemos click en el botón "Reemplazar", se van a ir reemplazando de uno en uno cada vez que lo pulsemos. Si le das al botón "Reemplazar Todos", se van a reemplazar todos de una sola vez.

buscar y reemplazar en Arduino.

El código es casi igual al anterior.

// Constantes y variables
const int POTENCIOMETRO = 0;
const int LED1 = 11;
const int LED2 = 10;
const int LED3 = 9;
const int LED4 = 6;

int nivel;

void setup(){
    // Configuración de los pines de los LEDs
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
    pinMode(LED4, OUTPUT);
}

void loop(){ 
    // Se divide el valor del potenciómetro entre 4
    nivel = analogRead(POTENCIOMETRO) / 4;

    // Si el valor de nivel es 0, se apagan todos los LEDs
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);

    /* Si el valor de nivel está entre 1 y 63,
    se enciende el primer LED. El resto quedan 
    apagados*/
    if (nivel > 0 && nivel <= 63) {
       digitalWrite(LED1, HIGH);
    }
    /* Si el valor de nivel está entre 64 y 127,
    se enciende el segundo LED. El resto quedan 
    apagados*/
    else if (nivel >= 64 && nivel <= 127){
       digitalWrite(LED1, LOW);
       digitalWrite(LED2, HIGH);    
    } 
    /* Si el valor de nivel está entre 128 y 191,
    se enciende el tercer LED. El resto quedan 
    apagados*/
    else if (nivel > 128 && nivel <= 191){
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, HIGH);
    } 
    /* Si el valor de nivel está entre 192 y 255,
    se enciende el cuarto LED. El resto quedan 
    apagados*/
    else if (nivel >= 192 && nivel <= 255){
      digitalWrite(LED3, LOW);
      digitalWrite(LED4, HIGH);
  }
}

Eso es todo por el momento. Habrá mucho más. No te lo pierdas en la categoría de Arduino.

Deja una respuesta

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

bombilla arduino 220v Entrada anterior Temporizar una bombilla de 220v/125v con Arduino
Arrastrar barra tareas de Windows 11 Entrada siguiente Recuperar arrastrar y soltar (drag & drop) en la barra de tareas de Windows 11