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.
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. |
|
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. |
|
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. |
|
Chasis + Ruedas de Goma + Porta Pilas |
Principal fuente de poder y marco para armar. Alimentación entre 6v a 12v. 9v recomendado. |
|
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. |
|
Cables Jumper |
Macho - Hembra, Macho - Macho. Permite conectar los componentes. |
|
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. |
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. |
Código fuente
#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.