Read this model as text
The four lamp fittings you find on the Dutch hardware store shelf: GU10, GU5.3 (MR16), E14 and E27. For each fitting the model gives three parts: a dummy lamp, a dummy socket and a printable holder cup. The lamp dimensions follow the lamp standards (50 mm spot face, 10 mm and 5.33 mm pin spacing, 14 mm and 27 mm Edison caps). Socket housings are not standardised and vary by brand, so their dimensions are parameters with typical store defaults. Measure the socket you bought and set them to match.
The image shows the solid OpenSCAD renders at fitting GU10 · part all · cutaway false · wall 2.5 · clearance 0.3 · holder_depth 40 · flange_w 4 · gu10_socket_d 36 · gu10_socket_h 18 · gu10_hole_span 40 · e14_socket_d 28.5 · e14_socket_h 55 · e27_socket_d 40 · e27_socket_h 60 · smoothness 96 · color_holder Silver.
Lamp fittings from the Dutch hardware store
mick/lamp-fittings@1.0.0
Report
For a legal or policy problem: a license violation, personal data, somebody else’s work republished as their own. A model that prints badly is a comment, not a report.
Parameters
from sourceDescription
What is this
The four lamp fittings you find on the Dutch hardware store shelf: GU10, GU5.3 (MR16), E14 and E27. For each fitting the model gives three parts: a dummy lamp, a dummy socket and a printable holder cup. The lamp dimensions follow the lamp standards (50 mm spot face, 10 mm and 5.33 mm pin spacing, 14 mm and 27 mm Edison caps). Socket housings are not standardised and vary by brand, so their dimensions are parameters with typical store defaults. Measure the socket you bought and set them to match.
What you use it for
Designing luminaires around real hardware. Import the lamp mock and socket mock into your own design to test fit openings, pockets and depths before printing. The holder is a ready component: for GU10 and GU5.3 it is a cup with a front flange, a rear plate with fixing holes for the socket and a pass-through for the lamp base and pins. For E14 and E27 it is a cup the socket housing drops into, with a 10.5 mm hole in the base for the standard M10 lamp nipple. Print the holder in a heat resistant material and use LED lamps only.
Design notes
Everything is built on one axis. The GU holder has its flange at z = 0 and the rear plate at the top, so it prints flange down without support. The socket screws onto the back of the rear plate through the fixing holes, the lamp twists into it through the pass-through. The Edison holder has its closed base at z = 0 with the nipple hole, the socket sits inside and the bulb comes out the open end. The assembly view places all three parts as mounted and cutaway slices it open to show how they meet. The mocks are display geometry, not printable replicas: the GU10 twist lock heads and Edison threads are simplified to rings and stubs.
Parameters
fitting picks the fitting, part picks the dummy lamp, the dummy socket, the holder or the assembly and cutaway slices the assembly open. wall, clearance, holder_depth and flange_w shape the holder. gu10_socket_d, gu10_socket_h and gu10_hole_span describe the round GU10 socket puck, e14_socket_d, e14_socket_h, e27_socket_d and e27_socket_h the Edison housings. smoothness sets the facet count and color_holder the display colour of the printable part.
Use with your agent
{
"mcpServers": {
"remixcad": {
"type": "http",
"url": "https://remix-cad.vercel.app/api/mcp"
}
}
}get_model("mick/lamp-fittings@1.0.0")Returns the manifest, the source, the import closure and the license obligations. Full MCP setup.
Parameter table
Parsed from the Customizer annotations in main.scad| Name | Default | Range | Unit | Description |
|---|---|---|---|---|
| fitting | "GU10" | GU10, GU5.3, E14, E27 | ||
| part | "all" | all, lamp_mock, socket_mock, holder | ||
| cutaway | false | |||
| wall | 2.5 | 1.5 to 5 step 0.25 | ||
| clearance | 0.3 | 0 to 1 step 0.05 | ||
| holder_depth | 40 | 14 to 70 step 1 | ||
| flange_w | 4 | 0 to 12 step 0.5 | ||
| gu10_socket_d | 36 | 30 to 42 step 0.5 | ||
| gu10_socket_h | 18 | 12 to 25 step 0.5 | ||
| gu10_hole_span | 40 | 24 to 50 step 1 | ||
| e14_socket_d | 28.5 | 24 to 34 step 0.5 | ||
| e14_socket_h | 55 | 40 to 70 step 1 | ||
| e27_socket_d | 40 | 34 to 48 step 0.5 | ||
| e27_socket_h | 60 | 45 to 75 step 1 | ||
| smoothness | 96 | 24 to 160 step 8 | ||
| color_holder | "Silver" | Silver, White, Gainsboro, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod |
Lineage
0 models depend on this oneOnly what this model came from and what came from it.
License
Whoever downloads this takes these obligations along- mick/lamp-fittings@1.0.0 is MIT
Source
main.scad is the entrypointmain.scad
// Lamp fittings from the Dutch hardware store shelf: GU10, GU5.3 (MR16), E14 and E27.
// Per fitting: a dummy lamp, a dummy socket and a printable holder cup.
// Lamp dimensions follow the standards. Socket housings vary by brand, so they are
// parameters with typical store defaults. Measure yours and set them to match.
/* [Model] */
// Which fitting.
fitting = "GU10"; // [GU10, GU5.3, E14, E27]
// One part, or the assembly as mounted.
part = "all"; // [all, lamp_mock, socket_mock, holder]
// Slice the assembly open along the middle.
cutaway = false;
/* [Holder] */
// Wall thickness of the holder.
wall = 2.5; // [1.5:0.25:5]
// Radial clearance around lamp and socket.
clearance = 0.3; // [0:0.05:1]
// Depth of the holder cup.
holder_depth = 40; // [14:1:70]
// Width of the front flange. Zero removes it.
flange_w = 4; // [0:0.5:12]
/* [GU socket, measure yours] */
// Diameter of the round GU10 socket puck.
gu10_socket_d = 36; // [30:0.5:42]
// Height of the GU10 socket puck.
gu10_socket_h = 18; // [12:0.5:25]
// Centre distance of its two fixing holes.
gu10_hole_span = 40; // [24:1:50]
/* [E socket, measure yours] */
// Outer diameter of the E14 socket housing.
e14_socket_d = 28.5; // [24:0.5:34]
// Length of the E14 socket housing.
e14_socket_h = 55; // [40:1:70]
// Outer diameter of the E27 socket housing.
e27_socket_d = 40; // [34:0.5:48]
// Length of the E27 socket housing.
e27_socket_h = 60; // [45:1:75]
/* [Quality] */
// Facets on round surfaces.
smoothness = 96; // [24:8:160]
/* [Colour] */
// Colour of the printable holder. Display only.
color_holder = "Silver"; // [Silver, White, Gainsboro, DimGray, Black, SlateGray, FireBrick, SteelBlue, ForestGreen, Goldenrod]
/* [Hidden] */
$fn = smoothness;
eps = 0.01;
is_gu = (fitting == "GU10" || fitting == "GU5.3");
// Spot lamps (GU10 and MR16 share the 50 mm face)
spot_d = 50;
pin_span = fitting == "GU10" ? 10 : 5.33;
pin_d = fitting == "GU10" ? 4.0 : 1.6;
pin_head_d = fitting == "GU10" ? 5.2 : 1.6;
pin_len = fitting == "GU10" ? 6.5 : 6.0;
spot_len = fitting == "GU10" ? 46 : 40;
spot_base_d = fitting == "GU10" ? 24 : 22;
spot_hole_span = fitting == "GU10" ? gu10_hole_span : 28;
// Edison lamps
cap_d = fitting == "E14" ? 14 : 27;
cap_len = 26;
bulb_d = fitting == "E14" ? 35 : 60;
bulb_len = fitting == "E14" ? 100 : 108;
socket_d = fitting == "E14" ? e14_socket_d : e27_socket_d;
socket_h = fitting == "E14" ? e14_socket_h : e27_socket_h;
// Holder
inner_d = is_gu ? spot_d + 2 * clearance : socket_d + 2 * clearance;
outer_d = inner_d + 2 * wall;
neck_hole = spot_base_d + 6;
// ---- Dummy lamps ----
// Spot: face at z = 0 pointing down, body up, pins at the top.
module spot_lamp() {
cylinder(d = spot_d, h = 6);
translate([0, 0, 6]) cylinder(d1 = spot_d, d2 = spot_base_d, h = spot_len - 14);
translate([0, 0, spot_len - 8]) cylinder(d = spot_base_d, h = 8);
for (s = [-1, 1])
translate([s * pin_span / 2, 0, spot_len - eps]) {
cylinder(d = pin_d, h = pin_len - 1.5);
translate([0, 0, pin_len - 1.5]) cylinder(d = pin_head_d, h = 1.5);
}
}
// Edison: cap below z = 0, bulb up. Thread simplified to rings.
module edison_lamp() {
translate([0, 0, -cap_len]) cylinder(d = cap_d, h = cap_len);
for (i = [0:3])
translate([0, 0, -cap_len + 5 + i * 5])
rotate_extrude()
translate([cap_d / 2, 0]) circle(d = 2.2, $fn = 24);
translate([0, 0, -cap_len - 2]) cylinder(d = cap_d * 0.45, h = 2.2);
hull() {
cylinder(d = cap_d, h = 1);
translate([0, 0, bulb_len - cap_len - bulb_d / 2]) sphere(d = bulb_d);
}
}
// ---- Dummy sockets ----
module gu_socket() {
if (fitting == "GU10") {
cylinder(d = gu10_socket_d, h = gu10_socket_h);
difference() {
hull()
for (s = [-1, 1])
translate([s * gu10_hole_span / 2, 0, 0]) cylinder(d = 9, h = 2.6);
for (s = [-1, 1])
translate([s * gu10_hole_span / 2, 0, -eps]) cylinder(d = 3.2, h = 3);
}
for (s = [-1, 1])
translate([s * 5, 0, gu10_socket_h - eps]) cylinder(d = 3, h = 12);
} else {
translate([-16.5, -10, 0]) cube([33, 20, 15]);
for (s = [-1, 1])
translate([s * 5, 0, 15 - eps]) cylinder(d = 3, h = 12);
}
}
module edison_socket() {
cylinder(d = socket_d, h = socket_h);
translate([0, 0, -8]) cylinder(d = 10, h = 8 + eps);
}
// ---- Holders ----
// GU: flange at z = 0, rear plate at the top. Prints flange down without support.
module gu_holder() {
difference() {
union() {
cylinder(d = outer_d, h = holder_depth);
if (flange_w > 0) cylinder(d = outer_d + 2 * flange_w, h = 3);
}
translate([0, 0, -eps]) cylinder(d = inner_d, h = holder_depth - wall + eps);
translate([0, 0, -eps]) cylinder(d = neck_hole, h = holder_depth + 1);
for (s = [-1, 1])
translate([s * spot_hole_span / 2, 0, -eps])
cylinder(d = 3.4, h = holder_depth + 1);
}
}
// Edison: closed base at z = 0 with the M10 nipple hole, open at the top.
module e_holder() {
difference() {
union() {
cylinder(d = outer_d, h = holder_depth);
if (flange_w > 0)
translate([0, 0, holder_depth - 3])
cylinder(d = outer_d + 2 * flange_w, h = 3);
}
translate([0, 0, wall]) cylinder(d = inner_d, h = holder_depth);
translate([0, 0, -eps]) cylinder(d = 10.5, h = wall + 1);
}
}
module holder_part() {
if (is_gu) gu_holder(); else e_holder();
}
module lamp_mock() {
if (is_gu) spot_lamp(); else edison_lamp();
}
module socket_mock() {
if (is_gu) gu_socket(); else edison_socket();
}
// ---- Assembly ----
module assembly() {
color(color_holder) holder_part();
if (is_gu) {
color("WhiteSmoke")
translate([0, 0, holder_depth - wall - spot_len]) spot_lamp();
color("Gainsboro") translate([0, 0, holder_depth]) gu_socket();
} else {
color("Gainsboro") translate([0, 0, wall]) edison_socket();
color("WhiteSmoke") translate([0, 0, wall + socket_h - 6]) edison_lamp();
}
}
// ---- Layout ----
if (part == "lamp_mock") {
color("WhiteSmoke") lamp_mock();
} else if (part == "socket_mock") {
color("Gainsboro") socket_mock();
} else if (part == "holder") {
color(color_holder) holder_part();
} else {
if (cutaway)
difference() {
assembly();
translate([-500, 0, -500]) cube([1000, 1000, 1000]);
}
else
assembly();
}
Comments
Context, not a score. Comments never move a model up or down the results.No comments yet
Printed it? A note about your material and the clearance you landed on saves the next person a failed print.
