Por fin monte un sensor inductivo para auto bed leveling



  • Hola me ha surgido un problema con la configuracion del firmware al instalar el sensor , mi problema es que al hacer homming el sensor queda fuera de la cama por lo tanto no detecta nada , mirando el video de rafaelpascual he visto que al hacer el homming del eje z, sus ejes x e y se van al centro por lo tanto supongo que ha modificado la parte del homing en el firmware,¿ como puedo conseguir un comportamiento similar?
    Me respondo yo mismo no habia activado la opcion del autobed leveling en el marlin ahora todo funciona corractamente
    Enhorabuena, si ya lo tienes montado te vas a dar cuenta de lo que cambia la impresora.

    Un saludo
    Al final cante victoria antes de tiempo consegui hacer el homing de una forma correcta pero me he encontrado con el mismo problema que lucky me es imposible ajustar el Z_OFFSET la impresora no le hace ni caso voy a ver si puede ir tirando "engañando" a la impresora con el G92 , ¿tu que firmware tienes rafaelpascual?
    el 1.3.1, yo le tengo puesto G92 en el Gcode, no pude grabar en la rom del chip ninguna instrucción.

    Segun he podido ver la version que tengo yo, cuando consultas el M501 lo primero que hace es restaurar todo y se graba la con M503 y se consulta con M504... o al reves

  • MVP

    Es raro que vaya al revés, al ser Marlin debería ser más normalizado.

    Para grabar en la rom, tienes que tenerlo activado, está en una sección del configuration.h
    La alimentación, la tienes que cojer mejor de la fuente si es 12V, y el GND tambien (en la entrada de la ramps, como te comenta @{Andurino})
    Si no pones el GND puedes tener serios problemas incluso dañar la Ramps, iojo!



  • Siento reabrir el hilo otra vez, pero acabo de hacer el divisor de tensión, con dos resistencias, una de 10k y la otra de 15k, del negativo sale la de 10k hacia el de señal con la de 15k. Hasta aquí todo correcto, he conectado los 12v y veo que el led sensor inductivo se enciende/apaga según acercas un objeto metálico, pero a la hora de medir el voltaje que devuelve el cable de señal, me esperaba que uno de los dos fuera 0, pero no es así, con el led encendido (sin objeto metálico) me devuelve 2.5v y con el led apagado (con objeto metálico) 1.5v. ¿Es normal?


  • MVP

    Hay sensores normalmente abiertos y normalmente cerrados NO/NC. Podría ser ese el caso. Igualmente comprueba el divisor a ver qué te está fallando.



  • lucky dijo:
    Hay sensores normalmente abiertos y normalmente cerrados NO/NC. Podría ser ese el caso. Igualmente comprueba el divisor a ver qué te está fallando.
    No creo que se el divisor sinceramente. Para hacer la prueba lo he quitado, como podéis ver lo conecto directamente a la fuente de 12v:

    http://i.imgur.com/vzVPeCj.jpg

    Y parece funcionar correctamente:

    http://i.imgur.com/7cS5o4V.jpg

    Pero a la hora de medir los voltajes, con y sin metal cerca:

    http://i.imgur.com/a6yziAU.jpg

    http://i.imgur.com/nbo3EB1.jpg

    Me puse en contacto con el vendedor y me dije lo siguiente:

    We were ask our engineer , said that leave the black cable disconnected, when LED is on ,the voltage between black and brown should be 12V, when LED is off ,the voltage between black and brown should be 0V.

    Así que entiendo que no funciona correctamente...


  • cippod dijo:
    Siento reabrir el hilo otra vez, pero acabo de hacer el divisor de tensión, con dos resistencias, una de 10k y la otra de 15k, del negativo sale la de 10k hacia el de señal con la de 15k. Hasta aquí todo correcto, he conectado los 12v y veo que el led sensor inductivo se enciende/apaga según acercas un objeto metálico, pero a la hora de medir el voltaje que devuelve el cable de señal, me esperaba que uno de los dos fuera 0, pero no es así, con el led encendido (sin objeto metálico) me devuelve 2.5v y con el led apagado (con objeto metálico) 1.5v. ¿Es normal?
    Deduzco de tu comentario que no has probado el sistema en funcionamiento real, me da que las medidas son correctas. Si no me equivoco tendrás el divisor sacando la señal de la conexión entre las dos resitencias y claro que te debe dar las medidas que dices, puesto que entre la masa y la conexión hay una resistencia de 10 o 15K según la hayas puesto, por lo cual no esta a 0 V, además tienes que tener en cuenta que si lo has conectado a la placa el pin de arduino estará polarizado con 5v a través de una resitencia de 10k.

    De todas formas si tienes dudas comprueba que el sensor es NPN lo primero; y que puesto a 12V como te dice el fabricante cuando se apaga el led tienes 0V en el cable de señal. Y si estas dos cosas son así, quita el divisor resistivo y ponle el diodo como dice Malpartida y a funcionar.

    Un saludo


  • Hola,

    yo estoy ahora mismo liado también con el tema del sensor inductivo (con diodo) y cama caliente en 200x300, pero me he dado cuenta que la base de aluminio de 3mm que he puesto, está ligeramente combada al centro, estando los extremos y pelín mas bajos que el centro (centro convexo). Mi duda es ¿el autoleveling es capaz de compensar esta deformación de la cama? Si se le dan puntos centrales ¿es capaz de adaptar el offset?

    Estoy usando el "BQ Marlin v2.3.1" y todavía tengo que echarle algo más de tiempo, pero los valores de offset que pongo no parecen tener efecto, cuando hago el G92 con Z5 y bajo el nozzle, llega un momento en el que se dispara el sensor y ya no me deja bajar más. Pero vamos me queda darle un repaso al configuration.h en profundidad...

    Algún dato más por si es de interés, he cambiado el carro de la cama por un alucomp que encontré en eBay, no es que aporte mucho, pero quería probar que tal iba y por ahora parece más ligero (no lo pesé antes de montarlo 😮 )

    Mi idea cuando lo tenga todo funcionando bien es ponerlo en un Github, igual le ahorra tiempo a alguien... 🙂

    Saludos,

      Dani.



  • Vaya, ahora resulta que cuando activo el modo grid ( #define AUTO_BED_LEVELING_GRID), no compila..., por un foro el alemán de RepRap veo que esta opción no funciona en la 2.3.1 ¿es correcto?

    CXX Action.cpp
    CXX GuiAction.cpp
    GuiAction.cpp: In function 'void action_level_plate()':
    GuiAction.cpp:144:21: error: 'ABL_MANUAL_PT_1_X' was not declared in this scope
    target[X_AXIS] = ABL_MANUAL_PT_1_X;
    ^
    GuiAction.cpp:145:21: error: 'ABL_MANUAL_PT_1_Y' was not declared in this scope
    target[Y_AXIS] = ABL_MANUAL_PT_1_Y;
    ^
    GuiAction.cpp:169:21: error: 'ABL_MANUAL_PT_2_X' was not declared in this scope
    target[X_AXIS] = ABL_MANUAL_PT_2_X;
    ^
    GuiAction.cpp:170:21: error: 'ABL_MANUAL_PT_2_Y' was not declared in this scope
    target[Y_AXIS] = ABL_MANUAL_PT_2_Y;
    ^
    GuiAction.cpp:194:21: error: 'ABL_MANUAL_PT_3_X' was not declared in this scope
    target[X_AXIS] = ABL_MANUAL_PT_3_X;
    ^
    GuiAction.cpp:195:21: error: 'ABL_MANUAL_PT_3_Y' was not declared in this scope
    target[Y_AXIS] = ABL_MANUAL_PT_3_Y;
    ^
    GuiAction.cpp: In function 'void set_bed_level_equation_3pts(float, float, float)':
    GuiAction.cpp:267:29: error: 'ABL_PROBE_PT_1_X' was not declared in this scope
    vector_3 pt1 = vector_3(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, z_at_pt_1);
    ^
    GuiAction.cpp:267:47: error: 'ABL_PROBE_PT_1_Y' was not declared in this scope
    vector_3 pt1 = vector_3(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, z_at_pt_1);
    ^
    GuiAction.cpp:268:29: error: 'ABL_PROBE_PT_2_X' was not declared in this scope
    vector_3 pt2 = vector_3(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, z_at_pt_2);
    ^
    GuiAction.cpp:268:47: error: 'ABL_PROBE_PT_2_Y' was not declared in this scope
    vector_3 pt2 = vector_3(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, z_at_pt_2);
    ^
    GuiAction.cpp:269:29: error: 'ABL_PROBE_PT_3_X' was not declared in this scope
    vector_3 pt3 = vector_3(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, z_at_pt_3);
    ^
    GuiAction.cpp:269:47: error: 'ABL_PROBE_PT_3_Y' was not declared in this scope
    vector_3 pt3 = vector_3(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, z_at_pt_3);
    ^
    GuiAction.cpp: In function 'void action_get_plane()':
    GuiAction.cpp:409:136: error: 'qr_solve' was not declared in this scope
    double plane_equation_coefficients = qr_solve(AUTO_BED_LEVELING_GRID_POINTSAUTO_BED_LEVELING_GRID_POINTS, 3, eqnAMatrix, eqnBVector);
    ^
    GuiAction.cpp:419:57: error: 'set_bed_level_equation_lsq' was not declared in this scope
    set_bed_level_equation_lsq(plane_equation_coefficients);
    ^
    GuiAction.cpp: In function 'void action_offset()':
    GuiAction.cpp:869:29: error: 'ABL_PROBE_PT_1_X' was not declared in this scope
    float z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING);
    ^
    GuiAction.cpp:869:47: error: 'ABL_PROBE_PT_1_Y' was not declared in this scope
    float z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING);
    ^
    GuiAction.cpp:871:29: error: 'ABL_PROBE_PT_2_X' was not declared in this scope
    float z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
    ^
    GuiAction.cpp:871:47: error: 'ABL_PROBE_PT_2_Y' was not declared in this scope
    float z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
    ^
    GuiAction.cpp:873:29: error: 'ABL_PROBE_PT_3_X' was not declared in this scope
    float z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
    ^
    GuiAction.cpp:873:47: error: 'ABL_PROBE_PT_3_Y' was not declared in this scope
    float z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS);
    ^
    make: *** [bin/GuiAction.o] Error 1



  • Hola Dani, yo también intenté compilar el modo GRID pero no funciona. Si no recuerdo mal, en aquel momento llegué a la conclusión de que era problema del Marlin adaptado por BQ. Creo que en la versión oficial de Marlin si compila. Aunque tendrías que modificar más cosas para poder hacerlo funcionar, claro. Yo al final lo hice funcionar tomando solo tres puntos de referencia.


    En cuanto a lo de si es capaz de corregir el offset del nozzle para compensar la deformación de la cama. Con el Marlin de BQ me temo que no es posible. Tan solo compensará el desnivel, pero no si la cama está combada (centro convexo como tu indicas). Creo que con el Marlin oficial si es posible hacer esto, pero no me hagas mucho caso ya que no lo intenté, te hablo de oídas.

    Por último, cuando comentas que con el comando G92 Z5 bajas el nozzle después y llega un momento en que no te deja seguir bajando, si has modificado el resto de parámetros del firmware debería dejarte bajar. Pero prueba a poner Z10, por si acaso es que tienes una diferencia entre el sensor y tu nozzle de más de 5mm.

    Un saludo.



  • Gracias, ahora estoy intentando compilar el Marlin-1.0.2-2, que parece es la última versión estable. Si veo que no lo consigo probaré con la Marlin 1.1.0-RC7. Saludos.


  • MVP

    Yo tuve problemas con la última RC, con el tema temperatura PID, no me la mantenía. Con la estable, perfecto.
    En teoría si que haciendo el mesh debería compensar un combing. Si la modificas, cuelgala que seguro le haces favor a más de uno.



  • Pues por ahora algo he conseguido, pero no con buenos resultados. El tema de la temperatura es cierto que tiene ciertas oscilaciones, pero no muy grandes +/-0.5ºC, alguna vez se ha ido 2ºC, pero no es lo habitual. El problema es que ahora a la hora de imprimir, en pleno proceso tiene paradas, se lo piensa un rato y luego vuelve a imprimir, vamos que parece que se lo están pensando... 🙂

    Pero no he conseguido hacer el autolevel automático en modo mesh, por ahora solo en modo manual y no he conseguido aplicarlo en el proceso de impresión.

    En el foro de RepRap me han indicado dos caminos, o bien el "UBL (Unified Bed Leveling) Development Branch" de Marlin o el firmware de Repetier. Espero tener tiempo estos días para investigar por ese camino.

    De todas formas por si a alguien le interesa, comparto la versión configurada del 1.1.0-RC7, pero ya digo, no imprime bien, se atasca 🙂

    https://drive.google.com/open?id=0B2i6OYnHCL_gMGRJRlNybGdFTzg




  • Lo de las paradas me ocurrió a mi hace un tiempo. Aunque más que pradas eran micro-paradas, paraba solo como medio segundo, y seguía, así de vez en cuando. Resultó ser problema de la conexión entre la Raspberry Pi y la impresora (uso Octoprint para imprimir). Fue reiniciar la Raspberry y todo volvió a la normalidad. 


    Leí también que podía ser problema del cable USB con el que conectas el PC a la impresora, aunque supongo que no lo has cambiado y no debería fallar de repente...

    Buena suerte con lo del Mesh, que a mi también me interesa 🙂



  • Efectivamente, no lo he podido probar porque acabo de salir, pero me rondaba esa idea. Estaba imprimiendo desde el ordenador con el Pronterface y tiene toda la pinta que es un problema de comunicación.


  • MVP

    El tema mesh estaría muy interesante conseguirlo.
    A mi lo de la temperatura era de escándalo e imposible de usar



  • Yo tengo la base larga y he actualizado con el nuevo extrusor ddg harto de que cada dos por tres se estropeara el hotend clasico ya llevaba dos comprados y para que te lo cambien en garantia en bq mil historias asi que desisti y a ver con el nuevo si mejora el tema. Bueno a lo que ivamos quiero montar el sensor inductivo para tambien no tener que andar nivelando cada dos por tres pero mi cristal es de 5mm a ver si alguien me puede decir donde conseguir uno y luego a ver si soy capaz de compilar porque no tengo ni idea de como se hace a ver si aprendo algo jeje. Espero vuestra ayuda gracias.

    Enviado desde mi SM-N9005 mediante Tapatalk


  • MVP

    5mm cristal + 1mm de separación entre base y sensor (para tener algo de margen y ajuste) has de buscar un sensor con esa distancia mínima, el que yo usé es de 4mm. Si encuentras, si puede ser de carcasa plástica mejor (tema peso) o si es de metal, que sea fino. No interesa añadir inercias al cabezal.



  • Bueno, pues por ahora he conseguido activar el mesh pero en plan manual, es decir, ajusto los puntos con una hojita, me los guarda en EPROM y luego ya en la impresión va compensando la altura del eje Z según los puntos de la matriz. En cuanto tenga un rato actualizo los ficheros de configuración en GDrive y comento algo más.

    En cuanto a la temperatura no oscila demasiado, os dejo una captura de los minutos iniciales.




  • Pues nada, comento un poco lo que he hecho por si le sirve a alguien. Los pasos han sido:

    1º Me he bajado la versión RC7 (entre tanto salió la RC8...): https://github.com/MarlinFirmware/Marlin/tree/1.1.0-RC7

    2º He modificado los ficheros Configuration.h, Configuration_adv.h y thermistortables.h. Las diferencias entre los originales y las modificaciones realizadas las podéis ver aquí:

    Configuration.h: https://www.diffchecker.com/M1JEjetE
    Configuration_adv.h: https://www.diffchecker.com/DCOpdHsn
    thermistortables.h: https://www.diffchecker.com/4Olsq6s6
    3º Compilo y subo con el Arduino IDE 1.6.13. Lo intenté con make / make upload pero me daba problemas.

    4º Al arrancar la impresora lo primero que hago es la nivelación manual, a traves del display de la impresora voy a Preparar->Nivelar plataforma->Nivelar plataforma. En ese momento hace primero un homing y luego  inicia la secuencia pasando por los 9 puntos de control donde se toma el dato del ajuste. Aquí hay que tener en cuenta dos cosas, la primera es que si no se han puesto bien los valores de Z_PROBE_DEPLOY_HEIGHT y Z_PROBE_TRAVEL_HEIGHT, puede que el nozzle se acabe incrustando en la base, literal. La segunda es que Z_HOMING_HEIGHT no debe estar comentado.

    El ajuste lo he hecho con una hoja de papel, de forma que con dial o encoder subía o bajaba el nozzle hasta que rozase un poquito con el papel. Al final del proceso se guardan los valores, creo que automáticamente en la EPROM al estar habilitada la opción.

    5º A la hora de obtener el GCODE con Cura, he puesto un desplazamiento a X=10, Y=10 para que haga la extrusión incial de forma parecída a como lo hacía originalmente. El script de arranque start.gcode me ha quedado así:
    G21        ;metric values
    G90        ;absolute positioning
    M107       ;start with the fan off
    G28
    G1 X10 Y10 Z25 F1200    ;MUEVE 25Z X10 Y10
    G92 E0                  ;zero the extruded length
    G1 F200 E20             ;extrude 20mm of feed stock
    G92 E0                  ;zero the extruded length again
    G1 F{travel_speed}
    Y me parece que más o menos eso es todo, en el configuration.h he tocado cosas que no hacía falta, así que igual despista, pero me he dado cuenta cuando ya subí los ficheros.

    El siguiente paso será hacer lo propio con "mesh leveling" pero en plan automático al iniciar cada impresión, pero creo que eso me va a llevar algo más de tiempo.

    Saludos,

      Dani.





  • MVP

    Está muy interesante. Yo ahora tengo la impresora con unos trabajos, pero cuando pueda, también miraré de poner el Marlín e intentaré como tú de adaptar el auto mesh leveling