├── Design Files ├── Cassette Mount │ ├── Base, Cassette Fixture, V3.STL │ ├── Cassette Design Template.ai │ └── Cassette Keepout Area.svg └── Plotter │ ├── Carriage Mount.STL │ └── Pen Holder.STL ├── Instructions ├── Cassette Fixture Assembly.pdf ├── Extruder Disassembly.pdf └── Plotter Assembly.pdf ├── PrusaSlicer Configuration └── FSPlotter_config_bundle.ini └── README.md /Design Files/Cassette Mount/Base, Cassette Fixture, V3.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Design Files/Cassette Mount/Base, Cassette Fixture, V3.STL -------------------------------------------------------------------------------- /Design Files/Cassette Mount/Cassette Design Template.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Design Files/Cassette Mount/Cassette Design Template.ai -------------------------------------------------------------------------------- /Design Files/Cassette Mount/Cassette Keepout Area.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 9 | 10 | 12 | 14 | 15 | -------------------------------------------------------------------------------- /Design Files/Plotter/Carriage Mount.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Design Files/Plotter/Carriage Mount.STL -------------------------------------------------------------------------------- /Design Files/Plotter/Pen Holder.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Design Files/Plotter/Pen Holder.STL -------------------------------------------------------------------------------- /Instructions/Cassette Fixture Assembly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Instructions/Cassette Fixture Assembly.pdf -------------------------------------------------------------------------------- /Instructions/Extruder Disassembly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Instructions/Extruder Disassembly.pdf -------------------------------------------------------------------------------- /Instructions/Plotter Assembly.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geoffreygao1/FS-Plotter/81f359553d46442b4dc27fc5533fdda0af6fd36c/Instructions/Plotter Assembly.pdf -------------------------------------------------------------------------------- /PrusaSlicer Configuration/FSPlotter_config_bundle.ini: -------------------------------------------------------------------------------- 1 | # generated by PrusaSlicer 2.7.1+win64 on 2024-02-27 at 19:50:09 UTC 2 | arc_fitting = disabled 3 | autoemit_temperature_commands = 0 4 | avoid_crossing_curled_overhangs = 0 5 | avoid_crossing_perimeters = 0 6 | avoid_crossing_perimeters_max_detour = 0 7 | bed_custom_model = 8 | bed_custom_texture = 9 | bed_shape = 27x17,247x17,247x237,27x237 10 | bed_temperature = 0 11 | before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0\n\n\n 12 | between_objects_gcode = 13 | binary_gcode = 0 14 | bottom_fill_pattern = monotonic 15 | bottom_solid_layers = 0 16 | bottom_solid_min_thickness = 0 17 | bridge_acceleration = 0 18 | bridge_angle = 0 19 | bridge_fan_speed = 100 20 | bridge_flow_ratio = 1 21 | bridge_speed = 0 22 | brim_separation = 0 23 | brim_type = no_brim 24 | brim_width = 0 25 | color_change_gcode = M600 26 | colorprint_heights = 27 | compatible_printers_condition_cummulative = ;"printer_notes!~/.*PRINTER_VENDOR_TRILAB.*/ and printer_notes!~/.*PRINTER_MODEL_MK4IS.*/ and ! (printer_notes=~/.*PRINTER_VENDOR_PRUSA3D.*/ and num_extruders>1)" 28 | complete_objects = 0 29 | cooling = 0 30 | cooling_tube_length = 5 31 | cooling_tube_retraction = 91.5 32 | default_acceleration = 2000 33 | default_filament_profile = "Generic PLA @CREALITY" 34 | default_print_profile = "0.16 mm OPTIMAL (0.4 mm nozzle) @CREALITY" 35 | deretract_speed = 1000 36 | disable_fan_first_layers = 1 37 | dont_support_bridges = 1 38 | draft_shield = disabled 39 | duplicate_distance = 6 40 | elefant_foot_compensation = 0 41 | enable_dynamic_fan_speeds = 0 42 | enable_dynamic_overhang_speeds = 0 43 | end_filament_gcode = "; Filament-specific end gcode" 44 | end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors 45 | external_perimeter_acceleration = 2000 46 | external_perimeter_extrusion_width = 0 47 | external_perimeter_speed = 0 48 | external_perimeters_first = 1 49 | extra_loading_move = -2 50 | extra_perimeters = 0 51 | extra_perimeters_on_overhangs = 0 52 | extruder_clearance_height = 20 53 | extruder_clearance_radius = 20 54 | extruder_colour = #FCE94F 55 | extruder_offset = 0x0 56 | extrusion_axis = E 57 | extrusion_multiplier = 1 58 | extrusion_width = 0 59 | fan_always_on = 0 60 | fan_below_layer_time = 100 61 | filament_colour = #C0C0C0 62 | filament_cooling_final_speed = 2 63 | filament_cooling_initial_speed = 3 64 | filament_cooling_moves = 1 65 | filament_cost = 25.4 66 | filament_density = 1.24 67 | filament_deretract_speed = nil 68 | filament_diameter = 2 69 | filament_load_time = 0 70 | filament_loading_speed = 14 71 | filament_loading_speed_start = 19 72 | filament_max_volumetric_speed = 0 73 | filament_minimal_purge_on_wipe_tower = 0 74 | filament_multitool_ramming = 0 75 | filament_multitool_ramming_flow = 10 76 | filament_multitool_ramming_volume = 10 77 | filament_notes = "" 78 | filament_ramming_parameters = "130 120 2.70968 2.93548 3.32258 3.83871 4.58065 5.54839 6.51613 7.35484 7.93548 8.16129| 0.05 2.66451 0.45 3.05805 0.95 4.05807 1.45 5.97742 1.95 7.69999 2.45 8.1936 2.95 11.342 3.45 11.4065 3.95 7.6 4.45 7.6 4.95 7.6" 79 | filament_retract_before_travel = nil 80 | filament_retract_before_wipe = nil 81 | filament_retract_layer_change = nil 82 | filament_retract_length = nil 83 | filament_retract_length_toolchange = nil 84 | filament_retract_lift = nil 85 | filament_retract_lift_above = nil 86 | filament_retract_lift_below = nil 87 | filament_retract_restart_extra = nil 88 | filament_retract_restart_extra_toolchange = nil 89 | filament_retract_speed = nil 90 | filament_settings_id = Plotter 91 | filament_soluble = 0 92 | filament_spool_weight = 265 93 | filament_toolchange_delay = 0 94 | filament_travel_lift_before_obstacle = nil 95 | filament_travel_max_lift = nil 96 | filament_travel_ramping_lift = nil 97 | filament_travel_slope = nil 98 | filament_type = PLA 99 | filament_unload_time = 0 100 | filament_unloading_speed = 20 101 | filament_unloading_speed_start = 100 102 | filament_vendor = Esun 103 | filament_wipe = nil 104 | fill_angle = 45 105 | fill_density = 20% 106 | fill_pattern = archimedeanchords 107 | first_layer_acceleration = 0 108 | first_layer_acceleration_over_raft = 0 109 | first_layer_bed_temperature = 0 110 | first_layer_extrusion_width = 0 111 | first_layer_height = 0.1 112 | first_layer_speed = 100% 113 | first_layer_speed_over_raft = 30 114 | first_layer_temperature = 0 115 | full_fan_speed_layer = 3 116 | fuzzy_skin = none 117 | fuzzy_skin_point_dist = 0.8 118 | fuzzy_skin_thickness = 0.3 119 | gap_fill_enabled = 0 120 | gap_fill_speed = 0 121 | gcode_comments = 0 122 | gcode_flavor = marlin 123 | gcode_label_objects = disabled 124 | gcode_resolution = 0.0125 125 | gcode_substitutions = 126 | high_current_on_filament_swap = 0 127 | host_type = prusalink 128 | idle_temperature = nil 129 | infill_acceleration = 2000 130 | infill_anchor = 600% 131 | infill_anchor_max = 50 132 | infill_every_layers = 1 133 | infill_extruder = 1 134 | infill_extrusion_width = 0 135 | infill_first = 0 136 | infill_overlap = 50% 137 | infill_speed = 0 138 | inherits_cummulative = ;"Esun PLA @Template";"Creality Ender-3 Pro (0.4 mm nozzle)" 139 | interface_shells = 0 140 | ironing = 0 141 | ironing_flowrate = 15% 142 | ironing_spacing = 0.1 143 | ironing_speed = 15 144 | ironing_type = top 145 | layer_gcode = ; AFTER LAYER CHANGE\nG1 Z3 F7800; Lift Z 146 | layer_height = 0.1 147 | machine_limits_usage = emit_to_gcode 148 | machine_max_acceleration_e = 5000 149 | machine_max_acceleration_extruding = 2000 150 | machine_max_acceleration_retracting = 2000 151 | machine_max_acceleration_travel = 500 152 | machine_max_acceleration_x = 2000 153 | machine_max_acceleration_y = 2000 154 | machine_max_acceleration_z = 500 155 | machine_max_feedrate_e = 60 156 | machine_max_feedrate_x = 500 157 | machine_max_feedrate_y = 500 158 | machine_max_feedrate_z = 10 159 | machine_max_jerk_e = 2.5 160 | machine_max_jerk_x = 20 161 | machine_max_jerk_y = 20 162 | machine_max_jerk_z = 0.2 163 | machine_min_extruding_rate = 0 164 | machine_min_travel_rate = 0 165 | max_fan_speed = 100 166 | max_layer_height = 0.32 167 | max_print_height = 5 168 | max_print_speed = 1000 169 | max_volumetric_extrusion_rate_slope_negative = 0 170 | max_volumetric_extrusion_rate_slope_positive = 0 171 | max_volumetric_speed = 0 172 | min_bead_width = 85% 173 | min_fan_speed = 100 174 | min_feature_size = 25% 175 | min_layer_height = 0.06 176 | min_print_speed = 10 177 | min_skirt_length = 0 178 | mmu_segmented_region_interlocking_depth = 0 179 | mmu_segmented_region_max_width = 0 180 | notes = 181 | nozzle_diameter = 0.15 182 | only_retract_when_crossing_perimeters = 0 183 | ooze_prevention = 0 184 | output_filename_format = [input_filename_base].gcode 185 | overhang_fan_speed_0 = 0 186 | overhang_fan_speed_1 = 0 187 | overhang_fan_speed_2 = 0 188 | overhang_fan_speed_3 = 0 189 | overhang_speed_0 = 15 190 | overhang_speed_1 = 15 191 | overhang_speed_2 = 20 192 | overhang_speed_3 = 25 193 | overhangs = 0 194 | parking_pos_retraction = 92 195 | pause_print_gcode = M25 ; pause print 196 | perimeter_acceleration = 2000 197 | perimeter_extruder = 1 198 | perimeter_extrusion_width = 0 199 | perimeter_generator = classic 200 | perimeter_speed = 0 201 | perimeters = 1 202 | physical_printer_settings_id = 203 | post_process = 204 | print_host = 205 | print_settings_id = Plotter 206 | printer_model = ENDER3PRO 207 | printer_notes = DELETE LINE 33!!!\n\nPEN WIDTH:\nBALL POINT/FINE TIP: 0.1MM\nFELT TIP: 0.5MM\nSHARPIE: 0.8MM\n\nTEMU PEN : (27,17) IS THE COORDINATE FOR 0,0 ON THE BASE PLATE\nSHARPIE PEN FINE TIP (27, 19) is 0,0\n\nDon't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER3PRO\nPRINTER_HAS_BOWDEN 208 | printer_settings_id = Creality Ender-3 Pro (Plotter) 209 | printer_technology = FFF 210 | printer_variant = 0.4 211 | printer_vendor = 212 | printhost_apikey = 213 | printhost_cafile = 214 | raft_contact_distance = 0.1 215 | raft_expansion = 1.5 216 | raft_first_layer_density = 90% 217 | raft_first_layer_expansion = 3 218 | raft_layers = 0 219 | remaining_times = 0 220 | resolution = 0 221 | retract_before_travel = 1 222 | retract_before_wipe = 0% 223 | retract_layer_change = 0 224 | retract_length = 0.1 225 | retract_length_toolchange = 1 226 | retract_lift = 1.5 227 | retract_lift_above = 0.01 228 | retract_lift_below = 30 229 | retract_restart_extra = 0 230 | retract_restart_extra_toolchange = 0 231 | retract_speed = 1000 232 | seam_position = nearest 233 | silent_mode = 0 234 | single_extruder_multi_material = 0 235 | single_extruder_multi_material_priming = 1 236 | skirt_distance = 5 237 | skirt_height = 1 238 | skirts = 0 239 | slice_closing_radius = 0.049 240 | slicing_mode = regular 241 | slowdown_below_layer_time = 10 242 | small_perimeter_speed = 0 243 | solid_infill_acceleration = 0 244 | solid_infill_below_area = 0 245 | solid_infill_every_layers = 0 246 | solid_infill_extruder = 1 247 | solid_infill_extrusion_width = 0 248 | solid_infill_speed = 0 249 | spiral_vase = 0 250 | staggered_inner_seams = 0 251 | standby_temperature_delta = -5 252 | start_filament_gcode = "; Filament gcode\n" 253 | start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nG28 ; home all axes\nM204 S2000; Sets acceleration P(Printing) T(Travel)\n 254 | support_material = 0 255 | support_material_angle = 0 256 | support_material_auto = 0 257 | support_material_bottom_contact_distance = 0 258 | support_material_bottom_interface_layers = -1 259 | support_material_buildplate_only = 0 260 | support_material_closing_radius = 2 261 | support_material_contact_distance = 0.2 262 | support_material_enforce_layers = 0 263 | support_material_extruder = 1 264 | support_material_extrusion_width = 0 265 | support_material_interface_contact_loops = 0 266 | support_material_interface_extruder = 1 267 | support_material_interface_layers = 3 268 | support_material_interface_pattern = rectilinear 269 | support_material_interface_spacing = 0 270 | support_material_interface_speed = 100% 271 | support_material_pattern = rectilinear 272 | support_material_spacing = 2.5 273 | support_material_speed = 0 274 | support_material_style = organic 275 | support_material_synchronize_layers = 0 276 | support_material_threshold = 0 277 | support_material_with_sheath = 1 278 | support_material_xy_spacing = 50% 279 | support_tree_angle = 40 280 | support_tree_angle_slow = 25 281 | support_tree_branch_diameter = 2 282 | support_tree_branch_diameter_angle = 5 283 | support_tree_branch_diameter_double_wall = 3 284 | support_tree_branch_distance = 1 285 | support_tree_tip_diameter = 0.8 286 | support_tree_top_rate = 30% 287 | temperature = 0 288 | template_custom_gcode = 289 | thick_bridges = 0 290 | thin_walls = 1 291 | thumbnails = 292 | thumbnails_format = PNG 293 | toolchange_gcode = 294 | top_fill_pattern = monotonic 295 | top_infill_extrusion_width = 0 296 | top_solid_infill_acceleration = 0 297 | top_solid_infill_speed = 0 298 | top_solid_layers = 0 299 | top_solid_min_thickness = 0 300 | travel_acceleration = 2000 301 | travel_lift_before_obstacle = 0 302 | travel_max_lift = 0 303 | travel_ramping_lift = 0 304 | travel_slope = 0 305 | travel_speed = 1000 306 | travel_speed_z = 0 307 | use_firmware_retraction = 0 308 | use_relative_e_distances = 1 309 | use_volumetric_e = 0 310 | variable_layer_height = 1 311 | wall_distribution_count = 1 312 | wall_transition_angle = 10 313 | wall_transition_filter_deviation = 25% 314 | wall_transition_length = 100% 315 | wipe = 0 316 | wipe_into_infill = 0 317 | wipe_into_objects = 0 318 | wipe_tower = 0 319 | wipe_tower_bridging = 10 320 | wipe_tower_brim_width = 2 321 | wipe_tower_cone_angle = 0 322 | wipe_tower_extra_spacing = 100% 323 | wipe_tower_extruder = 0 324 | wipe_tower_no_sparse_layers = 0 325 | wipe_tower_rotation_angle = 0 326 | wipe_tower_width = 60 327 | wipe_tower_x = 180 328 | wipe_tower_y = 140 329 | wiping_volumes_extruders = 70,70 330 | wiping_volumes_matrix = 0 331 | xy_size_compensation = 0 332 | z_offset = 0 333 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # _F.S. PLOTTER_ 2 | **By: Geoffrey Gao** 3 | 4 |

5 | 6 |

7 | 8 | _An attachment for the [Ender 3](https://www.creality.com/products/ender-3-3d-printer) 3D Printer that allows for 2D Plotter functionality. This project was intended to allow for printing onto non-standard materials/objects. Included are the designs for the following:_ 9 | 10 | 11 | ### Plotter 12 | 13 | A spring loaded fixture to designed to hold a pen in place on the Ender 3 X-Carriage. Can be used with any writing utensil (up to 15mm diameter) and other tools (e.g., scribers, engravers, etc.) 14 | 15 |

16 | 17 | 18 | 19 |

20 | 21 | 22 | ### Cassette Tape Fixture 23 | A simple fixture to allow one to print directly onto a cassette tape. This was intended as a cheaper alternative to pad printing, with a better finish than printout tape labels. For best results, use an oil ink based pen for printing to prevent smearing. 24 | 25 |

26 | 27 | 28 |

29 | 30 | ## Examples 31 | 32 | Showcasing prints on paper, wood, fabric, cassette, and engraving on acrylic: 33 |

34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 |

42 | 43 | 44 | ## Getting Started 45 | 46 | ### Design Files 47 | This repo contains design files for the main Plotter assembly and the Cassette Tape Fixture. The plotter was designed to be compatible with the Ender 3 X carriage. You can 3D print the STL files without the need for supports using your preferred slicer settings. There are also design templates included for use with the cassette fixture. 48 | 49 | ### PrusaSlicer Settings 50 | The PrusaSlicer settings profile I use to generate the plotter GCode is included. PrusaSlicer is a free slicer available [here](https://www.prusa3d.com/en/page/prusaslicer_424/). You can learn how to import profile settings [here](https://help.prusa3d.com/article/how-to-import-and-export-custom-profiles-in-prusaslicer_382766). The input into PrusaSlicer will be the SVG file formats of your design. 51 | 52 | ### Instructions 53 | Contains PDFs with instructions on how to assemble, install, and use the plotter. Also includes a disassembly guide on how to remove the existing hotend on the Ender 3 printer. 54 | 55 | ## Setup/Installation Requirements 56 | ### Tools 57 | The following tools are needed to build the F.S. Plotter and Cassette Fixture: 58 | * Ender 3 3D Printer 59 | * Hex Drivers 60 | * M2, M3, M4 Thread Taps 61 | * Computer capable of running PrusaSlicer 62 | 63 | ### Materials 64 | The following materials are needed to build the F.S. Plotter and Cassette Fixture 65 | _(Note the springs and screws are purchased in a kit but only specific ones are needed. See assembly instructions for details)_: 66 | * PLA to print the parts 67 | * [40mm Linear Rail](https://www.aliexpress.us/item/2251832805844953.html?spm=a2g0o.order_list.order_list_main.5.454c180283Jvim&gatewayAdapt=glo2usa) 68 | * [Metric Screw Kit](https://www.amazon.com/gp/product/B07K141VFD/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1) 69 | * [Extension Spring Kit](https://www.amazon.com/dp/B0CFRF42LQ?psc=1&ref=ppx_yo2ov_dt_b_product_details) 70 | * [Compression Spring Kit](https://www.amazon.com/Dianrui-Compression-Assortment-Mechanical-K-P-051-300/dp/B0BVTDP29W/ref=sr_1_1?dib=eyJ2IjoiMSJ9.oENvzNEO-WFAaDM5gwW5XARYotBUET6vC5KYUWX5-t2AzaaVu_9kmDe4dv1sqKpHo4ty6gVKh9PSDaPQ6a6FalDLMrhdeUUzLaSkXZtUO4JKRjMZNQTryWCaEWkOGMyxdTM6avatdjzTBRnKIEJOCyqHJuk1tU_i0R0pHoVnNHaUKih1k1vct712QprWotIrIkaRxe-RTSLSec3pYUGvbdH1mEMHFwfF0HeM-n8UW90.MJGj1d6DOn0h5zKlIwrh6RFbQRCkAim5IoaBg9l5MMc&dib_tag=se&keywords=Compression+Spring+Kit&qid=1708984110&sr=8-1) 71 | 72 | If individual parts are purchased separately (via Aliexpress), both assemblies can be built for around $30! 73 | 74 | 75 | ## Assembly/Usage Instructions 76 | _Please see the PDFs included in the [Instructions Folder](https://github.com/geoffreygao1/Plotter/tree/main/Instructions) for assembly and usage instructions_ 77 | 78 | 79 | ## Notes 80 | 81 | This is still a work in progress so please check regularly for updates! Special thanks to Jake C. for allowing me to borrow his Ender 3! 82 | 83 | ## License 84 | Copyright (c) _2024_ _Geoffrey Gao_ 85 | _Not for commercial use_ 86 | --------------------------------------------------------------------------------