Skip to the content
PCBKitNew board
2 layersLoomETec, the printed circuit board in 3D

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

2

README

README.md

🧶 LOOM ETEC - Telar Automático con Sistema Jacquard

License: MIT Platform: ESP32 Framework: PlatformIO

📖 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

ComponenteDescripciónCantidad
ESP32 DevKit V1Microcontrolador principal con WiFi y Bluetooth integrado1
Motores DCPara lanzadera, peine y eje Y (elevación)3-4
ServomotoresPara selección de hilos (Eje Z) en sistema Jacquard1
Motores PAP + DVR8825Motor paso a paso con driver para eje X (horizontal) y plegador2
Puente H L298NControlador para motores DC bidireccionales2-3
Sensores Fin de CarreraDetección de posiciones límite (mínimo 7)7+
Fuente de Alimentación12V 5A para motores1
Cables y ConectoresJumpers, borneras, conectores DupontVarios

📋 Requisitos Previos

Software a Instalar

  1. Visual Studio Code con extensión PlatformIO IDE
  2. Node.js (v14 o superior) para Node-RED
  3. Python 3.8+ para el Editor de Trama
  4. Mosquitto MQTT Broker (opcional, para pruebas locales)

🚀 Guía de Instalación

1. Instalación de PlatformIO

  1. Descargar e instalar Visual Studio Code
  2. Abrir VS Code y dirigirse a Extensions (Ctrl+Shift+X)
  3. Buscar PlatformIO IDE e instalar
  4. Reiniciar VS Code
  5. Verificar instalación: debería aparecer un ícono de hormiga en la barra lateral

2. Instalación de Node-RED

bash
# 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:1880

3. Instalación de Python y Dependencias

bash
# 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/Debian

4. Configuración de MQTT Broker

Opción A: Mosquitto Local
bash
# 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 1883
Opción B: HiveMQ Cloud (Recomendado para acceso remoto)
  1. Crear cuenta gratuita en HiveMQ Cloud
  2. Crear un nuevo cluster
  3. Anotar credenciales (URL, puerto, usuario, contraseña)
  4. Actualizar configuración en main.cpp y flujos de Node-RED

🎨 Editor de Trama - Guía de Uso

Iniciar el Editor

bash
python Editor-Trama.py

Funcionalidades 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
PincelDescripción
PuntoPinta un solo píxel
Línea HLínea horizontal de 3 píxeles
Línea VLínea vertical de 3 píxeles
CruzForma de cruz (5 píxeles)
CuadradoCuadrado de 2x2
DiagonalDiagonal de 3x3

Crear pincel personalizado:

  1. Click en "Crear Pincel"
  2. Definir dimensiones (ej: 3x3)
  3. Click en "Generar Cuadrícula"
  4. Pintar el patrón deseado
  5. "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
  1. Crear un patrón base en las primeras 24 filas
  2. Ingresar número de repeticiones (ej: 3)
  3. Click en "Aplicar Replicación"
  4. 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)
json
{
  "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
AtajoAcción
Ctrl/Cmd + ZDeshacer
Ctrl/Cmd + YRehacer
Ctrl/Cmd + LLimpiar lienzo
Ctrl/Cmd + SGuardar PNG
Ctrl/Cmd + JGuardar JSON
Ctrl/Cmd + +Agrandar lienzo
Ctrl/Cmd + -Achicar lienzo

⚡ Puesta en Marcha del Telar

Paso 1: Conexiones del ESP32

Telar Convencional
text
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)
text
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 21
Diagrama de Conexión Puente H (ejemplo L298N)
text
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)
text
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 motor

Paso 2: Programar el ESP32

bash
# 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+S

Paso 3: Configurar Node-RED

bash
# Iniciar Node-RED
node-red

# Abrir navegador en http://localhost:1880
Importar Flujo
  1. Click en menú hamburguesa (☰) → Import
  2. Seleccionar archivo:
    • node-red-flujo-telar.json (telar Jacquard con carga de patrón)
    • O node-red-flujo-telar-simple.json (telar convencional)
  3. Click en Import
Configurar Broker MQTT en Node-RED
  1. Doble click en cualquier nodo MQTT (ej: "mqtt_empezar")
  2. Click en el lápiz junto a "Server"
  3. Configurar:
    text
    Server: localhost  (o IP del broker)
    Port: 1883
    Username: tu_usuario
    Password: tu_contraseña
  4. Click en Update → Done
  5. Click en Deploy (botón rojo arriba a la derecha)
Verificar Endpoints HTTP

Una vez desplegado, los siguientes endpoints estarán disponibles:

text
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 vueltas

Paso 4: Interfaz Web

Opción 1: Servidor Local Simple
bash
# 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.html
Opción 2: Servidor Web Externo

Subir el archivo index.html a cualquier hosting web o usar:

bash
# Con Node.js (live-server)
npm install -g live-server
live-server --port=8000

Paso 5: Operación del Sistema

Para Telar Convencional
  1. Verificar que el ESP32 esté conectado a WiFi (revisar Serial Monitor)
  2. Abrir interfaz web en http://localhost:8000/index.html
  3. Verificar conexión:
    • Debe mostrar vueltas: 0
    • Botones deben estar habilitados
  4. Click en ▶ Iniciar para comenzar tejido
  5. El telar ejecutará la secuencia automáticamente
  6. Click en ■ Detener para pausar
Para Telar Jacquard
  1. Crear patrón en Editor de Trama (31 columnas)
  2. Exportar como JSON (Ctrl+J)
  3. Abrir interfaz web
  4. En "Cargar patrón":
    • Click en zona de arrastre o seleccionar archivo
    • Elegir el archivo .json generado
    • Click en Subir patrón al telar
    • Esperar confirmación "🟢 Patrón subido correctamente"
  5. Click en ▶ Iniciar
  6. 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:

cpp
// 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 servo

Ajuste de Velocidades de Motores

cpp
// 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ón

Tiempos de Estabilización

cpp
// 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

text
┌─────────────────┐
│  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

cpp
// 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

  1. Verificar broker MQTT está corriendo:

    bash
    sudo systemctl status mosquitto
    # o
    mosquitto -v
  2. Probar conexión con mosquitto_sub:

    bash
    mosquitto_sub -h localhost -t "empezar" -v
  3. Verificar configuración de broker en Node-RED coincide con ESP32

Sensores de fin de carrera no funcionan

cpp
// 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 sensor

Servo no se mueve correctamente

cpp
// 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

cpp
// 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ópicoPayloadDescripción
vueltaNúmero enteroContador de vueltas completadas

Suscritos por ESP32

TópicoPayloadDescripción
empezar"1"Iniciar tejido
parar"1"Detener tejido
config/redJSON: {"ssid": "...", "password": "..."}Configurar WiFi
config/patronJSON: {"filename": "...", "content": "{...}"}Cargar patrón (Jacquard)

Parts

36
QtyValueFootprintReferences
4470ΩResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R3, R4
4LEDLED_THT:LED_D5.0mmD1, D2, D3, D4
2L293DPackage_DIP:DIP-16_W7.62mmU1, U2
2MountingHole_3.2mm_M3_PadMountingHole:MountingHole_3.2mm_M3_PadH1, H2
2Pololu_Breakout_DRV8825Mias:DRV8825-PTA1, A2
1100uFCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC2
1100µFCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC1
1CalMConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ4
1Conn_01x03_PinConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ17
1Conn_01x05_PinConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ16
1ESP32-DEVKITC-32DNODEMCU-ESP-32S:NODEMCU-ESP-32SU5
1Fuente12VTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ6
1Fuente5VTerminalBlock:TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ5
1JacqMXConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ7
1JacqMZConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ9
1Lanza1MConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ1
1Lanza2MConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ2
1PeineMConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ3
1PlegadorMConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ8
1SoporteHiloConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ18
1ULN2003ULN2003AN:DIP794W45P254L1969H508Q16U4
1fdcCal1Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ14
1fdcCal2Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ15
1fdcLanza1Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ10
1fdcLanza2Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ11
1fdcPeine1Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ12
1fdcPeine2Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ13

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 mmConveyor sorting, the printed circuit board in 3D

    Conveyor sorting

    shreyaskulur/conveyor-belt-sorting-PCB

    28 parts
  • 4 layers99.6 × 76.2 mmE TKT, the printed circuit board in 3D

    E TKT

    andreisperid/E-TKT

    open source embossed label maker

    110 parts481MIT
  • 2 layers31 × 64 mmPower driver, the printed circuit board in 3D

    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 mmMPCNC Nano Estlcam Shield, the printed circuit board in 3D

    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 mmElectronicFocuser, the printed circuit board in 3D

    ElectronicFocuser

    jlecomte/ascom-oag-focuser

    Open Source ASCOM-Compatible OAG Focuser For Astrophotography

    4 parts55MIT
  • 4 layers100 × 49.8 mmExpansion board, the printed circuit board in 3D

    Expansion board

    reubenstr/zuko

    A quadruped robot dog!

    75 parts51MIT
  • 2 layers75 × 60 mmDUTler V2, the printed circuit board in 3D

    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