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:
parent
6dcaa390b4
commit
fcd83689fa
30
README
Normal file
30
README
Normal 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
117
cvr.py
Executable 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()
|
Loading…
x
Reference in New Issue
Block a user