BLTouch on CR10S (english version..i hope)

Definitive guide (hopefully) for the installation of the BLTouch on CR10S

This article will be very long so take the time to read it and follow it well !! It consists of 4 different parts to follow in order for install BLTouch on cr10s!


CR10S Firmware upgrade to enable the BLTouch

Update the firmware of the CR10S is a few minutes operation (10 minutes enough) that often creates many problems for those who, like many, are not expert in the programming language.

Download the Arduino IDE

In this article we will see step by step how to update the firmware Marlin 1.1.x present on the new CR10-S (this guide is not good for CR10!).

The procedure is very simple, the first thing to do is  download the Arduino IDE from the official site.

So now we proceed with the guided installation and once finished we restart the program.

Now let’s move on to the Marlin website and download the official firmware (currently 1.1.8) in the Download section.

Once downloaded, extract the file and start the Marlin.ino file in the Marlin -1.1.x folder.


Ide Arduino

We proceed to activate line number to move faster, go to File-> Settings and enable “Display line numbers”.

Now begin the compilation of our new Firmware for CR10-S!

Let’s go to the Configuration.h tab and use the CTRL + L command to insert in line number

Line 114 , we modify the value BAUDRATE 250000 -> BAUDRATE 115200;

Line 127 , delete // and modify the printer name CUSTOM_MACHINE_NAME “printer name”


Line 289 , let’s check #define TEMP_SENSOR_0 1

(if you have an E3D have to set the n5)

Line 294 , we modify as follows #define TEMP_SENSOR_BED 5

Line 328 , we check the maximum temperature of the nozzle -> #define HEATER_0_MAXTEMP 250 (300 if you have a full metal E3D or Microswiss )

Line 333 , change the maximum bed temperature -> #define BED_MAXTEMP 120

For tnow we aren’t going to change the values ​​of the PIDs and move on to configure the accelerations and the values ​​of step / mm.

Line 532 , set the steps / mm -> #define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 400, 95}

Line 539 , set the max feedrate -> #define DEFAULT_MAX_FEEDRATE {2500, 2500, 100, 25}

Line 547 , we set the maximum acceleration -> # define DEFAULT_MAX_ACCELERATION {1000, 1000, 100, 10000} if you want you can decrease a little bit as to have less vibration on the structure.

Line 557 , set the value -> #define DEFAULT_ACCELERATION 500

Line 558 , set the value-> #define DEFAULT_RETRACT_ACCELERATION 1000

Line 559 , set the value -> # define DEFAULT_TRAVEL_ACCELERATION 1000

If you notice strange vibrations during printing, you can decrease the values ​​of Jerk as follows Lines 569 to 572

#define DEFAULT_XJERK 10.0  my setting (8.00)
#define DEFAULT_YJERK 10.0  my setting (8.00)
#define DEFAULT_ZJERK 0.3
#define DEFAULT_EJERK 5.0

Now you have to configure the movements of the X, Y, Z axes by changing Lines 752 to 754

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

Let’s now check the dimensions of the XYZ plan

Line 784 , #define X_BED_SIZE 300       if cr10S 30 × 30

Line 785 , # define Y_BED_SIZE 300      if cr10S 30 × 30

Line 793 , #define Z_MAX_POS 400     if cr10s 30X30

Enable the end-of-wire sensor for cr10s

Row 827 , change   // # define FILAMENT_RUNOUT_SENSOR -> # define FILAMENT_RUNOUT_SENSOR

Line 824 , set the value -> # define FIL_RUNOUT_INVERTING true

Enable the BLTouch sensor

Now let’s move on to the enabling of the self leveling of the printing bed with the BLTouch sensor that you can buy it (the original model of course) to the following link

Line 874 : uncomment (delete //)  and go to // # define AUTO_BED_LEVELING_BILINEAR -> # define AUTO_BED_LEVELING_BILINEAR

Line 640 , uncomment #define BLTOUCH and press ENTER  and type #define SERVO0_PIN 11

Now it’s a very important part, in fact we are going to define how much our sensor is higher than the nozzle.

Line 676 we can see a simple drawing that explains how to set the values, if for example you use LINK support you can set these values ​​( Line 687-688-689 )

#define X_PROBE_OFFSET_FROM_EXTRUDER -42 // -42 because the sensor is moved to the left 42 mm along the x axis with respect to the nozzle
#define Y_PROBE_OFFSET_FROM_EXTRUDER 0 // 0 because the sensor is in line with the nozzle
#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.25 // Z offset, here the procedure is a bit annoying, the values ​​can only be negative and you will need to measure how much is more than the nozzle, this procedure will be done after and we using the PRONTERFACE software !!!

Let’s proceed to configure the automatic leveling function and then we will come back to this point !!

Line 914 , #define GRID_MAX_POINTS_X 4, if you use the value 3 the printer will make 9 measurements while if you use 4 it will do 12. In theory only 9 measures are enough.

Now we have to set the perimeter points to make the measurements of the sensor, in my case (cr10 ) the following points are fine.

Line 918 , #define LEFT_PROBE_BED_POSITION 20

Line 919 , #define RIGHT_PROBE_BED_POSITION 240

Line 920 , #define FRONT_PROBE_BED_POSITION 30

Line 921 , #define BACK_PROBE_BED_POSITION 260

If you want to understand the procedure it will be very difficult to explain to me in English..ahaha

The LEFT_PROBE_BED_POSITION 20 point means that the sensor will be positioned on the point of the plane (20mm, __) so far so easy. The problems can born when going to set the limit value, in fact inserting RIGHT_PROBE_BED_POSITION 240 the sensor will go to position (240, __) but being the sensor married 45mm (as per configuration 687 line) the nozzle goes to the position (240 +45 = 285) in this case it is not a problem because the printing plan is 300 × 300, but if we had set the value RIGHT_PROBE_BED_POSITION 280 the compiler would have returned a compilation error because making the sum (280 + 45 = 325) the position is greater than the print floor size (300 × 300).

Line 924 , #define MIN_PROBE_EDGE 10, the minimum distance from the corners of the plane is worth the speech above (setting 10 means that the plane is seen as 290 × 290).

Go to  Enable EEPROM writing

Row 1117 , #define EEPROM_SETTINGS

Row 1118 , #define DISABLE_M503

ONLY FOR THE BLTouch cofiguration..

Let’s enable the following function to make sure that the Z home is made in the center of the printing bed so the sensor will surely touch the plane !!

Row 1035 #define Z_SAFE_HOMING

We set the preheating values ​​for PLA and ABS Lines 1149 to 1150


#define PREHEAT_1_TEMP_BED 60

#define PREHEAT_1_FAN_SPEED 0 // Value from 0 to 255


#define PREHEAT_2_TEMP_BED 85

#define PREHEAT_2_FAN_SPEED 0 // Value from 0 to 255

Row 1168 , uncomment #define NOZZLE_PARK_FEATURE

Now let’s enable the display and its functions

Row 1333 , uncomment #define SDSUPPORT

Row 1358 , uncomment #define ENCODER_PULSES_PER_STEP 1

Row 1364 , uncomment #define ENCODER_STEPS_PER_MENU_ITEM 5

Line 1404 , de comment #define SPEAKER


Now let’s move to the CONFIGURATION_ADV.H tab

Line 658 , uncomment #define BABYSTEPPING

This function is very useful, in fact, it will give the possibility to do a  very small corrections at the nozzle level it’s ensure a perfect first layer !!



Line 733 , let’s comment on the line by adding // # define ARC_SUPPORT

Line 879 , enable #define ADVANCED_PAUSE_FEATURE

Let’s go to the PINS_RAMPS.H tab

Line 255 , set the value #define FIL_RUNOUT_PIN 2

Now if it’s your first time for you, you’ll need to add a library. The operation is very simple, simply go up

Sketch -> # include library-> Library management and in the “Filter your search” bar insert U8glib and install it.

IDE library
Arduino firmware display library

Without this the firmware is complete, you just have to go to Tools and set as photos

Firmware upgrade
Select the correct Firmware settings

We update our printer

Connect the PC to the printer and set the exact COM Port

Then Sketch-> Check and compile , if not errors Sketch-> Compile

Made this compliment you have updated your CR10S with the leveling function with BLTouch !!


BLTouch installation on CR10S

Now let’s see how to connect the sensor to the printer and how to run the self-leveling command. The article will be divided into various phases to make everything easier. The only thing to pay attention to is to disconnect the power supply!

As always if you do not want to read the arctic here is the link to the video on the Youtube channel (old video that will soon be replaced)

Here’s what you need to get started!

To install the BLTouch you will need just a few hex keys, a 3-pole extension cable +2 additional cables or a better connector kit “that always serves in the next article on fan replacement”, of the wire cutters, soldering iron and thermo-shrinking if you want to do a clean job.

The first thing to do is to disconnect the power supply and now we can proceed to disassemble these 5 hexagonal screws .

CR10 power supply

Now if you want to do a clean job you can create an extension as I did “since I often disassemble the printer” otherwise you can simply run the cable near the cable sheaths.

Once this is done, proceed to unhook the cables from the connector, you can use a small slotted screwdriver to lift the plastic latch and remove the cables, or break the black connector!

Cable passage for BLTouch
BLTouch cable

We remove the plastic connector

now all that remains is to connect the sensor cables.

The cables will be so connected

Connecting cables may seem like a very difficult thing but it does not. Just reuse the connectors in the extension and you’re done. Obviously if you have insulation tape or heat-shrink tape you can use it to ensure cable insulation!

That said, here’s how to connect the three cables.

Connection scheme!

-Red = + 5v on the sensor is the color Red;

-Nero = Ground on the sensor the color is Brown;

-Green = Pin signal D11 on the sensor is the color Orange;

-White (Signal) and Black (GND) to be connected instead of the original Z-axis limit switch, if you do not have the necessary connector you can (as I did) connect it to the original connector on the Z-axis limit switch (mounted on the printer).

Once connected, all you have to do is make a small test just to make sure that  we have connected the limit switch well. Bring the Z axis up and make a home z, while the axis drops touch the sensor shaft .. if you see that the sensor snaps but the printer does stop then turn it off and invert the black and white cables and redo the test … will certainly work!

Implementation of the initial script

Now you just have to mount the sensor using the support present at this link and use the screws that fix the nozzle protective cage. In my case I had to insert a thickness (an additional nut) between the plastic support and BLtouch because the sensor was too high compared to the nozzle.


First start and height configuration

The first thing to do once everything is installed is to connect to the printer through the Pronterface program ( LINK ) to start the communication by correctly selecting the COM port and the communication speed (115000). Once connected we can use the command string to insert the function code G28 (capital G) home xy z.

After this the printer will proceed to make the home x then the home y will move to the center of the printing bed and make the home Z, if you have connected the BLTouch sensor you will notice that the iron shaft will be released and the nozzle will start to fall until it stops at the exact moment the BLTouch sensor touch the bed. Then the nozzle will rise by 10mm !!

Obviously the sensor being placed lower than the nozzle will touch first and the nozzle will be much higher than the plane … it is normal now we must proceed to calculate the true zero of the plane that is very easy to do but difficult to explain !!

The operations we are going to do now are very important so follow them carefully !! (all the letters of the commands are SHIFT and must be inserted in the bar at the bottom right)

1) after G28, the printer go up  10mm, then go down to the value 0 with the command G1 F60 Z0

2) We disable the software endstops to be able to go down with negative height values, command M211 S0

3) Insert a sheet of paper under the nozzle and through of proterface go down with small steps until you do the classic leveling test (in moving the sheet under the nozzle you will need to perceive a small resistance), this read the value of Z on the display of the CR10. The value will obviously be negative, in my case Z -1.99 to which for safety we will add to -0.01 then final value -2

4) Now let’s compensate for the height by entering the command M851 Z X.XX (replace the value at X, in my case the command will be M851 Z -2 )

5) We turn on  the limit switches with the M211 S1 command

6) Save the values ​​set in the Eprom of the CR10 S with the command M500 ,  read the values ​​saved with the command M503 in the Pronterface text box, the most important value will be M851 Z-2.00 (my case !!!)

If the printer does not respond, turn off and on again. Connect with pronoterface and give the command M503

7) To be sure we give a last command G1 F60 Z0 and now the nozzle should lightly touch the sheet of paper if so, then you have correctly set the height of the BLTouch with respect to the nozzle.


And last !!!

Now you just need to enable the automatic leveling function from the program .. very easy .. in my case use Simplify3D we need to  go to the profile -> Script -> print on start code and enter these two commands after the G28


M420 S1;

congratulations you have correctly enabled the printing plane leveling function !!!

Now you can try to print the classic test cube and if sometimes you suggest a good first layer you can level the surface and clean the nozzle, move the knob on the cr10S to the TUNE function, go to Babystepping and modify as you like the value IN POSITIVE if you notice that the first layer is too low or in Negative if it is too high !! Once satisfied, press the knob to confirm !!

The Babystepping function can always be used and the compensation value will be deleted each time the printer is turned off !!

PS: the compensation values ​​are very small so do not be scared if you make a compensation of 0.100 is normal !!

That said I hope I was complete and clear .. I will shortly provide the precompiled firmware for the CR10S, if you liked the article or if it was helpful to comment … and share it on facebook

Greetings to all and GOOD PRINTS!

Please follow and like us:

Autore dell'articolo: samu.palumbo

15 commenti su “BLTouch on CR10S (english version..i hope)

    cordless screwdrivers

    (25 Aprile 2018 - 23:40)

    I’ll immediately snatch your rss as I can’t in finding
    your email subscription link or e-newsletter service.

    Do you have any? Please allow me realize in order that I may subscribe.


    Aldo Staffa

    (6 Luglio 2018 - 10:50)

    Ciao, ho seguito tutta la tua procedura, ho visto anche la versione in italiano. Mi funziona tutto ma: non riesco assolutamente a settare lo Z 0 calcolato con pronterface. Quando do i comandi (a parte che se il comando M503 viene impostato a Disable nel firmware, ovviamente non funziona) sembra andare tutto, anche lo store dei valori, tuttavia quando poi rido il comando G1 F60 Z0 l’estrusore si solleva al punto 0 originale e non a quello che ho settato (nel mio caso -5.59 arrotondato a -5.60). Secondo me manca qualcosa nella sequenza dei comandi. Mi puoi aiutare ? Grazie


      (11 Luglio 2018 - 9:38)

      Ciao scrivimi in privato e cerchiamo di risolvere ..puoi scrivermi anche su Facebook !!


        (16 Ottobre 2018 - 21:08)

        ciao stesso problema di Aldo Staffa, ti ho mandato una mail

    Mark Carter

    (26 Agosto 2018 - 13:41)

    I the connections on the board the same for the new CR10S 2.1 control board the block where 5v/gnd/signal are connected looks present on the new board just want to confirm


      (7 Novembre 2018 - 7:29)

      Ciao allora imposta il valore con M500 e non dare il comando M503 perche si blocca la stampante . Al massimo spegni e riaccendi la stampate


    (7 Dicembre 2018 - 23:04)

    Many thanks for this tutorial! I’m a noob in Android, Gcode and Marlin – with your guide I was successful the 1st try 🙂
    But when I had do redo the installation, I had the problem of “Err: too far!” and was’nt able to control the nozzle near enough to the bed.
    I repeated your tutorial several times without success.
    Then I sent the command “M502” (reset EEPROM) and setup with your guidance again… then it worked!!!
    Many thanks again – your tutorial is very clear written so really everybody should understand 🙂


      (3 Febbraio 2019 - 15:08)

      Thank you for following the guide .. I recommend subscribe to the channel and facebook page

    Youngjae Ji

    (31 Dicembre 2018 - 10:34)

    I followed all the instructions but it does not work when setting the z probe offset.
    Basically, M503 is not available and can not enable it. When I try to enable it in the code, flashing it does not work.
    Even after succeeding M500 saving offset, E0 never changes.
    Any thoughts?


      (3 Febbraio 2019 - 15:06)

      Hello ,
      can try to change from the printer display

    Bere Poot

    (17 Febbraio 2019 - 18:26)

    I followed your article. It is well explained! Thank you for that. But I ran into a problem. Part 1 ok, part 2 ok, part 3: I turn on the printer. The BLTouch is red, not blinking. In Pronterface I do a G28. It does to the home of X and Y and then it goes to the middle of the bed and goes down. But it keeps going down. It does not go up 1 cm like in your guide. What could be the cause of going down without stopping and not going up?
    thank you for your feedback.
    Bere Poot


      (20 Febbraio 2019 - 6:26)

      I think you just have to invert white cable with black on the zmin connector
      Sorry for the delay .. let me know

        Bere Poot

        (4 Maggio 2019 - 9:06)

        It all went well. It was something with the wires and I also had a wrong Z_Home setting.. Thank you again for your excellent article.


        (7 Giugno 2019 - 8:30)

        @Bere Poot : I have the same problem with motherboard v2.2 and BLTouch v3.0. Many people have this issue and this is not just inverting the cables (although this is the first check to do before anything else). This tutorial is now outdated for this new configuration. In Marlin firmware 1.1.9 and 2.0.alpha there is an additional directive #define BLTOUCH_V3 that takes care of the new commands related to this version of the BLTouch (genuine). However, for me it does not work at this stage on my CR-10 S5. I have abandoned the solution for the moment.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *