

LoomETec
LOOMETEC es un proyecto solidario para automatizar la producción de mantas destinadas a recién nacidos vulnerables. Desarrolla un telar Jacquard con control en 3 ejes, PCB propia con ESP32, MQTT/Node-RED para control remoto y software para el diseño de patrones complejos.
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 36
- Nets
- 64
- Pads
- 180
- Tracks, vias
- 364, 28
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 26 Jul 2026
- Updated
- 30 Jul 2026
Overview
LoomETec is an open-source printed circuit board by augustoSantoni, from the augustoSantoni/LoomETec repository on GitHub. It is a 2-layer board with 36 parts on 64 nets, routed with 364 tracks and 28 vias.
It is built around the L293D and ULN2003. Its parts include 18 connectors, 4 resistors, 4 ICs, 4 diodes and 2 capacitors. It belongs with the ESP32 boards of this library.
Main components
2README
README.md🧶 LOOM ETEC - Telar Automático con Sistema Jacquard
📖 Descripción del Proyecto
El proyecto LOOM ETEC se desarrolla en el marco del taller AeroGlobETec, que combina disciplinas como ciencias, electrónica, informática, mecánica y dibujo técnico.
🎯 Motivación
Este proyecto nace de una motivación personal, inspirada en la memoria de mi abuela, quien dedicó gran parte de su vida a tejer y donar sus creaciones a quienes más lo necesitaban. Tras su fallecimiento, surgió la idea de conmemorar su legado mediante la creación de un telar automático que perpetúe su espíritu altruista e integre conocimientos técnicos.
Objetivo principal: Automatizar el proceso de tejido para producir mantas destinadas a instituciones que asisten a recién nacidos en situación de vulnerabilidad.
🏗️ Tipos de Telares Implementados
1️⃣ Telar Convencional
Compuesto por cuatro partes esenciales:
- Caladores: Varillas que levantan o bajan selectivamente los hilos de la urdimbre, creando una abertura (llamada "calada") por donde pasa la lanzadera con el hilo de la trama.
- Peine: Herramienta dentada que presiona y compacta el hilo de la trama después de cada pasada de la lanzadera.
- Lanzadera: Dispositivo que transporta el hilo de la trama a través de los hilos de la urdimbre para tejer la tela.
- Plegador: Mecanismo que enrolla la tela tejida, manteniendo la tensión y avanzando la urdimbre a medida que se teje.
2️⃣ Telar Jacquard (31 columnas)
Una reversión del telar de Jacquard, máquina textil que utiliza patrones digitales (en lugar de tarjetas perforadas) para controlar automáticamente el levantamiento individual de hilos de urdimbre, permitiendo la creación de patrones complejos.
Sistema de control:
- Eje X: Motor PAP para movimiento horizontal (31 posiciones)
- Eje Z: Servomotor para selección arriba/abajo de cada hilo
- Eje Y: Motor DC para elevación del cabezal (calada)
🛠️ Tecnologías Utilizadas
Software
PlatformIO
IDE profesional para desarrollo de sistemas embebidos. Proporciona gestión de bibliotecas, compilación cruzada y soporte para múltiples plataformas de hardware. Utilizado para programar el ESP32 con C++.
Node-RED
Herramienta de programación visual basada en flujos para conectar dispositivos IoT. Actúa como middleware entre la interfaz web y el broker MQTT, procesando las peticiones HTTP y transformándolas en comandos MQTT.
MQTT (Mosquitto/HiveMQ Cloud)
Protocolo de mensajería ligero para IoT. Permite la comunicación asíncrona entre el ESP32 y el servidor mediante topics (tópicos). Se puede usar Mosquitto localmente o HiveMQ Cloud para acceso remoto.
Autodesk Fusion 360
Software de modelado 3D CAD/CAM utilizado para diseñar las piezas mecánicas del telar, incluyendo soportes, engranajes y estructuras.
Python 3.x + Tkinter
Lenguaje de programación utilizado para desarrollar el Editor de Trama, una aplicación de escritorio que permite crear patrones de tejido de forma visual mediante una interfaz gráfica.
Hardware
| Componente | Descripción | Cantidad |
|---|---|---|
| ESP32 DevKit V1 | Microcontrolador principal con WiFi y Bluetooth integrado | 1 |
| Motores DC | Para lanzadera, peine y eje Y (elevación) | 3-4 |
| Servomotores | Para selección de hilos (Eje Z) en sistema Jacquard | 1 |
| Motores PAP + DVR8825 | Motor paso a paso con driver para eje X (horizontal) y plegador | 2 |
| Puente H L298N | Controlador para motores DC bidireccionales | 2-3 |
| Sensores Fin de Carrera | Detección de posiciones límite (mínimo 7) | 7+ |
| Fuente de Alimentación | 12V 5A para motores | 1 |
| Cables y Conectores | Jumpers, borneras, conectores Dupont | Varios |
📋 Requisitos Previos
Software a Instalar
- Visual Studio Code con extensión PlatformIO IDE
- Node.js (v14 o superior) para Node-RED
- Python 3.8+ para el Editor de Trama
- Mosquitto MQTT Broker (opcional, para pruebas locales)
🚀 Guía de Instalación
1. Instalación de PlatformIO
- Descargar e instalar Visual Studio Code
- Abrir VS Code y dirigirse a Extensions (Ctrl+Shift+X)
- Buscar PlatformIO IDE e instalar
- Reiniciar VS Code
- Verificar instalación: debería aparecer un ícono de hormiga en la barra lateral
2. Instalación de Node-RED
# Instalar Node.js desde https://nodejs.org/
# Instalar Node-RED globalmente
npm install -g node-red
# Instalar nodos adicionales necesarios
cd ~/.node-red
npm install node-red-dashboard
npm install node-red-contrib-mqtt-broker
# Iniciar Node-RED
node-red
# Acceder a http://localhost:18803. Instalación de Python y Dependencias
# Verificar instalación de Python
python --version
# Instalar dependencias del Editor de Trama
pip install pillow
pip install tk
# En Linux/Mac, puede ser necesario instalar tkinter:
sudo apt-get install python3-tk # Ubuntu/Debian4. Configuración de MQTT Broker
Opción A: Mosquitto Local
# Windows: Descargar desde https://mosquitto.org/download/
# Linux:
sudo apt-get install mosquitto mosquitto-clients
# Iniciar servicio
sudo systemctl start mosquitto
sudo systemctl enable mosquitto
# Verificar que está corriendo en puerto 1883
netstat -tuln | grep 1883Opción B: HiveMQ Cloud (Recomendado para acceso remoto)
- Crear cuenta gratuita en HiveMQ Cloud
- Crear un nuevo cluster
- Anotar credenciales (URL, puerto, usuario, contraseña)
- Actualizar configuración en
main.cppy flujos de Node-RED
🎨 Editor de Trama - Guía de Uso
Iniciar el Editor
python Editor-Trama.pyFuncionalidades Principales
1. Crear un Patrón
- Tamaño: El editor trabaja con una cuadrícula de 24x24 píxeles por defecto
- Colores:
- Negro (patrón activo)
- Blanco (fondo)
- Pintar: Click izquierdo para pintar, click derecho para borrar
2. Pinceles Disponibles
| Pincel | Descripción |
|---|---|
| Punto | Pinta un solo píxel |
| Línea H | Línea horizontal de 3 píxeles |
| Línea V | Línea vertical de 3 píxeles |
| Cruz | Forma de cruz (5 píxeles) |
| Cuadrado | Cuadrado de 2x2 |
| Diagonal | Diagonal de 3x3 |
Crear pincel personalizado:
- Click en "Crear Pincel"
- Definir dimensiones (ej: 3x3)
- Click en "Generar Cuadrícula"
- Pintar el patrón deseado
- "Guardar Pincel" → ingresar nombre → guardar archivo
.brush
3. Ajustar Tamaño del Lienzo
- Agrandar: Ctrl/Cmd +
+o botón "Agrandar" (incrementa 4 filas) - Achicar: Ctrl/Cmd +
-o botón "Achicar" (reduce 4 filas, mínimo 24)
4. Replicar Diseño
- Crear un patrón base en las primeras 24 filas
- Ingresar número de repeticiones (ej: 3)
- Click en "Aplicar Replicación"
- El patrón se repetirá verticalmente
5. Exportar Patrón
Guardar como PNG (Ctrl/Cmd + S)
- Genera imagen con franjas de sincronización (patrón ajedrezado)
- Formato: 1 píxel = 1 hilo
- Incluye franjas cada 4 filas/columnas para alineación
Guardar como JSON (Ctrl/Cmd + J)
{
"dimensiones": [31, 100],
"datos": [
[0, 1, 0, 1, ...],
[1, 0, 1, 0, ...],
...
]
}- IMPORTANTE: Para el telar Jacquard, el patrón debe tener exactamente 31 columnas
- 0 = hilo abajo (blanco), 1 = hilo arriba (negro)
6. Atajos de Teclado
| Atajo | Acción |
|---|---|
| Ctrl/Cmd + Z | Deshacer |
| Ctrl/Cmd + Y | Rehacer |
| Ctrl/Cmd + L | Limpiar lienzo |
| Ctrl/Cmd + S | Guardar PNG |
| Ctrl/Cmd + J | Guardar JSON |
Ctrl/Cmd + + | Agrandar lienzo |
Ctrl/Cmd + - | Achicar lienzo |
⚡ Puesta en Marcha del Telar
Paso 1: Conexiones del ESP32
Telar Convencional
LANZADERA:
enaLanzadera → GPIO 29 (PWM)
lanzadera1 → GPIO 28 (dirección 1)
lanzadera2 → GPIO 20 (dirección 2)
fdcLanzadera1 → GPIO 40 (fin de carrera izq)
fdcLanzadera2 → GPIO 15 (fin de carrera der)
CALADORES:
enaCaladores → GPIO 34 (PWM)
caladores1 → GPIO 35 (subir)
caladores2 → GPIO 27 (bajar)
fdcCaladores → GPIO 16 (fin de carrera)
PEINE:
enaPeine → GPIO 22 (PWM)
peine1 → GPIO 24 (adelante)
peine2 → GPIO 23 (atrás)
fdcPeine1 → GPIO 13 (fin de carrera adelante)
fdcPeine2 → GPIO 14 (fin de carrera atrás)
PLEGADOR:
stepPlegador → GPIO 8 (pulsos)
dirPlegador → GPIO 18 (dirección)Telar Jacquard (adicional al convencional)
EJE X (Motor PAP):
stepEjeX → GPIO 25
dirEjeX → GPIO 26
fdcEjeX_Home → GPIO 17 (posición inicial)
EJE Z (Servo):
servoEjeZ → GPIO 19
EJE Y (Motor DC elevación):
enaEjeY → GPIO 34 (PWM)
ejeY_Up → GPIO 35
ejeY_Down → GPIO 27
fdcEjeY_Arriba → GPIO 16
fdcEjeY_Abajo → GPIO 21Diagrama de Conexión Puente H (ejemplo L298N)
ESP32 L298N Motor DC
GPIO XX → ENA → (PWM control velocidad)
GPIO YY → IN1 → (dirección)
GPIO ZZ → IN2 → (dirección)
OUT1/OUT2 → Motor
GND → GND
12V → 12V (fuente externa)Conexión DVR8825 (Motor PAP)
ESP32 DVR8825 Motor PAP
GPIO XX → STEP
GPIO YY → DIR
→ ENABLE (a GND o control)
12V fuente → VMOT
GND → GND
→ A1, A2, B1, B2 → Bobinas del motorPaso 2: Programar el ESP32
# Clonar el repositorio
git clone https://github.com/tu-usuario/loom-etec.git
cd loom-etec
# Abrir el proyecto en VS Code con PlatformIO
code .
# Configurar WiFi y MQTT en main.cpp (líneas 50-54)
String ssid = "TU_WIFI";
String password = "TU_PASSWORD";
const char* mqtt_server = "TU_BROKER_IP"; # localhost o IP de HiveMQ
const char* mqtt_user = "usuario";
const char* mqtt_pass = "contraseña";
# Compilar y subir (en VS Code)
# Click en el ícono "→" (PlatformIO: Upload) en la barra inferior
# O usar el atajo: Ctrl+Alt+U
# Monitorear salida serial
# Click en el ícono de enchufe (PlatformIO: Serial Monitor)
# O atajo: Ctrl+Alt+SPaso 3: Configurar Node-RED
# Iniciar Node-RED
node-red
# Abrir navegador en http://localhost:1880Importar Flujo
- Click en menú hamburguesa (☰) → Import
- Seleccionar archivo:
node-red-flujo-telar.json(telar Jacquard con carga de patrón)- O
node-red-flujo-telar-simple.json(telar convencional)
- Click en Import
Configurar Broker MQTT en Node-RED
- Doble click en cualquier nodo MQTT (ej: "mqtt_empezar")
- Click en el lápiz junto a "Server"
- Configurar:
text Server: localhost (o IP del broker) Port: 1883 Username: tu_usuario Password: tu_contraseña - Click en Update → Done
- Click en Deploy (botón rojo arriba a la derecha)
Verificar Endpoints HTTP
Una vez desplegado, los siguientes endpoints estarán disponibles:
POST http://localhost:1880/api/empezar - Iniciar tejido
POST http://localhost:1880/api/parar - Detener tejido
POST http://localhost:1880/api/config/red - Configurar WiFi
POST http://localhost:1880/api/config/patron - Cargar patrón JSON (solo Jacquard)
GET http://localhost:1880/api/vueltas - Obtener contador de vueltasPaso 4: Interfaz Web
Opción 1: Servidor Local Simple
# Navegar a la carpeta del proyecto
cd loom-etec
# Iniciar servidor HTTP simple con Python
python -m http.server 8000
# Abrir navegador en:
http://localhost:8000/index.htmlOpción 2: Servidor Web Externo
Subir el archivo index.html a cualquier hosting web o usar:
# Con Node.js (live-server)
npm install -g live-server
live-server --port=8000Paso 5: Operación del Sistema
Para Telar Convencional
- Verificar que el ESP32 esté conectado a WiFi (revisar Serial Monitor)
- Abrir interfaz web en
http://localhost:8000/index.html - Verificar conexión:
- Debe mostrar vueltas: 0
- Botones deben estar habilitados
- Click en ▶ Iniciar para comenzar tejido
- El telar ejecutará la secuencia automáticamente
- Click en ■ Detener para pausar
Para Telar Jacquard
- Crear patrón en Editor de Trama (31 columnas)
- Exportar como JSON (Ctrl+J)
- Abrir interfaz web
- En "Cargar patrón":
- Click en zona de arrastre o seleccionar archivo
- Elegir el archivo
.jsongenerado - Click en Subir patrón al telar
- Esperar confirmación "🟢 Patrón subido correctamente"
- Click en ▶ Iniciar
- El telar ejecutará el patrón columna por columna
🔧 Calibración y Ajustes
Calibración del Sistema Jacquard
En main.cpp, ajustar las siguientes constantes según tu hardware:
// Línea 60-65
#define PASOS_POR_COLUMNA 200 // Ajustar según distancia entre columnas
#define DELAY_PASO_X 800 // Velocidad del motor PAP (microsegundos)
#define SERVO_POS_ABAJO 45 // Posición servo para dejar hilo abajo
#define SERVO_POS_ARRIBA 135 // Posición servo para fijar hilo arriba
#define SERVO_DELAY 150 // Tiempo de movimiento del servoAjuste de Velocidades de Motores
// Línea 115-120
ledcWrite(PWM_LANZADERA, 200); // 0-255: ajustar velocidad lanzadera
ledcWrite(PWM_PEINE, 200); // 0-255: ajustar velocidad peine
ledcWrite(PWM_EJE_Y, 200); // 0-255: ajustar velocidad elevaciónTiempos de Estabilización
// Línea 70-75
#define DELAY_TEJER 500 // Pausa entre ciclos completos
#define TIEMPO_ESTABILIDAD 200 // Pausa tras cada movimiento
#define TIEMPO_ESPERA_FDC 15000 // Timeout para sensores de fin de carrera📡 Arquitectura del Sistema
┌─────────────────┐
│ Interfaz Web │ ← Usuario interactúa
│ (index.html) │
└────────┬────────┘
│ HTTP (fetch)
▼
┌─────────────────┐
│ Node-RED │ ← Middleware (localhost:1880)
│ (flujo.json) │
└────────┬────────┘
│ MQTT
▼
┌─────────────────┐
│ Broker MQTT │ ← Mosquitto/HiveMQ
│ (puerto 1883) │
└────────┬────────┘
│ WiFi
▼
┌─────────────────┐
│ ESP32 │ ← Control de hardware
│ (main.cpp) │
└────────┬────────┘
│ GPIO
▼🐛 Solución de Problemas
ESP32 no se conecta a WiFi
// Verificar credenciales en main.cpp
String ssid = "NOMBRE_EXACTO"; // Sin espacios extra
String password = "PASSWORD_EXACTA";
// Verificar en Serial Monitor:
// - "Conectando a SSID..."
// - "WiFi conectado"
// - "IP: xxx.xxx.xxx.xxx"Node-RED no recibe mensajes MQTT
-
Verificar broker MQTT está corriendo:
bash sudo systemctl status mosquitto # o mosquitto -v -
Probar conexión con mosquitto_sub:
bash mosquitto_sub -h localhost -t "empezar" -v -
Verificar configuración de broker en Node-RED coincide con ESP32
Sensores de fin de carrera no funcionan
// Verificar lógica de activación (línea 30)
#define FDC_PRESIONADO LOW // Cambiar a HIGH si usa pull-down
// Agregar resistencias pull-up/down según tipo de sensorServo no se mueve correctamente
// Calibrar posiciones del servo (línea 62-63)
#define SERVO_POS_ABAJO 45 // Probar valores entre 0-180
#define SERVO_POS_ARRIBA 135 // Ajustar según rango del servo
// Verificar alimentación del servo (5V, GND correcto)Motor PAP pierde pasos
// Aumentar delay entre pasos (línea 61)
#define DELAY_PASO_X 1200 // Valor más alto = movimiento más lento pero preciso
// Verificar:
// - Conexión de bobinas del motor
// - Configuración de micropasos en DVR8825
// - Alimentación suficiente (12V)📊 Tópicos MQTT
Publicados por ESP32
| Tópico | Payload | Descripción |
|---|---|---|
vuelta | Número entero | Contador de vueltas completadas |
Suscritos por ESP32
| Tópico | Payload | Descripción |
|---|---|---|
empezar | "1" | Iniciar tejido |
parar | "1" | Detener tejido |
config/red | JSON: {"ssid": "...", "password": "..."} | Configurar WiFi |
config/patron | JSON: {"filename": "...", "content": "{...}"} | Cargar patrón (Jacquard) |
Parts
36| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 470Ω | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2, R3, R4 |
| 4 | LED | LED_THT:LED_D5.0mm | D1, D2, D3, D4 |
| 2 | L293D | Package_DIP:DIP-16_W7.62mm | U1, U2 |
| 2 | MountingHole_3.2mm_M3_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2 |
| 2 | Pololu_Breakout_DRV8825 | Mias:DRV8825-PT | A1, A2 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C2 |
| 1 | 100µF | Capacitor_THT:CP_Radial_D6.3mm_P2.50mm | C1 |
| 1 | CalM | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J4 |
| 1 | Conn_01x03_Pin | Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical | J17 |
| 1 | Conn_01x05_Pin | Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_Vertical | J16 |
| 1 | ESP32-DEVKITC-32D | NODEMCU-ESP-32S:NODEMCU-ESP-32S | U5 |
| 1 | Fuente12V | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm | J6 |
| 1 | Fuente5V | TerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mm | J5 |
| 1 | JacqMX | Connector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_Vertical | J7 |
| 1 | JacqMZ | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J9 |
| 1 | Lanza1M | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J1 |
| 1 | Lanza2M | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J2 |
| 1 | PeineM | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J3 |
| 1 | PlegadorM | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J8 |
| 1 | SoporteHilo | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J18 |
| 1 | ULN2003 | ULN2003AN:DIP794W45P254L1969H508Q16 | U4 |
| 1 | fdcCal1 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J14 |
| 1 | fdcCal2 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J15 |
| 1 | fdcLanza1 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J10 |
| 1 | fdcLanza2 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J11 |
| 1 | fdcPeine1 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J12 |
| 1 | fdcPeine2 | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J13 |
Questions
What parts does the LoomETec use?
36 parts, built around the L293D and ULN2003. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the LoomETec KiCad files?
From the augustoSantoni/LoomETec repository on GitHub, at the commit this page was made from: the board is Archivos/PCB/Archivos/LoomETec.kicad_pcb and its schematic Archivos/PCB/Archivos/LoomETec.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the LoomETec design in my own project?
Its repository states no licence, so its author keeps all rights: ask augustoSantoni before reusing the design.
Similar boards
- 2 layers77.5 × 95.3 mm

- 4 layers99.6 × 76.2 mm

- 2 layers31 × 64 mm

Power driver
jmfriedt/SDR-GB-SAR
Opensource, openhardware implementation of a Software Defined Radio (SDR) Ground Based Synthetic-Aperture RADAR (GB-SAR)
6 parts70 - 2 layers160 × 100 mm

MPCNC Nano Estlcam Shield
tnn85/MPCNC-Nano-Estlcam-Shield
Ein CNC Shield für die MPCNC in Verwendung mit Estlcam
96 parts70 - 2 layers42.5 × 43.2 mm

ElectronicFocuser
jlecomte/ascom-oag-focuser
Open Source ASCOM-Compatible OAG Focuser For Astrophotography
4 parts55MIT - 4 layers100 × 49.8 mm

- 2 layers134 × 91 mm

- 2 layers75 × 60 mm

DUTler V2
TheYoctoJester/dutler
A bench butler for your Device Under Test: turns a Raspberry Pi Pico into a USB-serial console bridge with power-relay and MOSFET strap/reset control for embedded-Linux bring-up and hardware-in-the-loop.
54 parts23Apache-2.0