From fcd83689fa89570f5d096be895fb975dc47a6f6e Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Thu, 5 Aug 2010 14:58:16 -0300 Subject: [PATCH] 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 --- README | 30 +++++++++++++++ cvr.py | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 README create mode 100755 cvr.py diff --git a/README b/README new file mode 100644 index 0000000..c2398ab --- /dev/null +++ b/README @@ -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. diff --git a/cvr.py b/cvr.py new file mode 100755 index 0000000..738368d --- /dev/null +++ b/cvr.py @@ -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()