▷ Control de brillo de varios leds utilizando tres pulsadores - Arduino

En este post te enseñaré cómo controlar el brillo de varios LEDs utilizando tres pulsadores y un Arduino. Este proyecto es una excelente forma de aprender sobre el uso de señales PWM (Modulación por Ancho de Pulso) para variar el brillo de un LED.

Cada pulsador tendrá una función específica: uno permitirá alternar entre los LEDs, otro aumentará el brillo, y el tercero lo disminuirá. Es un ejercicio práctico que combina conceptos básicos de electrónica y programación, ideal para aquellos que buscan mejorar sus habilidades con Arduino.

MATERIALES:

Los materiales que utilizaremos para este proyecto son los siguientes:

  • 1 Arduino Uno.
  • 3 Pulsadores
  • 3 Resistencias de 1k
  • 4 Resistencias de 220 Ohms.
  • 4 Diodos led (Cualquier color).

DIAGRAMA DE CONEXIONES:

EXPLICACIÓN DEL FUNCIONAMIENTO:

En este proyecto, es imprescindible que los LEDs estén conectados a pines que admitan PWM (Modulación por Ancho de Pulso). Los pulsadores se conectarán a los pines A0, A1 y A2 respectivamente.

Para controlar el brillo de los LEDs, ajustaremos el valor del PWM. En lugar de usar funciones específicas, crearemos una variable llamada pwm. Este valor se incrementará o decrementará según el pulsador que presionemos. Si presionamos el pulsador conectado al pin A1, aumentaremos el valor del pwm. Por otro lado, si presionamos el pulsador conectado al pin A2, lo reduciremos. La selección del LED que queremos controlar se realiza con el pulsador conectado al pin A0.

El valor del pwm de cada LED se almacena de forma independiente utilizando un array, lo que permite que cada LED tenga su propio valor de brillo. Este enfoque también se aplica al manejo de los LEDs, asegurando una gestión organizada y eficiente.

CÓDIGO COMPLETO:

/*

* Código escrito por: Esteban Carrillo para EDEPTEC.
* Página web: https://www.edeptec.com
* Facebook: @edeptec
* Youtube: https://youtube.com/c/EDEPTEC

*/
/* Definimos los pines en donde van conectados los pulsadores */
#define pulCambio A0
#define pulSuma A1
#define pulResta A2

byte ledPins[] = {3, 5, 6, 9}; // Pines en donde van conectados los leds
byte numeroDeLeds =  sizeof(ledPins); // Número de leds en el array
byte pwmLeds[sizeof(ledPins)]; // Array para almacenar el valor del pwm de cada led
bool estadoPrevio = 0; // Variable para controlar el estado previo del pulsador

int pwm; // Variable para almacenar el valor del pwm
int x;  // Variable para controlar el led actual

void setup() {
  //--- Declaramos entradas y salidas ---//
  pinMode(pulCambio, INPUT);
  pinMode(pulSuma, INPUT);
  pinMode(pulResta, INPUT);
  /* Configuramos los pines de los leds como salidas */
  for (byte x = 0 ; x < numeroDeLeds; x++) {
    pinMode(ledPins[x], OUTPUT);
  }
}

void loop() {

  bool estadoPulCambio = digitalRead(pulCambio); // Estado lógico del pulsador

  if (estadoPulCambio != estadoPrevio) { // Implementación antirrebote
    if (estadoPulCambio == HIGH) { // Cuando el pulsador de cambio de led se presione
      x++; // Cambiamos de led
      if (x == numeroDeLeds) x = 0; // Si llegamos al último led, volvemos al primero
      pwm = pwmLeds[x]; // Obtenemos el valor del pwm del led actual y lo almacenamos en la variable pwm
    }
    delay(10); // Pausa de 10ms
  }

  estadoPrevio = estadoPulCambio; // Implementación antirrebote

  (digitalRead(pulSuma) == HIGH) && pwm++; // Si presionamos el pulsador de suma, sumamos el valor de la variable pwm
  (digitalRead(pulResta) == HIGH) && pwm--; // Si presionamos el pulsador de resta, restamos el valor de la variable pwm
  // Limitamos el valor de la variable pwm
  if (pwm > 255) pwm = 255;
  if (pwm < 0) pwm = 0;

  pwmLeds[x] = pwm; // Almacenamos el valor de la variable pwm en la posicion del array perteneciente al led actual

  analogWrite(ledPins[x], pwmLeds[x]); // Enviamos por el pin en donde esta conectado el led, el valor del pwm que le pertenece
}

0/Post a Comment/Comments