This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

Bienvenido, Invitado
Tienes que registrarte para poder participar en nuestro foro.

Nombre de usuario
  

Contraseña
  





Estadísticas del foro
» Miembros: 18,213
» Último miembro: ropone
» Temas del foro: 12,474
» Mensajes del foro: 119,054

Estadísticas totales

Últimos temas
Juego automático
Foro: Arduino
Último mensaje por: avi99
Hace 10 minutos
» Respuestas: 0
» Vistas: 0
saludos a tod@s
Foro: General
Último mensaje por: ropone
Hace 2 horas
» Respuestas: 2
» Vistas: 976
Anet E10 - Impresora 3D m...
Foro: Anet
Último mensaje por: nemanexzd
Ayer, 12:41 AM
» Respuestas: 58
» Vistas: 79,768
Impresión 3D a partir de ...
Foro: Informática
Último mensaje por: blinkcagey
07-04-2026, 10:36 AM
» Respuestas: 1
» Vistas: 1,309
Pregunta sobre el filamen...
Foro: General
Último mensaje por: KOrNeJ
03-04-2026, 10:12 AM
» Respuestas: 0
» Vistas: 126
Que monitor que useis,o u...
Foro: Informática
Último mensaje por: callousaudit
03-04-2026, 08:33 AM
» Respuestas: 2
» Vistas: 1,238





















 
  Presentación
Enviado por: jjbier - 03-11-2023, 10:50 AM - Foro: Firmware y Software - Sin respuestas

Hola ha tod@s, Me presento, Me llamo Xabier,  vivo en O Milladoiro (un pueblo cerca de Santiago de Compostela), Hace unos meses compre una 

un kit para montar una Prusa I3 Steel, en concreto la P3STEEL de  HTA3D


  Presentación al foro...
Enviado por: javiero4780 - 02-11-2023, 08:51 PM - Foro: General - Respuestas (1)

Hola y muy buenas a tod@s!!! Me llamo Javier y actualmente estoy estudiando un master de impresión 3D y fabricación avanzada... También trabajo en impresión 3D y aunque llevo poco tiempo en este mundillo espero ayudar y recibir ayuda de esta gran comunidad.. 
Trabajo con impresoras que van desde una Ender3, Ultimaker 3, BCN3D, Figure 4, Markforged, Elegoo resina, etc.... 
También estoy con diferentes softwares del mundillo como son: Freecad, solidworks, fusión 360, Cura, Meshmixer, 3D Slicer, etc....
Un saludo a tod@s!!!! Osvaisacagar B2 B2 B2


  Pasos erroneos
Enviado por: Roque7 - 31-10-2023, 09:00 AM - Foro: Anet - Respuestas (7)

Mi vieja Anet A8, allá del 2016, sigue "funcionando" pero he cambiado la placa, tenia una mega y ramp 1.4 que ha fallecido. He puesto una MKS TinyBee me ha costado mucho ponerla en marcha, mas que nada subir el firmware, el Marlin que esta en las descargas de MKS y los archivos de configuración para la A8 de la pagina oficial de Marlin.
Y aquí esta lo raro, para que las medidas sean correctas los pasos por mm en el archivo de configuración para el eje X han de ser 200, Nusenuse Nusenuse el doble de lo que seria normal.
Hay que ponerlo asi  200, 100, 400, 100(95). he buscado errores y por mas vueltas que doy no lo encuentro. He pensado que los puentes de configuración de los micro pasos de la placa estuvieran defectuosos, pero en dos placas nuevas ocurre lo mismo.
Como es lógico he cambiado la anet V1 por la TinyBee y la pantalla zonestar por la reprap que uso, en el config.
Para compilar y subir uso el Visual Studio Code y Platformio.
Hay alguna configuración en el Marlin que se me escapa?.
Saludos


Gran sonrisa desplazamiento de capas ender 3
Enviado por: Jorge Espadas - 28-10-2023, 03:18 AM - Foro: General - Respuestas (1)

Buenas, es mi primera vez posteando ? estoy hace como 5 meses con un problema de desplazamiento de capaz particular, se me desplaza el eje Y unos 5mm en las impresiones que tienen muchas piezas, cuando el pico va mucho por el aire, digamos, como en los pulpitos articulados, no pasa siempre, intenté mil cosas, ajuste de correas, jugar con las velocidades, hasta la llevé a un técnico y me rompieron las placa madre y la tuve que garpar (supongo que eso descarta que sea un fallo eléctrico?) lo único que nunca probé es ajustar la polea del eje Y, porque mi modelo ender 3 no tiene prisioneros, sino que está a presión, entonces me da miedo arruinar la pieza. algún consejo? dicen que le de para adelante a lo de la polea? no tengo ninguna foto, fui tirando todas las impresiones fallidas, igualmente ahora voy a indagar para ver si encuentro alguna foto.

estoy cansado de despertarme y ver como 80g de plástico fueron desperdiciados, así que si alguien tiene otro solución voy a estar más que agradecido


  Error fatal en ESP32
Enviado por: Oscar Galicia - 27-10-2023, 02:19 AM - Foro: Arduino - Sin respuestas

Saludos, 

Soy nuevo en el foro y vengo desesperado a buscar ayuda porque me estoy quedando sin ideas.
En mi trabajo tengo una máquina electromecánica, y quiero medir los tiempos de trabajo y paro de la máquina.

Para esto, estoy usando un esp32 dev kit 1 con un shield que incluye los bornes para poder conectar cables.

He conectado los contactos normal abiertos de 2 relays a GND (común proveniente de GND de la tarjeta) y a los GPIO 35 y 27.
estas GPIO están configuradas como entradas PULLUP.

Al detectar que los relay se activan o se desactivan, mando a una base de datos de hostinger el estado (marcha, paro o alarma), y luego descargo los datos.

Mi problema es qué, mi ESP 32, empieza trabajando como se espera, pero al cabo de unas horas deja de responder. no reacciona a los relay.


Aunque puede parecer que se queda en algún fallo por comunicación, el puerto serial deja de imprimir lo que está haciendo o envía una serie de caracteres que no he programado en algún baudrate que no he seteado y desconozco.
me parece que no son fallas de conexión porque la falla sucede y un led que le he conectado me ha dejado ver que la salida GPIO 4 que está configurada como LOW, se pasa sola a un estado como si no estuviera configurada o definida.

me da fallo subir el archivo con el código, así que lo pondré acá:

//Librerías de Wifi
#include <WiFi.h>
#include <HTTPClient.h>
//Librerías y objeto para manejo de memoria eeprom
//#include <Preferences.h>      //Incluye la blioteca de EEPROM
//Preferences pref;  //inicia un objeto de memoria no volatil
/*
//Definir los hilos de multi tarea
TaskHandle_t FBTask;
TaskHandle_t SQLTask;
*/
//Server y credenciales de la base de datos
const char* serverName = "https://linkdemanejoyalmacenajededatos.php";
String apiKeyValue = "jfhdskls";
String nodo = "/nodonodo";  //dirección del nodo dentro de la base
//Definir las variables del programa principal y app
bool viSRUN = false;
bool viALARM = false;
int mSTAT = 10;
int INICIAR = 1;
//Definir variables a enviar por el POST
int RUN = 0;
int STOP = 0;
int ALARM = 0;
int COMANDO = 0;
int SENDDATA = 0;
String TALARM = "INICIO";
String USER = "";
String PRODUCT = "";
String SPAUSA = "";
int COUNTP = 0;
//Variables para reinicio de conexión en caso de fallas del wifi
bool reenvio = true;  //Variable para reenviar los datos http en caso de falla
int concheck = 0;
int resetcon = 0;
int intentos = 0;
bool aok = true;
int cuentare = 0;  //contador de fallas
//Define el objeto Servidor para recibir datos por WiFi
WiFiServer server(80);
String header;
//Variables para confirma de lectura de entradas
bool iRun = false;
bool iAlarm = false;
bool tRun = false;
bool tAlarm = false;
unsigned long lastTime, timeout = 2000;
unsigned long tread = 1000;
unsigned long tr1 = 0;
unsigned long tr2 = 0;
//*********Determinar los credenciales de conección a WIFI****************************//
const char* ssid = "wifi";
const char* password = "contraseña";


void conectarWiFi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED && intentos < 30) {
    intentos++;
    Serial.print("Intento de conexión número ");
    Serial.print(intentos);
    Serial.println("...");
    delay(1000);
  }
  if (WiFi.status() == WL_CONNECTED) {
    Serial.println("Conexión WiFi exitosa");
    Serial.print("Dirección IP: ");
    Serial.println(WiFi.localIP());
    intentos = 0;
  } else {
    Serial.println("No se pudo conectar a la red WiFi");
    ESP.restart();
  }
}
void setup() {
  //Setear el PINOUT
  pinMode(2, OUTPUT);         //habilita el pin 4 como salida
  pinMode(4, OUTPUT);         //habilita el pin 4 como salida
  pinMode(14, OUTPUT);        //habilita el pin 14 como salida
  pinMode(22, OUTPUT);        //habilita como Salida START
  pinMode(23, OUTPUT);        //habilita como Salida STOP
  pinMode(27, INPUT_PULLUP);  //habilita el pin 27 como entrada RUN
  pinMode(26, INPUT_PULLUP);  //habilita el pin 26 como entrada  SENSOR
  pinMode(35, INPUT_PULLUP);  //habilita el pin 35 como entrada  ALARMA
  digitalWrite(4, LOW);       //Apaga el RS485
  digitalWrite(14, LOW);      //0VDC
  digitalWrite(22, HIGH);     //RELÉ DE RUN
  digitalWrite(23, HIGH);     //RELÉ DE STOP
  //Definimos los objetos Multitask
  /*
  xTaskCreatePinnedToCore(LFB, "Task1", 8000, NULL, 1, &FBTask, 0);    // Core 0
  xTaskCreatePinnedToCore(LSQL, "Task2", 8000, NULL, 1, &SQLTask, 0);  // Core 0
  */
  //Serial.begin(9600);  //Inicia la comunicación Serial por el puerto COM
  delay(1000);
  Serial.println("Iniciando Wifi...");
  //Llama la funcion de conexion wifi
  conectarWiFi();
  //inicia el objeto de servidor Wifi para leer los post desde la app
  server.begin();
  //Carga los datos de la EEPROM en ajustes de whatsapp
  //pref.begin("WhaSettings", false);
  INICIAR = 1;
  TALARM = "INICIO";
}
void loop() {
  if (INICIAR == 1) {
    if (digitalRead(35) == HIGH) {
      ALARM = 1;
    }
    if (digitalRead(27) == LOW) {
      RUN = 1;
    } else {
      STOP = 1;
    }
    SENDDATA = 1;
    delay(1000);
    INICIAR = 0;
  }
  //Evaluacion si se solicitó enviar datos
  if (SENDDATA == 1) {
    enviodata();
    Serial.println("Envio de data");
  } else {
    //En caso de no intentar enviar datos, se mantiene leyendo cambios de estado
    //Rutina al iniciar el ESP32, manda un registro a la base de datos con el status actual y avisa que se acaba de iniciar el void loop
    //Evaluación y filtrado de los pulsos o interferencias en las entradas del ESP32 (ALARMA)
    if (digitalRead(35) == HIGH) {
      if (tAlarm == false) {
        tr1 = millis();
        tAlarm = true;
      } else {
        if (millis() - tr1 >= tread) {
          iAlarm = true;
        }
      }
    } else {
      if (tAlarm == true) {
        tr1 = millis();
        tAlarm = false;
      } else {
        if (millis() - tr1 >= tread) {
          iAlarm = false;
        }
      }
    }
    //Evaluación y filtrado de los pulsos o interferencias en las entradas del ESP32 (RUN/STOP)
    if (digitalRead(27) == LOW) {
      if (tRun == false) {
        tr2 = millis();
        tRun = true;
      } else {
        if (millis() - tr2 >= tread) {
          iRun = true;
        }
      }
    } else {
      if (tRun == true) {
        tr2 = millis();
        tRun = false;
      } else {
        if (millis() - tr2 >= tread) {
          iRun = false;
        }
      }
    }
    //Rutina de checkeo de cambio de estados
    if (iAlarm == true) {
      if (ALARM == 0) {
        ALARM = 1;
        TALARM = "ALARMA";
        SENDDATA = 1;
      }
      ALARM = 1;
      mSTAT = 3;
    }
    if (iAlarm == false) {
      if (ALARM == 1) {
        ALARM = 0;
        TALARM = "CONFIRMA ALARMA";
        SENDDATA = 1;
      }
      ALARM = 0;
      mSTAT = 4;
    }
    if (iRun == true) {
      if (RUN == 0) {
        RUN = 1;
        STOP = 0;
        TALARM = "RUN";
        SENDDATA = 1;
        Serial.println("MARCHA");
      }
      RUN = 1;
      STOP = 0;
      digitalWrite(2, HIGH);
      mSTAT = 1;
    }
    if (iRun == false) {
      if (RUN == 1) {
        RUN = 0;
        STOP = 1;
        TALARM = "STOP";
        SENDDATA = 1;
        Serial.println("DETENIDA");
      }
      RUN = 0;
      STOP = 1;
      mSTAT = 2;
      digitalWrite(2, LOW);
    }
  }

  /*
  WiFiClient client = server.available();
  if (client) {
    lastTime = millis();
    Serial.println("Nuevo cliente");
    String currentLine = "";
    while (client.connected() && millis() - lastTime <= timeout) {
      if (client.available()) {
        char c = client.read();
        Serial.write©;
        header += c;
        if (c == '\n') {
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            //pruebas, habrá que modificar esto
            if (header.indexOf("GET /refresh") >= 0) {
              client.println(mSTAT);
            } else {
              int start = header.indexOf("GET ") + 4;
              int end = header.indexOf("HTTP/1.1") - 1;
              String requestValue = header.substring(start, end);
              Serial.println("Request:");
              //Serial.println(requestValue);
              client.println(mSTAT);
              aok = false;
              char* token = strtok(requestValue.begin(), "$");
              USER = token;
              token = strtok(NULL, "$");
              USER = token;
              token = strtok(NULL, "$");
              PRODUCT = token;
              token = strtok(NULL, "$");
              String strtoint = token;
              COMANDO = strtoint.toInt();
              token = strtok(NULL, "$");
              SPAUSA = token;
              token = strtok(NULL, "$");
            }
            break;
          } else {
            currentLine = "";
          }
        } else if (c != '\r') {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Cliente desconectado.");
    Serial.println("");
    Serial.println("Valores extraídos:");
   
    //Serial.println(USER);
    //Serial.println(PRODUCT);
   
    Serial.println(COMANDO);
    if (aok == false) {
      switch (COMANDO) {
        case 1:
          Serial.println("SOLICITUD DE RUN");
          viSRUN = true;
          viALARM = false;
          if (RUN != 1) {
            digitalWrite(22, LOW);
            digitalWrite(23, HIGH);
            TALARM = "CONFIRMA SEGURIDAD";
            Serial.println("ON RELÉ RUN");
            aok == true;
          }
          break;
        case 2:
          viSRUN = false;
          Serial.println("SOLICITUD DE STOP");
          if (STOP != 1) {
            digitalWrite(23, LOW);
            digitalWrite(22, HIGH);
            TALARM = "CONFIRMA SEGURIDAD";
            Serial.println("ON RELÉ STOP");
            aok == true;
          }
          break;
        //Lectura de Comando Alarm
        case 3:
          viALARM = true;
          viSRUN = false;
          if (TALARM != "ALARMA DESDE LA APP") {
            TALARM = "ALARMA DESDE LA APP";
            digitalWrite(23, LOW);
            digitalWrite(22, HIGH);
            if (RUN == 0) {
              SENDDATA = 1;
            }
            Serial.println("SET ALARM");
            aok == true;
          }
          break;
        case 5:
          if (TALARM != SPAUSA) {
            viSRUN = false;
            Serial.println("SET " + SPAUSA);
            digitalWrite(23, LOW);
            digitalWrite(22, HIGH);
            TALARM = SPAUSA;
            SENDDATA = 1;
           
            aok == true;
          }
          break;
      }
    }
  }
  //Evalua si el estado de de la maquina coincide con la solicitud de la app
  if ((viSRUN == true && mSTAT == 1) || (viSRUN == false && mSTAT == 2)) {
    //Si está en pide run y está en run deja las salidas inactivas
    digitalWrite(23, HIGH);
    digitalWrite(22, HIGH);
    //Serial.println("RELÉS DESACTIVADOS");
    COMANDO = 10;
    //Serial.println("SOLICITUD DE LA APP RESUELTA");
  }
*/
  delay(200);
}
void enviodata() {
  //Si está habilitado el WiFi inicia el objeto HTTP
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(serverName);
    http.addHeader("Content-Type", "application/x-www-form-urlencoded");
    //Envia los datos recibidos a la base de datos
    String httpRequestData = "api_key=" + apiKeyValue + "&RUN=" + RUN + "&STOP=" + STOP + "&ALARM=" + ALARM + "&TALARM=" + TALARM + "&USER=" + USER + "&PRODUCT=" + PRODUCT + "&COUNTP=" + COUNTP + "";
    Serial.print("httpRequestData: ");
    Serial.println(httpRequestData);
    int httpResponseCode = http.POST(httpRequestData);
    //Codigo de verifiacion de la request
    if (httpResponseCode > 0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      reenvio = false;
      concheck = 0;
      SENDDATA = 0;
    } else {
      reenvio = true;
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
      concheck = concheck + 1;
      Serial.println("Fallas de conexión: ");
      Serial.println(concheck);
      if (concheck >= 20) {
        Serial.println("Demasiadas fallas, reseteando conexión");
        desconectarWiFi();
        reconectarWiFi();
      }
      http.end();
    }
  } else {
    Serial.println("WiFi Disconnected");
    desconectarWiFi();
    reconectarWiFi();
    delay(500);
  }
}
//Funcion para desconectar el wifi en caso de exeder errores
void desconectarWiFi() {
  WiFi.disconnect();
  Serial.println("Desconectado de la red WiFi");
}
//Funcion para reconectar el wifi
void reconectarWiFi() {
  WiFi.reconnect();
  Serial.println("Reconectando a la red WiFi...");
  conectarWiFi();
}

/*
void LFB(void* parameter) {  //
  while (1 == 1) {
    delay(1000);
  }
}
void LSQL(void* parameter) {  //
  while (1 == 1) {
    if (SENDDATA == 1) {
      enviodata();
      Serial.println("Envio por el core: " + xPortGetCoreID());
    }
    delay(200);
  }
}
*/