mirror of https://github.com/CIRCL/Circlean
Merge pull request #12 from mdurvaux/master
Electrical and mechanical design documentationpull/33/head
commit
bf66e76d1c
|
@ -0,0 +1,50 @@
|
|||
Daughter board schematic
|
||||
========================
|
||||
|
||||
|
||||
Note
|
||||
======
|
||||
the schematic has been created using GNU gEDA
|
||||
|
||||
|
||||
Bill of material
|
||||
================
|
||||
Part list
|
||||
- 3mm diameter low power LED Green
|
||||
- 3mm diameter low power LED Yellow
|
||||
- 3mm diameter low power LED Red
|
||||
- PCB mounted SPST normally open push-button
|
||||
- 26 (or 40) DIL poles pin-header female connector
|
||||
- resistors (values are not critical)
|
||||
510 Ohm (3)
|
||||
16 KOhm
|
||||
1.3 KOhm
|
||||
|
||||
Mechanical design
|
||||
=================
|
||||
coordinate (0,0) is located at the PCB corner near the power supply connector.
|
||||
the X axis is along the longest side.
|
||||
|
||||
hole_x1 = 3.50 ; // hole center x offset from PCB edge (uSD side)
|
||||
LedBtn_y = device_y - hole_y - 2.5 * 2.54 + tolerance ; // Y axis center position of LEDs and button(s)
|
||||
R_Led_x = hole_x1 + 29 + 2.54 + tolerance ; // X axis center position of red LED
|
||||
Y_Led_x = R_Led_x - 3 * 2.54 ; // X axis center position of yellow LED
|
||||
G_Led_x = R_Led_x - 6 * 2.54 ; // X axis center position of green LED
|
||||
Btn_x = R_Led_x + 4.5 * 2.54 ; // X axis center position of button
|
||||
|
||||
The LEDs and the push-button are positioned on the 2.54 mm (0.1 inch) grid
|
||||
Relative to he GPIO connector pin 1
|
||||
along the X axis : -2 * 2.54 mm
|
||||
along the Y axis (in multiples of 2.54 mm)
|
||||
Green LED center : 4.5
|
||||
Yellow LED center : 7.5
|
||||
Red LED center : 10.5
|
||||
Push-button center : 15.0
|
||||
|
||||
The LEDs have a 3 mm diameter
|
||||
The top of the LEDs are 11 mm above the PCB
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,139 @@
|
|||
v 20110115 2
|
||||
C 40000 40000 0 0 0 title-A4.sym
|
||||
T 44700 40700 9 10 1 0 0 0 1
|
||||
RaspberryPi GPIO : LED and switches
|
||||
T 44700 40400 9 10 1 0 0 0 1
|
||||
Raspi_IO.sch
|
||||
T 44800 40100 9 10 1 0 0 0 1
|
||||
1
|
||||
T 46300 40100 9 10 1 0 0 0 1
|
||||
1
|
||||
T 48500 40400 9 10 1 0 0 0 1
|
||||
1.1 - 05/02/2015
|
||||
T 48600 40100 9 10 1 0 0 0 1
|
||||
Marc Durvaux
|
||||
C 41000 47200 1 270 0 header26-1.sym
|
||||
{
|
||||
T 46400 46600 5 10 0 1 270 0 1
|
||||
refdes=J?
|
||||
T 45700 45600 5 10 0 0 270 0 1
|
||||
device=HEADER26
|
||||
}
|
||||
C 47500 42000 1 90 0 switch-pushbutton-no-1.sym
|
||||
{
|
||||
T 47200 42400 5 10 0 1 90 0 1
|
||||
refdes=S?
|
||||
T 46900 42400 5 10 0 0 90 0 1
|
||||
device=SWITCH_PUSHBUTTON_NO
|
||||
}
|
||||
C 44300 42900 1 270 0 led-1.sym
|
||||
{
|
||||
T 44900 42100 5 10 0 0 270 0 1
|
||||
device=LED
|
||||
T 44700 42100 5 10 0 1 270 0 1
|
||||
refdes=LED?
|
||||
T 45100 42100 5 10 0 0 270 0 1
|
||||
symversion=0.1
|
||||
T 44000 42600 5 10 1 1 0 0 1
|
||||
value=Red
|
||||
}
|
||||
C 41600 43200 1 90 0 resistor-2.sym
|
||||
{
|
||||
T 41250 43600 5 10 0 0 90 0 1
|
||||
device=RESISTOR
|
||||
T 41300 43400 5 10 0 1 90 0 1
|
||||
refdes=R?
|
||||
T 41300 43700 5 10 1 1 180 0 1
|
||||
value=510R
|
||||
}
|
||||
C 42800 42900 1 270 0 led-1.sym
|
||||
{
|
||||
T 43400 42100 5 10 0 0 270 0 1
|
||||
device=LED
|
||||
T 43200 42100 5 10 0 1 270 0 1
|
||||
refdes=LED?
|
||||
T 43600 42100 5 10 0 0 270 0 1
|
||||
symversion=0.1
|
||||
T 42300 42600 5 10 1 1 0 0 1
|
||||
value=Yellow
|
||||
}
|
||||
C 41300 42900 1 270 0 led-1.sym
|
||||
{
|
||||
T 41900 42100 5 10 0 0 270 0 1
|
||||
device=LED
|
||||
T 41700 42100 5 10 0 1 270 0 1
|
||||
refdes=LED?
|
||||
T 42100 42100 5 10 0 0 270 0 1
|
||||
symversion=0.1
|
||||
T 40800 42600 5 10 1 1 0 0 1
|
||||
value=Green
|
||||
}
|
||||
C 43100 43200 1 90 0 resistor-2.sym
|
||||
{
|
||||
T 42750 43600 5 10 0 0 90 0 1
|
||||
device=RESISTOR
|
||||
T 42800 43400 5 10 0 1 90 0 1
|
||||
refdes=R?
|
||||
T 42800 43700 5 10 1 1 180 0 1
|
||||
value=510R
|
||||
}
|
||||
C 44600 43200 1 90 0 resistor-2.sym
|
||||
{
|
||||
T 44250 43600 5 10 0 0 90 0 1
|
||||
device=RESISTOR
|
||||
T 44300 43400 5 10 0 1 90 0 1
|
||||
refdes=R?
|
||||
T 44300 43700 5 10 1 1 180 0 1
|
||||
value=510R
|
||||
}
|
||||
C 47600 43500 1 90 0 resistor-2.sym
|
||||
{
|
||||
T 47250 43900 5 10 0 0 90 0 1
|
||||
device=RESISTOR
|
||||
T 47300 43700 5 10 0 1 90 0 1
|
||||
refdes=R?
|
||||
T 47300 44000 5 10 1 1 180 0 1
|
||||
value=16K
|
||||
}
|
||||
C 48700 43400 1 180 0 resistor-2.sym
|
||||
{
|
||||
T 48300 43050 5 10 0 0 180 0 1
|
||||
device=RESISTOR
|
||||
T 48500 43100 5 10 0 1 180 0 1
|
||||
refdes=R?
|
||||
T 48100 43500 5 10 1 1 0 0 1
|
||||
value=1K3
|
||||
}
|
||||
N 41500 43200 41500 42900 4
|
||||
N 43000 43200 43000 42900 4
|
||||
N 44500 43200 44500 42900 4
|
||||
N 47500 43500 47500 43000 4
|
||||
N 47800 43300 47500 43300 4
|
||||
N 41500 42000 41500 41700 4
|
||||
N 41500 41700 47500 41700 4
|
||||
N 43000 41700 43000 42000 4
|
||||
N 47500 42000 47500 41700 4
|
||||
N 44500 42000 44500 41700 4
|
||||
N 47500 44400 47500 45000 4
|
||||
N 44500 45000 47500 45000 4
|
||||
N 43300 45000 41500 45000 4
|
||||
N 41500 45000 41500 44100 4
|
||||
N 43300 47200 43300 47500 4
|
||||
N 43300 47500 40500 47500 4
|
||||
N 40500 47500 40500 44600 4
|
||||
N 43000 44100 43000 44600 4
|
||||
N 43000 44600 40500 44600 4
|
||||
T 47100 45100 9 10 1 0 0 0 1
|
||||
3.3V
|
||||
T 45500 41800 9 10 1 0 0 0 1
|
||||
GND
|
||||
N 44100 45800 44100 44600 4
|
||||
N 44100 44600 44500 44600 4
|
||||
N 44500 44600 44500 44100 4
|
||||
N 49000 47500 49000 43300 4
|
||||
N 49000 43300 48700 43300 4
|
||||
N 44100 47500 49000 47500 4
|
||||
N 44100 47200 44100 47500 4
|
||||
N 46100 45800 46100 41700 4
|
||||
N 44500 45800 44500 45000 4
|
||||
N 43300 45000 43300 45800 4
|
|
@ -0,0 +1,35 @@
|
|||
Case mechanical design
|
||||
======================
|
||||
|
||||
|
||||
Notes
|
||||
=====
|
||||
- the mechanical design has been created using OpenSCAD
|
||||
- the Raspberry Pi B Plus Mechanical Drawing is included for reference
|
||||
|
||||
|
||||
Design files
|
||||
============
|
||||
The main design file is "myRaspiBp.scad". It is self-documented.
|
||||
Through parametric configuration, one can generate either the bottom part or the top part
|
||||
of the case, or both parts. A fit test can also be performed.
|
||||
|
||||
Use the file "myRaspBp_Button.scad" to create the push-button.
|
||||
|
||||
The design file include "shapes.scad" for common composite shape modules.
|
||||
|
||||
|
||||
Manufacturing files
|
||||
===================
|
||||
STL files can be used directly for 3D printing.
|
||||
The following files are available :
|
||||
myRaspiBp_bottom.stl for the bottom part
|
||||
myRaspiBp_top.stl for the top part
|
||||
myRaspiBp_Button.stl for the push-button.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,251 @@
|
|||
// raspberry pi model b+ case
|
||||
//
|
||||
// v 1.3 - 29/01/2015 - initial release + corrections (Marc Durvaux)
|
||||
// v 1.4 - 06/02/2015 - reduced Z clearance, hole opening for audio connector (audio_y),
|
||||
// added spacers on cover (MD)
|
||||
// v 1.5 - 08/02/2015 - fine tuning of connector hole Z position
|
||||
// v 1.7 - 10/02/2015 - fine tuning of holes, cutouts, spacers
|
||||
//
|
||||
|
||||
// design control
|
||||
test_fit = 0 ; // set to one for test fit
|
||||
top_bottom = 1 ; // 0 = bottom only, 1 = top only, 2 = top & bottom
|
||||
print = 1 ; // set to one for printing configuration
|
||||
|
||||
// parameters
|
||||
$fn = 30 ;
|
||||
tolerance = 0.50 ; //
|
||||
wall_thickness = 3.00 ; // box wall thickness
|
||||
rounding_radius = 5.00 ; // box external wall corner rounding radius
|
||||
cover_thickness = 3.00 ; // box cover overall thickness at the edge
|
||||
cover_inside_t = 2.00 ; // box cover material thickess
|
||||
cover_overlap = 5.00 ; // cover edge overlap height
|
||||
edge_thickness = 1.00 ; // cover edge thickness (reduction in wall thickness)
|
||||
clearance_z = 2.00 ; // clearance on Z axis for daughter board
|
||||
Top_spacer_r = 3.00 ; // radius of spacers on cover
|
||||
|
||||
// Raspberry Pi dimensions (from mechanical specs, when available)
|
||||
// positions on PCB are from lower right corner (near power connector)
|
||||
device_x = 85.00 ; // pcb size exluding protruding connectors
|
||||
device_y = 56.00 ;
|
||||
device_z = 16.80 ; // overall size, excluding bottom solders and USB connector top edge
|
||||
riser_z = 2.00 ; // riser to cope with PCP bottom solders, located under PCB hole
|
||||
riser_r = 2.50 ; // riser radius (PCB mask hole radius = 3.1)
|
||||
hole_x1 = 3.50 ; // hole center x offset from PCB edge (uSD side)
|
||||
hole_x2 = 58.00 + hole_x1 ; // hole center x offset from PCB edge (uSD side)
|
||||
hole_y = 3.50 ; // hole center y offset from PCB edge
|
||||
uSD_x = 2.70 ; // uSD card protrusion
|
||||
uSD_w = 11.00 ; // uSD card width
|
||||
uSD_y = device_y/2; // uSD center y offset
|
||||
PWR_w = 8.00 ; // micro-USB power connector width
|
||||
PWR_z = 3.00 ; // micro-USB power connector height over PCB
|
||||
PWR_x = 10.60 ; // micro-USB power connector center X offset from PCB edge
|
||||
PWRplug_w = 11.00 ; // micro-USB power plug width (used for outside wall stamping)
|
||||
PWRplug_h = 8.00 ; // micro-USB power plug height (used for outside wall stamping)
|
||||
PWRplug_d = 2.00 ; // micro-USB power plug outside wall stamping depth
|
||||
//audio_y = 2.70 ; // audio connector protrusion (masked audio)
|
||||
audio_y = 2*wall_thickness ; // open audio connector
|
||||
audio_w = 5.80 ; // audio connector external diameter (width)
|
||||
audio_z = 6.50 ; // audio connector height over PCB
|
||||
audio_x = 53.50 ; // audio connector center X offset from PCB edge
|
||||
hdmi_y = 1.00 ; // hdmi connector protrusion
|
||||
hdmi_w = 15.00 ; // hdmi connector width
|
||||
hdmi_z = 7.00 ; // hdmi connector height over PCB
|
||||
hdmi_x = 32.00 ; // hdmi connector center X offset from PCB edge
|
||||
Ether_x = 2.60 ; // Ethernet connector protrusion
|
||||
Ether_w = 15.60 ; // Ethernet connector width
|
||||
Ether_z = 15.00 ; // Ethernet connector height over PCB lower side
|
||||
Ether_y = 10.25 ; // Ethernet connector center Y offset from PCB edge
|
||||
USB_x = 2.60 ; // USB connectors protrusion
|
||||
USB_w = 15.10 ; // USB connectors width
|
||||
USB_z = 16.60 ; // USB connecotrs height over PCB
|
||||
USBl_y = 29.00 ; // left USB connector center Y offset from PCB edge (near Ethernet connector)
|
||||
USBr_y = 47.00 ; // right USB connector center Y offset from PCB edge
|
||||
LedBtn_y = device_y - hole_y - 2.5 * 2.54 + tolerance ; // Y axis center position of LEDs and button(s)
|
||||
R_Led_x = hole_x1 + 29 + 2.54 + tolerance ; // X axis center position of red LED
|
||||
Y_Led_x = R_Led_x - 3 * 2.54 ; // X axis center position of yellow LED
|
||||
G_Led_x = R_Led_x - 6 * 2.54 ; // X axis center position of green LED
|
||||
Btn_x = R_Led_x + 4.5 * 2.54 ; // X axis center position of button
|
||||
Led_r = 1.50 ; // LED radius + margin
|
||||
Btn_r = 4.00 ; // push button radius
|
||||
PCB_z = 12.00 ; // Daughter board top side to main PCB bottom side
|
||||
|
||||
|
||||
// inside box dimension
|
||||
in_x = device_x + uSD_x + USB_x + 2 * tolerance ;
|
||||
in_y = device_y + 3 * tolerance ;
|
||||
in_z = device_z + riser_z + clearance_z ;
|
||||
in_r = rounding_radius - wall_thickness ;
|
||||
pcb_top = riser_z + device_z - USB_z ; // the USB connector is the highest component
|
||||
spacer_z = pcb_top + 2*tolerance ; // spacer on uSD side
|
||||
|
||||
// outside box dimension
|
||||
box_x = in_x + 2 * wall_thickness ;
|
||||
box_y = in_y + 2 * wall_thickness ;
|
||||
box_z = in_z + wall_thickness ; // without cover
|
||||
cover_z = cover_thickness + cover_overlap ; // box cover height
|
||||
edge_offset = wall_thickness - edge_thickness ; // box cover edge offset
|
||||
USB_sep = USBr_y - USBl_y - USB_w + tolerance ; // separation between USB connectors
|
||||
mask_z = clearance_z - 2 * tolerance ; // USB connector mask, cover side
|
||||
|
||||
// cover spacer to hold PCB in place
|
||||
USB_spacer = cover_thickness + clearance_z ;
|
||||
Eth_spacer = cover_thickness + clearance_z + device_z - Ether_z - tolerance ;
|
||||
Con_spacer_x = wall_thickness + uSD_x + (device_x + hole_x2) / 2 ; // USB and Ethernet connectors
|
||||
PCB_spacer = cover_thickness + clearance_z + device_z - PCB_z - tolerance ;
|
||||
PCB_spacer_x = wall_thickness + uSD_x + (G_Led_x + hole_x1) / 2 ;
|
||||
|
||||
// print dimensions for control
|
||||
echo(box_x = box_x) ;
|
||||
echo(box_y = box_y) ;
|
||||
echo(box_z = box_z) ;
|
||||
echo(cover_z = cover_z) ;
|
||||
echo(in_x = in_x) ;
|
||||
echo(in_y = in_y) ;
|
||||
echo(in_z = in_z) ;
|
||||
echo(G_Led_x = G_Led_x) ;
|
||||
echo(USB_sep = USB_sep) ;
|
||||
echo(cover_z = cover_z) ;
|
||||
echo(USB_spacer = USB_spacer) ;
|
||||
echo(Eth_spacer = Eth_spacer) ;
|
||||
echo(Con_spacer_x = Con_spacer_x) ;
|
||||
echo(PCB_spacer = PCB_spacer) ;
|
||||
echo(PCB_spacer_x = PCB_spacer_x) ;
|
||||
|
||||
|
||||
// create device
|
||||
if (test_fit == 1) {
|
||||
// test fit
|
||||
box_bottom() ;
|
||||
translate([0, 0, box_z - cover_overlap]) box_top() ;
|
||||
} else {
|
||||
if (top_bottom < 1) {
|
||||
box_bottom() ;
|
||||
} else {
|
||||
if (print == 1) { translate([0, box_y, cover_z]) rotate([180,0,0]) box_top() ; }
|
||||
else { box_top() ; }
|
||||
if (top_bottom > 1) {
|
||||
translate([0, -100, 0])
|
||||
box_bottom() ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// modules
|
||||
include <shapes.scad>
|
||||
|
||||
module right_cutouts() { // position from PCB lower left corner
|
||||
bezel = 4*PWRplug_d ; // to limit overhang angle for manufacturing
|
||||
|
||||
translate([ PWR_x - tolerance - PWR_w/2, 0, tolerance])
|
||||
cube([ PWR_w + 2*tolerance, wall_thickness + tolerance, PWR_z + 4*tolerance]); // power
|
||||
translate([PWR_x, 0, PWR_z/2 + 3*tolerance]) rotate ([-90, 0,0]) // stamping for power plug
|
||||
truncated_square_pyramid(PWRplug_w + bezel,PWRplug_h + bezel,PWRplug_w,PWRplug_h,PWRplug_d) ;
|
||||
|
||||
translate([ hdmi_x - tolerance - hdmi_w/2, wall_thickness - hdmi_y -2*tolerance, 3*tolerance])
|
||||
cube([ hdmi_w + 2*tolerance, hdmi_y + 3*tolerance, hdmi_z + tolerance]) ; // hdmi
|
||||
translate([audio_x, wall_thickness + tolerance, audio_z - audio_w/2 + 2*tolerance]) {
|
||||
rotate ([90, 0, 0]) cylinder(h = audio_y, r = audio_w/2 + 3*tolerance) ; } // audio
|
||||
}
|
||||
|
||||
module back_cutouts() { // position on back side from PCB on Y axis
|
||||
translate([0, USBl_y - USB_w/2, USB_z/2]) // upper-left USB
|
||||
cube([wall_thickness +tolerance, USB_w +USB_sep, 2*USB_z]) ; // Z size large enough!
|
||||
|
||||
translate([0, USBr_y - USB_w/2, 0]) // lower-right USB
|
||||
cube([wall_thickness +tolerance, USB_w + 3*tolerance, 2*USB_z]) ; // Z size large enough!
|
||||
}
|
||||
|
||||
module box_bottom() {
|
||||
difference () {
|
||||
union() { // box + added structures
|
||||
// basic box
|
||||
difference(){
|
||||
round_cube(box_x, box_y, box_z, rounding_radius) ;
|
||||
translate([wall_thickness, wall_thickness, wall_thickness])
|
||||
round_cube(in_x, in_y, in_z, in_r) ;
|
||||
}
|
||||
|
||||
// add inside structure
|
||||
translate([wall_thickness, wall_thickness, wall_thickness]) union() {
|
||||
// add uSD side wall spacer
|
||||
difference() {
|
||||
cube([uSD_x, in_y, spacer_z]) ;
|
||||
translate([0, uSD_y - uSD_w, 0])
|
||||
cube([uSD_x, 2*uSD_w, spacer_z]) ;
|
||||
}
|
||||
|
||||
// add PCB spacers
|
||||
translate([uSD_x, 0, 0])
|
||||
spacers(hole_x1 + tolerance, hole_x2 + tolerance,
|
||||
hole_y + tolerance, device_y - hole_y + tolerance,
|
||||
riser_r, riser_z) ;
|
||||
}
|
||||
}
|
||||
|
||||
// substract cutouts
|
||||
union() {
|
||||
translate([wall_thickness + uSD_x, 0, wall_thickness + pcb_top])
|
||||
right_cutouts() ;
|
||||
translate([box_x - wall_thickness, wall_thickness, wall_thickness + pcb_top + 3*tolerance])
|
||||
back_cutouts() ;
|
||||
translate([edge_offset, edge_offset, box_z - cover_overlap])
|
||||
round_cube(box_x - 2*edge_offset, box_y - 2*edge_offset, cover_overlap,
|
||||
rounding_radius - edge_offset) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module box_top() {
|
||||
difference () {
|
||||
union() {
|
||||
// basic cover
|
||||
difference(){
|
||||
round_cube(box_x, box_y, cover_z, rounding_radius) ;
|
||||
union() {
|
||||
translate([wall_thickness, wall_thickness, 0])
|
||||
round_cube(in_x, in_y, cover_z - cover_inside_t, in_r) ;
|
||||
translate([0, 0, 0])
|
||||
round_belt(box_x, box_y, cover_overlap, rounding_radius, edge_offset) ;
|
||||
// USB connector cut-out
|
||||
translate([box_x - wall_thickness, wall_thickness + USBl_y - USB_w/2, 0])
|
||||
cube([wall_thickness, USBr_y - USBl_y + tolerance, cover_overlap]) ;
|
||||
}
|
||||
}
|
||||
|
||||
// add connector covers
|
||||
translate([box_x - wall_thickness, wall_thickness, cover_overlap])
|
||||
//translate([box_x - wall_thickness, wall_thickness, 0])
|
||||
union() {
|
||||
translate([0, USBl_y - USB_w/2 + 0.5*tolerance, -mask_z])
|
||||
cube([wall_thickness, USBr_y - USBl_y + USB_w + tolerance, mask_z]) ;
|
||||
translate([0, USBl_y + USB_w/2 + tolerance, -(mask_z + USB_z/2) + 1.5*tolerance])
|
||||
cube([wall_thickness, USB_sep + USB_w + 0.5*tolerance, mask_z + USB_z/2]) ;
|
||||
}
|
||||
|
||||
// add spacers
|
||||
translate([Con_spacer_x, wall_thickness + Ether_y, cover_z - Eth_spacer])
|
||||
cylinder(h = Eth_spacer, r = Top_spacer_r) ;
|
||||
translate([Con_spacer_x, wall_thickness + USBr_y, cover_z - USB_spacer])
|
||||
cylinder(h = USB_spacer, r = Top_spacer_r) ;
|
||||
translate([PCB_spacer_x, wall_thickness + LedBtn_y, cover_z - PCB_spacer])
|
||||
cylinder(h = PCB_spacer, r = Top_spacer_r) ;
|
||||
|
||||
}
|
||||
|
||||
// substract cutouts (holes for LEDs and push-button)
|
||||
translate([wall_thickness + uSD_x, wall_thickness, 0]) union() {
|
||||
translate([G_Led_x, LedBtn_y, 0])
|
||||
cylinder(h = cover_z, r = Led_r + tolerance) ;
|
||||
translate([Y_Led_x, LedBtn_y, 0])
|
||||
cylinder(h = cover_z, r = Led_r + tolerance) ;
|
||||
translate([R_Led_x, LedBtn_y, 0])
|
||||
cylinder(h = cover_z, r = Led_r + tolerance) ;
|
||||
translate([Btn_x, LedBtn_y, 0])
|
||||
cylinder(h = cover_z, r = Btn_r + tolerance/2) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- end of file ---
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
// raspberry pi model b+ case top button
|
||||
//
|
||||
// v 1.2 - 06/02/2015 - initial release (MD)
|
||||
//
|
||||
|
||||
// parameters
|
||||
$fn = 50 ;
|
||||
|
||||
// parameters copied from myRaspiBp.scad
|
||||
cover_inside_t = 2.00 ; // box cover material thickess
|
||||
clearance_z = 2.00 ; // clearance on Z axis for daughter board
|
||||
Btn_r = 4.00 ; // push button radius
|
||||
foot_z = 2.00 ; // foot thickness
|
||||
|
||||
// specific parameters
|
||||
Btn_protrusion = 2.00 ;
|
||||
Btn_foot_r_extension = 1.50 ;
|
||||
Btn_top_rounding = 8 ;
|
||||
|
||||
// derived parameters
|
||||
z_size = cover_inside_t + clearance_z + Btn_protrusion ; // button z dimension
|
||||
foot_r = Btn_r + Btn_foot_r_extension ; // button foot radius
|
||||
|
||||
// modules
|
||||
include <shapes.scad>
|
||||
|
||||
// create device
|
||||
union() {
|
||||
cylinder(h= foot_z, r= foot_r) ;
|
||||
|
||||
difference() {
|
||||
translate([0, 0, z_size - Btn_top_rounding])
|
||||
intersection() {
|
||||
cylinder(h = Btn_top_rounding, r = Btn_r) ;
|
||||
halfsphere (Btn_top_rounding) ;
|
||||
}
|
||||
translate([0, 0, -foot_r/2])
|
||||
cube( size = [2*foot_r, 2*foot_r, foot_r], center=true) ;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// --- end of file ---
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,60 @@
|
|||
// Advanced shapes
|
||||
//
|
||||
// v 1.0 - 24/01/2015 - initial release (MD)
|
||||
// v 1.1 - 05/02/2014 - added half-sphere (MD)
|
||||
//
|
||||
|
||||
module round_cube(x,y,z,r) {
|
||||
hull() {
|
||||
translate([r, r, 0]) cylinder(h = z, r = r) ;
|
||||
translate([r, y - r, 0]) cylinder(h = z, r = r) ;
|
||||
translate([x - r, r, 0]) cylinder(h = z, r = r) ;
|
||||
translate([x - r, y - r, 0]) cylinder(h = z, r = r) ;
|
||||
}
|
||||
}
|
||||
|
||||
module round_belt(x,y,z,r,t) {
|
||||
// x, y, z, r are outer dimensions, thickness t is inwards
|
||||
difference() {
|
||||
round_cube(x, y, z, r) ;
|
||||
translate([t, t, 0]) round_cube(x-2*t, y-2*t, z, r-t) ;
|
||||
}
|
||||
}
|
||||
|
||||
module spacers(x1,x2,y1,y2,z,r) {
|
||||
translate([x1, y1, 0]) cylinder(h = z, r = r) ;
|
||||
translate([x1, y2, 0]) cylinder(h = z, r = r) ;
|
||||
translate([x2, y1, 0]) cylinder(h = z, r = r) ;
|
||||
translate([x2, y2, 0]) cylinder(h = z, r = r) ;
|
||||
}
|
||||
|
||||
module truncated_square_pyramid(x1,y1,x2,y2,z) {
|
||||
dx = (x1-x2)/2 ;
|
||||
dy = (y1-y2)/2 ;
|
||||
ax = 90 - atan2(z, dx) ;
|
||||
ay = 90 - atan2(z, dy) ;
|
||||
|
||||
difference() {
|
||||
translate([0, 0, z/2]) cube(size=[x1,y1,z], center=true) ;
|
||||
union() {
|
||||
translate([-x1/2, 0, 0]) rotate([0, ax, 0])
|
||||
translate([-x1/2, 0, z]) cube(size=[x1,y1,2*z], center=true) ;
|
||||
translate([ x1/2, 0, 0]) rotate([0, -ax, 0])
|
||||
translate([ x1/2, 0, z]) cube(size=[x1,y1,2*z], center=true) ;
|
||||
translate([0, -y1/2, 0]) rotate([-ay, 0, 0])
|
||||
translate([0, -y1/2, z]) cube(size=[x1,y1,2*z], center=true) ;
|
||||
translate([0, y1/2, 0]) rotate([ ay, 0, 0])
|
||||
translate([0, y1/2, z]) cube(size=[x1,y1,2*z], center=true) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module halfsphere( r) {
|
||||
difference() {
|
||||
sphere (r = r) ;
|
||||
translate([0, 0, -r/2])
|
||||
cube(size=[2*r, 2*r, r], center=true) ;
|
||||
}
|
||||
}
|
||||
|
||||
// --- end of file ---
|
Loading…
Reference in New Issue