Componentes · 17 min de lectura

Pines del Arduino Uno: digitales, PWM, analógicos y alimentación

¿Cuántos pines tiene el Arduino Uno? 14 digitales (6 PWM), 6 analógicos A0–A5, Vin, 5V y 3.3V, más I2C, SPI, interrupciones y el límite de 20 mA por pin.

Los pines del Arduino Uno son los 32 puntos de conexión alineados en los conectores hembra negros de los dos bordes largos de la placa: 14 pines digitales de entrada/salida (0–13), de los cuales 6 pueden dar PWM (~3, 5, 6, 9, 10, 11), 6 entradas analógicas (A0–A5) y los pines de alimentación que alimentan la placa o dan energía a otros componentes (Vin, 5V, 3.3V, GND, IOREF, AREF, RESET). Cada pin tiene una función principal, pero muchos tienen además una segunda: A4 y A5 son también el bus I2C, del 10 al 13 forman el bus SPI, el 2 y el 3 son pines de interrupción, y el 0 y el 1 son la línea serie que habla con tu ordenador.

Elegir el pin correcto marca la diferencia entre un proyecto que funciona a la primera y horas buscando fallos. Con las tablas de este artículo entenderás fácilmente por qué el PWM de los pines 9 y 10 deja de funcionar al conectar un servo, por qué el sketch no se sube mientras hay un módulo Bluetooth conectado o por qué unos cuantos LED pueden sobrecargar la placa. Al final encontrarás también un código de prueba que usa todos los tipos de pin a la vez, un plan de pines de ejemplo y las diferencias de pines entre el Uno R3 y el R4.

Placa Arduino Uno R3 y sus pines
Arduino Uno R3: pines digitales (0–13) en el borde superior, pines de alimentación y entradas analógicas (A0–A5) en el borde inferior y el conector ICSP de 2×3 en el borde derecho.

Diagrama de pines del Arduino Uno: ¿dónde está cada pin?

Coloca la placa delante de ti con el conector USB y el jack de alimentación a la izquierda. Los dos conectores del borde superior llevan los pines digitales; los números aumentan de derecha a izquierda, así que el pin de más a la derecha es el 0 (RX) y el pin digital de más a la izquierda es el 13. En el borde inferior, el conector de la izquierda lleva los pines de alimentación y el de la derecha las entradas analógicas. La ~ (virgulilla) junto a un número indica que ese pin puede dar PWM. El grupo de 2×3 pines macho del borde derecho es el conector ICSP.

ConectorPines (de izquierda a derecha)Función
Arriba a la izquierda (10 pines)SCL, SDA, AREF, GND, 13, 12, ~11, ~10, ~9, 8Copia de I2C, referencia analógica, SPI y pines digitales
Arriba a la derecha (8 pines)7, ~6, ~5, 4, ~3, 2, TX→1, RX←0Pines digitales, pines de interrupción y línea serie
Abajo a la izquierda (8 pines)Libre (NC), IOREF, RESET, 3.3V, 5V, GND, GND, VinPines de alimentación
Abajo a la derecha (6 pines)A0, A1, A2, A3, A4, A5Entradas analógicas (A4/A5 también son I2C)
Borde derecho (2×3)1 MISO, 2 5V, 3 SCK, 4 MOSI, 5 RESET, 6 GNDConector de programación ICSP
CaracterísticaArduino Uno R3
MicrocontroladorATmega328P, 16 MHz
Tensión de funcionamiento (lógica)5 V
Tensión de entrada (jack / Vin)Recomendada 7–12 V, límite 6–20 V
Entradas/salidas digitales14 pines (D0–D13)
Salidas PWM6 pines: 3, 5, 6, 9, 10, 11
Entradas analógicas6 pines (A0–A5), 10 bits (0–1023)
Corriente por pin20 mA recomendados, 40 mA máximo absoluto
Corriente total (VCC/GND)200 mA
Corriente del pin 3.3VMáximo 50 mA
Memoria32 KB de flash (0,5 KB de bootloader), 2 KB de SRAM, 1 KB de EEPROM

La gran tabla de pines: D0–D13 y A0–A5

PinPuertoFunción principalFunción extraNota
D0 (RX)PD0E/S digitalUART RX (Serial)Conectado al chip USB-serie, déjalo libre
D1 (TX)PD1E/S digitalUART TX (Serial)Conectado al chip USB-serie, déjalo libre
D2PD2E/S digitalInterrupción externa INT0Pulsadores, encoders, conteo de RPM
D3 ~PD3E/S digital, PWM 490 HzInterrupción externa INT1, Timer2El PWM falla mientras suena tone()
D4PD4E/S digital-Sin función extra, libre para usar
D5 ~PD5E/S digital, PWM 980 HzTimer0Mismo temporizador que millis()
D6 ~PD6E/S digital, PWM 980 HzTimer0Mismo temporizador que millis()
D7PD7E/S digital-Sin función extra, libre para usar
D8PB0E/S digital-Sin función extra, libre para usar
D9 ~PB1E/S digital, PWM 490 HzTimer1La librería Servo desactiva su PWM
D10 ~PB2E/S digital, PWM 490 HzSPI SS, Timer1Debe seguir como salida al usar SPI
D11 ~PB3E/S digital, PWM 490 HzSPI MOSI, Timer2También en el conector ICSP
D12PB4E/S digitalSPI MISOTambién en el conector ICSP
D13PB5E/S digitalSPI SCKAquí está el LED L de la placa
A0PC0Entrada analógicaDigital 14-
A1PC1Entrada analógicaDigital 15-
A2PC2Entrada analógicaDigital 16-
A3PC3Entrada analógicaDigital 17-
A4PC4Entrada analógicaI2C SDA, digital 18Sin lectura analógica mientras se usa I2C
A5PC5Entrada analógicaI2C SCL, digital 19Sin lectura analógica mientras se usa I2C
Cuando lo necesites, los pines analógicos funcionan también como pines digitales normales: A0 = 14, A1 = 15 … A5 = 19. Puedes escribir pinMode(A2, OUTPUT) para encender un LED o leer un pulsador con digitalRead(A3); así tienes en total 20 pines digitales en el Uno. La columna "Puerto" de la tabla es el nombre real del pin dentro del ATmega328P (digital 13 = PB5) y te sirve cuando escribes código rápido con acceso directo a los puertos. A6 y A7 solo existen en placas como el Nano y el Pro Mini.

¿Cómo funcionan los pines digitales (0–13)?

Cada pin digital se configura como entrada o salida con pinMode(). Como salida, digitalWrite(pin, HIGH) lleva el pin a unos 5 V y LOW a 0 V. Como entrada, digitalRead() compara la tensión con un umbral: con el ATmega328P funcionando a 5 V, todo lo que supera 3,0 V es un HIGH seguro, lo que está por debajo de 1,5 V es un LOW seguro y lo de en medio es una zona indefinida. Por eso la salida de un sensor de 3,3 V suele leerse como HIGH en el Uno; pero la salida de 5 V del Uno no debe ir directamente a la entrada de un módulo de 3,3 V, entre ambos hace falta un convertidor de nivel lógico.

Un pin de entrada que no está conectado a nada queda flotante y lee HIGH y LOW al azar, incluso al acercar la mano. La solución es llevar el pin a un nivel fijo con una resistencia: pinMode(pin, INPUT_PULLUP) activa la resistencia de 20–50 kΩ que hay dentro del chip, y el pulsador se conecta entre el pin y GND. Tienes los detalles en Cómo conectar un pulsador a Arduino. El pin 13 está conectado al LED L de la placa; en el R3 original ese LED se controla a través de un amplificador operacional que hace de búfer, así que usar el pin como entrada no da problemas, pero en algunos clones el LED y su resistencia van directos al pin y pueden estropear la lectura de un pulsador con el pull-up interno.

Pines PWM (~3, 5, 6, 9, 10, 11) y temporizadores

El Uno no puede generar una salida analógica real; en su lugar, estos seis pines dan PWM, una onda cuadrada que se enciende y se apaga muy rápido. Con analogWrite(pin, valor) ajustas entre 0 y 255 cuánto tiempo permanece encendida la onda: 0 es totalmente apagado, 127 más o menos la mitad y 255 totalmente encendido. Así se controlan el brillo de un LED, la velocidad de un motor y la de un ventilador. Los seis pines PWM están unidos de dos en dos a tres temporizadores (timers) de hardware, y esa es la causa de los conflictos con algunas librerías. La idea del PWM y el cálculo del ciclo de trabajo se explican en ¿Qué es PWM?.

TemporizadorPines PWMFrecuencia¿Quién usa este temporizador?
Timer0 (8 bits)5, 6Unos 980 Hzmillis(), delay() y micros()
Timer1 (16 bits)9, 10Unos 490 HzLibrería Servo
Timer2 (8 bits)3, 11Unos 490 Hztone() y librerías como IRremote
En cuanto usas la librería Servo, analogWrite() deja de funcionar en los pines 9 y 10, aunque no haya ningún servo conectado en ellos. Mientras un zumbador suena con tone(), el PWM de los pines 3 y 11 también se altera. Si tu proyecto tiene servo y zumbador, los pines PWM seguros son el 5 y el 6. Como el PWM de estos dos pines sale del mismo temporizador que millis(), con valores muy bajos (0–10) puede quedarse encendido algo más de lo esperado.

Pines analógicos (A0–A5) y AREF

Los pines analógicos miden una tensión entre 0 y 5 V con una resolución de 10 bits, y analogRead() devuelve un número de 0 a 1023. Cada paso equivale a unos 4,9 mV; para pasar el número a voltios usa tensión = valor × 5,0 / 1023, de modo que una lectura de 512 significa unos 2,5 V. Los seis pines comparten por turnos un único ADC, y cada lectura tarda unos 100 µs, lo que permite unas 10.000 lecturas por segundo. Para medir bien, la impedancia de salida del sensor no debería superar los 10 kΩ; si es mayor, al leer dos pines seguidos los valores pueden mezclarse, y descartar la primera lectura y usar la segunda lo soluciona. Para medir tensiones de más de 5 V, elige las resistencias adecuadas con la calculadora de divisor de tensión.

El pin AREF sirve para cambiar el límite superior de la medida analógica. analogReference(DEFAULT) usa 5 V, analogReference(INTERNAL) la referencia interna de 1,1 V del chip y analogReference(EXTERNAL) la tensión que aplicas al pin AREF (0–5 V) como tope. Con un sensor que da 0–1 V, la referencia de 1,1 V reduce cada paso a unos 1,1 mV y hace la medida unas 4,5 veces más fina. Componentes como potenciómetros, LDR y sensores de humedad del suelo se conectan a estos pines; los detalles de la conversión analógico-digital están en el artículo sobre el ADC y un ejemplo práctico en el artículo del potenciómetro.

Si aplicas una tensión externa al pin AREF, escribe siempre analogReference(EXTERNAL) antes del primer analogRead(). De lo contrario, la referencia interna del chip y la tensión externa quedan en cortocircuito y el microcontrolador puede dañarse. Y nunca apliques a los pines analógicos más de 5 V ni una tensión negativa.

Pines de alimentación: Vin, 5V, 3.3V, GND, IOREF y RESET

Pin¿Qué hace?Límites y precauciones
VinDa la tensión que llega del jack o alimenta la placa con 7–12 VSe salta el diodo de protección contra inversión, cuidado con la polaridad
5VSalida de 5 V del regulador o del USBFusible de 500 mA en USB; desde fuera, solo 5 V regulados
3.3VSalida de 3,3 V del regulador de la placaMáximo 50 mA; para módulos pequeños como el RC522
GNDTierra común (2 abajo, 1 arriba)El GND de todas las fuentes externas debe unirse aquí
IOREFIndica a los shields la tensión lógica de la placaEn el Uno va unido a 5V, no sirve para alimentar
RESETReinicia la placa al ponerlo en LOWLo usan los botones de reset de los shields
AREFEntrada de referencia externa para medidas analógicas0–5 V; antes, analogReference(EXTERNAL)
NC (pin sin nombre)Reservado para uso futuro en el R3No está conectado a nada

El Uno se puede alimentar de tres formas. Por USB, la placa toma 5 V directamente del ordenador y un fusible rearmable de 500 mA protege el puerto. Si das 7–12 V por el jack DC o por Vin, el regulador de la placa los baja a 5 V; si están conectados ambos, la placa pasa sola a la alimentación externa cuando Vin supera unos 6,6 V. Como el regulador convierte en calor la tensión sobrante, con 12 V de entrada se calienta rápido si sacas unos cientos de mA del pin 5V. Lo más sano es alimentar cargas como servos, motores y tiras LED desde una fuente aparte y unir solo los GND. Para elegir batería y calcular la autonomía usa la calculadora de duración de batería, y lee todas las formas de alimentación en Cómo alimentar un Arduino.

No metas nunca más de 5 V por el pin 5V: el regulador queda fuera de juego y cualquier tensión por encima de 6 V puede quemar el ATmega328P. Conectar por error una pila de 9 V al pin 5V es una de las formas más comunes de quemar la placa cuando se empieza. Conecta siempre la pila al jack DC o al pin Vin.

¿Por qué hay que dejar libres los pines 0 y 1?

Los pines 0 (RX) y 1 (TX) son el único puerto serie por hardware del ATmega328P y en la placa están conectados mediante resistencias de 1 kΩ al chip convertidor USB-serie (ATmega16U2). Tu ordenador usa estos dos pines al subir el código y al enviar texto al Monitor Serie. Si el TX de un módulo Bluetooth u otra señal está conectado al pin 0, las dos fuentes se pelean por la misma línea y la carga se detiene con avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00. Además, el pin 1 cambia rápidamente cada vez que se ejecuta Serial.print(), así que un LED o un relé conectado ahí se activa al azar.

Por eso, deja libres el 0 y el 1 mientras te queden otros pines. Si vas a conectar un módulo serie como un HC-05, un GPS o un reproductor MP3, la librería SoftwareSerial crea un segundo puerto serie en otros dos pines. El siguiente código conecta el módulo a los pines 8 (RX) y 7 (TX): envía al módulo lo que escribes en el Monitor Serie y al ordenador lo que llega del módulo. Con módulos de lógica de 3,3 V como el HC-05, conecta la salida TX del Uno (pin 7) al pin RX del módulo a través de un divisor de tensión. Todas las soluciones a los problemas de carga están en Arduino no sube el código y la lógica de la comunicación serie en Comunicación serie UART.

C++ (Arduino IDE)
1#include <SoftwareSerial.h>
2
3SoftwareSerial moduleSerial(8, 7);   // RX = 8, TX = 7; 0 ve 1 boş kalır / 0 and 1 stay free
4
5void setup() {
6  Serial.begin(9600);                // USB üzerinden bilgisayar / computer over USB
7  moduleSerial.begin(9600);          // HC-05 veri modu hızı / HC-05 data mode baud rate
8  Serial.println(F("Seri kopru hazir / Serial bridge ready"));
9}
10
11void loop() {
12  if (moduleSerial.available()) {
13    Serial.write(moduleSerial.read());   // modülden bilgisayara / module to computer
14  }
15  if (Serial.available()) {
16    moduleSerial.write(Serial.read());   // bilgisayardan modüle / computer to module
17  }
18}

Pines de comunicación: I2C (A4/A5), SPI (10–13) y pines de interrupción (2, 3)

I2C te permite conectar decenas de dispositivos al mismo bus con solo dos cables (SDA y SCL); pantallas LCD, OLED, módulos de reloj RTC y sensores como el BME280 lo usan. En el Uno, SDA = A4 y SCL = A5. En las placas R3, los pines SDA y SCL que están junto a AREF no son un bus aparte, están conectados por dentro a A4 y A5, así que mientras usas I2C no puedes usar A4 y A5 para lecturas analógicas. La librería Wire funciona a 100 kHz por defecto y llega a 400 kHz con Wire.setClock(400000). Las direcciones, las resistencias pull-up y un escáner I2C están en ¿Qué es I2C?, y un ejemplo práctico en Pantalla LCD I2C.

SPI es más rápido pero necesita más cables: MOSI = 11, MISO = 12, SCK = 13 y SS (CS) = 10. Los módulos de tarjeta SD, los lectores RFID y las pantallas TFT usan SPI. Varios dispositivos pueden compartir el bus: MOSI, MISO y SCK son comunes y cada dispositivo recibe su propio pin CS. Un detalle importante: en modo maestro (master), el pin 10 debe quedarse como salida; si lo pones como entrada y se va a LOW, el ATmega328P se pasa a modo esclavo (slave) y el SPI se detiene. MISO, MOSI y SCK también están en el conector ICSP, y algunos shields toman el SPI de ahí. Para más detalles, consulta ¿Qué es SPI? y RFID RC522.

Una interrupción te permite captar al instante un cambio en un pin, haga lo que haga loop() en ese momento. En el Uno, las interrupciones externas solo están en los pines 2 (INT0) y 3 (INT1): escribes attachInterrupt(digitalPinToInterrupt(2), funcion, FALLING), y el modo de disparo puede ser LOW, CHANGE, RISING o FALLING. Los encoders, sensores de RPM, caudalímetros y pulsadores que no se pueden perder van en estos pines. Los demás pines también tienen "interrupciones por cambio de pin" (PCINT), pero los pines de un mismo puerto comparten una sola función de interrupción y tu código tiene que averiguar qué pin cambió. Las reglas y los ejemplos están en Interrupciones en Arduino.

FunciónArduino UnoESP32 (DevKit)Raspberry Pi Pico
I2C SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
SPI MOSI / MISO / SCK / CS11 / 12 / 13 / 10GPIO 23 / 19 / 18 / 5GP19 / GP16 / GP18 / GP17
UART TX / RX1 / 0GPIO 1 / 3 (conectados al USB)GP0 / GP1
Interrupción externaSolo 2 y 3Todos los GPIOTodos los GPIO
PWM6 pinesCasi todos los pines con salidaTodos los GPIO
Entrada analógica6 pines, 10 bitsADC1: GPIO 32–39, 12 bitsGP26, GP27, GP28; 12 bits
Nivel lógico5 V3,3 V (no tolera 5 V)3,3 V (no tolera 5 V)
Corriente por pin20 mA (máx. 40 mA)Unos 20 mA recomendados4 mA por defecto, máx. 12 mA

Al pasar al ESP32 o a la Pico, la mayor diferencia es la tensión: las dos placas funcionan a 3,3 V y sus pines no toleran 5 V, así que los módulos de 5 V que conectas directamente al Uno pueden necesitar un convertidor de nivel. A cambio, estas placas tienen interrupciones y PWM en casi todos los pines, y los buses I2C y SPI se pueden mover a otros pines. Para comparar las placas, lee ¿Arduino Uno o ESP32?, y para ver los mapas de pines usa la herramienta de pinout; las placas en sí se explican en ¿Qué es el ESP32? y ¿Qué es la Raspberry Pi Pico?.

¿Para qué sirve el conector ICSP?

ICSP (In-Circuit Serial Programming) es un conector de 2×3 que sirve para programar el microcontrolador directamente por las líneas SPI, sin USB ni bootloader. El ICSP del borde derecho pertenece al ATmega328P, y el pequeño ICSP1 junto al conector USB pertenece al chip USB-serie (ATmega16U2). En el día a día no lo tocarás, pero el ICSP entra en juego cuando el bootloader se corrompe, cuando grabas un bootloader en un ATmega328P nuevo o cuando subes código con un programador como el USBasp. Si conviertes un segundo Uno en programador con el ejemplo ArduinoISP, sus pines 10, 11, 12 y 13 van a RESET, MOSI, MISO y SCK de la placa de destino, y un condensador de 10 µF entre RESET y GND en el Uno programador evita su reinicio automático. Para saber si tu placa ha sufrido daños, echa un vistazo a ¿Se ha quemado mi Arduino?.

Pin ICSPSeñalEquivalente en el Uno
1MISOD12
2VCC (+5 V)5V
3SCKD13
4MOSID11
5RESETRESET
6GNDGND

20 mA por pin, 200 mA en total: límites de corriente

Un pin del Uno trabaja con seguridad hasta 20 mA. Los 40 mA de la hoja de datos del ATmega328P son el máximo absoluto, es decir, el valor por encima del cual el chip puede dañarse de forma permanente, no un valor de trabajo. La corriente total que pasa por los pines VCC y GND del chip no debe superar los 200 mA. La hoja de datos también divide los pines en grupos: al dar corriente (HIGH), D0–D4 junto con A0–A5, y D5–D13 entre sí, deben quedarse cada uno por debajo de 150 mA; al absorber corriente (LOW), los grupos D0–D4, D5–D13 y A0–A5 deben quedarse cada uno por debajo de 100 mA. Si alimentas un LED rojo desde 5 V con una resistencia de 220 Ω, la corriente es (5 − 2) / 220 ≈ 13,6 mA. Diez LED encendidos a la vez suman 136 mA; está por debajo de 200 mA, pero si todos están en el mismo grupo se acercan mucho al límite de 150 mA del grupo. Si los LED se encienden con el pin en LOW (resistencia desde 5V al pin) y la mayoría están en el mismo grupo, se supera el límite de 100 mA. Reparte los LED entre los grupos o sube la resistencia a 330–470 Ω. Encuentra la resistencia adecuada con la calculadora de resistencia para LED o la calculadora de la ley de Ohm.

  • Motores: Incluso un motor DC pequeño consume cientos de mA y genera picos de tensión; usa un driver de motor como el L298N o un transistor.
  • Bobina de un relé: La bobina de un relé de 5 V consume unos 70–90 mA; usa un módulo de relé con transistor y diodo.
  • Servomotores: El cable de señal puede ir a un pin, pero la alimentación del servo debe venir de una fuente aparte, no del pin 5V; los detalles están en el artículo del servomotor.
  • Tiras LED y LED de potencia: Las tiras de 12 V y los LED de 1 W necesitan un MOSFET de nivel lógico.
  • Cortocircuitos: Conectar directamente a GND una salida en HIGH saca del pin mucho más de 40 mA y lo estropea para siempre.

Código de prueba: usa pines digitales, PWM, analógicos y de interrupción a la vez

  1. Conecta un LED al pin 9 con una resistencia de 220 Ω: la pata larga a la resistencia y la corta a GND.
  2. Conecta las dos patas exteriores de un potenciómetro a 5V y GND y la del centro a A0.
  3. Conecta un pulsador entre el pin 2 y GND; no hace falta resistencia aparte porque se usa el pull-up interno.
  4. Sube el código, abre el Monitor Serie y ponlo a 9600 baudios.
  5. Gira el potenciómetro: cambia el brillo del LED del pin 9, el LED L de la placa (pin 13) se enciende cuando la tensión pasa de 2,5 V y el contador sube uno con cada pulsación.
C++ (Arduino IDE)
1const byte BUTTON_PIN = 2;    // kesme pini INT0 / interrupt pin INT0
2const byte PWM_LED    = 9;    // ~9: PWM çıkışı / PWM output
3const byte STATUS_LED = 13;   // kart üzerindeki L LED'i / onboard L LED
4const byte POT_PIN    = A0;   // analog giriş / analog input
5
6volatile unsigned int pressCount = 0;   // ISR içinde değişir / changed inside the ISR
7
8void onButton() {
9  static unsigned long lastPressMs = 0;
10  unsigned long now = millis();
11  if (now - lastPressMs > 50) {         // 50 ms sıçrama filtresi / 50 ms debounce
12    pressCount++;
13    lastPressMs = now;
14  }
15}
16
17void setup() {
18  Serial.begin(9600);                   // 0 ve 1 numaralı pinleri kullanır / uses pins 0 and 1
19  pinMode(STATUS_LED, OUTPUT);
20  pinMode(PWM_LED, OUTPUT);
21  pinMode(BUTTON_PIN, INPUT_PULLUP);    // dahili pull-up direnci / internal pull-up resistor
22  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), onButton, FALLING);
23}
24
25void loop() {
26  int raw = analogRead(POT_PIN);        // 0-1023 arası ham değer / raw value 0-1023
27  float volts = raw * 5.0 / 1023.0;     // volta çevir / convert to volts
28  analogWrite(PWM_LED, raw / 4);        // 0-255 arası PWM / PWM from 0 to 255
29  digitalWrite(STATUS_LED, volts > 2.5 ? HIGH : LOW);   // 2,5 V eşiği / 2.5 V threshold
30
31  noInterrupts();                       // sayacı güvenle kopyala / copy the counter safely
32  unsigned int presses = pressCount;
33  interrupts();
34
35  Serial.print(F("A0: "));
36  Serial.print(raw);
37  Serial.print(F("  V: "));
38  Serial.print(volts, 2);
39  Serial.print(F("  Buton / Button: "));
40  Serial.println(presses);
41  delay(200);
42}

El código usa a la vez cuatro tipos de pin del Uno. analogRead(A0) lee un valor de 0 a 1023 y raw / 4 lo reduce al rango 0–255 que espera analogWrite(). Para no contar los rebotes del pulsador, la función de interrupción ignora las señales que llegan menos de 50 ms después de la última pulsación. El contador que cambia dentro de la interrupción se declara volatile, y loop() lo copia pausando las interrupciones un instante, porque el Uno, de 8 bits, lee un número de 16 bits en dos pasos y una interrupción en medio podría dar un valor erróneo. Los pines 0 y 1 solo se usan para Serial, así que no se conecta nada más a ellos.

Plan de pines de ejemplo: ¿qué componente va en cada pin?

Repartir los pines al azar en un proyecto con muchos componentes provoca conflictos. Primero coloca en sus pines los componentes con funciones especiales (I2C, SPI, interrupciones, PWM) y después reparte las tareas digitales sencillas entre los pines libres. Abajo tienes un plan de ejemplo para una cerradura con tarjeta RFID: lector RC522, LCD I2C, servo, zumbador, pulsador y dos LED. Como el servo y tone() se usan juntos, el PWM de los pines 3, 9, 10 y 11 ya queda descartado, y el plan lo tiene en cuenta.

ComponentePin del Uno¿Por qué este pin?
RC522 SDA (SS)10Pin SS del SPI; debe quedarse como salida
RC522 SCK / MOSI / MISO13 / 11 / 12Los pines SPI por hardware no se pueden cambiar
RC522 RST9Vale cualquier pin digital; el PWM del 9 ya no se puede usar por el servo
RC522 VCC3.3VEl módulo funciona a 3,3 V y su consumo está por debajo del límite de 50 mA
LCD I2C SDA / SCLA4 / A5El único bus I2C del Uno
Señal del servo6La librería Servo funciona en cualquier pin; alimentación con 5 V externos
Zumbador8tone() funciona en cualquier pin, no se gasta un pin PWM
Pulsador2Pin de interrupción; con INPUT_PULLUP no hace falta resistencia
LED verde / rojo4 / 7Pines digitales sencillos sin función extra
Libres0, 1, 3, 5, A0–A3Línea serie libre; 3 para una segunda interrupción, 5 para PWM, A0–A3 para sensores

Diferencias de pines entre el Arduino Uno R3 y el R4

CaracterísticaUno R3Uno R4 (Minima / WiFi)
MicrocontroladorATmega328P, 8 bits, 16 MHzRenesas RA4M1, 32 bits, 48 MHz
Distribución de pinesUno estándarIgual; los shields encajan
Corriente por pin20 mA8 mA
Resolución analógica10 bits10 bits por defecto, hasta 14 bits
Salida analógica real (DAC)No tieneDAC de 12 bits en A0
Pines 0 y 1Compartidos con el USB (Serial)Separados del USB (Serial1)
Rango de Vin7–12 V recomendado6–24 V
USBUSB-B, a través del ATmega16U2USB-C; directo al procesador en el Minima, a través de un puente ESP32-S3 en el WiFi

En resumen, en el R4 los números y las funciones de los pines no cambian (PWM ~3, 5, 6, 9, 10, 11; I2C A4/A5; SPI 10–13; interrupciones 2, 3), pero la corriente por pin baja a 8 mA. Un LED que en el R3 alimentabas directamente desde un pin necesita en el R4 una resistencia mayor (por ejemplo, 1 kΩ para unos 3 mA) o un transistor. La comparación detallada está en Arduino Uno R4. Si buscas una placa más pequeña, te servirán Pines del Arduino Nano y ¿Qué Arduino comprar?.

Errores frecuentes y cómo solucionarlos

SíntomaCausaSolución
El código no se sube, error "not in sync"Hay un módulo conectado al pin 0 o 1Desconecta el módulo al subir o pásalo a otros pines con SoftwareSerial
El brillo del LED deja de cambiar al añadir un servoLa librería Servo desactivó el PWM de 9 y 10Pasa el LED al 3, 5, 6 u 11
La velocidad del motor falla mientras suena el zumbadortone() usa el Timer2, que afecta a 3 y 11Pasa el PWM al 5, 6, 9 o 10
El valor analógico cambia soloPin flotante o impedancia de la fuente demasiado altaConecta bien el sensor y, si hace falta, lee dos veces
El pulsador parece pulsarse soloEl pin de entrada está flotanteUsa INPUT_PULLUP o añade una resistencia de 10 kΩ
A4/A5 leen mal con una pantalla I2C conectadaA4/A5 se comparten con el bus I2CConecta el sensor analógico a A0–A3
El módulo SPI no respondeEl pin 10 está como entrada o el CS es incorrectoDeja el pin 10 como salida y da a cada dispositivo su propio CS
La placa se calienta o se reinicia solaSe saca demasiada corriente de los pines o del pin 5VAlimenta las cargas desde otra fuente y une los GND
Antes de empezar un proyecto, dibuja en papel un pequeño plan de pines: componente, pin, función. Al principio del código, define los pines con constantes con nombre como const byte LED_PIN = 9;; así, si cambias un componente de pin, solo modificas una línea. Si tu placa se reinicia de forma inesperada, sigue los pasos de diagnóstico de Arduino se reinicia solo.

Cuando conoces los pines del Arduino Uno, no necesitas memorizar dónde va cada componente: miras lo que necesita y eliges tú mismo el pin correcto. Si quieres repasar lo básico, empieza por ¿Qué es Arduino?. En la app BlueGrays encontrarás proyectos como encender un LED, leer un pulsador, medir la luz con un LDR, un LED RGB con PWM, una LCD I2C, RFID y dos Arduino comunicándose por una línea serie, todos paso a paso con esquemas que muestran por qué se eligió cada pin y con el código listo.

Preguntas frecuentes

¿Cuántos pines tiene el Arduino Uno?

El Arduino Uno R3 tiene 14 pines digitales de entrada/salida (0–13) y 6 entradas analógicas (A0–A5); como los pines analógicos también pueden usarse como digitales, suman 20 pines de señal. Seis de los pines digitales dan PWM. Además hay pines de alimentación y control como Vin, 5V, 3.3V, GND, IOREF, AREF y RESET, y el conector ICSP de 6 pines.

¿Cuáles son los pines PWM del Arduino Uno?

Los pines PWM son el 3, 5, 6, 9, 10 y 11; en la placa llevan una ~ junto al número. El 5 y el 6 funcionan a unos 980 Hz y los demás a unos 490 Hz. Al usar la librería Servo se ve afectado el PWM de 9 y 10, y al usar tone() el de 3 y 11.

¿Se pueden usar los pines analógicos de Arduino como digitales?

Sí. En el Uno, los pines A0–A5 funcionan como pines digitales normales con pinMode, digitalWrite y digitalRead y corresponden a los números 14–19. Puedes conectar un LED a A0 o un pulsador a A3. La única excepción es que, mientras usas I2C, A4 y A5 quedan reservados para el bus.

¿Cuánta corriente da un pin del Arduino Uno?

De un pin se pueden sacar 20 mA con seguridad; 40 mA es el máximo absoluto, y superarlo puede dañar el pin de forma permanente. La suma de todos los pines no debe superar los 200 mA. Por eso los LED se conectan con resistencia, y cargas como motores y relés se controlan con un transistor, un MOSFET o un módulo driver.

¿Se pueden usar los pines 0 y 1 del Arduino Uno?

Se pueden, pero no se recomienda. Estos pines están conectados al chip USB-serie y el ordenador usa esa línea al subir código y con el Monitor Serie. Con un módulo conectado al pin 0, la carga puede fallar con el error "not in sync", así que úsalos en último lugar o pasa a otros pines con SoftwareSerial.

¿Cuáles son los pines SDA y SCL del Arduino Uno?

En el Uno, SDA del bus I2C es el pin A4 y SCL es el pin A5. Las placas R3 tienen además dos pines marcados SDA y SCL junto a AREF, pero están conectados por dentro a A4 y A5 y no forman un bus aparte. En el ESP32 los pines I2C por defecto son GPIO 21 y 22; en la Raspberry Pi Pico el I2C puede ir en muchos pines, y lo más habitual es usar GP4 (SDA) y GP5 (SCL).

Ver todos los proyectos
Parpadeo de LED
#1Principiante

Parpadeo de LED

El primer hola de la electrónica: encender y apagar un solo LED. El Arduino enciende y apaga el LED a intervalos cortos, así que la luz parpadea rápido. Ves de la forma más sencilla cómo la placa cont

4.6(188)
1127
Encender un LED con pulsador (Push)
#9Principiante

Encender un LED con pulsador (Push)

Como un timbre: la luz se enciende mientras pulsas y se apaga cuando sueltas. El Arduino escucha el botón todo el rato; mientras está pulsado enciende el LED, y en cuanto levantas el dedo lo apaga. Co

4.8(113)
229
Medir la intensidad de luz con LDR
#11Principiante

Medir la intensidad de luz con LDR

¿Quieres ver en números cuánta luz hay en tu habitación? El LDR, una pequeña pieza sensible a la luz, mide la luz ambiente y el Arduino escribe el valor en la pantalla del ordenador cada medio segundo

4.6(81)
139
HC-SR04 Medición de distancia (pantalla en serie)
#27Principiante

HC-SR04 Medición de distancia (pantalla en serie)

El sensor HC-SR04 funciona igual que un murciélago que se orienta en la oscuridad: emite un sonido que no puedes oír, escucha el eco y mide a qué distancia está el objeto que tiene delante. El Arduino

4.6(46)
71
Transición de color suave con Led RGB
#40Principiante
Premium

Transición de color suave con Led RGB

Un solo LED RGB pasa lentamente del rojo al verde, del verde al azul y vuelve al rojo, en un bucle de arcoíris que nunca se detiene. Cada transición dura unos dos segundos y medio, y los amarillos, tu

4.8(58)
76
Uso de la pantalla LCD con I2C
#32Principiante
Premium

Uso de la pantalla LCD con I2C

Dale a tu Arduino su propia pantalla y haz que escriba su primer mensaje. La pantalla LCD de dos líneas se conecta con solo unos pocos cables; primero aparece un saludo en la línea de arriba, luego un

4.8(53)
70
Lectura de valores RFID
#53Principiante
Premium

Lectura de valores RFID

El llavero del portal o la tarjeta de acceso guardan un número de identificación secreto, y este proyecto lo lee. Acerca la tarjeta al lector RFID y el Arduino escribe su número en la pantalla del ord

4.7(47)
61
Comunicación unidireccional entre 2 Arduino
#57Intermedio
Premium

Comunicación unidireccional entre 2 Arduino

Haces que dos Arduino hablen por un solo cable: pulsas el botón de uno y se enciende el LED del otro, vuelves a pulsar y se apaga. La placa que envía avisa del botón con un mensaje corto, y la que rec

4.4(37)
50