Skip to content

Instantly share code, notes, and snippets.

@max-dark
Last active February 19, 2025 09:01
Show Gist options
  • Save max-dark/49bee9abfdc0e9a7d42a7d3ccaca32a8 to your computer and use it in GitHub Desktop.
Save max-dark/49bee9abfdc0e9a7d42a7d3ccaca32a8 to your computer and use it in GitHub Desktop.
motor-gear MG90S for OpenSCAD
// MG90S mount
include <motor-gears.scad>
MG_MOUNT_W = 4.4;
MG_MOUNT_D = 0.2;
MG_MOUNT_HOLE_D = MG90S_MOUNT_HOLE_D - 0.2;
MG_MOUNT_SIZE=[
MG90S_BLOCK_SIZE.x + 2 * (MG_MOUNT_W + MG_MOUNT_D)
, MG90S_BLOCK_SIZE.y
, MG90S_MOUNT_OFFSET + MG_MOUNT_W
];
module gear_mount_draft()
{
dx = MG_MOUNT_SIZE.x / 2;
dy = MG_MOUNT_SIZE.y / 2;
dz = MG_MOUNT_W;
translate([-dx, -dy, 0])
{
difference()
{
cube(MG_MOUNT_SIZE);
translate([dx, dy, dz])
{
mg90s();
}
hole_h = MG_MOUNT_W * 3;
translate([0, 0, MG_MOUNT_SIZE.z / 2])
mg90s_mount(MG_MOUNT_HOLE_D, MG_MOUNT_SIZE.z * 1.2);
translate([0, dy, 0])
cube([MG_MOUNT_SIZE.x * 2, MG_MOUNT_W, MG_MOUNT_W * 3], center=true);
}
}
}
module gear_mount()
{
$fn=60;
dx = MG_MOUNT_SIZE.x / 2;
dy = MG_MOUNT_SIZE.y / 2;
dz = MG_MOUNT_W;
difference()
{
union()
{
difference()
{
cube([MG_MOUNT_SIZE.x, MG_MOUNT_SIZE.y, MG_MOUNT_W], center=true);
translate([(MG90S_BLOCK_SIZE.x - MG90S_GEAR_D1) / 2, 0, 0])
cylinder(h = MG_MOUNT_W * 2, d = MG90S_MOUNT_HOLE_D, center = true);
}
translate([0, 0, (MG_MOUNT_SIZE.z - MG_MOUNT_W) / 2])
{
translate([-(dx - MG_MOUNT_W / 2), 0, 0])
{
cube([MG_MOUNT_W, MG_MOUNT_SIZE.y, MG_MOUNT_SIZE.z], center=true);
}
translate([+(dx - MG_MOUNT_W / 2), 0, 0])
{
cube([MG_MOUNT_W, MG_MOUNT_SIZE.y, MG_MOUNT_SIZE.z], center=true);
}
}
}
translate([0, 0, (MG_MOUNT_SIZE.z - MG_MOUNT_W) / 2])
{
translate([-(dx - MG_MOUNT_W / 2), 0, 0])
{
cylinder(h = MG_MOUNT_SIZE.z * 2, d = MG90S_MOUNT_HOLE_D, center = true);
}
translate([+(dx - MG_MOUNT_W / 2), 0, 0])
{
cylinder(h = MG_MOUNT_SIZE.z * 2, d = MG90S_MOUNT_HOLE_D, center = true);
}
}
translate([-(dx - MG_MOUNT_W / 2), 0, MG_MOUNT_W / 2])
{
cube([MG_MOUNT_W * 2, 4, MG_MOUNT_W * 2], center=true);
}
}
}
gear_mount();
// motor-gear MG90S
MG90S_FULL_SIZE = [32.5, 12, 32];
MG90S_BLOCK_SIZE = [23.0, MG90S_FULL_SIZE.y, 23];
MG90S_MOUNT_SIZE = [MG90S_FULL_SIZE.x, MG90S_BLOCK_SIZE.y, 3];
MG90S_MOUNT_OFFSET = 16.3;
MG90S_MOUNT_HOLE_POS = 27.8;
MG90S_MOUNT_HOLE_D = 2.5;
MG90S_GEAR_D1 = MG90S_FULL_SIZE.y;
MG90S_GEAR_D2 = MG90S_GEAR_D1 / 2;
MG90S_GEAR_D3 = 5;
MG90S_GEAR_H1 = 28.4;
MG90S_GEAR_H2 = MG90S_FULL_SIZE.z;
module mg90s_gear()
{
$fn=60;
dt = MG90S_GEAR_D1 / 2;
translate([dt, dt, 0])
union()
{
cylinder(h = MG90S_GEAR_H1, d = MG90S_GEAR_D1);
translate([dt, 0, 0])
{
cylinder(h = MG90S_GEAR_H1, d = MG90S_GEAR_D2);
}
cylinder(h = MG90S_GEAR_H2, d = MG90S_GEAR_D3);
}
}
// mount holes
module mg90s_mount(hole_d)
{
dy = MG90S_MOUNT_SIZE.y / 2;
dx = MG90S_MOUNT_SIZE.x / 2;
translate([dx, dy, 0])
{
dt = MG90S_MOUNT_HOLE_POS / 2;
h = MG90S_MOUNT_SIZE.z * 2;
translate([-dt, 0, 0])
cylinder(h = h, d = hole_d, center=true, $fn=60);
translate([+dt, 0, 0])
cylinder(h = h, d = hole_d, center=true, $fn=60);
}
}
module mg90s()
{
dy = MG90S_BLOCK_SIZE.y / 2;
dx = MG90S_BLOCK_SIZE.x / 2;
color("gray")
translate([-dx, -dy, 0])
union()
{
// main block
cube(MG90S_BLOCK_SIZE);
mg90s_gear();
x_diff = MG90S_BLOCK_SIZE.x - MG90S_MOUNT_SIZE.x;
// mount plane
translate([x_diff/2, 0, MG90S_MOUNT_OFFSET])
difference()
{
cube(MG90S_MOUNT_SIZE);
mg90s_mount(MG90S_MOUNT_HOLE_D);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment