Componente · Controlador

Arduino Uno

El Arduino Uno es la placa más común para aprender robótica: lógica de 5 V, programación sencilla y difícil de romper. Para qué sirve y cuándo usarlo.

Qué es

El Arduino Uno es una placa de desarrollo pequeña construida alrededor del ATmega328P de Microchip, un microcontrolador de 8 bits. Expone los pines del chip en cabeceras etiquetadas, añade un puerto USB para programación y alimentación, y se encarga de las partes engorrosas —el regulador de tensión, el cristal de reloj, el circuito de reset— para que puedas centrarte en tu código y tu cableado. Para una enorme mayoría de quien empieza en robótica, el Uno es la forma en que un motor gira por primera vez o un sensor se enciende.

Su atractivo duradero no es la potencia bruta —según los estándares actuales es lento y va escaso de memoria—. Es la indulgencia. Los pines de 5 V toleran los errores de cableado que cometen los principiantes, la comunidad ha respondido casi todas las preguntas que se te pueden ocurrir, y casi todo sensor y controlador de afición se distribuye con código de ejemplo que da por sentado un Uno.

Diagrama etiquetado de una placa Arduino Uno: un puerto USB-B y un conector cilíndrico de CC en el borde izquierdo, el microcontrolador ATmega328P en el centro, una cabecera digital de E/S para los pines D0 a D13 en el borde superior, y las cabeceras de alimentación y de entrada analógica (A0 a A5) en el borde inferior.
El Arduino Uno de un vistazo: USB y alimentación de CC a la izquierda, el ATmega328P pensando, E/S digital en el borde superior, y alimentación más entradas analógicas en el inferior. Descargar SVG

Cómo funciona

Escribes un sketch: un programa en C++ con dos funciones. setup() se ejecuta una vez cuando la placa se enciende; loop() se ejecuta indefinidamente a partir de ahí. Dentro de ellas lees entradas y manejas salidas a través de los pines:

  • Pines digitales leen o escriben una señal HIGH/LOW (5 V / 0 V): la pulsación de un botón, un LED, la entrada de dirección de un controlador de motores.
  • Pines PWM (marcados con ~) simulan una tensión analógica encendiendo y apagando muy rápido. Así se ajusta la velocidad de un motor o el brillo de un LED.
  • Entradas analógicas miden una tensión de 0–5 V y la devuelven como un número de 0–1023. Así se lee un potenciómetro o un sensor de línea analógico.

El Uno no tiene sistema operativo. Tu código es lo único que se ejecuta, lo que hace predecibles los tiempos: algo valioso cuando cierras un lazo de control alrededor de un robot real.

Cuándo usarlo

Recurre a un Uno cuando estés aprendiendo, cuando quieras el mayor montón posible de tutoriales y bibliotecas compatibles, o cuando la tarea de tu robot sea sencilla y en tiempo real: leer unos cuantos sensores, ejecutar un lazo de control, manejar dos motores. Un seguidor de línea, un esquivador de obstáculos o un pequeño rover de conducción diferencial están justo en su zona cómoda.

Mira en otro sitio cuando necesites Wi-Fi o Bluetooth (un ESP32 es la mejora habitual), matemática pesada o visión por cámara (una Raspberry Pi), o mucha memoria. Los 2 KB de SRAM del Uno se llenan más rápido de lo que esperan los principiantes: las cadenas largas y los arrays grandes son los culpables habituales.

Errores comunes

  • Es una placa de 5 V. Muchos sensores modernos son de 3,3 V y la lógica de 5 V puede dañarlos. Consulta la ficha técnica antes de cablear.
  • No alimentes motores desde la placa. El regulador del Uno no puede suministrar corriente de motor; usa una batería aparte y un controlador de motores. Alimentar motores directamente a través del Uno es la vía más habitual de que un principiante provoque un brown-out o reinicie su placa.
  • delay() bloquea todo. Mientras la placa está en un delay(), no puede leer sensores ni reaccionar. Para cualquier cosa que deba responder, mide el tiempo con millis() en su lugar.
  • Vigila tu memoria. Si la placa se comporta de forma errática sin razón clara, puede que te hayas quedado sin SRAM.

Patillaje: qué puede hacer realmente cada pin

Catorce pines digitales y seis analógicos, pero no son intercambiables. Seis de ellos tienen una segunda función que importa.

Pin También Notas para un robot
D0 (RX) Serie por hardware No lo uses. Lo tiene el programador USB
D1 (TX) Serie por hardware No lo uses. Igual
D2, D3 Interrupciones externas 0 y 1 Los únicos dos pines que pueden despertar en cualquier flanco: resérvalos para encoders
D3, D5, D6, D9, D10, D11 PWM (~) Los seis pines de analogWrite. Aquí vive la velocidad del motor
D10–D13 SPI (SS, MOSI, MISO, SCK) Necesarios para una tarjeta SD o una radio nRF24
D13 LED integrado Lleva un LED y una resistencia: es una entrada débil, pero como salida va bien
A0–A5 Entrada analógica, 10 bits También usables como pines digitales si te quedas sin ellos
A4, A5 I²C (SDA, SCL) Compartidos por todo dispositivo I²C: usarlos como entradas analógicas te cuesta el bus

Dos de esas líneas condicionan la mayoría de los diseños de robots. D2 y D3 son los únicos pines de interrupción de verdad, lo que significa que un robot con dos encoders de rueda los usa ambos y no le queda ninguno. Y A4/A5 son el bus I²C, así que en un Uno un MPU-6050 más una matriz de sensores analógicos se disputan los pines desde el primer momento.

Esta presión de pines es el motivo más habitual por el que un proyecto se queda corto en un Uno, no la velocidad ni la memoria. Catorce pines digitales y seis analógicos desaparecen rápido en cuanto tienes un controlador de motores (6 pines), un par de encoders (4 pines, 2 de ellos interrupciones) y una matriz de sensores (6 analógicos).

Cómo alimentarlo, y las tres formas de hacerlo mal

Entrada Tensión Ruta Notas
USB 5 V A través de un fusible rearmable Limitado a 500 mA para toda la placa
Conector cilíndrico 7–12 V A través del regulador lineal de a bordo La alimentación recomendada
Pin VIN 7–12 V El mismo regulador Lo mismo que el conector, expuesto como pin
Pin 5V 5 V Directo al raíl Omite el regulador: sin ninguna protección

El regulador es lineal, lo que significa que quema como calor la diferencia entre la entrada y los 5 V. Con 12 V de entrada y 200 mA de consumo, eso son (12 − 5) × 0.2 = 1.4 W en un encapsulado pequeño, y se pone realmente caliente. Aliméntalo con 9 V en lugar de 12 V si tienes la opción.

Tres errores concretos que merece la pena nombrar:

Alimentar motores desde el pin de 5 V. El regulador no puede suministrar corriente de motor, así que el raíl se hunde, la placa se reinicia y el síntoma parece un fallo de software. Los motores llevan su propia alimentación y solo comparten masa.

Alimentar el pin de 5 V desde una fuente sin regular. Ese pin está directamente sobre el raíl, así que cualquier cosa por encima de unos 5,5 V va directa al ATmega328P.

Alimentar por USB y por el conector a la vez. La placa lo contempla (hay un comparador que selecciona la fuente más alta), pero una batería en el conector no se cargará y puede retornar corriente por un diseño marginal en un clon.

Qué pueden suministrar realmente los pines

Límite Valor Qué significa
Por pin 20 mA recomendados, 40 mA máximo absoluto Un LED está bien. Un motor no. La bobina de un relé tampoco
Total entre todos los pines 200 mA Ocho LEDs a 20 mA ya son todo el presupuesto
Pin de 5 V, alimentado por USB ~450 mA tras el consumo propio de la placa Un servo ya puede superar esto en solitario
Pin de 3,3 V 50 mA Viene del regulador del chip USB: muy limitado

El pin de 3,3 V sorprende a la gente con frecuencia. No es un raíl de uso general; es una comodidad de 50 mA. Un módulo ESP-01 intentando transmitir se queda sin tensión al momento.

El problema de los 2 KB de memoria

El Uno tiene 32 KB de flash para tu programa y 2 KB de SRAM para sus variables mientras se ejecuta. La flash rara vez es la limitación. La SRAM, constantemente.

Cada literal de cadena en un Serial.print se copia a la SRAM al arrancar:

Serial.println("Calibration complete, entering drive mode");   // 43 bytes of SRAM, forever

Veinte mensajes así son 800 bytes, el 40 % del total. La solución es F(), que deja la cadena en la flash y la lee solo cuando hace falta:

Serial.println(F("Calibration complete, entering drive mode"));  // 0 bytes of SRAM

Los arrays son el otro consumidor. Un float ocupa 4 bytes, así que un buffer de registro de 200 muestras son 800 bytes y no hay ningún aviso: el compilador informa del uso de flash con gusto y no dice nada útil sobre la SRAM en tiempo de ejecución.

El síntoma de quedarte sin ella no es un error limpio. La pila crece hacia abajo, el montículo crece hacia arriba, y cuando se encuentran, las variables se corrompen entre sí sin avisar. La placa se comporta de forma errática: lecturas que carecen de sentido, un bucle que se salta pasos, un reset sin causa. Si un Uno empieza a comportarse de manera irracional después de que le hayas añadido una función, sospecha de la SRAM antes que nada.

// Drop this in and watch it while you develop.
int freeRam() {
  extern int __heap_start, *__brkval;
  int v;
  return (int)&v - (__brkval == 0 ? (int)&__heap_start : (int)__brkval);
}

Por debajo de unos 200 bytes libres, espera problemas.

Resolución de problemas

Síntoma Causa probable Solución
Se reinicia al arrancar los motores Corriente de motor pasando por la placa Alimentación de motor aparte, solo masa común
La carga falla: «not in sync» Algo en D0/D1, o puerto equivocado Desconecta lo que haya en los pines de serie
Comportamiento errático tras añadir código Sin SRAM Envolve los literales en F(); comprueba freeRam()
analogWrite no hace nada El pin no admite PWM Usa el 3, 5, 6, 9, 10 u 11
La biblioteca Servo rompe el PWM en 9/10 Servo toma el control del Timer 1 Usa otros pines PWM, o acciona los servos con un PCA9685
No se encuentra el dispositivo I²C A4/A5 están ocupados por otra cosa El bus I²C son esos dos pines, en exclusiva
El regulador se pone muy caliente Entrada cerca de 12 V Bájalo a 7–9 V
Un dispositivo de 3,3 V se queda sin tensión Límite de 50 mA en ese pin Usa un regulador de 3,3 V aparte
Un sensor lee valores sin sentido Sensor de 3,3 V con lógica de 5 V Haz una conversión de niveles, o usa una placa de 3,3 V

¿Uno u otra cosa?

Placa Lógica Por qué elegirla
Uno 5 V Indulgente, documentado universalmente, chip en zócalo que puedes cambiar
Nano 5 V Mismo chip, más cómodo en protoboard, 8 pines analógicos en lugar de 6
Mega 2560 5 V 54 digitales, 16 analógicos, 6 interrupciones, 8 KB de SRAM: la respuesta a la presión de pines
ESP32 3.3 V Wi-Fi, Bluetooth, doble núcleo, muchísimo más rápido
Pro Micro 5 V USB nativo: puede hacerse pasar por teclado o ratón

El Nano merece mención aparte en robótica: es el mismo ATmega328P con el mismo código, y saca A6 y A7 como entradas analógicas adicionales. Para una matriz de reflectancia de 8 canales eso es la diferencia entre que quepa y no quepa, y por eso los montajes de seguidores de línea especifican tan a menudo un Nano.

El resumen honesto: el valor del Uno es que todo funciona a la primera. Cada biblioteca, cada tutorial, cada diagrama de cableado da por supuesto un Uno. Eso vale más mientras aprendes que cualquier especificación, y cuando se te quede corto, lo que se te quede corto será casi siempre el número de pines.

Explora el grafo

Se usa en estos montajes

Proyectos, rutas de aprendizaje y simuladores que incluyen Arduino Uno.

Comparar

Alternativas

Preguntas

Preguntas frecuentes sobre Arduino Uno

¿Qué es el Arduino Uno?

El Arduino Uno es una placa de microcontrolador pensada para principiantes y construida en torno al chip ATmega328P. Te permite leer sensores y controlar motores, LED y otros componentes electrónicos con programas cortos en C++ llamados sketches, y es la placa con la que la mayoría de la gente aprende robótica.

¿Para qué se usa el Arduino Uno en robótica?

En robótica, el Uno hace de cerebro del robot: lee los sensores, ejecuta un bucle de control y mueve los motores a través de un driver como el L298N. Encaja en seguidores de línea, robots que esquivan obstáculos y pequeños rovers, donde la tarea es sencilla y necesita una temporización predecible y en tiempo real.

¿Qué microcontrolador usa el Arduino Uno?

El Arduino Uno usa el ATmega328P de Microchip, un microcontrolador AVR de 8 bits que funciona a 16 MHz con 32 KB de flash y 2 KB de SRAM. La placa añade una interfaz USB, un regulador de tensión y tiras de pines alrededor de ese único chip.

¿El Arduino se programa en C o en C++?

Los sketches de Arduino se escriben en C++, con un framework simplificado y pensado para principiantes por encima. También puedes usar C puro, ya que C es en gran parte un subconjunto de C++, pero las funciones y bibliotecas estándar de Arduino son C++.

¿Es difícil aprender a programar Arduino?

No: Arduino es una de las formas más suaves de empezar a programar hardware. La estructura de dos funciones, setup y loop, un enorme ecosistema de bibliotecas y miles de sketches de ejemplo hacen que un principiante pueda hacer parpadear un LED o girar un motor en menos de una hora.

¿Qué es mejor para robótica, Arduino o Raspberry Pi?

Resuelven problemas distintos. Arduino es un microcontrolador: ideal para el control en tiempo real de motores y sensores con una temporización predecible. Una Raspberry Pi es un ordenador Linux completo: mejor para visión, cálculo pesado o Wi-Fi. Muchos robots avanzados usan ambos: una Pi para pensar y un Arduino para actuar.

¿Por qué se usa tanto el Arduino Uno?

Porque perdona los errores y tiene mucho apoyo. Sus pines de 5 V toleran los fallos de cableado que cometen los principiantes, casi todos los sensores de aficionado vienen con código de ejemplo para el Uno y la comunidad ha respondido casi cualquier pregunta, así que rara vez te quedas atascado mucho tiempo.

¿Puedo usar ChatGPT u otra IA para escribir código de Arduino?

Sí: los asistentes de IA pueden redactar y depurar sketches de Arduino y son una ayuda útil para aprender. Prueba siempre en el hardware el código generado por IA antes de fiarte de él, porque un sketch de apariencia plausible puede tener igualmente mal los números de pin, la temporización o la lógica.

Lecturas adicionales

Referencias