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 instalar Fedora en MacBookPro15,1 MacBook Pro (15-inch, 2018)

    Mi MacBookPro15,1 la uso para desarrollo y ya no soporta las nuevas versiones de MacOS solo hasta Sequoia (15.x)., por lo que he optado por la mejor solucion instalarle Fedora Linux que es la distro que mas me gusta. Este equipo es de los primeros en implementar un chip de seguridad T2. Este chip maneja…

  • Instalar Fedora MacBookPro9,2 MacBook Pro 13-inch Mid 2012

    Tenia a la mano un MacBookPro que usaba para trabajar ya la había actualizado hasta el tope con 16GB de RAM y un SSD SATA y que a la fecha es un equipo viejo, decidí instalarle una de mis distribuciones de Linux preferidas Fedora, así que te comparto una guía de instalación. Todo funciona perfecto…

  • Como Fabricar Un Adaptador Alámbrico E Inalámbrico Para Controles De Videojuegos Compatible En Varias Consolas Con Joypad OS

    Joypad OS es un firmware para placas de microcontroladores (RP2040, ESP32-S3, nRF52840) con el cual puedes fabricar un adaptador tanto alámbrico como inalámbrico para controles de videojuegos. Podrás conectar estos controles USB y Bluetooth: Xbox PlayStation Nintendo 8BitDo Mandos inalámbricos: Adaptadores USB: Otros controladores compatibles Consolas compatibles Modo Descripción SInput Modo compuesto predeterminado: funciona en…