Introduction: UltiFaker²Go 3D Printer

I set out to make a 3D printer about 3 months ago. I had been eyeballing designs like the Prusa i3 or a delta style printer but I wanted something a little bit more sturdy, less "hack job" looking, and a printer challenging enough to make it interesting. I decided to go with a "clone" of the Ultimaker²Go mostly because it's small enough that the side panels could be machined in my CNC router.

I also didn't want to do a direct clone. The Ultimaker²Go sells for a whopping $1600 and I wanted to keep the price around $500-$600. I decided to heavily tweak the design and components in order to drop that cost. This build requires that you have some sort of CNC router capability unfortunately unless you want to use 6mm birch plywood as the paneling (totally doable) and drill and cut the panels by hand.

Step 1: Design

Using the drawings for the existing Ultimaker 2 Go 3D printer as a template I created the entire printer in SolidWorks (I've included all of the SolidWorks files as well as STEP files) with the tweaks I deemed necessary in order to reduce the cost. The biggest cost cut comes from using the Ramps 1.4 controller and RepRapDiscount SMART LCD (total of about $40) with the open source Marlin firmware instead of trying to acquire the UltiMaker control board with the OLED display ($200+). I also went with an on-board power supply ($18.00) as opposed to the overpriced ($80) DC power adapter that comes with the printer. Total cost is less than $600 depending on the components you choose to include/exclude.

Step 2: Cutting

Side Panels

I chose to use 1/4" white acrylic for the side panels instead of the Dibond composite aluminum that UltiMaker uses for their printers. In small quantities Dibond would be more than triple the acrylic cost and would come in 4x8 sheets. That would be difficult for me to manage cutting. If you don't have a CNC machine there are a couple of alternate options. The easiest would be to purchase the panels from companies like AliExpress. A more difficult, but doable, solution would be to print out my designs 1:1 scale and stick it o the acrylic. You could use a router/dremel/band saw/scroll saw to cut out the features.

In order to generate the CAM cutter programs from SolidWorks I used a free program called HSMXpress. I highly recommend it if you have SolidWorks or AutoCAD. It's been flawless for me. There are other software packages like MeshCam that work great too. In total I had 6 acrylic plates to cut. The acyrlic cuts really well with a 1/8" o-flute or flat flute router bit. Be careful not to use an end mill bit designed for steel as the tightly packed flutes will fill with material pretty quickly.

For reference I cut the acrylic with a Bosch Colt router at 16,000 RPM,
50 feet per minute feed rate, and a depth of .050" per pass. Ideally acrylic should be cut with a much lower RPM and deeper passes but like I said my router isn't super sturdy.

Aluminum Plates

The aluminum was another story. My router isn't as sturdy enough as it needs to be so there was a TON of vibration and I ended up breaking a bit. I nursed it through though and got the Z axis plates cut after some messing around with speeds and feeds. The aluminum was cut at similar speeds and feeds to the acrylic but I took passes at only .005" deep. Took a long time :(

Step 3: Assembling the Frame

Bearings

Before assembling the frame you'll need to install the 688-2Z flanged ball bearings into the front, back, left, and right panels. Be careful not to press the bearings in too hard if it ends up being snug. You can easily deform these small bearings leading to really loud operation later. If it takes more force than some light taps with a mallet I suggest using a Dremel at low speed to expand the hole. My router wasn't calibrated properly and my holes were about a millimeter too small so the Dremel was key. If the hole ends up being too big you can put a dab of superglue or epoxy on the bearings.

LEDs

Apply the LED strips (if you want to use them) to the front panel in 3 segments. You'll have to wire the + to + and - to - with small bits of hookup wire. I went with the cool white and it looks great in person.

LCD Panel

Next, you'll want to install the RepRapDiscount Smart Controller to the front panel using the 4.5MM X 10MM X M3 standoffs and 4 M3 X 20 screws and 4 M3 nuts. It's easier to do this now as when the bottom panel is on it can get in the way. You'll notice that because of the way I designed this unit I ended up blocking access to the SD card socket. I really wanted the LCD to be centered on the front panel and look somewhat similar to the real UltiMaker 2 Go so this was the best option. You'll see later how I added a secondary SD socket.

Assembling the Frame

Continue by inserting the top and bottom panels into the front panel and use the M3 X 16 button head cap screws and nuts to attach them. Don't over tighten as acrylic can crack pretty easily. The back panel is next, followed by the left and right. Go through and verify that everything is suitably tight and continue to the next step.

Step 4: Assembling the Z Axis

The Z axis is made up of 1 aluminum support plate, 2 linear bearings , 3 springs, 3 knurled knobs, 3 screws, an aluminum bed plate, and a glass bed. This goes together pretty smoothly. Don't tighten the linear bearing screws yet however. You'll want to position the Z axis onto the 12 MM shafts before tightening to avoid binding.

You might notice in the picture of the Z axis that the front left screw has a washer on it instead of sitting flush in the countersunk hole. I accidentally drilled the countersink too deep. I'm going to remake this plate in the near future to fix that problem.

Step 5: Installing Components and Z Axis

Stepper Motors

At this point you can put the 5MM ID 20 tooth pulley on the X and Y shaft as shown and wrap the 200MM GT2 belt around the pulley before moving it into position. Both the X and Y axis stepper motors can be installed with the 8MM X 16MM X M3 standoffs, M3 washers, and M3 X 25MM cap screws and left slightly loose for final adjustment later. Make sure the wires are facing down out of the bottom of each stepper to make things look cleaner later on. Run the cables through the access holes in the back corners of the bottom plate. Use 4 more M3 X 25MM cap screws and washers to attach the extruder motor to the extruder assembly. Make sure the white feeder tube is facing up. Run the wires down the access hole to the bottom of the printer.

AC Plug and Switch

Install the AC plug using a couple of M3 X 16MM screws and nuts. I chose to super glue the switch into place as the 1/4" thick panel was a little too much for the switch to grab on to with its tension fingers.

End Stops

It's easiest to wire up your end stops before screwing them into place as their position isn't ideal for fiddling later on. I used spade terminals to attach the wires to the end stops but you can solder if you'd like. Attached the X and Y end stops as shown and run the wires down through the same holes as the stepper. Attach the Z end stop on the under side of the bottom plate as shown.

Power Supply

In order to save space I went with a slim 8A power supply. If you'd prefer you can go with a DC power brick external to the unit and just change the electrical connectors. After getting the power supply installed you can wire in the AC switch and the power plug to the supply.

Arduino Mega/Ramps 1.4 Board

Place the Mega roughly centered between the LCD and the power supply and mark 2-3 of the bolt hole locations with a pen or marker. After drilling the holes out with a 1/8" bit attached the Mega board with M3 X 16MM screws and nuts. Then you can slide the Ramps 1.4 shield onto the Mega. At this point you can wire the RepRapDiscount Smart LCD Controller to the Ramps 1.4 by either using the Smart Connector supplied with the LCD or like I did with Female to Female Dupont connector cables. You'll have to use a multimeter the verify which pins on the LCD go to which pins on the Ramps board but it only took me like 3 minutes.

After placing the Ramps 1.4 board onto the Mega make sure to install all of the stepper driver jumpers that came with your board. This will make sure your drivers us 1/16 micro stepping which is ideal for 3D printing.

Secondary SD Card Reader (optional)

I chose to install this secondary SD card (secondary to the one on the LCD board) because 1) I had blocked access to the RepRapDiscount Smart LCD card reader based on where I wanted to mount it on the front panel, and 2) I wanted to keep the ability to print items independent of my computer being attached. I attached mine with some 4.5 MM X 8 MM X M3 standoffs and M3 X 16MM cap screws and nuts.

Z-Axis

Slide the 12MM diameter Z-axis support rods through the base from below and position the Z-axis into place as you raise them through to the top. Next you'll want to install the linear drive Z-axis stepper motor by manually turning the shaft into the nut installed in the support plate. When enough of the shaft is inserted into the nut you can screw the Z-axis stepper motor into place with M3 X 8MM screws. When the stepper motor is locked in place you should slowly start tightening the linear bearings and lead screw nut into place as you move the shaft up and down. If it binds at any point you can re-adjust the components. If you can't remove the binding then remove one of the 12 MM support shafts and use a file to open the hole slightly. When you get it big enough to eliminate the binding then use epoxy to hold the shaft in position.

X and Y Axis Shafts

Using my CAD files as reference slide the shafts through the bearings in the side panels and insert the timing belt pulleys, carriages, and belts as you do. Make sure you also slide on the belts from the X and Y stepper motors. When everything is installed use belt tension springs as necessary on any of the 4 belts.

Step 6: Hot End

I decided to go with an E3D V6 replica hot end from eBay that had a nice Ultimaker compatible mount. I eventually plan on using this setup to make a more custom V6 mount with a servo and switch so I can do auto bed leveling. Unfortunately, when I purchased this hot end I didn't realize that the orientation of the bearings was 90 degrees off from where I expected it to be. In order to use this hot end on an Ultimaker 2 Go you have to remove at least 1 of the fan shrouds.

The hot end installs pretty easily. You'll need to slide either the X or Y shaft into the appropriate bearing and press it into the respective carriage. Then install the other shaft. Finally, install the bodwen tube and run the wires along it towards the extruder.

Step 7: Wiring

Wiring

See the attached diagram showing my particular wiring setup for this printer. I made some modifications to the pin.h files in the Marlin software to accommodate this setup so if you follow my lead you definitely need to use my firmware.

Power Supply

If you haven't done so already, wire the Neutral and Ground pins to the plug connector. Wire the Line to one side of the switch and wire the other side to the plug connector. On the 12V output side wire in the LEDs to the respective positive and negative and do the same with the input wires to the Ramps 1.4 board

End Stops

Reference the picture showing the + and - locations for the end stop wires. On my particular setup I went with the normally open terminals on the end stops and the X-, Y-, and Z+ plug orientation (as shown).

RepRapDiscount LCD

In order to wire the LCD controller to the Ramps 1.4 board you'll have to do a little reverse engineering. Unfortunately I didn't record this as I did it so I'll have to explain. Hook up the "Smart Connector" that came with the RepRapDiscount board to the to the 2 ribbon cables. Using a multimeter and the reference schematic included above map out which pins on the Ramps 1.4 side go to which pins on the LCD controller side. After you have that recorded just go pin by pin with Female to Female Dupont ribbon cable wire and connect them accordingly.

Hot End

The hot end will include 2 wires for the heater cartridge, 2 wires for the PT100 thermocouple, 2 wires for the V6 cooler fan, and 2 wires for the side mounted/shrouded fan. Wire the heater cartridge into the D10 pins on the board (orientation is irrelevant) and wire the 2 positive and 2 negative fan wires to the D9 pins. Wire the PT100 thermocouple into the MAX6675 thermocouple digital amplifier board.

MAX6675 Amplifier

The PT100 thermocouple reports temperature differences much differently than the traditional hot end thermistors and requires signal conditioning and amplifying in order for the Ramps 1.4 to read it. What you'll need to do is wire the GND terminal to any GND on the Ramps 1.4 board and same for the VCC (5V). SCK should be wired to the SCK (AUX-3 pin 5) pin. SO should be wired to the MOSI (AUX-3 pin 3) pin. Finally, CS should be wired to pin 66 on AUX-2 of the Ramps 1.4 board.

Stepper Motors

The 4 stepper motors should be wired up to their appropriate drivers. Don't worry about which orientation the plugs are in right now. You can swap it manually later or in the firmware during configuration. Trim any wires as necessary and put them inside of a wire sheath if you'd like.

SD Socket

The SD socket will wire up similarly to the MAX6675 as both of them communicate through SPI. Set the power switch on socket to 5V first. Wire the G terminal to any GND on the Ramps board. Connect a wire to the DO terminal on the socket and splice it in with the MISO (AUX-3 pin 3) wire from the MAX6675. Do the same with the CLK wire from the socket to the SCK (AUX-3 pin 5) wire from the MAX 6675. Connect the DI terminal on the socket to the MOSI (AUX-3 pin 4) terminal on the Ramps board. Connect the CS terminal on the socket to the SS (AUX-3 pin 6) terminal on the Ramps 1.4 board. Finally, because the new SD socket does not have an SD_CARDDETECT pinout you'll want to run a wire from the SD_CARDDTECT (AUX-3 pin 2) terminal to any GND terminal on the ramps board. This will convince the controller that an SD card is always installed and make the display read as such.

Step 8: Firmware Configuration

I decided on using the latest version of Marlin (1.1 RC3) with a number of modifications to work with my layout. I've included my Marlin files but I'll discuss my configurations below for reference. I highly suggest you use the software I've included as I've made a number of modifications specifically for this build.

Arduino

Download the latest version of Arduino and open the Marlin sketch in the Marlin-RC/Marlin folder in the attached .rar file. Click on the "Sketch" tab and then "Include Library/Manage Libraries". Search for LiquidCrystal.h and install the latest version. You'll need this library installed for the LCD to operate.

Graphics

If you use the same display as me you can modify the very basic logo graphics by going to the ultralcd_implementation_hitachi_HD44780.h tab and modifying some of the lines from 435 through 504 with whatever you want to call your printer. If you need help with this feel free to contact me.

static void bootscreen() {<br>    show_bootscreen = false;
    byte top_left[8] = {
      B00000,
      B00000,
      B00000,
      B00000,
      B00001,
      B00010,
      B00100,
      B00100
    };
    byte top_right[8] = {
      B00000,
      B00000,
      B00000,
      B11100,
      B11100,
      B01100,
      B00100,
      B00100
    };
    byte botom_left[8] = {
      B00100,
      B00010,
      B00001,
      B00000,
      B00000,
      B00000,
      B00000,
      B00000
    };
    byte botom_right[8] = {
      B00100,
      B01000,
      B10000,
      B00000,
      B00000,
      B00000,
      B00000,
      B00000
    };
    byte exponent_two[8] = { //this creates a superscript 2 that's included in the Ultifaker2Go logo below
      B00110,
      B00010,
      B00110,
      B00100,
      B00110,
      B00000,
      B00000,
      B00000
    };
    
    lcd.createChar(0, top_left);
    lcd.createChar(1, top_right);
    lcd.createChar(2, botom_left);
    lcd.createChar(3, botom_right);
    lcd.createChar(4, exponent_two);
    
    lcd.clear();

    #define TEXT_SCREEN_LOGO_SHIFT ((LCD_WIDTH/2) - 7)
    #define TEXT_SCREEN_LOGO_SHIFT2 ((LCD_WIDTH/2)+3)
    #define TEXT_SCREEN_LOGO_SHIFT3 ((LCD_WIDTH/2)+4)
    
    lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 0); lcd.print('\x00'); lcd_printPGM(PSTR( "------------" ));  lcd.print('\x01');
    lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 1);                    lcd_printPGM(PSTR("|UltiFaker"));
    lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT2, 1);                   lcd_print('\x04');
    lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT3, 1);                   lcd_printPGM(PSTR("Go|"));  
    lcd.setCursor(TEXT_SCREEN_LOGO_SHIFT, 2); lcd.print('\x02'); lcd_printPGM(PSTR( "------------" ));  lcd.print('\x03');

Configuration.h

The configuration.h tab within the Marlin sketch is really the only other location where you will need to make modifications if you want to change things like default steps/mm, speeds, bed leveling, end stops, direction, etc.

If you want to change the name of your printer you can modify line 78.

#define CUSTOM_MACHINE_NAME "UltiFaker2Go"

If you plan on following my build exactly then by all means use the identical Marlin-RC files I'm attaching to these instructions. If you haven't used Marlin before and want to make some modifications I would suggest following a guide like this one.

Step 9: Startup

Power on your printer and verify the the LCD turns on, properly displays your logo, and continues to the status screen. If everything was wired correctly your printer should be working. Download the attached gcode file and pit it on an sd card. You can run this file and use it to calibrate your printer. It will home your machine and then raise it to the nozzle height at a series of predetermined points. You can adjust the knobs on the bed to set the appropriate gap. From this point on you can reference any 3d printer setup and use videos or documents to get you moving.

Happy printing!

Full Spectrum Laser Contest 2016

Runner Up in the
Full Spectrum Laser Contest 2016