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
  • Como usar Esptool

    Esptool es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3. 1.- Instala la ultima versión de Python (ocupas 3.10 o superior., sigue la guía) 2.- Instala Visual Studio Code (Sigue el tutorial) 3.- Crea una carpeta por ejemplo esptool y…

  • Como configurar un entorno de desarrollo para el lenguaje C / C++

    Para crear un entorno de trabajo para poder jugar con el lenguaje C recomiendo 1. Instalar compilador C / C++ Para Windows Descarga e instala MinGW Ejecuta MinGW Installer Manager selecciona los paquetes básicos e instálalos (durara algunos minutos ya que los descarga) Agregar MinGW al PATH Es importante agregarlo a las variables del sistema…

  • 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…