mirror of
git://projects.qi-hardware.com/ben-counterweight.git
synced 2025-01-14 06:51:05 +02:00
709838ab46
- 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
129 lines
4.9 KiB
Plaintext
129 lines
4.9 KiB
Plaintext
Counterweight
|
|
=============
|
|
|
|
This project defines a counterweight to prevent the Ben NanoNote from
|
|
falling over, and describes the process of making a wooden mold for
|
|
casting the counterweight using a lead alloy commonly used for
|
|
soldering.
|
|
|
|
|
|
Problem statement
|
|
-----------------
|
|
|
|
The weight distribution of the Ben NanoNote makes the device unstable
|
|
and often fall over when the display is opened. This can be remedied by
|
|
adding a counterweight near the front of the bottom shell.
|
|
|
|
Experiments have shown that a torque of about 2.5 mNm is sufficient to
|
|
balance the device with the display fully opened. A feeling of solid
|
|
stability is reached around 6.5 mNm.
|
|
|
|
The counterweight defined in this project is made of plumbing solder, a
|
|
Pb67Sn33 alloy with a density of about 10.0 g/ccm. The counterweight
|
|
has a nominal mass of 17.9 g and a nominal torque of 7.3 mNm. Due to
|
|
mold compression (which one could compensate for) and process
|
|
tolerances, the mass achieved in DIY casting ranges from about 14.5 g
|
|
to 17 g. This mass is slightly increased by the addition of protective
|
|
painting.
|
|
|
|
In experiments, the torque produced by these counterweights proved to
|
|
be sufficient to give the user the feeling that the Ben is solidly
|
|
standing on its feet.
|
|
|
|
|
|
Mechanical stacking
|
|
-------------------
|
|
|
|
From the bottom to the top, we have the following elements:
|
|
|
|
- Ben case, bottom shell
|
|
- a few drops of glue or silicone, to hold the counterweight in place
|
|
- the counterweight, covered by protective paint
|
|
- a few drops of glue or silicone, to keep the cover sheet in place
|
|
- a cover sheet of thin hard plastic, e.g., the type of plastic film
|
|
used to make transparencies
|
|
- isolating tape, applied to tall components of the Ben's main PCB
|
|
- the Ben's main PCB
|
|
|
|
|
|
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.
|
|
|
|
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
|
|
counterweight. Right now, the only component where problems are
|
|
considered likely is the buzzer.
|
|
|
|
|
|
Workflow
|
|
--------
|
|
|
|
This is the workflow for generating the CAD model and making a mold for
|
|
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 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
|
|
- 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
|
|
---------------
|
|
|
|
Gravity casting is an efficient process for producing small numbers of
|
|
counterweights. The mold is milled from a block of pinewood and has a
|
|
life expectancy of about 20-40 cycles.
|