ESP32

ESP32 es un único chip combinado de Wi-Fi y Bluetooth de 2.4 GHz, diseñado con la tecnología de bajo consumo de 40 nm de TSMC. Está diseñado para lograr el mejor rendimiento en cuanto a consumo de energía y radiofrecuencia (RF), mostrando solidez, versatilidad y fiabilidad en una amplia variedad de aplicaciones y escenarios de consumo energético.

esp32
Figure 1. ESP32

Con su bajo consumo de energía, el ESP32 es una opción ideal para dispositivos IoT en las siguientes áreas:

  • Hogar inteligente

  • Automatización industrial

  • Cuidado de la salud

  • Electrónica de consumo

  • Agricultura inteligente

  • Máquinas POS

  • Robots de servicio

  • Dispositivos de audio

  • Concentradores de sensores IoT de bajo consumo genéricos

  • Registradores de datos IoT de bajo consumo genéricos

  • Cámaras para transmisión de video

  • Reconocimiento de voz

  • Reconocimiento de imágenes

  • Tarjeta de red SDIO Wi-Fi + Bluetooth

Si has trabajado con Arduino y con las placas basadas en ESP8266, la ESP32 es muy similar. Es una placa con microcontrolador muchísimo más poderosa que Arduino y se puede programar con el mismo IDE de Arduino.

https://es.wikipedia.org/wiki/ESP32#/media/Archivo:Espressif_ESP32_Chip_Function_Block_Diagram.svg
Figure 2. Funciones del ESP32

Características Principales

  • Microcontrolador Tensilica LX6 de doble núcleo a 240 MHz con 600 DMIPS

  • SRAM integrada de 520 KB

  • Transceptor Wi-Fi 802.11 b/g/n HT40 integrado, con banda base, pila y LwIP

  • Bluetooth de modo dual integrado (clásico y BLE)

  • Memoria flash de 4 MB, mapeada a la memoria de código de la CPU

  • Voltaje de operación de 2.3V a 3.6V

  • Temperatura de operación de -40°C a +125°C

ESP32-DevKit

La placa de desarrollo ESP32-C6-DevKit Dual Tipo C es una solución avanzada y versátil para el desarrollo de aplicaciones IoT y dispositivos conectados. Basada en el microcontrolador ESP32-C6 de Espressif Systems, esta placa ofrece una serie de mejoras en conectividad y rendimiento, haciéndola ideal para una amplia gama de aplicaciones desde sistemas de monitoreo remoto hasta soluciones industriales y de hogar inteligente.

esp32devkit
Figure 3. ESP32 DevKit Tipo C

Características Destacadas

  • Microcontrolador Avanzado: Equipado con el ESP32-C6, esta placa proporciona un rendimiento mejorado y capacidades ampliadas en comparación con las versiones anteriores de la serie ESP32.

  • Conectividad Superior: Ofrece conectividad mejorada con Bluetooth Low Energy (BLE) 5.0 y soporte para el protocolo IEEE 802.11ax, lo que asegura una comunicación eficiente y de alta velocidad. También es compatible con los protocolos IEEE 802.11b/g/n en anchos de banda de 20 MHz y 40 MHz, alcanzando velocidades de datos de hasta 150 Mbps.

  • Memoria y Almacenamiento: Con 4 MB de memoria FLASH, 320 KB de ROM, 512 KB de HP SRAM, y 16 KB de LP SRAM, la placa proporciona suficiente capacidad para ejecutar aplicaciones complejas y almacenar datos de manera eficiente.

  • Versatilidad en Puertos: Dispone de 32 GPIO, 3 SPI, 2 UART, 1 I2C, y 1 ADC, ofreciendo una amplia gama de opciones para conectar y controlar periféricos y sensores.

  • Diseño Robusto: Con una temperatura de funcionamiento de -40 ℃ a 85 ℃, la placa está diseñada para operar en condiciones ambientales extremas, asegurando fiabilidad en entornos industriales y exteriores.

  • Antena Integrada: Incluye una antena PCB integrada, que optimiza la conectividad sin necesidad de componentes externos adicionales.

  • Conectividad Tipo C: La placa está equipada con un puerto USB Tipo C, facilitando la conexión y la programación, y proporcionando una interfaz moderna y eficiente.

Proyecto Gladiadores Robots

El objetivo es crear un "Gladiador Robot" controlado por un smartphone via Wifi, este debe ser capaz de reventar un globo. El ganador es quien reviente el globo del oponente.

gladiador
Figure 4. Alumnos de Robótica UVM 2025 con su Gladiador
Combate de Gladiadores Robot

Materiales

Ítem Descripción ¿Donde adquirir?

ESP32 (Wifi) + Smartphone

Principal componente. Se programará para enviar señales a los servomotores y crear un servidor web para ser controlado via Smartphone.

https://altronics.cl/tarjeta-esp32-microusb

Placa de desarrollo ESP32

Extensión del ESP32 que incluye regulador de voltaje para resistir hasta 16V de entrada (DC) y contiene hileras con voltaje, tierra y señal de forma más comoda.

https://es.aliexpress.com/item/1005008212851634.html

2 motores DC 3 a 12V

Principal fuente de movimiento del gladiador. La elección del motor y su necesidad de voltaje es a criterio del equipo (mayor velocidad = mayor voltaje).

https://articulo.mercadolibre.cl/MLC-923623185-motor-dc-coche-gear-amarillo-3v-12v-_JM

L298N

Permite controlar dos motores de corriente continua o un motor paso a paso bipolar de hasta 2 amperes.

https://altronics.cl/modulo-puente-h-l298

Chasis + Ruedas de Goma + Porta Pilas

Principal fuente de poder y marco para armar. Alimentación entre 6v a 12v. 9v recomendado.

https://altronics.cl/kit-chasis-2wd-1

Gladiador de Lego (A elección).

Mini figura de lego versión dungeons and dragons o similar.

https://www.tiendalego.cl/products/dungeons-dragons-71047?variant=41690791805046

Protoboard

Marco para conexión de componentes. Recomendado 400 puntos.

https://altronics.cl/protoboard-400ptos

Cables Jumper

Macho - Hembra, Macho - Macho. Permite conectar los componentes.

https://altronics.cl/JW_MF_40_10

Globos largos (Colores diferentes para cada gladiador).

Globos inflables + bombin.

https://belina.cl/globos-largos-20cm-bombin-colores-surtidos-20-pcs

Armas para reventar el Globo (A elección)

Clavos, alfileres o materiales corto punzantes varios.

https://www.masferret.cl/product/clavo-punta-1

gladiator diagram
Figure 5. Diagrama de conexión entre componentes
Table 1. Tabla de conexiones

ESP32 MONTADO EN PLACA

MOTOR AC1

MOTOR AC2

L298N

Batería

Pin 16

IN1

Pin 17

IN2

Pin 18

IN3

Pin 19

IN4

(+)

OUT1

(-)

OUT2

(+)

OUT3

(-)

OUT4

IN12V

(+)

GND

(-)

Jack de carga

(+)(-)

La posición del globo depende de cada gladiador. Pero almenos debe tener dos puntos de anclaje inferior.

Las pilas son conectadas a los motores y al ESP32 de forma separada, gracias a la placa de expansión se conecta al Jack de carga directamente a las pilas ya que este aguanta hasta 16v sin problemas.

Código fuente

Código fuente del gladiador
#include <WiFi.h>
#include <WebServer.h>

// Nombre de la red WiFi creada por el ESP32
const char* ssid = "RobotESP32";
const char* password = "12345678";

// Pines del L298N
const int IN1 = 16;
const int IN2 = 17;
const int IN3 = 18;
const int IN4 = 19;

WebServer server(80);

// Funciones de movimiento
void parar() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}

void adelante() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void atras() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

void izquierda() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH);
  digitalWrite(IN4, LOW);
}

void derecha() {
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, HIGH);
}

// Página web con botones
String paginaHTML() {
  return R"rawliteral(
    <!DOCTYPE html>
    <html>
    <head>
      <title>Control del Robot</title>
      <style>
        body { text-align: center; font-family: Arial; }
        button {
          width: 100px; height: 50px;
          font-size: 18px; margin: 5px;
        }
      </style>
    </head>
    <body>
      <h1>Control del Robot</h1>
      <button onclick="location.href='/adelante'">Adelante</button><br>
      <button onclick="location.href='/izquierda'">Izquierda</button>
      <button onclick="location.href='/parar'">Parar</button>
      <button onclick="location.href='/derecha'">Derecha</button><br>
      <button onclick="location.href='/atras'">Atrás</button>
    </body>
    </html>
  )rawliteral";
}

void setup() {
  Serial.begin(115200);

  // Configurar pines como salida
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  parar();

  // Iniciar el ESP32 como Access Point
  WiFi.softAP(ssid, password);
  Serial.println("Red WiFi creada");
  Serial.print("IP del robot: ");
  Serial.println(WiFi.softAPIP());

  // Rutas del servidor
  server.on("/", []() {
    server.send(200, "text/html", paginaHTML());
  });
  server.on("/adelante", []() {
    adelante();
    server.send(200, "text/html", paginaHTML());
  });
  server.on("/atras", []() {
    atras();
    server.send(200, "text/html", paginaHTML());
  });
  server.on("/izquierda", []() {
    izquierda();
    server.send(200, "text/html", paginaHTML());
  });
  server.on("/derecha", []() {
    derecha();
    server.send(200, "text/html", paginaHTML());
  });
  server.on("/parar", []() {
    parar();
    server.send(200, "text/html", paginaHTML());
  });

  server.begin();
}

void loop() {
  server.handleClient();
}

Al construir el gladiador se tendrá acceso a una red Wifi llamada "RobotESP32" (cambiar el nombre para cada gladiador). La cual puede ser accedida desde cualquier smartphone o computador.

const char* ssid = "RobotESP32";
const char* password = "12345678";

Esta red permite enviar comandos de dirección al hacer click en los enlaces. Se deja como ejercicio adicional la creación de una interfaz más adecuada para el control del robot, como un joystick virtual o físico.

gladiador lego
Figure 6. Figura de Lego a elección

Proyecto Robot Animatrónico

Hoy en día existen diversos robots para cumplir tareas específicas. En el área de restaurantes existen los robots meseros autónomos. Éstos robots permiten servir mesas y encontrar su camino por el restaurant.

Entre los ejemplos disponibles esta el Segway ServeBot S1(“Restaurant Service Robot - Segway Robotics,” 2024) y el Bellabot (“Smart Delivery Robot-Pudu Robotics,” n.d.).

segway
Figure 7. Robot ServeBot S1
bellabot
Figure 8. Bellabot

Estos robots son de alta tecnología y cuentan con sensores e inteligencia artificial muy sofisticada. Lo que los hace tener un precio prohibitivo para la mayoría de los restaurantes.

Pilotos OriHime

En Japón existe el concepto de "Avatar Robot Café". Donde un restaurant/café es atentido por avatares robots. Es decir, robots controlados por humanos remotamente. Estos robots no cuentan con IA debido a que se busca integrar a personas con dificultades motoras u otros problemas que les impide integrarse a la sociedad en trabajos tradicionales.

Entre los avatares robots se puede encontrar meseros y baristas.

dawn orihime
Figure 9. Avatares Robot
dawn avatar
Figure 10. Robot OriHime
dawn barista
Figure 11. Robot Barista

Son controlados remotamente con una aplicación de tablet smartphone.

dawn control
Figure 12. Interfaz de Piloto

Estos robots están ubicados en el Dawn Cafe

dawn cafe
Figure 13. Avatar Robot Cafe DAWN ver.β

El “Avatar Robot Café DAWN ver.β” es un café experimental permanente operado por OryLab Inc., donde personas que tienen dificultades para salir de casa por diversas razones operan de forma remota nuestros robots avatar OriHime y OriHime-D desde sus hogares y hospitales para brindar servicios. ("Avatar Robot Café" n.d.)

Restaurantes y Robots en Chile

En Chile se han utilizado robots animatrónicos como el conocido restaurante "África" de Viña del Mar (SoyChile, 2019).

africa
Figure 14. Animatronicos del Restaurante África

Jorge Fernández, gerente de El Japonés de Viña del Mar, calcula que desde que tienen al “Michi-robot” haciendo las veces de mesero la afluencia del público al local ha aumentado en un 20 por ciento. ¿La razón? La curiosidad de ver en acción al Bella-bot -o “Michi”, como le llaman en el restaurante-, que lleva pedidos a la mesa como un garzón más. (Transformadores, 2023).

Descripción del Proyecto

Como se puede apreciar, Chile está preparado para adoptar la inclusión de robots en el área de servicios, especialmente en robots meseros. Sin embargo los altos precios de adquisición impiden que más restaurantes adopten estas tecnologías.

Para lograr disminuir la brecha tecnológica y aumentar la inclusión de personas con dificultades de trabajar presencialmente, se debe crear una alternativa de bajo costo e identidad local.

Para esto se creará un "Avatar Robot" controlado remotamente via internet que pueda ser usado para atender comandas y servir como garzón en restaurantes.

Materiales

Este robot utilizará materiales reciclados o fáciles de adquirir a un costo moderado.

Marco

Para el marco principal se debe considerar una estructura liviana que permita un movimiento para todas las direcciones, cuente con un lugar para dejar los platos y sea higiénica y estéticamente apropiado.

Queda a discreción la selección del marco inicial. Acá se presentará unas opciones posibles.

Nombre Fotografía Descripción

Estante de Almacenamiento con Ruedas Giratorias y Cestas Metalicas

estante

Carrito Organizador Con Cesta Metal y Ruedas Bloqueables 3 Niveles

Organizador de frutas metal 3 canastos Cromado

frutero

La Frutera con 3 canastos y 3 ruedas en la parte inferior.

Carro de compras colores 32 L

carro

Carro de compras colores 32 L

La recomendación es que permita al menos 3 niveles. Ya que se necesita espacio para:

  1. La batería y circuitería. Ubicados en el nivel inferior.

  2. La bandeja principal para almacenar los platos a servir.

  3. Una bandeja superior para almacenar la cámara y un robot o pantalla opcional para expresar emociones por parte del piloto operador.

El carro será controlado por una ESP32 que recibirá comandos por USB desde la Raspberry PI.

Batería

La batería puede ser un PowerBank o una batería de motocicleta con un adaptador para USB. Es importante recalcar que el amperaje mínimo necesario es 3 amperes. Menor a ese amperaje servirá para cargar un smartphone, más no para alimentar una Raspberry PI.

Opción Imagen Descripción

PowerBank de 30K mAh

powerbank

Batería portátil USB capacidad de 30000 mAh.

Tres puertos USB con USB-A y USB-C. Carga rápida del dispositivo con puerto USB-C PD 3.0 de máximo 20 W o USB-A con salida QC3/0 de máximo 18 W.

Batería 12v + Adaptador USB

] image::esp32/animatronic/adaptador-usb-bateria-moto.avif[

Batería de motocicleta combinada con un adaptador USB de alta potencia (QC3.0). Es una opción válida para alimentar el robot.

Ventajas:

  • Se tiene mayor voltaje para velocidad más rápida.

Desventaja:

  • Puede ser más pesado y requerir equipamiento especial para recargar la batería.

Disponible en:

Smartphone

El Smartphone es necesario para proveer internet a la Raspberry PI y también actuar como cámara principal para la comunicación remota (utilizando una video llamada).

Se recomienda un smartphone Android. Cualquiera que pueda hacer uso de redes 3G y sea relativamente moderno (entre 5 a 10 años de antigüedad) servirá como principal puente de comunicación.

Se podría omitir este elemento si el restaurante cuenta con Wifi y añadir una cámara web a la Raspberry PI, pero requeriría de mayores configuraciones en el router del local y asegurar estabilidad de señal.

Para la elaboración de la comunicación via video se utilizará los servicios de Jitsi Meet. El cual proporciona una solución de bajo costo y de código libre para ser utilizada.

Raspberry PI 3

Raspberry PI 3 cuenta con un procesador Broadcom Quad-Core ARM Cortex-A53 a 1.2GHz combinados con 1GB de RAM LPDDR2.

raspberrypi3
Figure 15. Raspberry Pi 3 Model B

Será el computador principal conectado con Nerves, lo que permitirá enviar señales tanto al Emote Robot como al Carro utilizando USB, además de proporcionar un servidor web accesible mediante internet conectándose al Smartphone.

El modelo de Raspberry Pi es a elección, simplemente debe ser compatible con Nerves (https://hexdocs.pm/nerves/supported-targets.html) Un modelo alternativo compatible es el Raspberry Pi Zero 2W.

rpiz2w
Figure 16. Raspberry Pi Zero 2 W

Emote Robot

Para proporcionar una forma de mostrar emociones remotamente se puede utilizar un personaje de lego animatrónico. Esto es totalmente opcional, pero agrega personalidad y empatía al robot. También puede ser utilizada una smart tablet con un personaje animado y controlado remotamente.

lego
Figure 17. Personaje Lego Creator 3 en 1

El robot será controlado por una ESP32 que recibirá comandos por USB desde la Raspberry PI.

Table 2. Lista de posibles componentes

Componente

Descripción

1 Raspberry PI

Una versión compatible con Nerves y que permita conexión USB (UART) a la ESP32

2 ESP32 Devkit

Un ESP32 para controlar el carro y un ESP32 para controlar el robot

4 Motor DC

Cuatro motores DC de alto torque para movilidad del carro hasta 25 Kg.

L298N

Permite controlar al los motores DC.

Android Smartphone

Un Smartphone que actue como Hotspot y permita usar Jitsi Meet

Baterías

La batería necesaria para alimentar tanto a la Raspberry, ESP32 y Smartphone

NoIP

Servicio de DNS dinámico para acceder al servidor de la Raspberry PI

mesero

Búho Animatrónico

Este proyecto grupal tiene como propósito la programación de una figura animatrónica con actuadores (servos), que es controlada a través de un microcontrolador ESP32 y un programa en C++. La figura elegida fue un búho, cuyas alas, cabeza y patas tienen movimiento mediante servomotores.

https://www.tiendalego.cl/products/criaturas-fantasticas-del-bosque-31125
Figure 18. Lego Búho (#31125)
Table 3. Tabla de Componentes
Componente Cantidad Descripción

ESP32-WROOM

1

Microcontrolador principal

Servomotor SG90

4

Uno por ala, uno en la cabeza, uno en las patas

Fuente de alimentación

1

USB 5V (desde computadora o batería externa)

Cables Dupont

Varios

Para Conexiones

Bloques tipo LEGO

Varios

Para ensamblar la estructura del búho

Protoboard / PCB

1

Para conexiones eléctricas (opcional)

Acotaciones

  • Se recomienda usar piezas tipo LEGO para facilitar el ajuste de los servos y permitir cambios de diseño de manera sencilla.

  • Se cuidó el peso en el diseño para no sobrecargar los servos, especialmente en las alas.

  • La alimentación por USB 5V es suficiente para los servos, pero se debe evitar hacer movimientos simultáneos prolongados para no sobrecargar la corriente disponible.

  • La estructura fue validada para estabilidad durante los movimientos.

  • El código debe incorporar retardos adecuados y límites de movimiento para evitar daños mecánicos.

Código fuente del Búho
#include <ESP32Servo.h>

int pos = 0;
Servo izquierdo;
Servo derecho;
Servo cabeza;
Servo poto;

int led = 16;
bool inicializar = true;

void setup() {
  Serial.begin(115200);
  // Pines válidos para ESP32, cambia si usas otros
  izquierdo.attach(13, 500, 2500);
  derecho.attach(14, 500, 2500);
  cabeza.attach(15, 500, 2500);
  poto.attach(18, 500, 2500);
  pinMode(led, OUTPUT);
}

void startPosition() {
  digitalWrite(led, HIGH);
  derecho.write(180);
  izquierdo.write(0);
  cabeza.write(180);
  poto.write(0);
  delay(500);
  digitalWrite(led, LOW);
}

void saludar(int velocidad) {
  digitalWrite(led, HIGH);
  for (pos = 90; pos <= 180; pos += 1) {
    izquierdo.write(pos);
    derecho.write(180 - pos);
    poto.write(90-pos);
    delay(velocidad);
  }

  for (pos = 180; pos >= 90; pos -= 1) {
    izquierdo.write(pos);
    derecho.write(180 - pos);
    poto.write(pos-40);
    delay(velocidad);
  }

  digitalWrite(led, LOW);
}

void feliz(int velocidad) {
  digitalWrite(led, HIGH);

  for (pos = 90; pos <= 180; pos += 1) {
    izquierdo.write(pos);
    derecho.write(180 - pos);
    cabeza.write(pos);
    delay(velocidad);
  }

  for (pos = 180; pos >= 90; pos -= 1) {
    izquierdo.write(pos);
    derecho.write(180 - pos);
    delay(velocidad);
  }

  digitalWrite(led, LOW);
}

void enojar(int velocidad) {
  digitalWrite(led, HIGH);
  for (pos =120; pos <= 180; pos += 1) {
    cabeza.write(pos);
    delay(velocidad);
  }
  digitalWrite(led, LOW);
}

// Lectura de los comandos por serial USB
void leerComandoSerial() {
  if (Serial.available() <= 0) {
    return;
  }

  String comando = Serial.readStringUntil('\n');

  // Elimina espacios y saltos de línea
  comando.trim();

  if (comando == "saludar") {
    cabeza.write(160);
    delay(15);
    saludar(10);
    saludar(10);
    saludar(10);
    startPosition();
  } else if (comando == "enojar") {
    startPosition();
    enojar(10);
    enojar(10);
    enojar(10);
    startPosition();
  } else if (comando == "resetear") {
    startPosition();
  } else if (comando == "feliz") {
    feliz(5);
    feliz(5);
    feliz(5);
    startPosition();
  } else {
    Serial.println("Comando no reconocido.");
  }
}

void loop() {
  leerComandoSerial();
}
animatronico esquema
Figure 19. Esquemático del Animatrónico
animatronico conexion
Figure 20. Guía de Conexiones
Video de Ejemplo de Funcionamiento

Referencias