(312) 858-TH3D (8433) Support@TH3DStudio.com

Search Knowledge Base by Keyword

Integrating a Keenovo silicone heater into an EZABL system

You are here:
< Back

The Issue:

After waiting for more than 45 minutes for my stock CR-10 heat bed to approach 85 degrees Celsius I decided something had to be done. Based on some research and consulting with Tim I decided to install a SSR controlled Keenovo heater. For those tempted to do the same here’s a link to an informative how to article: https://www.facebook.com/groups/CrealityCR10/permalink/1751733905129670/

I did make a few changes: – first unlike the poster I installed the SSR’s heat sink.  Our printers potentially run nonstop for days why skimp on safety when isn’t absolutely necessary.  Second, I modified the layout/circuit to allow the 4 pin aviation leads from the printer’s control box and the heater to plug into my SSR’s external enclosure.  This allows the SSR’s to be quickly disconnected from either the control box or the printer.

Note from Tim: The SSR is optional here and just added so he can control temp with the Printer board. You can still use the below guide to control the standalone Keenovo controller.

Now with the Keenovo heater installed there is no issue heating the bed to 85 degrees and beyond. It took a mere 124 secs to heat the bed from 17C to 85C.  To achieve this impressive performance, the heater is powered by the AC mains voltage.   However, the proximity of this AC current interferes with the operation of the EZABL sensor.   The mains AC current significantly increases the noise in the EZABL’s capacitive sensor making it inaccurate.  So much so that in my case just homing the Z axis would cause the nozzle to crash into the bed.

The Solution:

To solve this issue the AC power to the heater has to be turned off during homing and bed leveling at the start of a print. This can be done manually, but is obviously far from ideal. A better way would be to programmatically control this function by updating the print’s GCODE start up scripts with the appropriate commands.

 

The Setup:

I use Octoprint (1.3.6) running on a Raspberry Pi 3 to control/network my printer.  To enable and disable the power to the heater I added a TP-Link HSH-100 Smartplug.

https://www.amazon.com/TP-Link-Required-Anywhere-Assistant-HS100/dp/B0178IC734

This IoT Smartplug can be instructed to turn on/off AC power over the Internet or your wifi.

 

The Implementation:

After doing some research, my first attempt at programmatically solving this issue was installing the Octoprint TP-Link Smartplug plugin and sending M81 “Turn off the power supply” command from my gcode startup script.

This didn’t work as advertised.  The TP-Link plugin did instruct the Smartplug to turn off the heater power, however, the Marlin software (1.1.7.1) also shut down after sending the M81 command.  After the M81 is issued the hotend and bed set temperatures are cleared and read 0 and the LCD display reads “TH3D EZABL Off” effectively ending the print.

The ultimate solution was to use the Octoprint GCODE system commands plugin to instruct the Pi to use the appropriate Linux shell script commands to control the heater’s Smartplug.

Here are the steps.

  1. Update your slicer’s GCODE starting script as follows.

OCTO10 ; heat bed off

G28 ; home all axes

G29 ; auto level

OCTO11 ; heat bed on

Note, if you home your axes with the AC power to the bed you can crash your nozzle into the bed!!

  1. Install the Octoprint GCODE system commands plugin
  1. Configure the plugin as follows

OCTO10 /usr/local/bin/heatbed_off

OCTO11 /usr/local/bin/heatbed_on

  1. Install the shell script code on the Pi.

Note this shell script code is pretty standard bash shell scripts and will probably work on any Linux system. I’m using the Pi so the following is based on that installation.

  1. Cut the shell script code from https://github.com/ggeorgovassilis/linuxscripts/blob/master/tp-link-hs100-smartplug/hs100.sh
  1. Login into the Pi and run:
  2. “sudo nano /usr/local/bin/hsh100.sh” and paste in the script.

Note, there is an issue concerning binary characters in the status payload that I patched, but this was probably unnecessary since we don’t care about the plug status

  1. Create the heater on script
    • sudo nano /usr/local/bin/heatbed_on
    • Paste in

#!/bin/bash

/usr/local/bin/hsh100.sh <heatbed Smartplug IP address> 9999 on

  1. Repeat with the appropriate changes to create a similar heatbed_off command
  2. Change the permissions on the files just created.
    • sudo chmod 755 /usr/local/bin/hsh100.sh /usr/local/bin/heatbed_on /usr/local/bin/heatbed_off
  3. Test the on/off commands to see if they work by running
    • /usr/local/bin/heatbed_on and /usr/local/bin/heatbed_off
    • Both commands should indicate that they succedded and also turn the heatbed Smartplug on and off!

This completes the set up.  Now when you start a print the Smartplug will switch off the power to heating bed before it homes the axes and does the bed level calibration. Then it will switch it back on before continuing (in my case priming the extruder).

I hope this helps.

Send questions/comments to cpdouglas_at_hotmail_dot_com

Happy Printing!

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.