Control de rampa con Arduino y LED PWM

Objetivo

Aprende a controlar la rampa de encendido de un LED utilizando un potenciómetro conectado a una entrada analógica de una placa Arduino Nano. Este tutorial te guía paso a paso para crear un sistema de control de brillo suave utilizando PWM.

Materiales

1 x Arduino Nano Ver en Amazon

1 x Resistencia 220Ω Ver en Amazon

1 x LED Ver en Amazon

1 x Potenciómetro Ver en Amazon

1 x Placa Protoboard Ver en Amazon

Esquemas

Esquema ProtoboardEsquema Electrónico

Código

int salidaPWM = 9;          // Pin PWM
int potenciometro = A0;     // Pin del potenciómetro
int valorPWM = 0;           // Valor inicial de PWM
const int max_duracion_rampa = 3000; // Duración máxima de la rampa en ms
const int min_duracion_rampa = 100;  // Duración mínima de la rampa en ms
const int max_incremento = 10; // Máximo incremento permitido por paso

void setup() {
    pinMode(salidaPWM, OUTPUT);
    pinMode(potenciometro, INPUT);
}

void loop() {
    int lectura = analogRead(potenciometro); // Lee el potenciómetro (0-1023)

    // Mapea la duración de la rampa en función del potenciómetro (de 100 ms a 1000 ms)
    int duracion_rampa = map(lectura, 0, 1023, min_duracion_rampa, max_duracion_rampa);

    // Calcula un incremento dinámico en función de la duración de la rampa
    int incremento = constrain(255 / (duracion_rampa / 10), 1, max_incremento); 
    // Asegura que el incremento sea al menos 1 y máximo 10

    // Calcula el delay por paso, garantizando que la rampa completa tome el tiempo definido
    int velocidad = duracion_rampa / (255 / incremento);

    analogWrite(salidaPWM, valorPWM); // Ajusta el PWM
    delay(velocidad); // Controla la velocidad de la rampa con el potenciómetro

    valorPWM += incremento; // Incrementa el valor de PWM

    if (valorPWM > 255) { // Si supera 255, reinicia a 0
        valorPWM = 0;
    }
}