Introduction: LightBlue 3D

About: Trust me. I'am an Engineer.


In the past 4 years I've played with 3D printers.
I have discovered and learned new skills and knowledge. I designed and printed a lot of objects. I fell in love with 3D printers. And I hated them. And again I fell in love.

And now I've decided to make a 3D printer. An open source printer.

In this instructable I will describe how to build your BlueLight 3D printer. It is the first 3D printer we produced and is the basic model. If you want, you can upgrade to DeepBlue 3D or even to DeepBlue 3D Pro.

Highlights: cube like frame, new cross XY rolling system design, servo Z probe for all bed surfaces, four point translation bed design, simple filament run out sensor, active cooling with laminar air curtain and Marlin 2.0 firmware (early stage).

The DeepBlue 3D Pro, the top of the Blue3D range has an active enclosure, wi-fi connection, raspberry pi with octoprint and direct extruder.

LightBlue 3D characteristics:

    • print volume 200x200x230 mm;
    • very rigid cube structure;
    • FDM technology;
    • minimum layer height of 0.06 mm;
    • heated bed & flexible PEI sheet bed;
    • autoleveling with servo probe;
    • e3Dv6 hotend type;
    • runout filament senzor M600;
    • top print speed 120 mm / sec;
    • Bowden or direct drive feed;
    • is open source;
    • has Marlin firmware with Z-axis synchronization.

    These instructions are a brief description of the LightBlue printer. I tried to be as clear and complete as possible, but if you feel the need for more detailed descriptions, please contact me. I'll be happy to help you.

    Thanks to the RepRap community and Marlin developers for intelligence, hard work and dedication to developing 3D printers.

    Note: Attached * .stl files are the latest evolution and, possibly, are different from those used when we made the movie. However, the installation differences are minor.

    Step 1: Frame

    I opted for a cube-like frame to get great rigidity, to get the ability to upgrade to a closed and active chamber, and to support the new xy-axis mechanism.

    To simplify the fitting of profiles we used CNC cut profiles. It is important that the profiles have exactly the required length and the cuts are perpendicular. The mounting mode can be seen in the attached movie.

    The horizontal profiles are of the 20 mm V-slot type and have a length of 330 mm.

    The vertical profiles are of the 20 mm T-slot type and have a length of 375 mm. The vertical profiles have 4 mm holes at one end at a distance of 10 mm on a face and 35 mm on the perpendicular face - see image. These holes are to tighten the M5 mm screws.

    For the base I chose an MDF board of 18 mm thickness , ensuring the rigidity and closure of the frame. Use base.pdf for execution.

    For side closures we used 3mm aluminum composite panels. I attached the execution drawings.

    01/15/2019: I have updated the base frame and the bed dxf files.

    Step 2: XY Carriage

    The basic range has a Bowden carriage that can be upgraded to direct drive by adding a direct drive option.

    I opted for a cross design that is very rigid in all directions. It is also lightweight, has a small number of components that are easy to obtain.

    I attached the necessary STL files. I printed all parts in PETG (LightBlue colored, hence the name).

    For the assembly of the parts watch the attached movie.

    The Z-axis sensor is of the servomotor type. It is inexpensive, easy to configure and can be used regardless of the bed surface. To power the servomotor we used a 5V step down voltage converter from 12 V power supply.

    Step 3: XY Rolling System

    The rolling system for the X and Y axes has been designed from scratch and uses mini rollers from the openbuilds. The movement on the axes x and y is very precise and vibration free.

    The engines used are Nema 17 with a torque of 0.59 Nm. The belts used are GT2 type with a length of 1m, requiring 4 pieces. The roller supports are designed with pre-tensioning, but also have tension adjustment screws.

    For belt guides I used 604zz flange bearings and 3D print corner supports from PETG.

    Step 4: Belts & Tensioning

    For belt tension adjustment and keeping the perpendicularity between the X and Y axes we used 4 locks only for belt tension adjustment. Pay attention to fitting the locking system to avoid damaging the rolling path for the rollers. Do not over tight.

    Observe how the belts are arranged in the attached pictures and drawings. Use zip ties to fasten the belts.

    Step 5: Z System

    The Z-axis axle system is designed to be as rigid, light and precise as possible. I placed two 10 mm axes and two trapezoidal screws in the 4 corners of the aluminum bed. The aluminum bed is the support for the silicone heater and also a support for the printing surface which is made of flexible steel sheet and the surface that provides adhesion is made of PEI foil.

    The flexible sheet of steel together with the PEI foil is fastened to the aluminum bed by means of clamps. I prefer grip with clamps and not with magnets because I can warm the bed to 115 degrees celsius to print ABS.

    The aluminum bed is factory leveled with sheets of different thickness, and the two Nema 17 0.4 kgf engines are synchronized with a new g code G34. Thanks to Marlin developers, especially TheLongAndOnly and ThinkyHead users.

    Step 6: Extruder & Runout Sensor

    The easiest way is to choose an Mk8 extruder and mount it as shown.

    We also designed an extruder similar to Mk8 that can be printed and mounted in the same position. Pay attention: the filament path will need to be calibrated using a 2mm drill after you print the body.

    In the extruder's body is mounted a runout filament sensor, which consists of a 6 mm ball and a microswitch.

    The PETF tube will be V-cut and will be mounted at the extruder outlet to provide a friction-free trajectory for the filament, see image.

    The extruder has a detachable casing to clean the gear.

    The filament roll is supported by a support that is mounted in the left-hand side.

    Note: In response to a question from Thingiverse: In this project i propose another solution.I use a 6 mm ball between filament and microswitch. I've attached 2 pictures to help understand my solution. So far it has gone perfectly. Also see the PTFE tube cut in V.

    Step 7: Active Cooling

    For materials requiring cooling, PLA, PETG, etc., we use two 50mm fans together with a laminar air jet chamber. So we create an air curtain of a few millimeters that will cool the last printed layer. Also, if the printer closes with plexiglass panels, the air curtain will keep the air warm inside, making it easy to print ABS.

    The temperature inside the enclosure can be controlled by means of a servomotor and a dash that mixes the outside air with the inside air. These components are provided with the DeepBlue Pro printer.

    The laminar air jet chamber is divided into three sections to make it easier to print. After printing and adjusting, they must be glued.

    For a more linear control of fan speed we used the attached scheme. The components were fixed in the holes provided in the laminar air jet chamber.

    Step 8: LCD

    To control the printer, we use a MKS mini 12864 display.

    For the model we have modified the cable sockets so they can be mounted in the 1.4 Adapter for Ramps. I just shave the key off the ribbon plugs and plug them in 180-deg around. We also use long cables.

    Step 9: Electronics

    For the printer control I used a Ramps 1.4 and Arduino Mega. Because it is a Cartesian system you can use any controller you have available.

    The power supply is 12V and 10A, enough for the printer's needs. For bed heating, we use a 220V silicone heater via a 40A SSR relay.

    Be careful: the aluminum bed must be grounded.

    For cooling we use the cooling system used for layer cooling. The 50 mm fans will draw cold air from outside through the electronics enclosure and then expel it through the laminar air system.

    Step 10: Firmware & Tuning

    Because I used a two nema 17 motors system for the Z axis, I used a firmware that introduced a new G34 command to keep synchronizing the two motors: Marlin-bugfix-2.0.x. developed by TheLongAndOnly on GitHub. Thank you.

    I attached the configuration files I used.

    Tuning procedure:

    • Depending on the type of pulley, stepper motor, driver, belt, etc. used, you will calculate the values for x and y using the calculator section "Steps per millimeter - belt driven systems". Our values: 1.8 degree stepper, 1/32 microstepping, GT2 belt, 16 pulley, and the result are 200.

    • Using the same calculator, you will also calculate the z value, section "Steps per millimeter - leadscrew driven systems" .Our values: 1.8 degree stepper, 1/16 microstepping, 8 mm leadscrew pitch, and the result are 400.

    • For the recommended extruder, Mk8, you can use the value of 95 for E.

    Now you will replace the values in #define DEFAULT_AXIS_STEPS_PER_UNIT { X, Y, Z, E } from configuration.h with the calculated values.

    #define DEFAULT_AXIS_STEPS_PER_UNIT { 100,100,400,95 }

    These are the calculated values. They will be slightly altered after calibration.

    For the value of z offset we can proceed as follows:

    • Using a host we will send "G28" command to the printer. The printer will look for x and y endstop then position itself in the center of the bed and test the Z.
    • Then we will position the hotend at height Z = 0 by "G1 Z0".
    • Now we'll use a piece of paper with which we'll probe the space between the top of the hotend and the bed. The paper has to slip into this space with a slight friction.

    • If it does not come in, or the friction is too high, we will use the software positioning system and we will raise the tip of the hotend by 0.01 mm until the paper is stretched with a slight friction. The value with which we raised the tip will be added with the addition of Z offset value in configuration.h. So if the value with which we raised the tip is 0.2 mm we will change the definition Z_PROBE_OFFSET_FROM_EXTRUDER -0.45 like this Z_PROBE_OFFSET_FROM_EXTRUDER -0.25.

    • If the paper enters too easily, we can still use one or more sheets and try it until the paper encounters a slight friction. We will count how many sheets we have overlapped and add value, with minus in definition. So if I squeezed 3 sheets the value will be -0.3 mm, and the definition will be Z_PROBE_OFFSET_FROM_EXTRUDER -0.75.

    To calibrate the number of steps for the extruder we will do so:

    • Using host we will send "M302 S0" , this command will allow the filament to be extruded at any temperature.
    • Using host we will send "G1 E100 F30" command to the printer, this command will extrude 100 mm of filament.
    • Now we measure the extruded filament and if it is not exactly 100 mm we will correct the value of E from #define DEFAULT_AXIS_STEPS_PER_UNIT { X,Y,Z,E } with : E=100*95/measured value.

    Now we are going to print a cube with the 20 mm side and measure it in all three directions. We will measure the sides of the cube and proceed as above to calibrate the X, Y, and Z values.

    After calibration, in my case, the definition has become #define DEFAULT_AXIS_STEPS_PER_UNIT { 100.125, 100.125, 400.125, 106.6 }

    Also I have activated the skew correction. I downloaded the test from the and I printed. After the measurement we replaced the values, exactly as described in the firmware. After a new print, the test square came out perfectly both in size and geometry. Very happy...

    To calibrate the flow I printed the same 20 mm cube but without top and bottom and infill and with one perimeter. We will measure the thickness of the wall and apply the same idea as when calibrating the extruder steps. If we printed with a wall of 0.48 mm (standard for a 0.4 nozzle) and a flow of 1 and we measured 0.5 mm, the new flow value would be 0.96. This value will be used in your slice program.

    Now we can also use linear advance. First of all, we need to activate this option in configuration_adv.h. Just delete the 2 "//" for "// #define LIN_ADVANCE", save, compile and upload the new configuration.

    For configuration, read the link We used the 1.5 version and we are excited about the results.

    If the Z-axis motors are no longer in syncron then we can use the G28, home all commands and then the G34 command that will measure the deviations and automatically level the print bed by synchronizing the two Z motors.

    Also, the printer is configured to use auto_bed_bilinear leveling. If you want to use this option, use G29 in your favorite slice program.

    In our favorite slicer at the startup sequence we use the following ordering:

    G28; home all axes

    G34; auto align Z motors

    G29; auto bed leveling


    Congratulations!. Now you have a calibrated printer.