mirror of
git://projects.qi-hardware.com/ben-counterweight.git
synced 2024-12-11 10:11:53 +02:00
Change wood size for 4th mold. Improved documentation.
- cw.py: switch from 1/2"x2" wood to 1"x3" - README: explain what we need to protect against - README: added more process details - README: merged g2gp pass into "doit" - doit: script for final machine-specific alignment and translation
This commit is contained in:
parent
d497d6740f
commit
709838ab46
60
README
60
README
@ -46,16 +46,25 @@ From the bottom to the top, we have the following elements:
|
|||||||
- the Ben's main PCB
|
- the Ben's main PCB
|
||||||
|
|
||||||
|
|
||||||
Protection
|
Dangers and protection
|
||||||
----------
|
----------------------
|
||||||
|
|
||||||
|
The counterweight contains lead, which is toxic and also conducts
|
||||||
|
electricity. While the health risk caused by handling the counterweight
|
||||||
|
is very low compared to other lead sources, it's still a good idea to
|
||||||
|
prevent accidental exposure. While there is normally an air gap between
|
||||||
|
the PCB and the counterweight, they may touch if the countereight is
|
||||||
|
improperly installed, if the PCB gets bent, or if the counterweight
|
||||||
|
comes loose for some reason. Electrical contact can cause the Ben to
|
||||||
|
malfunction and may even result in permanent damage.
|
||||||
|
|
||||||
The counterweight is covered by one or more layers of paint, to prevent
|
The counterweight is covered by one or more layers of paint, to prevent
|
||||||
direct skin contact with the lead during handling. The paint may also
|
direct skin contact with the lead during handling. The paint may also
|
||||||
offer some amount of protection against electrical contact.
|
offer some amount of protection against electrical contact.
|
||||||
|
|
||||||
The counterweight is covered by a layer of hard plastic that isolates
|
A layer of hard plastic is placed on top of the counterweight, to
|
||||||
from electrical contact and that also resists being punctured by pointy
|
isolate it from electrical contact. The plastic also resists being
|
||||||
components or solder joints of the main PCB.
|
punctured by pointy components or solder joints of the main PCB.
|
||||||
|
|
||||||
Finally, all elements on the main PCB that are unusually tall are taped
|
Finally, all elements on the main PCB that are unusually tall are taped
|
||||||
over, to further reduce the risk of them working their way into the
|
over, to further reduce the risk of them working their way into the
|
||||||
@ -71,18 +80,45 @@ gravity casting with a Roland Modela MDX-15 CNC mill.
|
|||||||
|
|
||||||
- analyze geometry, e.g., by viewing ben-bottom-inside-500um
|
- analyze geometry, e.g., by viewing ben-bottom-inside-500um
|
||||||
- define CAD model in cw.py
|
- define CAD model in cw.py
|
||||||
- generate in HeeksCAD with "import cw" (requires HeeksCNC)
|
- generate in HeeksCAD with "import cw" (requires HeeksCNC and
|
||||||
- define Zig-Zag operation
|
HeeksPython)
|
||||||
- generate Python script and run it (takes a while)
|
- define Zig-Zag operation (*)
|
||||||
- save NC file
|
- generate Python script and run it (takes a while, about 10-20
|
||||||
- convert G-code to gnuplot, with cncmap/g2gp
|
minutes for the Python script on my Q6600, plus 20-100 minutes for
|
||||||
|
HeeksCAD to read the data back)
|
||||||
|
- save NC file, using the name specified in "doit" (see below)
|
||||||
- mount piece and determine geometry with millp
|
- mount piece and determine geometry with millp
|
||||||
(from http://svn.openmoko.org/developers/werner/cncmap)
|
(from http://svn.openmoko.org/developers/werner/cncmap)
|
||||||
- define conversion in "doit" script (to do: put in repository)
|
- define conversion in "doit" script
|
||||||
- coordinate transform and conversion to Roland's RML-1
|
- coordinate transform and conversion to Roland's RML-1 (**)
|
||||||
./doit >job
|
./doit >job
|
||||||
- send job with cncmap/spool
|
- send job with cncmap/spool
|
||||||
|
|
||||||
|
(*) In this case, the following parameters were used:
|
||||||
|
|
||||||
|
- 32 mil Carbide End Mill
|
||||||
|
- step over 0.2 mm (default)
|
||||||
|
- step down 2 mm
|
||||||
|
- start depth 0.5 mm
|
||||||
|
- final depth 6.5 mm
|
||||||
|
- rapid down to height 0.5 mm
|
||||||
|
|
||||||
|
These parameters depend on the mill, the tool, and the material.
|
||||||
|
Note that, in my setup, tool speed and the clearance height are
|
||||||
|
set by the "doit" script, and HeeksCAD's settings have no effect.
|
||||||
|
|
||||||
|
The CAD model uses only an approximation of machine coordinates.
|
||||||
|
The final transformation and alignment is also made by "doit".
|
||||||
|
|
||||||
|
Total machine time is about 7 hours for 2" pine, about 11 hours
|
||||||
|
for 3". Zig-Zag is quite inefficient and repeats some paths many
|
||||||
|
times. A better tool path could reduce machine time to about a
|
||||||
|
third.
|
||||||
|
|
||||||
|
(**) HeeksCAD currently doesn't generate RML-1 output. I'm using a set
|
||||||
|
of utilities that process toolpaths in the gnuplot format and
|
||||||
|
generate RML-1 from that. Hence the detour.
|
||||||
|
|
||||||
|
|
||||||
Gravity casting
|
Gravity casting
|
||||||
---------------
|
---------------
|
||||||
|
17
cw.py
17
cw.py
@ -41,14 +41,25 @@ channel_radius = 1 # mm
|
|||||||
# metal, and to create a buffer for thermal energy.
|
# metal, and to create a buffer for thermal energy.
|
||||||
#
|
#
|
||||||
inlet_radius = 6.5
|
inlet_radius = 6.5
|
||||||
inlet_straight = 3
|
inlet_straight = 3 # for 2" wood
|
||||||
|
inlet_straight = 33 # for 3" wood
|
||||||
shaft = 3
|
shaft = 3
|
||||||
|
|
||||||
#
|
#
|
||||||
# This maximum y dimension of the piece from which the mold is machined
|
# This maximum y dimension of the piece from which the mold is machined
|
||||||
#
|
#
|
||||||
ymax_piece = 45
|
ymax_piece = 45 # 2" wood
|
||||||
|
ymax_piece = 75 # 3" wood, piece is really 70 mm, but we need slack
|
||||||
|
|
||||||
|
#
|
||||||
|
# Mold compression. If using a wooden mold, the two parts compress, making the
|
||||||
|
# counterweight a bit thinner.
|
||||||
|
#
|
||||||
|
mold_compression = 0.1
|
||||||
|
|
||||||
|
#
|
||||||
|
# Cumulative mass and torque.
|
||||||
|
#
|
||||||
total_mass = 0
|
total_mass = 0
|
||||||
total_torque = 0
|
total_torque = 0
|
||||||
|
|
||||||
@ -260,7 +271,7 @@ make_base()
|
|||||||
|
|
||||||
if __name__ != "__main__":
|
if __name__ != "__main__":
|
||||||
cad.translate(group, -15, -46, -5)
|
cad.translate(group, -15, -46, -5)
|
||||||
cad.translate(group, 18, 5, 0)
|
cad.translate(group, 18, 5, -mold_compression)
|
||||||
sk = do_rect_cad(0, 0, 0, 120, ymax_piece, 0)
|
sk = do_rect_cad(0, 0, 0, 120, ymax_piece, 0)
|
||||||
cad.extrude(sk, -10)
|
cad.extrude(sk, -10)
|
||||||
sk = cad.getlastobj()
|
sk = cad.getlastobj()
|
||||||
|
46
doit
Executable file
46
doit
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
#
|
||||||
|
# doit - Generate RML-1 job from gnuplot toolpath
|
||||||
|
#
|
||||||
|
|
||||||
|
DIR=/home/moko/svn.openmoko.org/developers/werner/cncmap
|
||||||
|
G2GP=$DIR/g2gp/g2gp
|
||||||
|
RECT=$DIR/rect/rect
|
||||||
|
ALIGN=$DIR/align/align
|
||||||
|
ZMAP=$DIR/zmap/zmap
|
||||||
|
GP2RML=$DIR/gp2rml/gp2rml
|
||||||
|
|
||||||
|
# 1st mold. 1/2"x2" pine. Did't have space for the battery cover's tongue.
|
||||||
|
rdata="10.50 8.40 -33.40 138.30 8.00 -34.00 10.50 50.10 -33.40"
|
||||||
|
rdata="14.50 5.90 -33.40 138.30 5.50 -34.00 14.50 50.10 -33.40"
|
||||||
|
Z=-34
|
||||||
|
|
||||||
|
# 2nd mold. 1/2"x2" pine. Six air outlets.
|
||||||
|
# correction: x+2.5, y-3, z-0.2
|
||||||
|
rdata="11.8 10 -33.9 137 10 -33.6 11.8 51.5 -33.6"
|
||||||
|
rdata="14.3 7 -33.9 137 7 -33.6 14.3 51.5 -33.6"
|
||||||
|
Z=-33.8
|
||||||
|
|
||||||
|
# 3nd mold. 1/2"x2" pine. Seven air outlets.
|
||||||
|
# correction x+2.5, y-2, z-0.2; z is very uneven
|
||||||
|
rdata="12.1 8.1 -33.2 139.4 8.1 -33.3 12.1 50.2 -33.9"
|
||||||
|
rdata="15.6 6.1 -33.2 139.4 6.1 -33.3 15.6 50.2 -33.9"
|
||||||
|
Z=-33.5
|
||||||
|
|
||||||
|
# 4th mold. 1"x3" pine. (Shop changed wood sizes. 1/2"x2" is now too small.)
|
||||||
|
# correction: x+3.5, y-1.5, z-0.0
|
||||||
|
# rotation: compensate for piece misalignment, y0 is 1 mm larger than y1
|
||||||
|
rdata="11.8 8.5 -23.4 11.8 73.3 -23.5 137.3 8.5 -23.2"
|
||||||
|
rdata="15.3 7.0 -23.4 15.8 73.3 -23.5 137.3 6.0 -23.2"
|
||||||
|
Z=-23.5
|
||||||
|
|
||||||
|
# cast*.g is HeeksCAD's NC output.
|
||||||
|
|
||||||
|
rect=`$RECT $rdata | awk '{$3 = ""; print}'`
|
||||||
|
|
||||||
|
$G2GP cast4.g |
|
||||||
|
awk '{ if ($3 != "") $3 += '$Z'; print $0; }' |
|
||||||
|
$ALIGN 0 1 $rect |
|
||||||
|
# angle, reference (lower left), rect
|
||||||
|
$GP2RML 20 5 5
|
||||||
|
# clearance, xy speed, z speed
|
Loading…
Reference in New Issue
Block a user