← Índice del curso

Robótica y Automatización · Tema 3

Plataformas y entorno de trabajo

Elegir una placa es elegir dónde y con qué límites se ejecuta el lazo del robot. Vamos a comparar microcontroladores y computadoras de placa única, preparar una primera prueba sin motores y usar la simulación para llegar al hardware con menos incertidumbre.

01 · Punto de partida

Elegir desde los requisitos

En el tema anterior separamos sensores, controlador, potencia y mecánica. Ahora tenemos que elegir qué equipo ejecutará el programa. La pregunta útil es qué necesita hacer el robot y en cuánto tiempo.

Un seguidor de línea puede tomar decisiones con unas pocas lecturas y dos salidas de motor. Un robot que identifica objetos en imágenes necesita procesar muchos más datos. Ambos se mueven, pero eso no significa que deban usar el mismo controlador.

  • Entradas y salidas: cantidad de sensores, canales analógicos, encoders, PWM y buses.
  • Tiempo: período del lazo y máximo retardo aceptable ante una condición de parada.
  • Datos: memoria para variables, imágenes, registros y comunicaciones.
  • Entorno: consumo, alimentación, espacio y compatibilidad eléctrica.
  • Herramientas: bibliotecas, documentación, simulación y facilidad para depurar.

No cuentes solo pines totales: dos funciones pueden competir por el mismo pin o periférico. El resultado de esta etapa debe ser una lista de recursos asignados, no únicamente el nombre de una placa.

02 · Dos formas de ejecutar

Microcontrolador o computadora de placa única

Microcontrolador

Integra CPU, memoria y periféricos para interactuar con señales. Ejecuta firmware, con o sin un sistema de tareas. Es adecuado para leer entradas, contar pulsos y actualizar salidas con tiempos controlados.

Computadora de placa única

Ejecuta un sistema operativo y aplicaciones, con herramientas para archivos, redes e imágenes. Es útil para procesamiento de alto nivel, pero un proceso común comparte el equipo con otros trabajos.

Un microcontrolador no garantiza por sí solo que el programa cumpla sus plazos: una lectura bloqueante o demasiados mensajes por serie pueden atrasarlo. Del mismo modo, una computadora puede resolver tareas temporales mediante periféricos o soluciones específicas; lo que no debemos suponer es que un bucle de usuario bajo un sistema operativo general mantenga un período exacto.

Distinguí velocidad de cálculo de previsibilidad temporal. Terminar una tarea muy rápido en promedio no sirve si alguna vez se retrasa más de lo que el robot puede tolerar.

03 · Primera plataforma

Arduino como punto de partida

Arduino nombra un ecosistema de placas, herramientas y bibliotecas, no un único procesador. Para fijar un ejemplo concreto usaremos el UNO R3 basado en ATmega328P. No hay que trasladar automáticamente sus características a un UNO R4, un Nano de otra familia o una placa compatible. La documentación oficial del UNO R3 identifica el modelo y sus recursos.

Su principal ventaja didáctica es un recorrido corto entre escribir código y observar una señal. Un programa Arduino tiene setup() para la inicialización y loop() para el trabajo repetido. Podés empezar por un registro serie y agregar sensores por etapas.

Las limitaciones aparecen cuando se acumulan buffers, bibliotecas o procesamiento pesado. Para un robot simple conviene mantener los datos acotados y evitar cargar tareas que no aportan al control. Antes de sumar una biblioteca revisá qué memoria, temporizadores y pines necesita.

Este tema usará una prueba Arduino sin sensores ni motores. Así comprobamos primero la cadena de herramientas, sin mezclar problemas de programación con problemas del montaje.

04 · Comunicación y más recursos

ESP32 y conectividad

ESP32 es una familia de chips y placas de desarrollo. Puede ser una opción para un robot que necesita control y comunicación inalámbrica, pero hay que identificar el chip y la placa exactos: los recursos y las funciones inalámbricas cambian entre variantes. La guía oficial de Arduino-ESP32 enlaza la compatibilidad de los chips y explica cómo instalar el soporte.

Usar el entorno Arduino en una ESP32 no convierte todos sus pines ni sus periféricos en equivalentes a los de un UNO. Hay que revisar numeración, restricciones de arranque, entradas disponibles y API de cada biblioteca. Una placa que recibe alimentación por USB tampoco admite necesariamente esa tensión en sus entradas de señal.

La red debe tener límites de tiempo. Si el robot espera la respuesta de un servidor dentro del lazo de motores, la conectividad puede hacer que reaccione tarde. Una arquitectura más robusta usa las comunicaciones para actualizar objetivos y reserva un camino local para la parada y el control.

05 · Procesamiento de alto nivel

Raspberry Pi y arquitectura mixta

Las computadoras Raspberry Pi permiten ejecutar Linux y aplicaciones para visión, archivos o interfaces. La familia Raspberry Pi Pico corresponde a microcontroladores y no ejecuta Linux. Esta diferencia está aclarada en la documentación oficial de hardware Raspberry Pi: compartir marca no implica compartir forma de trabajo.

Una posibilidad para un robot con cámara es dividir responsabilidades: la computadora identifica un objetivo y un microcontrolador mantiene los lazos de los motores. No es obligatorio usar dos equipos; es una decisión de arquitectura que debe justificar la complejidad adicional.

Arquitectura con computadora y microcontrolador La cámara envía imágenes a una computadora que produce objetivos. Un microcontrolador recibe objetivos, controla el driver y recibe datos de encoders. El estado regresa a la computadora. Cada enlace tiene un contrato y un tiempo de validez. CámaraComputadoravisión y objetivosMicrocontroladorlazos y límites localesDrivery motoresobjetivo con vencimientoestadomedición de encoders

Por ejemplo, la computadora solicita una velocidad, no una secuencia interminable de pulsos. El controlador local valida la orden, actualiza las salidas y detiene si la comunicación vence. Así la pérdida de una aplicación de alto nivel tiene un comportamiento definido.

06 · Decisión razonada

Comparar sin confundir modelos

Orientación de arquitectura; la disponibilidad concreta debe comprobarse en cada placa.
OpciónBuen punto de partida paraQué revisarEntorno inicial
Arduino UNO R3Aprender entradas, salidas y control sencilloMemoria, temporizadores y cantidad de canalesArduino IDE y paquete AVR
Placa ESP32 compatibleControl con comunicación, según varianteModelo, pines, bibliotecas y trabajo de redArduino IDE con Arduino-ESP32
Raspberry Pi con LinuxVisión, interfaz y procesamiento de alto nivelAlimentación, almacenamiento y plazos del controlSistema operativo, editor y herramientas del proyecto
Computadora + microcontroladorSeparar procesamiento pesado y lazos localesProtocolo, tiempos de espera y fallos de enlaceDos programas y pruebas de comunicación
SimuladorEnsayar reglas y conexiones modeladasComponentes admitidos y límites del modeloProyecto virtual con configuración guardada

Para seguir el curso podés comenzar con un UNO R3 simulado o con una placa que ya tengas y conozcas. Cuando aparezca un periférico específico, habrá que adaptar sus conexiones y código. No hace falta incorporar visión ni conectividad para comprender los primeros lazos de movimiento.

07 · Preparación

Preparar el entorno paso a paso

Vamos a usar Arduino IDE como camino inicial. La guía de instalación oficial permite obtener la versión correspondiente a tu sistema. Los nombres de algunos controles pueden variar con la versión y el idioma.

  1. Identificá la placa. Anotá modelo, revisión y chip; buscá su diagrama de pines.
  2. Instalá el IDE. Después instalá el paquete de placas correspondiente mediante el gestor de placas. Para UNO R3 usá Arduino AVR Boards.
  3. Si elegís ESP32: seguí la guía de Espressif citada antes; agregá el índice estable del paquete y seleccioná el modelo concreto.
  4. Conectá solo la placa por USB. Usá un cable que transmita datos. Todavía no conectes motores ni alimentación externa.
  5. Seleccioná placa y puerto. En Windows suele aparecer un puerto COM. Identificalo observando qué dispositivo aparece al conectar la placa.
  6. Verificá y cargá la prueba siguiente. Compilar y transferir son etapas distintas; observá cuál falla si aparece un error.
  7. Abrí el monitor serie a 115200 baudios. Confirmá que aparecen mensajes periódicos y una nueva cabecera al reiniciar.

Si el sistema requiere un controlador USB, identificá primero el dispositivo y obtenelo de su fabricante. Instalar controladores al azar no resuelve una selección incorrecta de placa ni un cable que solo sirve para cargar.

Guardá el modelo elegido y la versión del paquete. Un programa que compila para otra placa no constituye una prueba del hardware que tenés conectado.

08 · Código para la placa

Primera prueba sin motores

Este sketch usa solo el puerto serie. Genera una distancia ficticia que alterna entre 50 y 15 cm cada dos segundos, ejecuta la decisión cada 20 ms y publica un registro cada 200 ms. No lee un sensor ni activa salidas de motor.

const unsigned long PERIODO_CONTROL_MS = 20;
const unsigned long PERIODO_LOG_MS = 200;
unsigned long ultimoControl = 0;
unsigned long ultimoLog = 0;
unsigned long ciclos = 0;
int distanciaCm = 50;
int ordenPwmPct = 0;

void setup() {
  Serial.begin(115200);
  Serial.println("tiempo_ms,distancia_cm,orden_pwm_pct,ciclos");
}

void loop() {
  const unsigned long ahora = millis();

  if (ahora - ultimoControl >= PERIODO_CONTROL_MS) {
    ultimoControl = ahora;
    distanciaCm = ((ahora / 2000UL) % 2 == 0) ? 50 : 15;
    ordenPwmPct = (distanciaCm > 20) ? 40 : 0;
    ciclos++;
  }

  if (ahora - ultimoLog >= PERIODO_LOG_MS) {
    ultimoLog = ahora;
    Serial.print(ahora);
    Serial.print(',');
    Serial.print(distanciaCm);
    Serial.print(',');
    Serial.print(ordenPwmPct);
    Serial.print(',');
    Serial.println(ciclos);
  }
}

Deberías observar filas con una orden de 40 % cuando la distancia ficticia vale 50 cm, y 0 % cuando vale 15 cm. El contador de ciclos crece aproximadamente diez veces entre registros. Puede variar con los tiempos de ejecución; el ejemplo no garantiza un planificador de tiempo real.

Usamos resta de contadores sin signo para medir intervalos y evitar comparar fechas absolutas de forma ingenua cuando el contador vuelve a cero. La referencia de Arduino sobre millis() describe su retorno y desbordamiento. La prueba supone que el programa revisa los intervalos regularmente.

Asignar ultimoControl = ahora descarta las ejecuciones que se hayan perdido: evita una ráfaga de recuperaciones, pero no asegura una frecuencia exacta. Para este primer diagnóstico alcanza; más adelante estudiaremos temporización y organización de estados.

09 · Práctica sin montaje

Simular antes de montar

Podés ejecutar el sketch en un proyecto virtual. Wokwi permite simular placas y componentes electrónicos; antes de elegir una combinación, consultá su lista de hardware admitido. Una familia soportada no implica que todos sus periféricos estén modelados.

  1. Creá un proyecto con Arduino UNO para esta primera práctica.
  2. Reemplazá el sketch por el código de la sección anterior.
  3. Iniciá la simulación y abrí su salida serie.
  4. Comprobá la alternancia de distancias y órdenes.
  5. Cambiá el umbral de 20 a 60 cm: ahora ambas distancias deben producir parada.
  6. Guardá código y configuración del proyecto para poder repetirlo.
Qué evidencia aporta cada nivel de prueba.
PruebaPermite comprobarTodavía falta comprobar
Función con entradas ficticiasReglas, límites y decisiones esperadasAdquisición y actuación reales
Simulador de placaFirmware e interfaces dentro del modeloFidelidad temporal y fenómenos no modelados
Placa con registro serieCarga, ejecución y comunicaciones básicasMotor bajo carga, ruido y movimiento
Robot en su entornoComportamiento físico bajo condiciones ensayadasOtras cargas, superficies y estados de batería

Que una prueba virtual funcione no demuestra que una batería sostenga el arranque ni que un sensor mida bien una superficie concreta. La simulación sirve para comprobar hipótesis dentro de un modelo; cada paso al hardware agrega fenómenos que hay que observar.

10 · Exploración interactiva

Laboratorio: ¿entra el trabajo en el período?

Una plataforma debe completar su trabajo antes del siguiente ciclo. Este modelo suma tiempos hipotéticos de lectura, decisión, actuación y registro. Podés agregar una demora ocasional para representar una operación que tarda más de lo habitual.

C = lectura + decisión + actuación + registro
margen = T − C
ocupación = 100 · C / T

T es el período deseado y C el trabajo del ciclo. Con margen negativo hay un incumplimiento seguro en el modelo. Un margen positivo indica que esta suma cabe, pero no demuestra que un sistema real cumpla siempre sus plazos.

Presupuesto temporal de un ciclo

Trabajo habitual10 ms
Trabajo del caso lento10 ms
Margen en el caso lento10 ms
Ocupación en el caso lento50 %

El trabajo cabe en el período del modelo.

Distribución del tiempo en el caso lento.
Parte del cicloDuraciónFracción del período

Los números son entradas didácticas: no son mediciones ni comparaciones de velocidad entre placas. El modelo supone tareas secuenciales, sin solapamiento, y omite otros costes. En un robot se deben medir máximos, variaciones y retardos de adquisición.

Recorrido guiado

  1. Con los valores iniciales, el trabajo suma 10 ms en un período de 20 ms: queda el 50 % del período libre.
  2. Subí el registro a 15 ms: el total llega a 22 ms y pierde el plazo por 2 ms. Agregar mensajes puede alterar el control.
  3. Restablecé y agregá 15 ms de demora: el caso habitual sigue en 10 ms, pero el lento llega a 25 ms. El promedio oculta el incumplimiento.
  4. Con esa demora, subí el período a 50 ms: ahora cabe, pero el robot lee y decide menos frecuentemente. Volvé a considerar el avance entre lecturas del tema 1.
  5. Restablecé y elegí un período de 10 ms: trabajo y plazo son iguales. No queda margen para costes que el modelo haya omitido.
¿Alcanza con una placa más rápida?

Solo si el trabajo que incumple realmente se acelera. Esperar un eco, una respuesta de red o un puerto ocupado puede dominar el tiempo y no mejorar al cambiar la CPU. Medí cada parte antes de decidir entre optimizar, cambiar la estructura o cambiar de plataforma.

11 · Método de trabajo

Un proyecto reproducible

Reproducir una prueba requiere algo más que el archivo de código. Guardá lo necesario para que otra persona, o vos dentro de un mes, pueda ejecutar el mismo caso.

robot_prueba/
  robot_prueba.ino
  README.md              # placa, entorno y pasos de ejecución
  conexiones.md          # pines, niveles y esquema del montaje
  pruebas/               # entradas y resultados esperados
  registros/             # mediciones de una versión concreta

En Arduino, el sketch principal comparte nombre con su carpeta. Si usás simulación, guardá también su configuración. En el README anotá versiones del IDE, paquete de placa y bibliotecas, velocidad serie y cualquier ajuste que afecte el resultado.

  • Una prueba, un objetivo: por ejemplo, «el contador serie avanza y la orden cambia al cruzar el umbral».
  • Una configuración conocida: placa concreta, programa y parámetros identificables.
  • Un criterio observable: qué salida confirma el resultado y qué queda sin verificar.
  • Un registro: entradas, salidas, tiempos y condiciones del ensayo.

Versioná el proyecto cuando tengas una base que funcione. Después agregá un sensor o una función por vez. Si algo falla, vas a poder comparar con una configuración que sí producía el resultado esperado.

12 · Diagnóstico

Problemas frecuentes del entorno

El programa no compila

Leé el primer error relevante: puede ser sintaxis, biblioteca ausente o una API que no corresponde al paquete seleccionado. Comprobá placa y versión antes de cambiar conexiones. Compilar ocurre antes de transferir el programa.

Compila, pero no se carga

Revisá placa, puerto, cable de datos y si otra aplicación ocupa el puerto. Algunas placas requieren un procedimiento de arranque específico; seguí su documentación. La ausencia de puerto y un fallo de conexión al cargador son síntomas distintos.

No aparecen registros o salen caracteres extraños

Confirmá puerto y velocidad serie. Algunas variantes usan USB nativo y requieren ajustes particulares. Reiniciá la placa con el monitor abierto: la cabecera inicial puede haberse enviado antes de que conectaras el monitor.

El mismo sketch no funciona en otra placa

Compartir lenguaje no garantiza compartir pines, periféricos ni bibliotecas. Identificá qué parte del programa depende del hardware y revisá su adaptación. Conservá la lógica de decisión separada de esas operaciones.

Funciona hasta que agrego comunicaciones o muchos registros

Medí el lazo. Una operación bloqueante, un buffer lleno o una tarea que consume tiempo pueden cambiar la respuesta. Reducí trabajo por ciclo y definí límites de espera; no atribuyas el síntoma automáticamente a falta de potencia de cálculo.

En el simulador funciona; en la placa se reinicia

Verificá alimentación, conexiones y causa de reinicio. El modelo virtual puede no reproducir caídas de tensión ni ruido del montaje. El próximo tema estudia alimentación y seguridad antes de conectar cargas de motor.

13 · Práctica guiada

Predecí antes de comprobar

1. Elegir una arquitectura

Un vehículo lee tres sensores de línea y maneja dos motores sin cámara ni red. Otro reconoce objetos con una cámara y envía objetivos de movimiento. ¿Qué arquitecturas considerarías?

Una solución posible

Para el primero, un microcontrolador con los canales, periféricos y tiempos necesarios. Para el segundo, una computadora para visión y, si los plazos lo justifican, un microcontrolador para control local. El nombre de una placa se elige después de verificar recursos concretos.

2. Presupuesto temporal

Lectura: 6 ms. Decisión: 3 ms. Actuación: 1 ms. Registro: 4 ms. El período es de 20 ms. ¿Cuál es el margen? ¿Qué pasa con una demora adicional de 8 ms?

Ver solución

El trabajo habitual suma 14 ms: quedan 6 ms y la ocupación es 70 %. Con la demora suma 22 ms: excede el plazo en 2 ms y la ocupación llega a 110 %. Que el ciclo habitual quepa no resuelve el caso lento.

3. Relajar el período

Un robot avanza a 40 cm/s. Para que entre más trabajo cambiás el período de 20 a 100 ms. ¿Cómo cambia el avance entre lecturas?

Ver solución

Pasa de 40 × 0,020 = 0,8 cm a 40 × 0,100 = 4 cm. Son 3,2 cm adicionales antes de contar frenado y otros retardos. El período es parte del comportamiento físico.

4. El alcance de la primera prueba

La salida serie alterna entre orden 40 y 0. ¿Demostraste que el sensor mide bien y que el motor se detiene?

Ver solución

No. La distancia es ficticia y no hay salidas de motor. Comprobaste ejecución, comunicación y una decisión sobre datos generados. Faltan adquisición real, interfaz de potencia y respuesta física.

5. Pérdida de enlace

Una computadora solicita avanzar a un microcontrolador y luego su aplicación se cierra. ¿Qué dato o regla falta si el vehículo sigue avanzando indefinidamente?

Ver solución

Falta un tiempo de validez de las órdenes y una respuesta local al vencimiento. El controlador debería solicitar el estado seguro definido si no recibe una actualización a tiempo; no puede depender de que la aplicación que falló envíe una parada.

6. Repetir la prueba

Recibís un sketch que no compila y solo dice «funciona con ESP32». ¿Qué información pedirías o buscarías primero?

Ver solución

Modelo exacto de placa y chip, versión del paquete Arduino-ESP32, bibliotecas y versiones, configuración usada y mensaje del primer error. También instrucciones de ejecución y conexiones si el ejemplo depende de hardware. «ESP32» no describe toda la configuración.

14 · Síntesis

Ideas para recordar

  • La plataforma se elige por entradas, salidas, memoria, interfaces y plazos del robot.
  • Microcontrolador y computadora de placa única resuelven necesidades distintas y pueden trabajar juntos.
  • Arduino, ESP32 y Raspberry Pi nombran ecosistemas o familias: identificá siempre el modelo concreto.
  • Compilar, cargar, ejecutar y observar son etapas distintas que se pueden diagnosticar por separado.
  • Empezar sin motores permite comprobar herramientas y decisiones antes de agregar potencia y movimiento.
  • El trabajo del ciclo debe caber en su período, con margen para variaciones y costes reales.
  • Una simulación comprueba el modelo; el montaje requiere pruebas eléctricas, temporales y mecánicas propias.
  • Guardar código, configuración y criterios de prueba permite repetir y comparar resultados.

¿Listo para el tema 4?

Antes de avanzar, ejecutá la primera prueba en una placa o simulador, explicá qué valida y anotá la configuración que usaste. Después justificá qué plataforma elegirías para un robot sin cámara que necesita detenerse aunque pierda comunicación.

En el próximo tema estudiamos alimentación, baterías y seguridad: cómo sostener la lógica y los motores y preparar las primeras pruebas con cargas reales.