Arduino – 7. Apagar gradualmente un LED

Hemos visto hasta el momento las salidas digitales las cuales solo tiene dos valores posibles 1 HIGH (encendido) y 0 LOW (apagado) con la función digitalWrite(PIN, HIGH / LOW);., también existen los tipos de salidas analógicas PWM (Pulse Width Modulation / Modulación por Ancho de Pulsos) las cuales van de un rango de 0 a 255 y podemos usar la función analogWrite(PIN,VALOR); para controlar la salida.

No todos los pines de nuestro Arduino se puede usar como salidas analógicas., las que son están marcadas con una ~ virgulilla a un lado del numero del pin.

Gracias a estas podemos controlar el voltaje que sale de un pin y son muy útiles para controlar la velocidad de un motor eléctrico, el brillo de un LED y controlar un servomotor.

Modelos de tarjetas Pines y Frecuencias

TARJETAPWM PINS *PWM FRECUENCIA
UNO (R3 and earlier), Nano, Mini3, 5, 6, 9, 10, 11490 Hz (pins 5 and 6: 980 Hz)
UNO R4 (Minima, WiFi) *3, 5, 6, 9, 10, 11490 Hz
Mega2 – 13, 44 – 46490 Hz (pins 4 and 13: 980 Hz)
GIGA R1 **2 – 13500 Hz
Leonardo, Micro, Yún3, 5, 6, 9, 10, 11, 13490 Hz (pins 3 and 11: 980 Hz)
UNO WiFi Rev2, Nano Every3, 5, 6, 9, 10976 Hz
MKR boards *0 – 8, 10, A3, A4732 Hz
MKR1000 WiFi **0 – 8, 10, 11, A3, A4732 Hz
Zero **3 – 13, A0, A1732 Hz
Nano 33 IoT **2, 3, 5, 6, 9 – 12, A2, A3, A5732 Hz
Nano 33 BLE/BLE Sense ****1 – 13, A0 – A7500 Hz
Due ***2-131000 Hz
1013, 5, 6, 9pins 3 and 9: 490 Hz, pins 5 and 6: 980 Hz

¿Cómo usar la función analogWrite()?

Para generar señales PWM con Arduino se utiliza la función analogWrite(PIN, VALOR); donde el PIN puede ser 3, 5, 6, 9, 10 y 11 (En nuestro Arduino Uno R3), y el VALOR puede ir de 0 a 255, como podemos verlo en la siguiente tabla:

Argumento analogWrite()Ciclo de trabajoVoltaje promedio
00%0 V
6325%1,25 V
7630%1,5 V
12750%2,5 V
17870%3,5 V
19175%3,75 V
22990%4,5 V
255100%5 V

Apagado gradual de un LED

Requerimos

  • Tarjeta UNO R3
  • Protoboard
  • Led 5mm rojo
  • Resistencia de 330Ω Ohms
  • Dos cables macho para protoboard o dupont

Conectamos un cable del Pin GND de la Tarjeta UNO R3 al cátodo (cable negro) y el Pin 11 a la resistencia, y la resistencia al ánodo del LED.

// Declaramos pinLed constante de tipo byte
// Y le asignamos el pin 11 que es una salida de tipo ~ PWM 
const byte pinLed = 11;

void setup()
{
  // Inicializamos el pin digital 11 de salida
  pinMode(pinLed, OUTPUT);
}

void loop()
{
  
  // analogWrite nos permite controlar el voltage
  // de 0 apagado a 100% los 5V
  
  // le damos un 60% de brillo al LED durante 200 milisegundos
  analogWrite(pinLed,60);
  delay(200);
  analogWrite(pinLed,50);
  delay(200);
  analogWrite(pinLed,40);
  delay(200);
  analogWrite(pinLed,30);
  delay(200);
  analogWrite(pinLed,20);
  delay(200);
  analogWrite(pinLed,10);
  delay(200);
  // hasta llegar a 0 con pausas de tiempo
  analogWrite(pinLed,0);
  delay(1000);
  // y se reinicia el ciclo loop
}

Presiona el botón de Iniciar simulación, ve como enciende y apaga el LED, luego clic a </ Código.

Ver el ejercicio en una nueva ventana

Como buena practica en nuestro código << Entre menos líneas mejor >>, vamos a mejorar nuestro código agregando una condicional if.

// Declaramos una variable pinLed constante tipo byte
// del Pin 11 que es una salida ~ PWM
const byte pinLed = 11;
// Declaramos brillo de tipo entero y le asignamos
// el valor de 60
int brillo = 60;

void setup(){
  // Inicializamos el pin digital 11 de salida
  pinMode(pinLed, OUTPUT);
}

void loop(){
  /*
   La funcion analogWrite nos permite
   controlar el voltaje que sale de un pin
  */ 
  // inicia con analogWrite(11,60);
  analogWrite(pinLed,brillo);
  delay(200); //esperamos 200 milisegundos
  // si brillo es igual a cero
  if(brillo == 0){
    // incrementamos la espera a 1000
    delay(1000);
    // y le asignamos el valor de 60
    brillo = 60;
  // si no
  } else {
    // decrementamos 10 | 60-10 | hasta ... | 10-10 = 0 
    // Es lo mismo que brillo = brillo - 10;
    brillo -= 10;
  }
  
}

Presiona el botón de Iniciar simulación, ve como enciende y apaga el LED, luego clic a </ Código.

Ver el ejercicio en una nueva ventana

View more articles
  • Python 101: Instalar entorno de trabajo IDE Visual Studio Code

    Existe un sin fin de editores de código IDE (Integrated development environment / Entorno de desarrollo integrado) especiales para Python como: Pero la que recomiendo es Visual Studio Code (descarga e instala el adecuado para tu Sistema Operativo Windows, Linux o Mac) E instala estas extensiones: En VSC le damos clic al Icono de Extensiones…

  • Instalación de Linux en Windows 11 24H2 con WSL

    Podemos tener las ventajas y todo lo que el entorno Linux nos ofrece en Windows instalando WSL Windows Subsystem for Linux. Recuerda activar la virtualización en el BIOS de tu equipo., te comparto cual es la tecla que tienes que presionar en cuanto arranca tu equipo, busca la opción virtualization y le das Enable /…

  • Instalar Raspberry Pi OS

    Descarga e instala Raspberry Pi Imager para tu SO (Windows, MacOs o Linux) https://www.raspberrypi.com/software Requieres una memoria SD y con un adaptador conéctala a la computadora Ejecuta Raspberry Pi Imagen y sigue los pasos para tu modelo (Zero, Zero 2 W, 1, 2, 3, 4 o 5 ). Inserta la memoria SD en tu Raspberry…