I’ve had a Creality CR-10 MAX for about a year and a half at this point. I bought it on sale in early 2020 when I had big project ideas that wouldn’t fit on my workhorse Prusa i3 MK3S, so it’s fair to say I bought it for the large size for the price point and not the build quality or feature set. However, I’ve never really liked it, so now that the Prusa is working really well with Octoprint, the box, the cameras, and all of the other projects I’ve documented here, it’s time to move on to the CR-10 and get that one working well too.

While I’ve had the CR-10 for awhile, I’ve only used it for prints where I was running things in bulk and needed the larger bed to make duplicates at the same time. The stock bed on the CR-10 is a rough powedercoated aluminum, which is extremely sticky for prints, leading to usually good first layer adhesion but a really hard time getting prints off. I really miss the flexible PEI bed of the Prusa. The touchscreen is a nice feature compared to the scroll wheel and character LCD of the Prusa and lower-end Creality machines, but it’s not very intuitive and doesn’t have access to nearly as many settings as the Prusa menu. The translation can also be rough sometimes. Finally, the machine is also limited to about the same flow rates as the Prusa, so there is no speed advantage to the printer, hence I will always prefer the Prusa for prints which don’t need the larger bed. Thanks to all of these things, I really only use the CR-10 once every few months.

Naming the printer

The current Prusa printer is named ‘Columbia’, after the first Space Shuttle to fly to space (OV-102). This follows with the space-themed naming of many of my other servers and devices. I normally use manned vehicles for ‘manned’ computers (desktops and laptops), and while the Space Shuttle is a manned vehicle and a 3D printer really isn’t, the Space Shuttle is more notable for being the first space-based construction equipment, building the ISS, servicing the Hubble Space Telescope, etc.. and as such, it’s name is fitting for a 3D printer.

Following Columbia, the second Shuttle to fly to space was Challenger. Hence, the CR-10 is named Challenger.

I’m aware that both of these shuttles were destroyed in accidents, but they were the first two, so this is what I’m sticking with.

New PEI Magnetic Bed

To fix my first gripe, I bought a flexible magnetic PEI bed from Fulament. I bought the Fula-Flex 2.0 in 470x470mm size, as recommended for the CR-10 MAX (it’s a big boi). I had to trim the magnetic sheet slightly around metal clips which hold the aluminum bed to the bed structure, but assembly was very easy. Once I had the magnetic sheet on, the PEI sheet snapped in place easily (it’s way way more magnetic than the Prusa bed… it’s difficult to pull it off). Overall, I’m happy with the bed. But I still really struggled to get the printer leveled.

The CR-10 MAX includes a BLtouch Z-height sensor standard, while most Creality printers rely on hopes and dreams (or manual Z-leveling) to get a decent first layer height. The BLtouch is fairly similar in concept to Prusa’s PINDA probe, except it physically touches the bed with a little needle that pops out when probing. You still need to dial in a Z offset for the machine to account for the height difference between the probe and nozzle, but this process was very painful with Creality’s instructions. I’ve always settled for adjusting the bed knobs to get the bed leveled side to side, something that shouldn’t be necessary with multi-point calibration.

New Firmware

The next step in my journey is to find a better firmware build for the CR-10 MAX. A vast majority of consumer 3D printers use Marlin firmware, which is open-source and requires distribution of the source code changes, which Creality has done. In theory, I could take this, reconfigure it as I wish, compile it, and program the mainboard. However, the CR-10 MAX is a bit special in that it also has a graphic LCD which is separate from the mainboard. Creality has made the graphic files for this available too, so you can modify the screen graphics if you make corresponding changes to the firmware.

I looked around for the best CR-10 alternative firmware and ended up deciding on Tiny Machines 3D’s firmware. Unfortunately their site is a bit of a mess with guides hosted on Google Docs (ouch), but I was able to flash both their screen files (DWIN_SET) and mainboard hex file and found that the printer was slightly more pleasant to use. The Tiny Machines firmware has much better instructions for bed leveling, what to add to the start G-code to actually use bed leveling data, and does a larger grid for bed leveling (5x5 instead of 4x4). After working through the full bed leveling guide from them (something the CR-10 didn’t really come with), I found that the printer worked much better than before. I think the key is that my startup G-code was missing the M420 instruction, which tells Marlin to actually use stored bed leveling data (after G28 machine homing, bed leveling is not used until G29 commands bed leveling or M420 commands use of stored bed leveling data). Since the bed is never perfectly level, and especially the giant bed of the CR-10 MAX, doing the 5x5 leveling calibration and then actually using the data is important. The instructions were also very clear in how to do the ‘AUX leveling’, something that was not super clear in the Creality instructions but is actually very important to getting a good nozzle offset for the BLtouch probe.

The new firmware also makes a lot less noise, resorting to basic hissing instead of all of the low quality sounds the Creality firmware would play. Neither sound is particularly pleasant, but the hisses are shorter.

More Octoprint

Of course, I need another Raspberry Pi for Octoprint for this printer. Since the Raspberry Pi 4 has been backordered for months (I have an order in…), I decided to start with a Pi 2 that I already owned and will see how it goes. I know the Pi Zero is strongly not recommended for OctoPrint, and the Pi 2 has a step up in processor (4 cores vs 1 core), although it’s not as powerful as the Pi 3 and nowhere close to the Pi 4. I got a basic install setup, mounted everything as an autofs network share (this time using symbolic links in the ~/.octoprint folder instead of remapping the folders within Octoprint), configured the printer volume and such, and had it working pretty quickly.

There are some quirks. The CR-10 doesn’t have isolation on the USB port (at all, apparently), so the LCD will turn on and try to boot up just by plugging in USB to the Pi with the main power to the printer off. So, once I start turning the machine one and off automatically, I’ll have to do something about that.

Future Improvements

Now that the printer is working as it should, I have a few enhancements planned:

  • A case for the Pi
  • Sonoff S31 power control and monitoring
  • Updating all of my Home Assistant notifications to correctly work for both printers
  • New camera mount for the wide-angle camera
  • New NozzleCam for the CR-10, which will need a much more clever mount design than the Prusa did
  • LED lighting down the diagnoal bracing of the printer, since I’m not building an enclosure for this one