first push
This commit is contained in:
180
chip_handle.scad
Normal file
180
chip_handle.scad
Normal file
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
================================================================================
|
||||
ATARI & FIREBEE SHOPPING TROLLEY KEY (Multi-Material Edition)
|
||||
Version: 3.2.0
|
||||
License: Creative Commons - Attribution - Non-Commercial - Share Alike (CC-BY-NC-SA)
|
||||
================================================================================
|
||||
|
||||
USER MANUAL:
|
||||
1. Ensure the following SVG files are in the same folder as this .scad file:
|
||||
- logo_atari.svg (Front side of the round chip)
|
||||
- logo_firebee.svg (Back side of the round chip)
|
||||
- logo_text.svg (Back side on the handle/grip)
|
||||
2. Use the 'export_mode' variable below to switch between parts for export.
|
||||
|
||||
3. For a multi-color print on the AD5X:
|
||||
- Set export_mode = "chip"; -> Render (F6) -> Export STL as 'base.stl'
|
||||
- Set export_mode = "atari"; -> Render (F6) -> Export STL as 'inlay_atari.stl'
|
||||
- Set export_mode = "firebee"; -> Render (F6) -> Export STL as 'inlay_firebee.stl'
|
||||
- Set export_mode = "text"; -> Render (F6) -> Export STL as 'inlay_text.stl'
|
||||
|
||||
4. Import all 4 STLs into your slicer (e.g., OrcaSlicer) simultaneously.
|
||||
|
||||
5. When asked "Load as a single object with multiple parts?", select YES.
|
||||
|
||||
6. Assign your 4 filaments to the respective parts.
|
||||
|
||||
OPTIMAL PRINT SETTINGS (0.4mm Nozzle):
|
||||
- Layer Height: 0.15mm (0.2mm for first layer)
|
||||
- Wall Loops: 4 (Crucial for mechanical strength of the chip and keyhole)
|
||||
- Top/Bottom Shells: 5
|
||||
- Infill: 30% (Gyroid or Honeycomb recommended)
|
||||
- First Layer Speed: 15-20 mm/s (Slow is vital for the fine inlays on the bed)
|
||||
- Cooling: 100% after layer 2
|
||||
- Prime Tower: Enabled (To prevent color bleeding between the 4 colors)
|
||||
- Z-Hop: 0.4mm (Prevents the nozzle from scarring finished color areas)
|
||||
================================================================================
|
||||
*/
|
||||
|
||||
// --- GLOBAL SETTINGS ---
|
||||
$fn = 100; // Detail level for circular geometries
|
||||
|
||||
// --- EXPORT CONTROL ---
|
||||
// "preview" -> Visualizes all colors together
|
||||
// "chip" -> The main body with all hollowed-out pockets
|
||||
// "atari" -> The inlay for the front Atari logo
|
||||
// "firebee" -> The inlay for the back Firebee logo
|
||||
// "text" -> The inlay for the text on the handle
|
||||
export_mode = "preview";
|
||||
|
||||
// --- DIMENSIONS & PARAMETERS ---
|
||||
chip_radius = 11.5; // Standard 23mm diameter
|
||||
chip_height = 2.4; // Total thickness
|
||||
logo_depth = 0.6; // Depth of the engravings (approx. 4 layers at 0.15mm)
|
||||
max_logo_size = (chip_radius * 2) * 0.70; // Scaling factor for round logos
|
||||
|
||||
// Handle (Grip) Parameters
|
||||
handle_length = 45; // Length from the bottom edge of the chip to the end
|
||||
handle_width = 16; // Width of the rectangular grip
|
||||
handle_corner_radius = 3;
|
||||
taper_start_y = -7.5; // Y-coordinate where the chip begins to taper into the handle
|
||||
hole_diameter = 5;
|
||||
hole_offset_bottom = 7; // Hole center distance from the bottom edge
|
||||
|
||||
// Margin & Spacing for handle text
|
||||
handle_margin = 2;
|
||||
hole_clearance = 2; // Space between the hole and the text
|
||||
taper_clearance = 2; // Space before the handle tapers into the chip
|
||||
|
||||
// --- FILENAMES ---
|
||||
file_atari = "logo_atari.svg";
|
||||
file_firebee = "logo_firebee.svg";
|
||||
file_text = "logo_text.svg";
|
||||
|
||||
// --- CALCULATIONS FOR TEXT PLACEMENT ---
|
||||
hole_top_edge_y = (-chip_radius - handle_length + hole_offset_bottom) + (hole_diameter/2);
|
||||
text_limit_bottom = hole_top_edge_y + hole_clearance;
|
||||
text_limit_top = taper_start_y - taper_clearance;
|
||||
available_text_length = abs(text_limit_top - text_limit_bottom);
|
||||
text_y_position = text_limit_bottom + (available_text_length / 2);
|
||||
|
||||
|
||||
// --- LOGO MODULES (2D DEFINITIONS) ---
|
||||
|
||||
module module_logo_atari() {
|
||||
render()
|
||||
translate([0, 2, 0]) // Manual alignment for specific SVG geometry
|
||||
resize([max_logo_size, max_logo_size, 0], auto=true)
|
||||
offset(delta = 0.01) // Closes paths to prevent mesh errors
|
||||
import(file_atari, center = true);
|
||||
}
|
||||
|
||||
module module_logo_firebee() {
|
||||
render()
|
||||
// Mirroring on the Y-axis (vertical) so it "flies up" on the back side
|
||||
// mirror([0, 1, 0])
|
||||
resize([max_logo_size, max_logo_size, 0], auto=true)
|
||||
offset(delta = 0.01)
|
||||
import(file_firebee, center = true);
|
||||
}
|
||||
|
||||
module module_logo_text() {
|
||||
render()
|
||||
mirror([1, 0, 0]) // Mirror for correct legibility on the bottom side
|
||||
rotate([0, 0, 90]) // Rotate to align with handle axis
|
||||
// Resize to fit perfectly within calculated handle area
|
||||
resize([available_text_length, handle_width - (2 * handle_margin), 0], auto=true)
|
||||
offset(delta = 0.01)
|
||||
import(file_text, center = true);
|
||||
}
|
||||
|
||||
// --- GEOMETRY MODULES ---
|
||||
|
||||
module module_handle_shape() {
|
||||
difference() {
|
||||
hull() {
|
||||
// Chord calculation: circle width at taper start point
|
||||
chord_length = 2 * sqrt(pow(chip_radius, 2) - pow(taper_start_y, 2));
|
||||
translate([-chord_length/2, taper_start_y - 0.1, -chip_height/2])
|
||||
cube([chord_length, 0.1, chip_height]);
|
||||
|
||||
// Rounded end of the handle
|
||||
end_y_pos = -chip_radius - handle_length + handle_corner_radius;
|
||||
translate([-(handle_width/2 - handle_corner_radius), end_y_pos, 0])
|
||||
cylinder(h = chip_height, r = handle_corner_radius, center = true);
|
||||
translate([(handle_width/2 - handle_corner_radius), end_y_pos, 0])
|
||||
cylinder(h = chip_height, r = handle_corner_radius, center = true);
|
||||
}
|
||||
// Keyhole subtraction
|
||||
translate([0, -chip_radius - handle_length + hole_offset_bottom, 0])
|
||||
cylinder(h = chip_height + 2, r = hole_diameter/2, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// --- FINAL ASSEMBLY ---
|
||||
|
||||
// 1. MAIN KEY BODY (Chip and handle with engraved pockets)
|
||||
if (export_mode == "preview" || export_mode == "chip") {
|
||||
difference() {
|
||||
union() {
|
||||
color("Grey") cylinder(h = chip_height, r = chip_radius, center = true);
|
||||
color("Grey") module_handle_shape();
|
||||
}
|
||||
// Pocket for Atari (Top)
|
||||
translate([0, 0, chip_height/2 - logo_depth + 0.01])
|
||||
linear_extrude(height = logo_depth + 0.1, convexity = 10)
|
||||
module_logo_atari();
|
||||
|
||||
// Pocket for Firebee (Bottom)
|
||||
translate([0, 0, -chip_height/2 - 0.1])
|
||||
linear_extrude(height = logo_depth + 0.1, convexity = 10)
|
||||
module_logo_firebee();
|
||||
|
||||
// Pocket for Text (Bottom)
|
||||
translate([0, text_y_position, -chip_height/2 - 0.1])
|
||||
linear_extrude(height = logo_depth + 0.1, convexity = 10)
|
||||
module_logo_text();
|
||||
}
|
||||
}
|
||||
|
||||
// 2. ATARI INLAY (Top Color)
|
||||
if (export_mode == "preview" || export_mode == "atari") {
|
||||
color("Cyan") translate([0, 0, chip_height/2 - logo_depth])
|
||||
linear_extrude(height = logo_depth, convexity = 10)
|
||||
module_logo_atari();
|
||||
}
|
||||
|
||||
// 3. FIREBEE INLAY (Bottom Color A)
|
||||
if (export_mode == "preview" || export_mode == "firebee") {
|
||||
color("Orange") translate([0, 0, -chip_height/2])
|
||||
linear_extrude(height = logo_depth, convexity = 10)
|
||||
module_logo_firebee();
|
||||
}
|
||||
|
||||
// 4. HANDLE TEXT INLAY (Bottom Color B)
|
||||
if (export_mode == "preview" || export_mode == "text") {
|
||||
color("Lime") translate([0, text_y_position, -chip_height/2])
|
||||
linear_extrude(height = logo_depth, convexity = 10)
|
||||
module_logo_text();
|
||||
}
|
||||
Reference in New Issue
Block a user