From 709838ab46ae3f8e413357b281af23d6e0b0ba10 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Sun, 8 Aug 2010 21:28:36 -0300 Subject: [PATCH] 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 --- README | 60 ++++++++++++++++++++++++++++++++++++++++++++++------------ cw.py | 17 ++++++++++++++--- doit | 46 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 15 deletions(-) create mode 100755 doit diff --git a/README b/README index 26b1735..85d82a3 100644 --- a/README +++ b/README @@ -46,16 +46,25 @@ From the bottom to the top, we have the following elements: - 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 direct skin contact with the lead during handling. The paint may also offer some amount of protection against electrical contact. -The counterweight is covered by a layer of hard plastic that isolates -from electrical contact and that also resists being punctured by pointy -components or solder joints of the main PCB. +A layer of hard plastic is placed on top of the counterweight, to +isolate it from electrical contact. The plastic also resists being +punctured by pointy components or solder joints of the main PCB. 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 @@ -71,18 +80,45 @@ gravity casting with a Roland Modela MDX-15 CNC mill. - analyze geometry, e.g., by viewing ben-bottom-inside-500um - define CAD model in cw.py -- generate in HeeksCAD with "import cw" (requires HeeksCNC) -- define Zig-Zag operation -- generate Python script and run it (takes a while) -- save NC file -- convert G-code to gnuplot, with cncmap/g2gp +- generate in HeeksCAD with "import cw" (requires HeeksCNC and + HeeksPython) +- define Zig-Zag operation (*) +- generate Python script and run it (takes a while, about 10-20 + 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 (from http://svn.openmoko.org/developers/werner/cncmap) -- define conversion in "doit" script (to do: put in repository) -- coordinate transform and conversion to Roland's RML-1 +- define conversion in "doit" script +- coordinate transform and conversion to Roland's RML-1 (**) ./doit >job - 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 --------------- diff --git a/cw.py b/cw.py index c9d4239..1d4a4b0 100755 --- a/cw.py +++ b/cw.py @@ -41,14 +41,25 @@ channel_radius = 1 # mm # metal, and to create a buffer for thermal energy. # inlet_radius = 6.5 -inlet_straight = 3 +inlet_straight = 3 # for 2" wood +inlet_straight = 33 # for 3" wood shaft = 3 # # 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_torque = 0 @@ -260,7 +271,7 @@ make_base() if __name__ != "__main__": 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) cad.extrude(sk, -10) sk = cad.getlastobj() diff --git a/doit b/doit new file mode 100755 index 0000000..2a28483 --- /dev/null +++ b/doit @@ -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