Banner publicitario de PCBWay

Controladora cnc inalámbrica ( se puede controlar desde una página web)

Ha, estoy armando este proyecto que no sé si funcionará como corresponde, no he visto otros controladores que funcionen solo por una web así que voy incorporando avances y leyendo sus sugerencias para terminar este proyecto.
Voy conociendo sobre la marcha sobre impresoras cnc en cuanto a la electrónica e implementación de comandos en la web para que haga cosas (se mueva ).
Estoy con algo simple por ahora ya que es lo primero que hago de este tipo y ya me di cuenta que faltan varias cosas en la placa controladora como seleccionar los pasos, final de carrera, botón de emergencia, ventiladores, ajuste de altura para z, etc...
Esta placa no va incluir cables para unir con la conputadora, si es por eso me compro una por alí. Esa va ser la diferencia del resto, el que puedas controlarla desde un celular modesto, televisor o cualquier cosa que soporte leer html entendiendo que quizás no se pueda leer completamente por el le guaje que utiliza la web en su servidor.

Que otras cosas serían necesarias en la placa que al resto de placas comerciales les falta.. Por ahora nada de cámaras que ya lo pensé, pero esta complicado por los el tema drivers.

Espero sirva



cnc3 motores.jpgWhatsApp Image 2025-12-17 at 4.11.00 PM.jpeg WhatsApp Image 2025-12-17 at 3.53.40 PM.jpeg
 

Adjuntos

  • cnc 3 motores.zip
    17.1 KB · Visitas: 0
  • cnc ino.txt
    4.7 KB · Visitas: 1
Ha, estoy armando este proyecto que no sé si funcionará como corresponde, no he visto otros controladores que funcionen solo por una web así que voy incorporando avances y leyendo sus sugerencias para terminar este proyecto.
Voy conociendo sobre la marcha sobre impresoras cnc en cuanto a la electrónica e implementación de comandos en la web para que haga cosas (se mueva ).
Estoy con algo simple por ahora ya que es lo primero que hago de este tipo y ya me di cuenta que faltan varias cosas en la placa controladora como seleccionar los pasos, final de carrera, botón de emergencia, ventiladores, ajuste de altura para z, etc...
Esta placa no va incluir cables para unir con la conputadora, si es por eso me compro una por alí. Esa va ser la diferencia del resto, el que puedas controlarla desde un celular modesto, televisor o cualquier cosa que soporte leer html entendiendo que quizás no se pueda leer completamente por el le guaje que utiliza la web en su servidor.

Que otras cosas serían necesarias en la placa que al resto de placas comerciales les falta.. Por ahora nada de cámaras que ya lo pensé, pero esta complicado por los el tema drivers.

Espero sirva



Ver el archivo adjunto 335032Ver el archivo adjunto 335036 Ver el archivo adjunto 335033

Muy buen proyecto y con Blynk App será (y)
 
Última edición:
muy bueno, pero dependiendo la complejidad del gcode (si es corte y grabado/impresión 3d/etc), puede llegar a pesar el archivo mas de 1G, entonces si vas a estar mandando paquetes con los bloques, creo que vas a tener que pensar en los limites de tamaño de archivo mas una especie de checksum para saber si el paquete de datos llego completo. Si miras algún ejemplo de controladora Gcode Offline, fijate que el método de lectura desde fuente y respuesta no sirve; Por lo general hace lectura desde fuente, almacenamiento y luego replica mecánicamente los bloques.
Te felicito por la innovación
 
Saludos, excelente iniciativa, hace unas semanas presente en la Universidad un proyecto que consiste en el control y monitoreo de un variador de frecuencia que controla un Spindle de 1.5kw, de igual manera tengo la idea de poder controlar una CNC por medio de IOT, ya que en mi trabajo las construimos y el proyecto que acabo de presentar en la universidad es un pequeño avance. (Ya que logre manipular el Spindle de corte), te adjunto mi documentación para que puedas echarle un ojo (), use un protocolo MQTT y NODE Red para el control, tambien pase por Blynk. Saludos, espero que puedas lograr tu objetivo, si tienes poca experiencia en el mecanizado CNC puedo apoyarte con gusto, manejo los programas de: Vectric Aspire y Mach3.
 
lectura desde fuente y respuesta no sirve
Creo es como tenía todo ya que es como se me ocurría.
En el video explico lo que he probado e implementado por lo que me sugirió el amigo torres.electronic
Va el código completito con la modificación de checksum para saber si el código llegó bien
La idea es no estar ligado a una app que quizás pida registro, etc.

pretendo hacer lo más más más fácil llegar a controlar una maquinita, incluso podría habilitar portal cautivo si dejara el esp además como ap, por si fallara el router, no se... es un poco paranoico querer llegar a interactuar con la máquina sin cables.

Si encuentran los lectores de este foro que es como para seguir dando tiempo a este proyecto, se podría comunicar ya que me encuentro en el proceso de hacer la segunda placa y quiero no llegar hacer más de 4 hasta la final, por lo que les agradecería sugerencias de qué más sería necesario agregar, quitar modificar, romper o lo que sea.

Saludos

 

Adjuntos

  • con checksum.txt
    69.4 KB · Visitas: 2
Creo es como tenía todo ya que es como se me ocurría.
En el video explico lo que he probado e implementado por lo que me sugirió el amigo torres.electronic
Va el código completito con la modificación de checksum para saber si el código llegó bien

La idea es no estar ligado a una app que quizás pida registro, etc.

pretendo hacer lo más más más fácil llegar a controlar una maquinita, incluso podría habilitar portal cautivo si dejara el esp además como ap, por si fallara el router, no se... es un poco paranoico querer llegar a interactuar con la máquina sin cables.

Si encuentran los lectores de este foro que es como para seguir dando tiempo a este proyecto, se podría comunicar ya que me encuentro en el proceso de hacer la segunda placa y quiero no llegar hacer más de 4 hasta la final, por lo que les agradecería sugerencias de qué más sería necesario agregar, quitar modificar, romper o lo que sea.

Saludos

No te olvides de poner público el vídeo 😅
1000117376.png
 
Estoy mirando detenidamente el sketch y esta muy bueno. Tenes un ESP32 de dos núcleos o de uno solo?
viendo la robustez y lo practico que fuiste con todas las funciones, lo primero que haría, es armar módulos con algunas funciones para que después te sea mas fácil trabajar en determinados puntos de forma separada (SD= #include "sd_manager.h", motion= #include "motion.h", web= #include "web_ui.h", checksum= #include "command_handler.h", etc).
Tengo que mirar con mas detenimiento la parte de la web y dos o tres funciones que las lei al vuelo, pero quizás se pueda mejorar con unos mínimos cambios. por ejemplo los string los trabajaría directamente con Json para reducir bugs y tener mas legibilidad... un ejemplo bobo al azar que se me ocurre ahora, podría ser el string que armas a mano en handleListFiles():

CSS:
String fileList = "[";
bool first = true;

while (true) {
    File entry = root.openNextFile();
    if (!entry) break;

    if (!entry.isDirectory()) {
        String name = entry.name();
        name.toUpperCase();
        if (name.endsWith(".GCODE") || name.endsWith(".TAP")) {
            if (!first) {
                fileList += ",";
            }
            fileList += "{\"name\":\"";
            fileList += name;
            fileList += "\",\"size\":";
            fileList += entry.size();
            fileList += "}";
            first = false;
        }
    }
    entry.close();
}
fileList += "]";
server.send(200, "application/json", fileList);

Con la librería ArduinoJson quedaría asi:

CSS:
#include <ArduinoJson.h>

void handleListFiles() {
    File root = SD.open("/");
    if (!root) {
        server.send(500, "application/json",
                    "{\"error\":\"ERROR al abrir el directorio raiz de la SD. Verifique la conexion.\"}");
        return;
    }

    // Reserva un buffer razonable para la lista
    StaticJsonDocument<1024> doc;
    JsonArray arr = doc.to<JsonArray>();

    while (true) {
        File entry = root.openNextFile();
        if (!entry) break;

        if (!entry.isDirectory()) {
            String name = entry.name();
            name.toUpperCase();
            if (name.endsWith(".GCODE") || name.endsWith(".TAP")) {

                JsonObject obj = arr.createNestedObject();
                obj["name"] = name;
                obj["size"] = entry.size();
            }
        }
        entry.close();
    }
    root.close();

    String out;
    serializeJson(arr, out);
    server.send(200, "application/json", out);
}

La respuesta en el navegador sigue siendo algo como:

[{"name":"PIEZA1.TAP","size":1234},{"name":"PRUEBA.GCODE","size":5678}].

Pero en tu sketch ya no estás concatenando strings con comas y comillas a mano, lo que reduce errores y hace más fácil agregar nuevos campos (type, date, etc.) más adelante... Aclaro que esto no agiliza el núcleo, pero te abre las puertas a que en el futuro de manera mas sencilla puedas manejar mas variables... Para agilizar la UI, tendrías que tratar de no bloquearla en análisis largos... En parseGcode(gcodeLines) recorres todas las líneas en un solo tirón y haces bastante trabajo por línea (parsing, cálculo de tiempo, tracking de min/max, etc.). Para que la UI no se “congele/ralentice” cuando el archivo es grande, tendrías que buscar la manera de procesar en bloques usando setTimeout o requestIdleCallback, que el ESP32-S3 para esto, es ideal... Estoy intensivamente sumergido en unos videos tutoriales de python y haciendo algunas cositas, pero ni bien me haga un tiempo, me siento a dedicarle el tiempo que se merece tu trabajo. Hasta donde lei e interprete, esta excelente! felicitaciones :excelente:

EDIT: Es mas fuerte que yo :facepalm: Ultima de hoy y me voy a zzzzz :LOL:
Estoy viendo que repetís acciones sin aprovechar el reúso de datos de análisis para fresado que ya lo hiciste en 1era instancia... o sea, analizas el archivo para visualizar y calcular tiempos.
Después, para fresar localmente, volves a recorrer gcodeBuffer y recomputas cosas (distancias, coordenadas, etc.).
Una "posible" optimización podría ser guardar ya en gcodeBuffer lo que necesita el fresado (gcode original,dx, dy, dz,distance,tipo G0/G1,tiempo estimado de ese segmento).
Después, en startFileTransfer() usar esos mismos datos sin recalcular.
Con esto tendrías menos CPU en el navegador y quizás lo mas importante seria, que en fresado local y SD arrancarian más rápido despues el análisis.
No tomes nada literal... tomalo como consejos o ideas... saludos
 
Última edición:
Atrás
Arriba