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.
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 undelay(), no puede leer sensores ni reaccionar. Para cualquier cosa que deba responder, mide el tiempo conmillis()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.
- ProyectoConstrucción de un rover autónomo por waypoints GPS
- ProyectoConstruya un Micromouse: robot para laberintos con Flood Fill
- ProyectoConstruya un robot seguidor de línea: simulación a pista
- ProyectoConstruye un brazo robótico de 4 DOF: cinemática y PCA9685
- ProyectoConstruye un plóter de dibujo: dos ejes paso a paso
- ProyectoConstruye un robot controlado por móvil con Bluetooth o Wi-Fi
- ProyectoConstruye un robot de autoequilibrio con MPU6050 y PID
- ProyectoConstruye un robot de cobertura de área para limpiar suelos
- ProyectoConstruye un robot esquivador de obstáculos autónomo
- ProyectoConstruye un robot mini sumo: tracción, cuña y borde
- ProyectoConstruye un robot pick and place con agarre verificado
- ProyectoConstruye un robot ROS 2 que localiza marcadores visuales
- ProyectoRobot resuelto de laberintos de línea con memoria LSRB
- Ruta de aprendizajeFundamentos de electrónica para robótica: ruta guiada
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