I purchased the BLTouch so that I could have an auto-leveling (auto-tramming) 3D printer bed. Manually tramming the bed (making sure that the bed is even with the X-Axis) is difficult, if not impossible, to do when your printer has a bowed print bed. My Ender 3 seems to have this common problem.

Here is the parts list for the upgrade (Amazon):

Note: I realize that it seems counter-intuitive, if not outright hypocritical, to suggest that you don't want to buy a cheap Chinese knock-off of the BLTouch, yet then turn around and suggest that a knock-off Arduino clone is OK, but I trust a knock-off Arduino clone to do what I need it to do. I don't trust a cheap Chinese BLTouch knock-off to work with the precision required for 3D printing.

Before you can install the BLTouch, you have to upgrade the firmware in the printer so that it is supported. Before you can upgrade the firmware, you have to burn a bootloader. Here is a great video that taught me how to do it:

Here is the wiring diagram from that video by Michael Laws of Teaching Tech:

Wiring diagram for burning bootloader

Once I followed those instructions and burned my bootloader, I followed Teaching Tech's great video on installing the BLTouch on the Ender 3.

I had to make my own wire by cutting the BLTouch switch wires and soldering them to the original Z-stop wire.

BLTouch sensor wire soldered to original Z-axis end stop wire
Helping hands to the rescue
stripped and ready to be soldered

After installing the BLTouch, I dialed it in for best results and printed a calibration cube. Things worked out OK, but I think I'm over-extruding. I need to tune my printer some more, but now that I have an upgraded firmware, I can get everything tuned correctly.

I did set my BLTouch Mesh Generation to use 25 points instead of 9. I found that 9 points wasn't enough to get the best results. It takes longer to generate the mesh (it adds at least a minute or two to the print time), but the results have been worth it.

While I was busy improving my printer, I also installed OctoPrint on my Raspberry Pi and hooked it up to the printer. I did this mainly so I could send prints to it directly from Cura. I got tired of saving it to the SD card, walking back to the printer, inserting the card, selecting the print, and then repeating the process for each print. This is much more efficient. I don't have to babysit the first layer because I now have an auto bed leveling sensor.

My 3D printing life just got a lot better.

OctoPrint user interface

I ordered a Raspberry Pi camera and 2' extension cable for it, but it won't be here until Thursday. In the mean time, I'm using a very old Microsoft web cam that I had lying around. It has terrible resolution, but it's neat to see the print from my computer.

GCode viewer showing the current state of the layer