D.I.Y Prusa Bear 3D Printer
I had an opportunity to work in the multi-layers blown film factory. Generally, the blown film raw materials are PE (Polyetylen) pellets plus some additives and each layer has an extruder working as a heart of blown film line. Its technological process is quite complicated to produce the finished product, a thin film roll in micromet.
The blown film operating reminded & inspired me of a 3D printer, which I had intended to build myself. Today, I'd like to share how to build a homemade Prusa Bear 3D Printer.
Please check out my video before getting started.
Supplies
I would like to thank the JLCPCB for supporting me on this project. If you have a PCB project, please visit the JLCPCB website to get exciting discounts and coupons as follows:
- JLCPCB PCB Prototype only $2.
- Get $24 Register Coupon here: jlcpcb.com/cyt
Main material list:
⦾ 1pcs x Arduino Mega 2560.
⦾ 1pcs x RAMPS 1.4 Controller.
⦾ 5pcs x A4988 Stepper Driver Module.
⦾ 5pcs x Stepper Motor NEMA 17.
⦾ 1pcs x GT2 6mm Timing Belt.
⦾ 2pcs x GT2 Timing Pulley 16 Teeth.
⦾ 2pcs x Aluminum Rigid/Flexible Shaft Coupling, Inner Hole Size: 5mm x 8mm.
⦾ 2pcs x Bearing housing 623h.
⦾ 11pcs x LM8UU linear bearings.
⦾ 6pcs x Round Shaft Diameter 8mm, Length 400mm. We will cut the correct length for each axis as follows:
- X-axis (370 mm).
- Y-axis (330 mm).
- Z-axis (320 mm).
⦾ 2pcs x T8 Lead Screw 2mm Pitch, 8mm Lead , Length 400mm with Copper Nut.
⦾ 1pcs x Trianglelab® / Dforce® V6 Hotend.
⦾ 1set x Bondtech drivegear.
⦾ 1pcs x Extruder Hotend Fan 5015.
⦾ 2pcs x Fan 4010, one for Extruder Radiator and the other for RAMPS cooling.
⦾ 1pcs x LCD 2004 including ribbon cables and PCB adapter for Ramps 1.4.
⦾ 1pcs x 12V/24V Dual Power PCB Heated Bed For Prusa 3D Printer.
⦾ 1pcs x Heated Bed Sticker.
⦾ 1 meter x High-Temperature Heat Resistant Adhesive Tapes For 3D Printer Heat Bed.
⦾ 4pcs x Heatbed Spacer Compression Spring for 3D Printer, including bolts & nuts.
⦾ 3pcs x Endstop Mechanical Limit Switches 3D Printer Switch for Arduino RAMPS 1.4.
⦾ 1pcs x Power Supply PSU 12 VDC 30A.
⦾ 1kg x SUNLU PETG-G 1.75MM Filament 100% No Bubble filament for 3D Printer.
- 2pcs x V-Slot Aluminium Profile 2040, length 370mm.
- 2pcs x V-Slot Aluminium Profile 2040, length 359mm.
- 2pcs x V-Slot Aluminium Profile 2040, length 331mm.
- 1pcs x V-Slot Aluminium Profile 2040, length 290mm.
- 15pcs x M5x8mm button head screw.
- 70pcs x M5x10mm button head screw.
- 15pcs x M5x12mm button head screw.
- 5pcs x M5x16mm button head screw.
- 5pcs x M3x14mm socket head screw.
- 100pcs x M5 Tee-nuts.
- 5pcs x M3x18mm socket head screw.
- 10pcs x M3x25mm socket head screw.
- 5pcs x M3x30mm socket head screw.
- 30pcs x M3 nuts.
⦾ 6pcs x Aluminum Extrusion Extruded Aluminum Corner Bracket 90 Degrees.
⦾ 4pcs x Angle Arbitrary Bracket Set, Corner L Connector for 2020/4040 Series Aluminum Extrusion Profile.
⦾ 2pcs x Acrylic sheet, size A3/A4, thickness at least 5mm.
⦾ 1pcs x PVC Pipe Tee Ø42mm.
⦾ 3pcs x PVC Pipe End Cap Ø42mm.
⦾ 2 meter x Two cores Power Cable 1.5/2.5 mm2 for main power supply and heat bed.
⦾ 30pcs x Cable tie 2.5x100mm.
⦾ 2 meter x Cable Spiral Wrap, small size.
Firmware & Softwares
Firmware & softwares used in this project are listed below:
⦾ Arduino IDE.
⦾ Inventables Easel: Easel physically controls my Dremel CNC machine to cut acrylic sheet for Y axis carriage and aluminium profile joining plates.
Original Prusa Bear 3D Printed Parts
Prusa Bear 3D Printed Parts is available at: https://github.com/gregsaun/prusa_i3_bear_upgrade, lastest release "Bear Upgrade 2.1.1" for MK3(S)(S+).
For X motor mounting, X end support and Extruder, the 3D printed designis taken from the Original Prusa page at: https://github.com/prusa3d/Original-Prusa-i3/releases/tag/R6, with "MK3S+ upgrade" release.
Firstly, I used an Ender 3 Pro to print all components for my D.I.Y Prusa Bear printer. And then, I used this D.I.Y Prusa printer to make self-replicating another printer and these parts were shown as follows.
⦾ Y Bearing Holders.
⦾ Y Rod Holders.
⦾ Y Belt Holders - Belt Tensioner - Motor Mounting.
Take note that Y axis - Motor mounting part was modified to fix a limit switch. Please see next step.
⦾ X Axis Motor Mounting - End Support.
⦾ X Axis Extruder.
There are many small 3D printed parts that make up an Extruder, such as:
- extruder-body.
- extruder-cover.
- extruder-idler.
- extruder-motor-plate.
- fan-shroud.
- fs-cover.
- fs-lever.
- print-fan-support.
- adapter-printer.
Note: I did not install an IR detection filament sensor and did not inserted the steel ball in the printed part "adapter-printer" of extruder.
⦾ Z Motor Mounting and Top Supports.
⦾ Frame End Caps.
⦾ Frame Footbases.
⦾ LCD Cover, Thumbweel and Supports.
⦾ PSU Mounting Supports.
⦾ Y Heatbed Cable Clip (Optional).
Additional & Modified 3D Printed Parts
⦾ Y axis - Motor Mounting Support.
My Y motor mounting part was modified from "Prusa Full Bear 2.1-alpha Y motor mount with shaft support bearing" by Hoppke, available at Thingiverse: https://www.thingiverse.com/thing:3914292
It adds a 625 ball bearing to the motor mount so that the shaft's end is supported, rerouting some of the forces introduced by belt tension, hopefully leading to smoother Y travel. Based on this strong structure, I made a modification to fix one limit switch support on the top of Y motor mounting.
I didn't know anything about Autodesk Fusion 360 so I had to spend some time learning the commands and basics. After a few modifications and test prints, I succeeded in making a Y mounting bracket that was strong and good-looking enough.😍.
You can download my Y motor mounting design at the end of this step in "STL" format. And this is my result.
⦾ X and Z limit switch supports.
- X limit switch support: https://www.thingiverse.com/thing:1037870
- Z limit switch support: https://www.thingiverse.com/thing:4378842
⦾ Z Trapezoidal Nut Adapters.
The normal copper nuts that I could find in the market didn't match the screw holes of the x-end parts. So I had to print these adapters in order to use normal copper nuts.
Trapezoidal Nut Adapter design: https://www.thingiverse.com/thing:2695291
⦾ RAMPS Cover and Supports.
Prusa Bear RAMPS Enclosure design: https://www.printables.com/model/34286-prusa-mkx-and-prusa-bear-ramps-enclosure
⦾ Y Carriage - Bed Level Thumbwheels.
Thingiverse design: https://www.thingiverse.com/thing:2350276
⦾ Multi-sized Cable Clips.
There are many kinds of V-slot cable clips available on Thingiverse that we can choose according to its size, for examples:
- V-Slot Cable Clips: https://www.thingiverse.com/thing:2676595
- Twist In Cable Clamp [2020 Aluminium Profile]: https://www.thingiverse.com/thing:2613532
- Cable Clip for 20mm V-Slot: https://www.thingiverse.com/thing:1670430
- Tevo Tarantula Rail Mount Wire Clips - 3 Sizes - Small, Medium, Large: https://www.thingiverse.com/thing:1935014
- V-Slot Tubing Clip: https://www.thingiverse.com/thing:2004184
Downloads
CNC Cutting Parts
I also made myself a Dremel CNC machine that can cut wood, acrylic or aluminum sheet. It looks like this.
The CNC software EASEL was used to control my Dremel CNC machine.
In this project, I used my Dremel CNC machine to cut following parts which were all made out of acrylic sheet, thickness 6mm. But it could be better if we use acrylic sheet with 10mm thickness.
⦾ Y Axis Carriage.
- 1st version: I cut a Y-carriage with 3 bearing holders following the Prusa Y carriage shape but it didn't work well with acrylic material.
- 2nd version: I changed to 4 bearing holders - Y carriage and it worked much better.
⦾ Aluminium Extrusion Joining Plates.
And a filament holder has been made from PVC fittings, such as: tee, end caps of PVC pipe diameter Ø42mm.
Frame Assembly
For Prusa Bear overall assembly guide, I referred to this link:
https://guides.bear-lab.com/c/BearFrame_Assembly_Guide
For Bondtech extruder assembly, I referred to these links:
https://guides.bear-lab.com/Guide/Assembly+Guide/40?lang=en
https://help.prusa3d.com/guide/5-e-axis-assembly_169235
Firstly, I used 7pcs x 2040 aluminum profiles with different lengths to build a 3D printer's frame as described on the B.O.M list.
I had a couple of flat plate L-shape angles at home but they didn't work well.
So I cut 10pcs x acrylic corner angle bracket (5 holes) to connect all 2040 aluminum profiles.
They're strong enough to fix all aluminium profiles without vibration.
I also tried to print some jointing plates by PETG-G filament but they were easy to be crack if I tighten them tightly.
To make the 3D printer work more reliably, I reinforced the frame with 2 kinds of L shape angles as below:
Axes Assembly
I've printed the components and tried 2 different extruder configurations: Direct-drive Hinged Extruder and Original Prusa Extruder. Both worked well. But the Original Prusa Extruder gave very good results and much more stable after several experiments.
⦾ Direct-drive Hinged Extruder for E3D/J-Head Hot-End
The 3D printed design is available at: https://www.thingiverse.com/thing:147705, by ffleurey.
⦾ Original Prusa Extruder
As refer to the Prusa webpage, the newest main controller Einsy RAMBo (with MK3S/+ firmware) use Trimanic stepper motor driver TMC2130 which intergrated "StallGuard" and "CoolStep" functions to control stepper motors.
I have found a practical guide for parameterization of the TRINAMIC ICs with StallGuard and CoolStep functions at link. In short, StallGuard is clarified in this doc as follows:
"StallGuard is a sensorless load measurement for stepper motors. We call it StallGuard, because the main use case is to safely detect a stall of the motor in order to replace a mechanical stop switch. However, there are many different uses of StallGuard, like load detection and load dependent motor current control (CoolStep). In order to detect the motor load, StallGuard measures electrical energy flowing into the motor and electrical energy flowing out of the motor again. The difference between both energies gives an indication of the mechanical load taken from the motor. StallGuard measures which part of the energy fed to the motor goes back to the power supply. This spare energy is a measure for the mechanical load applied to the motor. If it goes to zero, no spare energy will be left and the motor may stall."
In addition, Prusa use an P.I.N.D.A sensor (stands for Prusa Induction Autoleveling sensor) at Z axis and IR filament sensor at its Extruder. They are the vital components facilitating the calibration & troubleshooting of 3D printers.
My 3D printer uses Arduino Mega 2560, RAMPS 1.4 and stepper motor drives A4988 so it doesn't have the above functions at all. So I need to install the limit switches on 3 axes so that my 3D printer can recognize the "0" (HOME) position.
As mentioned, I did not install the IR filament sensor as well as a steel ball in the printed part "adapter-printer" of extruder.
- X and Z limit switches
- Y limit switch.
Trapzoidal Nut (Black one) vs Normal Copper Nut (bronze color): The Prusa original Z lead screw nut is called "trapezoidal nut" that I couldn't buy in the market. To use a normal copper nut, I had to use an adapter as mentioned on the previous step.
LCD Assembly
There is a brightness potentiometer behind the LCD screen, it sticks out and hits the LCD support. So I had to de-soldered and reconnected it to PCB by wires.
Pre-assembly the LCD screen into its cover and brackets.
Because two original ribbon cables that connect from LCD to RAMPS were short, I made my own 2pcs x ribbon cables with length about 1 meter.
And I reused 8GB SD Card from my camera.
Mounting LCD on the 3D printer frame and using some big cable clips to arrange ribbon cables neatly.
RAMPS - PSU Assembly
Plug RAMPS 1.4 shield (with 5 stepper motor drives A4988) and LCD Adapter PCB on the Arduino Mega 2560.
Arduino Mega 2560 and RAMPS 1.4 were placed inside the 3D printed box and mounted on the extrusion frame.
And this box was equipped with a cooling fan.
The PSU was also mounted on the 3D printer frame by mounting brackets.
At the top of 3D printer frame, I mounted a PVC tee diameter 42mm working as 2 filament spools holder.
I bought some 3D filament spools from SUNLU with spool hole diameter about 56mm. They fitted well with PVC tee inner diameter 42mm and thickness 3mm.
I arranged the cables by some multi-sized cable clips.
It looked pretty good in the end.
Marlin Firmware
Marlin firmware is available at: https://github.com/MarlinFirmware/Marlin/releases
I downloaded & installed Marlin firmware version 2.0 to Arduino Mega 2560 by Arduino IDE.
Parameter settings in "Configuration.h" for my DIY Prusa Bear 3D Printer is shown as follows:
⦾ Motherboard
// Choose the name from boards.h that matches your setup #ifndef MOTHERBOARD #define MOTHERBOARD BOARD_RAMPS_14_EFB #endif
⦾ Extruder
// This defines the number of extruders // :[0, 1, 2, 3, 4, 5, 6, 7, 8] #define EXTRUDERS 1 // Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc. #define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
⦾ Thermal Settings
#define TEMP_SENSOR_0 1 #define TEMP_SENSOR_1 0 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_3 0 #define TEMP_SENSOR_4 0 #define TEMP_SENSOR_5 0 #define TEMP_SENSOR_6 0 #define TEMP_SENSOR_7 0 #define TEMP_SENSOR_BED 1 #define TEMP_SENSOR_PROBE 0 #define TEMP_SENSOR_CHAMBER 0 #define TEMP_SENSOR_COOLER 0 #define TEMP_SENSOR_BOARD 0 #define TEMP_SENSOR_REDUNDANT 0
⦾ Endstop Settings
// Specify here all the endstop connectors that are connected to any endstop or probe. // Almost all printers will be using one per axis. Probes will use one or more of the // extra connectors. Leave undefined any used for non-endstop and non-probe purposes. #define USE_XMIN_PLUG #define USE_YMIN_PLUG #define USE_ZMIN_PLUG // Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup). #define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
⦾ Stepper Drivers
#define X_DRIVER_TYPE A4988 #define Y_DRIVER_TYPE A4988 #define Z_DRIVER_TYPE A4988 #define Z2_DRIVER_TYPE A4988 #define E0_DRIVER_TYPE A4988
⦾ Movement Settings
To calculate the steps per millimeter for my 3D printer axes, I refered to this site:
https://blog.prusa3d.com/calculator_3416
- For X and Y axis, I use the belt driven systems so parameter X & Y step/mm are: 100 step/mm (microstepping = 1/16).
- For Z axis, I use the leadscrew driven system so parameter Z step/mm is: 400 step/mm (microstepping = 1/4).
- For Extruder, the step/mm is: 215 step/mm after calibration.
/** * Default Axis Steps Per Unit (steps/mm) * Override with M92 * X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]] */ #define DEFAULT_AXIS_STEPS_PER_UNIT { 100, 100, 400, 180 } /** * Default Max Feed Rate (mm/s) * Override with M203 * X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]] */ #define DEFAULT_MAX_FEEDRATE { 100, 100, 5, 25 } //#define LIMITED_MAX_FR_EDITING // Limit edit via M203 or LCD to DEFAULT_MAX_FEEDRATE * 2 #if ENABLED(LIMITED_MAX_FR_EDITING) #define MAX_FEEDRATE_EDIT_VALUES { 600, 600, 10, 50 } // ...or, set your own edit limits #endif /** * Default Max Acceleration (change/s) change = mm/s * (Maximum start speed for accelerated moves) * Override with M201 * X, Y, Z [, I [, J [, K]]], E0 [, E1[, E2...]] */ #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 50, 5000 } //#define LIMITED_MAX_ACCEL_EDITING // Limit edit via M201 or LCD to DEFAULT_MAX_ACCELERATION * 2 #if ENABLED(LIMITED_MAX_ACCEL_EDITING) #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits #endif
⦾ LCD and SD support
#define LCD_LANGUAGE en #define DISPLAY_CHARSET_HD44780 JAPANESE #define LCD_INFO_SCREEN_STYLE 0 #define SDSUPPORT #define SD_CHECK_AND_RETRY // Set this option if CLOCKWISE causes values to DECREASE #define REVERSE_ENCODER_DIRECTION #define SPEAKER
⦾ LCD / Controller Selection
// RepRapDiscount Smart Controller. // https://reprap.org/wiki/RepRapDiscount_Smart_Controller // // Note: Usually sold with a white PCB. // #define REPRAP_DISCOUNT_SMART_CONTROLLER
⦾ To use dual Z axes, I had to define the number of Z stepper drives in "Configuration_adv.h"
// For Z set the number of stepper drivers #define NUM_Z_STEPPER_DRIVERS 2 // (1-4) Z options change based on how many
Ultimaker Cura Settings
Open Ultimaker Cura ‣ Settings ‣ Printer ‣ Add Printer ‣ Add a none-networked printer ‣ Creality3D ‣ Creality Ender-3 Pro.
Click Add ‣ Window "Machine settings" appears ‣ Go to Tab "Printer", it shows some critical set-up parameters for original Ender-3 Pro and I can customize some parameters for my DIY Printer. We pay attention on the codes in "Start G-code" and "End G-code" windows that make my DIY Printer working as same as Ender-3 Pro when it start and end excuting a G-code file.
⦾ Start G-code
; Ender 3 Custom Start G-code G92 E0 ; Reset Extruder G28 ; Home all axes G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed G1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position G1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line G1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little G1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line G92 E0 ; Reset Extruder G1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed G1 X5 Y20 Z0.3 F5000.0 ; Move over to prevent blob squish
⦾ End G-code
G91 ;Relative positioning G1 E-2 F2700 ;Retract a bit G1 E-2 Z0.2 F2400 ;Retract and raise Z G1 X5 Y5 F3000 ;Wipe out G1 Z10 ;Raise Z more G90 ;Absolute positioning G1 X0 Y{machine_depth} ;Present print M106 S0 ;Turn-off fan M104 S0 ;Turn-off hotend M140 S0 ;Turn-off bed M84 X Y E ;Disable all steppers but Z
Calibration
⦾ When my 3D printer is powered on, the LCD screen shows as below:
⦾ The step/mm of each axis can be calibrated on the LCD screen.
⦾ After calibrating XYZ axes & levelling heat bed, I set my 3D printer to home position by "Auto Home" function.
⦾ The extruder need to be calibrated, you can refer to the following website to understand how to calibrate E-Steps
https://all3dp.com/2/extruder-calibration-6-easy-steps-2
https://help.prusa3d.com/article/extrusion-multiplier-calibration_2257
Notes:
⦾ Cable and connector at power supply terminal of RAMPS 1.4 were arced & burn due to loose connection. So I removed this green terminal from RAMPS board and soldered the cabes directly to PCB.
Testing
⦾ XYZ 20mm Calibration Cube
This is a simple calibration test cube for your 3D printer with dimension 20x20x20mm in X, Y, Z axis.
After X, Y, X & E first calibration as mentioned on previous step, I print out one calibration cube then measured this model dimensions for further calibration in case of size discrepancies.
The calibration cube link: https://www.thingiverse.com/thing:1278865, by iDig3Dprinting, is available on Thingiverse.
⦾ I continued to print small parts by PLA and PETG-G filaments and calibrate parameters in Ultimaker Cura software until my 3D printer was working as good as possible.
⦾ I faced a stringing issue on my 3D printer. To resolve this problem, I had to select "Enable Retraction" option, adjusted the "Retraction Distance" and "Retraction Speed" in Cura to eliminate this issue.
The result was quite good after I calibrated the "Retraction" parameters.
Conclusion
Thank you so much for reading my work!!!
Please LIKE, SHARE & SUBSCRIBE to my Youtube channel!