Mallado de cama inteligente en Marlin
Cómo configurar el mallado adaptativo de cama en Marlin con PrusaSlicer, SuperSlicer, OrcaSlicer y Bambu Studio para sondear únicamente el área donde imprimimos.
Una de las funciones de Klipper que más nos gusta es el mallado de cama inteligente: sondea solo la zona donde va a ir la pieza, no toda la cama. Esto reduce el tiempo de inicio, mejora la precisión de la primera capa y evita que el sensor trate de medir zonas que quedan fuera de la impresión.
Buena noticia: en Marlin también es posible, aunque con algunas condiciones.
Requisito de firmware: Bilineal obligatorio
Este sistema solo funciona con AUTO_BED_LEVELING_BILINEAR activado en el firmware.
UBL (Unified Bed Leveling) no es compatible con el mallado adaptativo por área de impresión. Si tu impresora usa UBL, consulta la sección al final de esta guía para una alternativa.
El comando G29 de Bilineal en Marlin acepta los parámetros L, R, F, B para definir el área de sondeo:
L
Límite izquierdo (Left, eje X min)
R
Límite derecho (Right, eje X max)
F
Límite frontal (Front, eje Y min)
B
Límite trasero (Back, eje Y max)
V<0-4>
Nivel de verbosidad (0-4)
Ejemplo manual desde terminal:
G29 L50 R150 F50 B150 V4
; Sondea únicamente entre X50-X150, Y50-Y150La densidad de puntos sigue siendo la configurada en GRID_MAX_POINTS_X/Y del firmware — no se puede cambiar en tiempo de ejecución con Bilineal estándar.
Implementación por laminador
OrcaSlicer tiene soporte nativo para mallado adaptativo desde la versión 2.0. Es la implementación más limpia y no requiere scripts manuales.
Disponible en OrcaSlicer 2.0 o superior (versión estable). La versión actual es la 2.3.x.
Configuración en Machine Settings
Ve a Machine Settings → Machine G-code y en el Start G-code reemplaza el G29 habitual por:
Variables disponibles (placeholders de OrcaSlicer para Marlin)
{adaptive_bed_mesh_min[0]}
Coordenada X mínima del área adaptativa
{adaptive_bed_mesh_min[1]}
Coordenada Y mínima del área adaptativa
{adaptive_bed_mesh_max[0]}
Coordenada X máxima del área adaptativa
{adaptive_bed_mesh_max[1]}
Coordenada Y máxima del área adaptativa
{bed_mesh_probe_count[0]}
Número de puntos de sondeo en X (no soportado en Marlin bilineal estándar)
{bed_mesh_probe_count[1]}
Número de puntos de sondeo en Y (no soportado en Marlin bilineal estándar)
A diferencia de Klipper, Marlin Bilineal no permite cambiar el número de puntos de sondeo en tiempo de ejecución. Por eso en el G-code para Marlin se omiten los parámetros X/Y de conteo de puntos y solo se define el área.
Opciones de control en OrcaSlicer
En Machine Settings → Bed leveling, OrcaSlicer ofrece tres parámetros clave:
Bed mesh min (default: -99999, -99999) Define el límite inferior del área de sondeo permitida. Importante si tu sensor no puede alcanzar el borde completo de la cama (offset XY del sensor). Ajústalo a los valores reales de tu impresora, por ejemplo 20, 20.
Bed mesh max (default: 99999, 99999) Define el límite superior. Ejemplo para una cama de 235×235: 215, 215.
Probe point distance (default: 50 mm) Distancia entre puntos de sondeo. Con este valor OrcaSlicer calcula cuántos puntos caben en el área adaptativa. Aunque Marlin Bilineal ignora esta densidad, mantener un valor razonable ayuda a que el cálculo del área sea coherente.
Mesh margin (default: 0) Margen adicional alrededor del área de impresión. Con 0 el área es exactamente la de la pieza. Puedes subir a 5-10 mm para mayor seguridad en bordes.
Ejemplo completo de Start G-code con OrcaSlicer + Marlin Bilineal
Calienta la cama antes de sondear. Los materiales se dilatan con el calor: sondear en frío da una malla incorrecta para imprimir en caliente.
PrusaSlicer y SuperSlicer permiten usar placeholders y scripting con variables locales en el Start G-code. Esto nos permite calcular el área de sondeo directamente a partir del bounding box de la pieza.
Este script funciona en PrusaSlicer 2.5+ y SuperSlicer. Para otros laminadores similares (BambuStudio, etc.) consulta la lista de placeholders de cada uno.
Referencias útiles:
Script completo
Incluye el cálculo automático del área, precalentado, homing, mallado y calentado para impresión. Reemplaza o integra en tu Start G-code actual:
Cómo funciona el cálculo
Sección de cálculo de variables:
El bloque { } se evalúa en el laminador antes de generar el G-code. No llega a la impresora: solo produce los valores numéricos que luego se insertan en el G29.
probexmin
X mínima: borde izquierdo de la pieza menos 20 mm de margen, sin salir de la cama
probexmax
X máxima: borde derecho de la pieza más 20 mm de margen, sin salir de la cama
probeymin
Y mínima: borde frontal de la pieza menos 20 mm de margen
probeymax
Y máxima: borde trasero de la pieza más 20 mm de margen
El 20 es el margen en mm entre el área de impresión y el área de sondeo. Puedes ajustarlo a gusto (10-25 mm es lo habitual).
Placeholders de PrusaSlicer utilizados:
first_layer_print_min[0]
X mínima del bounding box de la pieza
first_layer_print_max[0]
X máxima del bounding box de la pieza
first_layer_print_min[1]
Y mínima del bounding box de la pieza
first_layer_print_max[1]
Y máxima del bounding box de la pieza
print_bed_min[0/1]
Coordenadas mínimas de la cama configurada
print_bed_max[0/1]
Coordenadas máximas de la cama configurada
[first_layer_bed_temperature]
Temperatura de cama primera capa (entre corchetes = formato PS)
[first_layer_temperature]
Temperatura nozzle primera capa
Limitaciones importantes:
Este script no cambia la densidad de puntos de sondeo — solo limita el área. La densidad sigue siendo la del firmware (
GRID_MAX_POINTS_X/Y).Si el parámetro
L/R/F/Bno está soportado en tu versión de Marlin, elG29ignorará los límites y sondeará toda la cama.En impresiones que ocupan toda la cama, los límites calculados coinciden con los de la cama y el resultado es equivalente a un G29 normal. En ese caso, el offset XY del sensor puede hacer que el comando intente sondear fuera de los límites físicos — ajusta bien tus
print_bed_min/maxen el perfil de impresora.
Verificación
Para comprobar que el G-code generado es correcto, exporta el G-code de una pieza pequeña centrada en la cama y busca la línea G29. Los valores L, R, F, B deben corresponder al área de la pieza ±20 mm.
Bambu Studio tiene su propio sistema de placeholders, compatible con la sintaxis {variable}. Aunque está pensado para impresoras Bambu Lab, puede adaptarse a impresoras genéricas Marlin añadidas como perfiles personalizados.
Bambu Studio soporta un subconjunto de los placeholders de OrcaSlicer (están basados en el mismo código). La variable {adaptive_bed_mesh_min} y {adaptive_bed_mesh_max} puede no estar disponible en todas las versiones para impresoras genéricas.
Para impresoras Bambu Lab (que usan firmware propio, no Marlin), el mallado adaptativo se gestiona automáticamente por el firmware, sin necesidad de G-code personalizado.
Para impresoras genéricas con Marlin en Bambu Studio, el enfoque más fiable es usar los placeholders de área de impresión directamente:
Consulta la lista completa de placeholders de Bambu Studio para confirmar las variables disponibles en tu versión.
Cura no soporta scripts con variables locales ni cálculos matemáticos en el Start G-code. Los placeholders disponibles (como {mesh_min_x}, {mesh_max_x}) solo representan el bounding box del modelo, sin permitir operaciones como sumar el margen o limitar a los bordes de la cama.
Opciones para Cura:
Plugin "Adaptive Bed Mesh": Existen plugins de terceros para Cura que añaden esta funcionalidad. Busca en el Cura Marketplace.
Post-processing script: Puedes usar un script Python de post-procesado (Cura → Extensions → Post Processing) que modifique el
G29después de laminar, aunque requiere más configuración.Usar OrcaSlicer en su lugar: Si tu objetivo principal es el mallado adaptativo, OrcaSlicer es la opción más directa y con mejor soporte para Marlin.
Alternativa para UBL: cargar malla guardada
Si tu firmware usa UBL (Unified Bed Leveling), no puedes hacer mallado adaptativo por área en tiempo real de la misma forma. La estrategia recomendada es:
Crea una malla de alta resolución una vez (desde terminal o LCD):
En el Start G-code del laminador, carga la malla guardada y aplica una corrección de plano rápida (3 puntos):
G29 J es la clave: sondea solo 3 puntos para detectar si la cama ha rotado o inclinado, y aplica esa corrección sobre la malla guardada. Resultado: precisión de un sondeo completo con la velocidad de 3 puntos.
Este método UBL con G29 J es muy eficiente para impresoras que tienen camas grandes y tardan varios minutos en sondar. Combina lo mejor de los dos mundos: malla detallada + inicio rápido.
Fade Height — compensación gradual
Independientemente del método, es recomendable activar el Fade Height (ENABLE_LEVELING_FADE_HEIGHT en el firmware):
El Fade Height hace que la compensación del mallado se aplique progresivamente entre la cama y la altura configurada (10 mm habitual), y a partir de ahí el movimiento es completamente plano. Sin esto, la compensación se aplica en toda la altura de la pieza, lo que puede generar artefactos en piezas altas.
Con esto ya tienes tu mallado adaptativo funcionando en Marlin
Recuerda: Bilineal para mallado adaptativo por área, UBL para mallas guardadas con corrección rápida de plano. Cada método tiene su caso de uso y ambos mejoran significativamente la calidad de la primera capa respecto a un G29 simple.
Última actualización