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
TARJETA | PWM PINS * | PWM FRECUENCIA |
---|---|---|
UNO (R3 and earlier), Nano, Mini | 3, 5, 6, 9, 10, 11 | 490 Hz (pins 5 and 6: 980 Hz) |
UNO R4 (Minima, WiFi) * | 3, 5, 6, 9, 10, 11 | 490 Hz |
Mega | 2 – 13, 44 – 46 | 490 Hz (pins 4 and 13: 980 Hz) |
GIGA R1 ** | 2 – 13 | 500 Hz |
Leonardo, Micro, Yún | 3, 5, 6, 9, 10, 11, 13 | 490 Hz (pins 3 and 11: 980 Hz) |
UNO WiFi Rev2, Nano Every | 3, 5, 6, 9, 10 | 976 Hz |
MKR boards * | 0 – 8, 10, A3, A4 | 732 Hz |
MKR1000 WiFi ** | 0 – 8, 10, 11, A3, A4 | 732 Hz |
Zero ** | 3 – 13, A0, A1 | 732 Hz |
Nano 33 IoT ** | 2, 3, 5, 6, 9 – 12, A2, A3, A5 | 732 Hz |
Nano 33 BLE/BLE Sense **** | 1 – 13, A0 – A7 | 500 Hz |
Due *** | 2-13 | 1000 Hz |
101 | 3, 5, 6, 9 | pins 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 trabajo | Voltaje promedio |
---|---|---|
0 | 0% | 0 V |
63 | 25% | 1,25 V |
76 | 30% | 1,5 V |
127 | 50% | 2,5 V |
178 | 70% | 3,5 V |
191 | 75% | 3,75 V |
229 | 90% | 4,5 V |
255 | 100% | 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
.