Tutorial: Controlar la Intensidad de un LED con Potenciómetro (PWM)

 https://www.youtube.com/watch?v=RhSxNY6m-7c

En este tutorial aprenderás a controlar la intensidad luminosa de un LED usando un potenciómetro y la técnica PWM (Modulación por Ancho de Pulso).

📋 Materiales Necesarios

  • 1 Arduino (Uno, Nano, etc.)

  • 1 LED

  • 1 Potenciómetro de 10kΩ

  • 1 Resistencia de 220Ω

  • Cables de conexión

  • Protoboard

🔌 Esquema de Conexiones

text
POTENCIÓMETRO:
- Terminal izquierdo → 5V (Arduino)
- Terminal derecho → GND (Arduino)
- Terminal central → A0 (Arduino)

LED:
- Ánodo (+) → Pin 9 (Arduino) con resistencia de 220Ω
- Cátodo (-) → GND (Arduino)

💻 Código Arduino

cpp
// Definición de pines
const int potPin = A0;    // Pin analógico para el potenciómetro
const int ledPin = 9;     // Pin PWM para el LED

// Variables
int potValue = 0;         // Valor leído del potenciómetro (0-1023)
int pwmValue = 0;         // Valor PWM para el LED (0-255)

void setup() {
  // Configurar el pin del LED como salida
  pinMode(ledPin, OUTPUT);
  
  // Iniciar comunicación serial (opcional, para debugging)
  Serial.begin(9600);
}

void loop() {
  // Leer el valor del potenciómetro (0-1023)
  potValue = analogRead(potPin);
  
  // Convertir el valor a rango PWM (0-255)
  pwmValue = map(potValue, 0, 1023, 0, 255);
  
  // Escribir el valor PWM al LED
  analogWrite(ledPin, pwmValue);
  
  // (Opcional) Mostrar valores por monitor serial
  Serial.print("Potenciometro: ");
  Serial.print(potValue);
  Serial.print(" | PWM: ");
  Serial.println(pwmValue);
  
  // Pequeña pausa para estabilidad
  delay(10);
}

🎯 Explicación del Código

1. Definición de Pines

cpp
const int potPin = A0;    // Entrada analógica para el potenciómetro
const int ledPin = 9;     // Salida PWM para el LED (debe ser pin PWM: 3,5,6,9,10,11)

2. Función map()

cpp
pwmValue = map(potValue, 0, 1023, 0, 255);

Convierte el rango del potenciómetro (0-1023) al rango PWM (0-255)

3. analogWrite()

cpp
analogWrite(ledPin, pwmValue);

Envía señal PWM al LED. Valores:

  • 0 = LED apagado

  • 255 = LED máxima intensidad

🔧 Pines PWM en Arduino

Los pines que soportan PWM en Arduino Uno son:

  • 3, 5, 6, 9, 10, 11

📊 Valores y Comportamiento

PotenciómetroPWMIntensidad LED
00Apagado
512128Media intensidad
1023255Máxima intensidad

🛠️ Posibles Mejoras

1. Suavizado de cambios

cpp
// Agregar suavizado para transiciones más naturales
int smoothedPWM = (pwmValue * 0.1) + (smoothedPWM * 0.9);
analogWrite(ledPin, smoothedPWM);

2. Control con botones

cpp
// Incrementar/decrementar intensidad con botones
if (digitalRead(upButton) == HIGH) {
  pwmValue = min(pwmValue + 5, 255);
}
if (digitalRead(downButton) == HIGH) {
  pwmValue = max(pwmValue - 5, 0);
}

🚨 Solución de Problemas

LED no enciende:

  • Verificar polaridad del LED

  • Comprobar resistencia (220Ω)

  • Confirmar que el pin usado es PWM

Respuesta irregular:

  • Verificar conexiones del potenciómetro

  • Comprobar valores por monitor serial

Intensidad no varía:

  • Confirmar que se usa analogWrite() y no digitalWrite()

🎓 Conceptos Aprendidos

  • PWM (Modulación por Ancho de Pulso): Técnica para simular valores analógicos

  • Entradas analógicas: Lectura de valores continuos (0-1023)

  • Conversión de rangos: Uso de la función map()

  • Control de intensidad: Regulación de potencia en dispositivos

¡Ahora tienes control total sobre la intensidad de tu LED


Tutorial: Control PWM con Potenciómetro en Arduino

📋 Introducción

En este tutorial aprenderás a controlar la intensidad de un LED usando un potenciómetro mediante PWM (Pulse Width Modulation) con Arduino.

🛠 Componentes Necesarios

  • 1x Placa Arduino (Uno, Nano, etc.)

  • 1x Potenciómetro (10kΩ recomendado)

  • 1x LED

  • 1x Resistencia 220Ω

  • Cables jumper

  • Protoboard

🔌 Esquema de Conexiones

Potenciómetro:

  • Pin izquierdo → 5V de Arduino

  • Pin derecho → GND de Arduino

  • Pin central → A0 de Arduino

LED:

  • Ánodo (+): Pin 9 de Arduino (a través de resistencia 220Ω)

  • Cátodo (-): GND de Arduino

💻 Código Arduino

arduino
// Definición de pines
const int potPin = A0;    // Pin analógico para el potenciómetro
const int ledPin = 9;     // Pin PWM para el LED

// Variables
int potValue = 0;         // Valor leído del potenciómetro (0-1023)
int pwmValue = 0;         // Valor PWM para el LED (0-255)

void setup() {
  // Configurar el pin del LED como salida
  pinMode(ledPin, OUTPUT);
  
  // Iniciar comunicación serial (opcional, para monitoreo)
  Serial.begin(9600);
}

void loop() {
  // Leer el valor del potenciómetro (0-1023)
  potValue = analogRead(potPin);
  
  // Mapear el valor de 0-1023 a 0-255 para PWM
  pwmValue = map(potValue, 0, 1023, 0, 255);
  
  // Escribir el valor PWM al LED
  analogWrite(ledPin, pwmValue);
  
  // Mostrar valores en el monitor serial (opcional)
  Serial.print("Potenciometro: ");
  Serial.print(potValue);
  Serial.print(" | PWM: ");
  Serial.println(pwmValue);
  
  // Pequeña pausa para estabilidad
  delay(10);
}

🔍 Explicación del Código

1. Definición de Pines

arduino
const int potPin = A0;    // Entrada analógica
const int ledPin = 9;     // Salida PWM (pines 3, 5, 6, 9, 10, 11 en Arduino Uno)

2. Función map()

Convierte el rango del potenciómetro (0-1023) al rango PWM (0-255):

arduino
pwmValue = map(potValue, 0, 1023, 0, 255);

3. PWM con analogWrite()

Controla la intensidad del LED:

arduino
analogWrite(ledPin, pwmValue);

📊 Pines PWM en Arduino

  • Arduino Uno/Nano: Pines 3, 5, 6, 9, 10, 11

  • Frecuencia PWM: 490Hz o 980Hz dependiendo del pin

🎯 Funcionamiento

  1. El potenciómetro actúa como divisor de voltaje

  2. Arduino lee el voltaje en el pin central (0-5V)

  3. La lectura analógica se convierte a digital (0-1023)

  4. Se mapea a valores PWM (0-255)

  5. El LED cambia de intensidad según la posición del potenciómetro

🔧 Posibles Mejoras

1. Suavizado de lectura

arduino
// Promedio de lecturas para mayor estabilidad
int leerPotenciometro() {
  int total = 0;
  for(int i = 0; i < 10; i++) {
    total += analogRead(potPin);
    delay(1);
  }
  return total / 10;
}

2. Control de motor DC

arduino
// Para controlar velocidad de motor DC
const int motorPin = 9;

void setup() {
  pinMode(motorPin, OUTPUT);
}

void loop() {
  int velocidad = map(analogRead(A0), 0, 1023, 0, 255);
  analogWrite(motorPin, velocidad);
}

⚠️ Consejos y Solución de Problemas

  1. LED no enciende: Verifica polaridad y conexiones

  2. No hay variación: Revisa conexiones del potenciómetro

  3. Valores erráticos: Usa filtrado de señales o promediado

  4. Pines PWM: Asegúrate de usar pines con capacidad PWM (~)

📈 Aplicaciones

  • Control de intensidad lumínica

  • Control de velocidad de motores

  • Generación de señales analógicas

  • Sistemas de control de posición

¡Ahora puedes controlar dispositivos analógicos con precisión usando PWM y potenciómetros!

Comentarios

Entradas más populares de este blog

12. Demostracion de como usar Tinkercad para simular Arduino con circuitos

11. Ejemplos Básicos de Leds y Pulsadores

Lectura de Potenciómetro con Arduino Uno en Tinkercad