1
0
mirror of git://projects.qi-hardware.com/ben-counterweight.git synced 2025-01-14 18:41:06 +02:00

Added a cover sheet to separate counterweight and main PCB.

- README: describe mechanical stacking and the function of the various
  protective layers
- cvr.py: model of the cover sheet, with gnuplot and HeeksCAD output
This commit is contained in:
Werner Almesberger 2010-08-05 14:58:16 -03:00
parent 6dcaa390b4
commit fcd83689fa
2 changed files with 147 additions and 0 deletions

30
README Normal file
View File

@ -0,0 +1,30 @@
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
Protection
----------
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.
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.

117
cvr.py Executable file
View File

@ -0,0 +1,117 @@
#!/usr/bin/python
#
# gnuplot the outline
#
def outline_gnuplot(points):
x0 = points[0]
y0 = points[1]
while len(points):
print points.pop(0), points.pop(0)
print x0, y0
#
# make a HeeksCAD sketch of the outline
#
def cad_line(sk, x0, y0, x1, y1):
cad.line(x0, y0, x1, y1)
cad.add(sk, cad.getlastobj())
def outline_cad(points):
cad.sketch()
sk = cad.getlastobj()
x0 = points.pop(0)
y0 = points.pop(0)
last_x = x0
last_y = y0
while len(points):
x = points.pop(0)
y = points.pop(0)
cad_line(sk, last_x, last_y, x, y)
last_x = x
last_y = y
cad_line(sk, last_x, last_y, x0, y0)
cad.reorder(sk)
return sk
def closed_outline(*args):
do(list(args))
#
# Make the cover sheet 2 mm larger than the counterweight on all sides. We need
# the following exceptions to avoid mechanical interference:
#
# - at the power connector, keep the ymin edge flush with the counterweight
# - follow the counterweight's J-shaped space for the reset button, with the
# border reduced from 2 mm to 0.5 mm
# - next to the long side of the battery, follow the counterweight's edge
# - also follow the counterweight's bay for the battery cover's tongue and
# make it even 0.5 mm larger, anticipating imperfect registration
#
# Also, as a simplification, we don't follow steps and recesses in these cases:
#
# - 1 mm steps on the left and right side. Just use the larger size.
# - the whole sponge area. Just put the cover on top of the sponge.
# - all recesses near the batter, except the one for the lid's central tongue
#
# The above simplifications are possible, because, being on top of the
# counterweight, we've already cleared the obstacles these steps and recesses
# are designed to avoid.
#
#
# Note: to visualize the shape defined below, plot the counterweight in 2D with
# gnuplot and follow the shape it the mouse.
#
# To visualize the result, do this:
#
# ./cw.py >cw.gnuplot
# ./cvr.py >cvr.gnuplot
# gnuplot
# gnuplot> set style data lines
# gnuplot> plot "cw.gnuplot", "cvr.gnuplot"
#
def outline():
closed_outline(
# counterweight corners: (16, 46) and (15, 60)
13, 46,
# (15, 69.5)
13, 71.5,
# (82.5, 65), (82.5, 64), (89.5, 64), (89.5, 69)
83, 71.5,
83, 64.5, 89, 64.5, 89, 71,
# (100, 69)
102, 71,
# (99.5, 46)
102, 44,
# (88, 46)
86, 44,
# (88, 55), (82, 50)
86, 50,
# (59.5, 55), (59.5, 56.5), (52.5, 56.5), (52.5, 55)
60, 50,
60, 57, 52, 57, 52, 50,
# (24, 55)
26, 50,
# (24, 46)
26, 46)
if __name__ == "__main__":
do = outline_gnuplot
else:
import HeeksPython as cad
do = outline_cad
outline()