Jump to content

Custom Features for the Geeetech I3 Pro 3D printer

Recommended Posts

I recently posted about my efforts to get reliable prints from my Geeetech I3 Pro B's extruder. With the printing issues resolved, I started to think about features I wanted to add to the budget priced 3D printer. For example, I wanted cooling fan control. But I soon found that adding that insignificant feature was not going to be the simple modification I expected.

Stepping back for a moment, it is important to note that the Geeetech Acrylic Prusa I3 Pro B is one the lowest cost (~$280 USD) 3D printer kits on the market. Some of cost savings are because you have to assemble it. Unfortunately the low cost doesn't allow for a high-end printer controller board, at least not at the time I purchased my kit (Spring-2015). It included a bare-bones controller board called the Sanguinololu. Here's a photo of it:


There's nothing wrong with this controller other than it has very few I/O pins, all of which are used in this printer's configuration. Long story short, after reviewing the schematics I found that there weren't any spare I/O pins available to add something as basic as fan control.

Getting a spare pin to control a cooling fan would require one of three choices: [1] Replace the controller board with a different version that has some spare I/O pins, [2] replace the high pin count LCD panel board to a version that uses a 2-wire serial interface (to free up some pins), or [3] modify & expand the existing hardware by adding a I/O Port expander chip to it.

To make this a more interesting DiY project the final choice was to expand the existing hardware. I'll admit that installing a new/better controller would have been far easier, but that takes no imagination. I like hacking challenges.

Link to post
Share on other sites

So that leads me to the theme of this blog. I'll show how I expanded the hardware and added several useful features to this basic printer.

It seems to me that for someone to go to all the work of expanding the Sanguinololu controller, the effort needs to be worth the hard work. So the feature list was expanded to add more rewards to the project.

Here's the current feature list:
1. Out of Filament / Filament Jam Detection.
2. Fan Control (print file & host controlled using M106/M107 G-Codes).
3. Buzzer Beep Annunciator (print file & host controlled using M300 G-Codes).
4. Bed LED Control (print file & host controlled using M150 G-Codes).
5. SD Card Detect. Inserting SD card now reloads directory and restores "crashed" display.
6. Front panel Pause (filament change) Pushbutton Switch (switch performs M600 G-Code).
7. Filament Jam Led (Pause LED). Also shows status of filament jam monitor.

At this point the new expansion hardware is working and software is 90% complete. I'm still fine tuning the filament jam detector, which is a 3D printed assembly that has a rotary encoder for measuring filament movement. 

When it's done I'll share all the details in case the information helps inspire others to customize their Sanguinololu based 3D printer. With prudent shopping the new features should cost under $25 USD.

Here's a photo of the expansion board. It's not pretty but to keep costs low I built it on phenolic proto perfboard.


I'll continue to post more details as things evolve. So come back soon to see more progress.


Link to post
Share on other sites

One challenge was to come up with a reliable way of detecting filament feed problems. I found two interesting examples that I decided to explore.

There's a simple design offered by ZYYX 3D printers. Basically it is a common end-stop leaf switch that is periodically depressed by the jerk movement from the filament as it is pulled off the spool.

So I printed the plastic pieces from their published STL files and tested it. After checking it out I decided it was not the kind of solution I was looking for (I prefer something with better motion sensing precision). But I give it high marks for creativity. Here's what my test model looked like:



So the search continued.

I found another filament monitor project on Thingiverse (published by Tunell). The author does not share the electronic circuitry that his design requires, or how the filament movement is actually measured. But it seems likely he is using a rotary encoder to sense the filament motion.

The photos on Thingiverse's project page allowed me to design my own 3D print files of his cool creation. I used 606Z bearings leftover from another project and a $2 USD rotary encoder that was perfect for the job.

The rotary encoder is wired to my I/O expander board. There's some new code added to the Sanguinololu controller's software that detects when filament motion is abnormal. The printing pauses (and the LCD tells the user to change the filament) when feed problems such as jammed filament, broken filament, out of filament, etc. are detected.

Here's what my prototype filament monitor looks like. It works well, but I am still refining its roller hub drive wheel.



The filament monitor mounts on the back side of the acrylic frame and is aligned with the existing filament feed-hole. Two new screw holes were drilled to attach it. Here's what it looks like:



Link to post
Share on other sites

The new filament status LED and Pause switch are mounted in a 3D printed case (created with Autodesk 123D). Four wires connect them to the I/O expander board.


If filament feed problems are detected during a build the print job is suspended. The hot end is temporarily parked at a user defined location ("home" is the default) and the filament is retracted from the hot end. The Filament Status LED flashes and the buzzer periodically beeps to get your attention. After the user fixes the problem and reloads the filament, pressing the pause button returns the print head to the last print location and the job continues.

If the printer is idle the Pause button can be used to assist with filament loading. It moves the hot end to the home XY location and upwards a bit (loading location is user configured in the software) and the filament is retracted if the hot end is at operating temperature. Press the button after filament loading and the extruder returns to its previous place.


I've recently changed the "PAUSE" label below the switch to say "CHANGE FILAMENT." This seems to be a better description of the purpose to the LED and switch.


  • Like 1
Link to post
Share on other sites

Today the modified printer was halfway into a 4 hour print job and it detected a filament jam / breakage (filament was tangled). The new filament monitor stepped in and saved the print. In the past this would have meant a ruined part, lost time, and wasted material. So I am a very happy customer. :)

Back to the mods...

The I/O Expander board is mounted on the side of the printer's frame. This required drilling four holes. Instead of using machine nuts, M3 threaded brass inserts are heat-pressed into the acrylic. The brass inserts are shown in this photo:



A plastic cover and footing was created with Autodesk 123D.



The cover is held on with M3 x 40mm screws. It does a nice job of protecting the hand-wired Expansion board.


Link to post
Share on other sites

As mentioned before, the I/O Expander was built on piece of perfboard. I used the Sanguinololu controller as a template and cut the perfboard to the same dimensions. All wiring is point-to-point using solid 30AWG Kynar wire. The chosen layout and wiring technique is not critical. The connectors all have different pin counts to avoid mistakes when plugging things in.

Here's a top view:



Bottom view:


  • Like 1
Link to post
Share on other sites

Here is the schematic:


The resistors are not critical. I used 1/8W 5%.

The Bourns PEC11R-4025F-N0024 rotary encoder (ROT1) and the MCP23017-E/SP IC (U1) were purchased from Mouser.com. But they are available from other large electronics parts distributors. Cost is under $2 USD each.

The buzzer is NOT a Piezo speaker. It is a "digital" buzzer with built-in 2KHz oscillator and logic driver. Cost is about $2 USD on eBay. When choosing it on eBay, be sure to pay attention to the description; They all look alike but are not the same. For example: http://www.ebay.com/itm/200974852797

The ULN2003 can be a bare chip or a eBay module. I prefer the module because it has LED's on it for troubleshooting and cost is low (about $1). For example: http://www.ebay.com/itm/221730401585

The two LED's marked optional are convenient for troubleshooting. LED1 will blink with the filament encoder is rotated. LED2 will blink with the LCD's menu knob is used.


Link to post
Share on other sites

Wiring the I/O Expander to the Geeetech I3 Prusa printer is where the real magic happens. It is designed so that you can restore your printer back to its original hardware configuration in seconds (useful if you need to troubleshoot the modifications).

Refer to the schematic in the previous post. Connectors J1 and J6 are all the Sanguinololu controller signals the expander needs.

J1 Connector:
  FAN: Logic signal for new Cooling Fan
  SDA: i2c serial data
  SCL: i2c serial clock
  12V: Cooling Fan & Bed LED power
  VCC: +5V

J6 Connector:
  SD Card: Indicates if memory card is installed
  ENC-A / ENC-B: LCD (menu) rotary encoder
  PB-SW: LCD encoder's push switch

Here is where it gets interesting. All these signals are available on the LCD adapter board. But because it will be altered, a spare board must be purchased if you want to be able to restore the original hardware. It's only $3 USD from Geeetech: http://www.geeetech.com/3d-printer-smart-adapter-for-sanguinololu-board-p-703.html

Here's a drawing I created to help me keep track of the signals on Geeetech's LCD adapter board:



Adding the I/O Expander requires re-assigning some existing signals. This is because we need access to the i2c buss that is currently used by the LCD panel. So the signals to LCD's rotary encoder (D10,D11,D16) and LCD-E (D17) pins will be cut away and re-assigned.

To start things off we need to cut away four existing signals, as follows:

On the top side the hidden trace on pin D11 must be cut away. Scrape away the white soldermask at the 'X' location until you see the copper trace. Use a sharp scalpel and cut apart the trace at the 'X' location. Use your ohmmeter and confirm D11 is no longer connected between the top and bottom connectors.


On the bottom side cut the hidden traces ('X' locations) on D10, SDA, SCL. Use your ohmmeter and confirm these three signals are no longer connected between the top and bottom connectors.



Link to post
Share on other sites

The last major piece of the hardware modifications is the filament monitor encoder. The items needed to build it are shown below:


1 each Rotary Encoder, Bourns PEC11R-4025F-N0024 (available from major electronic distributors)
2 each 606Z bearings, eBay http://www.ebay.com/itm/606Z-6-x-17-x-6mm-Metal-Miniature-Deep-Groove-Ball-Bearings-5-Pcs-WD-/201374368992
1 each M3 x 30mm cap screw
1 each M3 Nut
1 each compression spring

Here are the STL Files for the printed pieces:  filament_monitor_STL.zip

My original drive wheel was printed in ABS. But the material is hard & slippery so it couldn't reliably grip the filament. The remedy was to paint its contact surface with thinned rubber plasti-dip (see blue wheel in the photo above). This worked well, but my final part was printed in flexible TPU (my recommendation).

Do not over-tighten the tension screw. The filament should be gently pinched between the drive wheel and bearing. Too little tension and the encoder's drive wheel will slip, too much tension and it will bind (and add excess drag to the filament un-spooling). Experiment for the best screw tension.

Wire the J4 connections to the Filament monitor's rotary encoder. The middle terminal is the common ground connection. The two outside connections are not polarity critical, so don't worry about which encoder terminals you use when connecting the JAM-A & JAM-B signals to it.




Link to post
Share on other sites
  • 6 months later...

... so would love the required code ...

Here is the Marlin code I used with my hardware changes:

The printer modifications are complex and this is a VERY difficult project. The only build info is what you see in the posted photos. Do not attempt it unless you have strong electronic hardware and Arduino experience.



what type of switch are you using?

The square "Pause" push switch was from my junk bin. Nothing special, just a momentary N.O. type.  There are plenty of choices like it on eBay.

  • Like 1
Link to post
Share on other sites
  • 4 weeks later...


  still looking at the filament monitor ,had another ruined print this week. As you say a very complicated project , you said there was an alternative solution, could you give that out for the benefit of people like me just starting with 3D printing an having very little electronics experience. spanner


Link to post
Share on other sites

This filament monitor might be within your electronic skills to add to your printer: https://www.toybuilderlabs.com/products/tunell-3d-printer-filament-monitor

I don't have any experience with it so I won't be able to offer any advice on it. But it looks well documented.

Edited by Mr.RC-Cam
Updated broken tunell link.
  • Like 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...