Initial commit
This commit is contained in:
commit
203bc5d3ea
6 changed files with 330 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*.stl
|
||||
*.bgcode
|
||||
87
Meshcore Repeater Baseplate.scad
Normal file
87
Meshcore Repeater Baseplate.scad
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
height=148;
|
||||
width=80;
|
||||
thickness=2;
|
||||
difference() {
|
||||
cube([height,width,thickness]);
|
||||
|
||||
// corner cutouts
|
||||
corner_radius=9;
|
||||
translate([0,0,-0.5]) {
|
||||
cylinder(thickness+1, corner_radius, corner_radius);
|
||||
}
|
||||
translate([0,width,-0.5]) {
|
||||
cylinder(thickness+1, corner_radius, corner_radius);
|
||||
}
|
||||
translate([height,0,-0.5]) {
|
||||
cylinder(thickness+1, corner_radius, corner_radius);
|
||||
}
|
||||
translate([height,width,-0.5]) {
|
||||
cylinder(thickness+1, corner_radius, corner_radius);
|
||||
}
|
||||
|
||||
// mounting holes
|
||||
mounting_hole_radius=1.25;
|
||||
x_distance=18;
|
||||
y_distance=3.5;
|
||||
translate([y_distance,x_distance,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
translate([y_distance,width-x_distance,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
translate([height-y_distance,x_distance,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
translate([height-y_distance,width-x_distance,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
|
||||
// battery mounting holes
|
||||
battery_mounting_hole_radius=1.25;
|
||||
for(i=[1:3]) {
|
||||
translate([i*37.5-9,28,-0.5]) {
|
||||
cylinder(thickness+1, battery_mounting_hole_radius, battery_mounting_hole_radius);
|
||||
}
|
||||
translate([i*37.5-9,width-28,-0.5]) {
|
||||
cylinder(thickness+1, battery_mounting_hole_radius, battery_mounting_hole_radius);
|
||||
}
|
||||
}
|
||||
|
||||
// xiao mounting point
|
||||
xiao_pin_header_distance=15;
|
||||
xiao_pin_header_length=17;
|
||||
y_offset=10;
|
||||
cable_tie_slot_length=6;
|
||||
translate([height-9.5-xiao_pin_header_distance,y_offset,-0.5]) {
|
||||
cube([1.5, xiao_pin_header_length, thickness+1]);
|
||||
}
|
||||
translate([height-9.5,y_offset,-0.5]) {
|
||||
cube([1.5, xiao_pin_header_length, thickness+1]);
|
||||
translate([-cable_tie_slot_length/2+1.5/2-xiao_pin_header_distance/2,-5,0]) {
|
||||
cube([cable_tie_slot_length, 2, thickness+1]);
|
||||
}
|
||||
translate([-cable_tie_slot_length/2+1.5/2-xiao_pin_header_distance/2,xiao_pin_header_length+3,0]) {
|
||||
cube([cable_tie_slot_length, 2, thickness+1]);
|
||||
}
|
||||
}
|
||||
|
||||
// sensor module mounting holes
|
||||
sensor_module_mounting_hole_radius=1.25;
|
||||
sensor_mount_distance=8;
|
||||
for(i=[1:3]) {
|
||||
translate([height-i*sensor_mount_distance-2,width-12,-0.5]) {
|
||||
cylinder(thickness+1, sensor_module_mounting_hole_radius, sensor_module_mounting_hole_radius);
|
||||
}
|
||||
translate([height-i*sensor_mount_distance-2,width-30,-0.5]) {
|
||||
cylinder(thickness+1, sensor_module_mounting_hole_radius, sensor_module_mounting_hole_radius);
|
||||
}
|
||||
}
|
||||
|
||||
// air valve cutout
|
||||
air_valve_cutout_width=10;
|
||||
translate([-0.5,width/2-air_valve_cutout_width/2,-0.5]) {
|
||||
cube([8+0.5, air_valve_cutout_width, thickness+1]);
|
||||
}
|
||||
}
|
||||
|
||||
$fn=70;
|
||||
64
Meshcore Repeater Battery Holder.scad
Normal file
64
Meshcore Repeater Battery Holder.scad
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
length=75;
|
||||
width=36;
|
||||
thickness=6;
|
||||
overlap=0.1;
|
||||
|
||||
difference() {
|
||||
cube([length,width,thickness]);
|
||||
|
||||
// cable tie cutout
|
||||
cable_tie_width=5;
|
||||
translate([length/2-cable_tie_width/2+6.5,-overlap/2,-overlap]) {
|
||||
cube([cable_tie_width,width+overlap,3+overlap]);
|
||||
cube([cable_tie_width,3,thickness+2*overlap]);
|
||||
translate([0,width-3+overlap,0]) {
|
||||
cube([cable_tie_width,3+overlap,thickness+2*overlap]);
|
||||
}
|
||||
}
|
||||
|
||||
// screw holes
|
||||
screw_hole_radius=1.25;
|
||||
translate([25.5,width/2,-overlap/2]) {
|
||||
cylinder(thickness+overlap,screw_hole_radius,screw_hole_radius);
|
||||
translate([0,0,thickness-2]) {
|
||||
cylinder(3+overlap,screw_hole_radius+1,screw_hole_radius+1);
|
||||
}
|
||||
translate([24,0,0]) {
|
||||
cylinder(thickness+overlap,screw_hole_radius,screw_hole_radius);
|
||||
translate([0,0,thickness-2]) {
|
||||
cylinder(3+overlap,screw_hole_radius+1,screw_hole_radius+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// battery charger inset
|
||||
charger_width=13;
|
||||
charger_length=25;
|
||||
charger_height=2;
|
||||
translate([15.5,2,thickness-charger_height+overlap]) {
|
||||
//cube([charger_length,charger_width,charger_height]);
|
||||
}
|
||||
}
|
||||
|
||||
// battery inlay/walls
|
||||
wall_width=15;
|
||||
radius=16.5;
|
||||
translate([0,0,thickness/2+1.5]) {
|
||||
difference() {
|
||||
union() {
|
||||
cube([wall_width,width,radius]);
|
||||
translate([length-wall_width,0,0]) {
|
||||
cube([wall_width,width,radius]);
|
||||
}
|
||||
}
|
||||
|
||||
rotate([0,90,0]) {
|
||||
translate([-radius-thickness/2,width/2,2]) {
|
||||
#cylinder(length-4,radius,radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$fn=70;
|
||||
|
||||
46
Meshcore Repeater Drilling Template.scad
Normal file
46
Meshcore Repeater Drilling Template.scad
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
case_height=158;
|
||||
case_width=89.5;
|
||||
|
||||
difference() {
|
||||
cube([case_height,case_width,1]);
|
||||
|
||||
translate([9,35,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
|
||||
translate([38,7,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
|
||||
translate([70,7,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
|
||||
translate([99,7,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
|
||||
translate([120,7,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
|
||||
translate([149,35,-0.5]) {
|
||||
cylinder(2, 2, 2);
|
||||
}
|
||||
}
|
||||
|
||||
// walls
|
||||
translate([0,-1,0]) {
|
||||
cube([case_height,1,6]);
|
||||
}
|
||||
translate([0,case_width,0]) {
|
||||
cube([case_height,1,6]);
|
||||
}
|
||||
translate([-1,-1,0]) {
|
||||
cube([1,case_width+2,6]);
|
||||
}
|
||||
translate([case_height,-1,0]) {
|
||||
cube([1,case_width+2,6]);
|
||||
}
|
||||
|
||||
$fn=70;
|
||||
103
Meshcore Repeater Mounting Plate.scad
Normal file
103
Meshcore Repeater Mounting Plate.scad
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
width=89;
|
||||
height=157;
|
||||
thickness=3;
|
||||
edge_radius=4;
|
||||
|
||||
difference() {
|
||||
translate([edge_radius,edge_radius,0]) {
|
||||
minkowski() {
|
||||
cube([height-2*edge_radius,width-2*edge_radius,thickness/2]);
|
||||
cylinder(thickness/2, edge_radius, edge_radius);
|
||||
}
|
||||
}
|
||||
|
||||
mounting_hole_radius=2.5;
|
||||
translate([5,5,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
|
||||
translate([5,width-5,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
|
||||
translate([height-5,5,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
|
||||
translate([height-5,width-5,-0.5]) {
|
||||
cylinder(thickness+1, mounting_hole_radius, mounting_hole_radius);
|
||||
}
|
||||
}
|
||||
|
||||
// pole mount
|
||||
pipe_diameter=60;
|
||||
pipe_radius=pipe_diameter/2;
|
||||
|
||||
pole_mount_width=15;
|
||||
pole_mount_length=25;
|
||||
pole_mount_height=pipe_radius;
|
||||
channel_width=15;
|
||||
|
||||
channel_angle=65; // TODO: Automatically adapt angle to pipe diameter
|
||||
width_offset=sign(sign(width-pipe_diameter)+1)*((width-pipe_diameter)/2+5);
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
translate([15,width_offset,0]) {
|
||||
difference() {
|
||||
cube([pole_mount_length,pole_mount_width,pole_mount_height]);
|
||||
translate([pole_mount_length/2-channel_width/2,pole_mount_width,thickness]) {
|
||||
rotate([channel_angle,0,0]) {
|
||||
cube([channel_width,2,30]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mirror([0,1,0]) {
|
||||
translate([15,-width+width_offset,0]) {
|
||||
difference() {
|
||||
cube([pole_mount_length,pole_mount_width,pole_mount_height]);
|
||||
translate([pole_mount_length/2-channel_width/2,pole_mount_width,thickness]) {
|
||||
rotate([channel_angle,0,0]) {
|
||||
cube([channel_width,2,30]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
translate([height-pole_mount_length-15,width_offset,0]) {
|
||||
difference() {
|
||||
cube([pole_mount_length,pole_mount_width,pole_mount_height]);
|
||||
translate([pole_mount_length/2-channel_width/2,pole_mount_width,thickness]) {
|
||||
rotate([channel_angle,0,0]) {
|
||||
cube([channel_width,2,30]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mirror([0,1,0]) {
|
||||
translate([height-pole_mount_length-15,-width+width_offset,0]) {
|
||||
difference() {
|
||||
cube([pole_mount_length,pole_mount_width,pole_mount_height]);
|
||||
translate([pole_mount_length/2-channel_width/2,pole_mount_width,thickness]) {
|
||||
rotate([channel_angle,0,0]) {
|
||||
cube([channel_width,2,30]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// pipe
|
||||
rotate([0,90,0]) {
|
||||
translate([-pipe_radius-5,width/2,0]) {
|
||||
#cylinder(height,pipe_radius,pipe_radius);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$fn=70;
|
||||
28
Meshcore Repeater Solarpanel Frame.scad
Normal file
28
Meshcore Repeater Solarpanel Frame.scad
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
frame_height=186;
|
||||
frame_width=110;
|
||||
frame_thickness=2;
|
||||
|
||||
difference() {
|
||||
// frame
|
||||
cube([frame_height,frame_width,frame_thickness]);
|
||||
|
||||
// case cutout
|
||||
case_height=159;
|
||||
case_width=90.5;
|
||||
case_thickness=2;
|
||||
translate([(frame_height-case_height)/2,(frame_width-case_width)/2,-0.5]) {
|
||||
cube([case_height,case_width,frame_thickness+1]);
|
||||
}
|
||||
}
|
||||
|
||||
// walls
|
||||
cube([frame_height,1,frame_thickness+2]);
|
||||
translate([0,frame_width-1,0]) {
|
||||
cube([frame_height,1,frame_thickness+2]);
|
||||
}
|
||||
cube([1,frame_width,frame_thickness+2]);
|
||||
translate([frame_height-1,0,0]) {
|
||||
cube([1,frame_width,frame_thickness+2]);
|
||||
}
|
||||
|
||||
$fn=70;
|
||||
Loading…
Add table
Add a link
Reference in a new issue