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 A2byte ledPins[] = {3, 5, 6, 9}; // Pines en donde van conectados los ledsbyte numeroDeLeds = sizeof(ledPins); // Número de leds en el arraybyte pwmLeds[sizeof(ledPins)]; // Array para almacenar el valor del pwm de cada ledbool estadoPrevio = 0; // Variable para controlar el estado previo del pulsadorint pwm; // Variable para almacenar el valor del pwmint x; // Variable para controlar el led actualvoid 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 pulsadorif (estadoPulCambio != estadoPrevio) { // Implementación antirreboteif (estadoPulCambio == HIGH) { // Cuando el pulsador de cambio de led se presionex++; // Cambiamos de ledif (x == numeroDeLeds) x = 0; // Si llegamos al último led, volvemos al primeropwm = 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 pwmif (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 actualanalogWrite(ledPins[x], pwmLeds[x]); // Enviamos por el pin en donde esta conectado el led, el valor del pwm que le pertenece}
Publicar un comentario