diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1bd4d77 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "MCAD"] + path = MCAD + url = https://github.com/SolidCode/MCAD.git diff --git a/MCAD b/MCAD new file mode 160000 index 0000000..9a958fd --- /dev/null +++ b/MCAD @@ -0,0 +1 @@ +Subproject commit 9a958fd11b0a6b5f8becd37c4f8a42f585abfcd8 diff --git a/instructions/laser-cutter.md b/instructions/laser-cutter.md new file mode 100644 index 0000000..b924353 --- /dev/null +++ b/instructions/laser-cutter.md @@ -0,0 +1,33 @@ +# Making Bitbeams With Basswood On a Laser Cutter + +You can buy 5/16" x 5/16" basswood dowel at some art stores - with a little +laser cutting, this is an easy way to make bitbeam. + +## 1. Making a Stencil + +The holes in bitbeams need to be precisely lined up - the easiest way to +do this is to make a 'stencil' form, with grooves to hold the bitbeams in +place. We can laser cut this out of a flat piece of wood or cardboard. + +[TODO] Make stencil file + +[TODO] Image + +## 2. Cutting Dowels to length + +Now you have a stencil, you need to cut the dowels to length, to fit the +holes. You can either use a saw for this, or the laser cutter. + + +## 3. Cutting the Holes + +Fill the grooves in the stencil with the pieces if dowel. Now make sure that +the stencil is lined up precisely with the corner of the laser cutter. The +next file is designed to drill holes in precisely the center of the dowels. + +[TODO] Make hole file + +[TODO] Image + +Once the laser has finished, you need to flip each piece over 90 degrees and +print the holes again. diff --git a/src/bitbeam-arduino-plate.scad b/src/bitbeam-arduino-plate.scad index 6d0f808..4e0d4e9 100644 --- a/src/bitbeam-arduino-plate.scad +++ b/src/bitbeam-arduino-plate.scad @@ -2,26 +2,27 @@ use beam_width = 7.9375; // 5/16 inches -projection(cut=true) { - difference(){ +difference(){ // Base plate - cube([8*9, beam_width * 9, 1]); + square([8*9, beam_width * 9]); // Bottom row for (x=[8 : 8 : beam_width * 10]) { - translate([x-4, beam_width/2, -10]) - cylinder(r=2.4, h=20, $fn=25); + translate([x-4, beam_width/2, 0]) + circle(r=2.4, $fn=25); } // Top row for (x=[8 : 8 : beam_width * 10]) { - translate([x-4, (beam_width/2) + beam_width * 8, -10]) - cylinder(r=2.4, h=20, $fn=25); + translate([x-4, (beam_width/2) + beam_width * 8, 0]) + circle(r=2.4, $fn=25); } - translate([17,60,0]) MountingHoles(); - } + translate([17,60,0]) + projection(cut=true) { + MountingHoles(); + } } // Uncomment next line if you want to see the entire board diff --git a/src/bitbeam-nema-17-mount.scad b/src/bitbeam-nema-17-mount.scad new file mode 100644 index 0000000..a140304 --- /dev/null +++ b/src/bitbeam-nema-17-mount.scad @@ -0,0 +1,23 @@ +include <../MCAD/motors.scad> + +beam_width = 7.9375; // 5/16 inches + +difference(){ + + // Base plate + square([8*5, beam_width * 7]); + + // Bottom row + for (x=[8 : 8 : beam_width * 6]) { + translate([x-4, beam_width/2, 0]) + circle(r=2.4, $fn=25); + } + + // Top row + for (x=[8 : 8 : beam_width * 6]) { + translate([x-4, (beam_width/2) + beam_width * 6, 0]) + circle(r=2.4, $fn=25); + } + + translate([20, 28, 0]) stepper_motor_mount(17); +} diff --git a/src/bitbeam-nema-23-mount.scad b/src/bitbeam-nema-23-mount.scad new file mode 100644 index 0000000..2023ff1 --- /dev/null +++ b/src/bitbeam-nema-23-mount.scad @@ -0,0 +1,23 @@ +include <../MCAD/motors.scad> + +beam_width = 7.9375; // 5/16 inches + +difference(){ + + // Base plate + square([8*7, beam_width * 9]); + + // Bottom row + for (x=[8 : 8 : beam_width * 8]) { + translate([x-4, beam_width/2, 0]) + circle(r=2.4, $fn=25); + } + + // Top row + for (x=[8 : 8 : beam_width * 8]) { + translate([x-4, (beam_width/2) + beam_width * 8, 0]) + circle(r=2.4, $fn=25); + } + + translate([28, 36, 0]) stepper_motor_mount(23); +} diff --git a/src/bitbeam-raspberry-pi-plate.scad b/src/bitbeam-raspberry-pi-plate.scad new file mode 100644 index 0000000..e235ff6 --- /dev/null +++ b/src/bitbeam-raspberry-pi-plate.scad @@ -0,0 +1,35 @@ +/* +Copyright (c) 2013 Timothy Schmidt +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +use + +beam_width = 7.9375; // 5/16 inches + +difference(){ + + // Base plate + square([8*11, beam_width * 9]); + + // Bottom row + for (x=[8 : 8 : beam_width * 12]) { + translate([x-4, beam_width/2, 0]) + circle(r=2.4, $fn=25); + } + + // Top row + for (x=[8 : 8 : beam_width * 12]) { + translate([x-4, (beam_width/2) + beam_width * 8, 0]) + circle(r=2.4, $fn=25); + } + + translate([25.5,26,0]) MountingHoles(); +} \ No newline at end of file diff --git a/src/bitbeam-tripod-camera-plate.scad b/src/bitbeam-tripod-camera-plate.scad new file mode 100644 index 0000000..41d371d --- /dev/null +++ b/src/bitbeam-tripod-camera-plate.scad @@ -0,0 +1,28 @@ +beam_width = 7.9375; // 5/16 inches +// professional tripod mounting screws are 3/8-16 +// mounting_hole = 3/8 * 25.4; + +// consumer tripod mounting screws are 1/4-20 +mounting_hole = 1/4 * 25.4; + +clearance = 0.15; + +difference(){ + + // Base plate + square([8*3, beam_width * 4]); + + // Bottom row + for (x=[8 : 8 : beam_width * 4]) { + translate([x-4, beam_width/2, 0]) + circle(r=2.4, $fn=25); + } + + // Top row + for (x=[8 : 8 : beam_width * 4]) { + translate([x-4, (beam_width/2) + beam_width * 3, 0]) + circle(r=2.4, $fn=25); + } + + translate([12, beam_width * 4 / 2, 0]) circle(r=(mounting_hole / 2) + clearance, $fn=25); +} diff --git a/src/bitbeam.scad b/src/bitbeam.scad index 10413d4..f79b4ea 100644 --- a/src/bitbeam.scad +++ b/src/bitbeam.scad @@ -10,19 +10,66 @@ beam_width = 7.9375; // 5/16 inches module beam(number_of_holes) { beam_length = number_of_holes * 8; - projection(cut=true, center=true) { difference(){ // Draw the beam - translate([-4, -beam_width/2, 0]) - cube([beam_length, beam_width, 1]); + translate([-4, -beam_width/2,0]) + cube(size=[beam_length, beam_width, beam_width]); // Cut the holes - for (x=[4 : 8 : beam_length]) { - translate([x-4, 0, -1]) - cylinder(r=2.4, h=3, $fn=30); - } + for (x=[4 : 8 : beam_length]) { + translate([x-4, 0, 0]){ + translate([0, 0, -1]){ + cylinder(r=2.4, h=beam_width+2, $fn=30); + } + rotate(a=[90, 0, 0]) { + translate([0, beam_width/2, -beam_width/2-1]){ + cylinder(r=2.4, h=beam_width+2, $fn=30); + } + } + } + } } - } } -beam(13); + +module beam_to(start=[0,0,0], length=5, direction=[0,0,0]){ + translate(start * beam_width){ + rotate(direction){ + translate([0, 0, -beam_width/2]){ // rotate around middle of beam + beam(length); + } + } + } +} + +module screw(start=[0,0,0], length=2, direction=[0,0,0]){ + color("lavender"){ + translate(start * beam_width){ + rotate(direction){ + translate([0, 0, -beam_width/2]){ // rotate around middle of beam + + cylinder(r=2.2, h=length*beam_width + beam_width/2, $fn=30); + + translate([0,0,-3]) //Screw head + difference(){ + cylinder(r1=3, r2=4, h=3, $fn=30); + translate([-4.5, -0.5, -0.1]){ + cube([9,1,2]); + } + } + translate([0,0, length*beam_width + 0.2]){ + cylinder(r=5, h=2, $fn=6); + } + + } + } + } + } +} + + +beam_to(); +beam_to([0,1,0], direction=[0,90,0]); +screw(direction=[-90,0,0]); + + diff --git a/src/bitpad.scad b/src/bitpad.scad new file mode 100644 index 0000000..8fa1582 --- /dev/null +++ b/src/bitpad.scad @@ -0,0 +1,29 @@ +use <./bitbeam.scad>; + +scale(0.1){ +rotate([90,-20,0]){ + +beam_to([9,1,0], 27, [0,90,0]); + +beam_to([1,0,-25], 13); +beam_to([10,-6,-26], 27, [0,0,90]); +screw([10,0,-25], 2, [0,0,0]); +screw([9,1,-26], 2, [0,90,0]); +screw([9,1,-25], 2, [90,0,0]); + +beam_to([1,0,-1], 13); +beam_to([10,-6,0], 27, [0,0,90]); +screw([10,0,-1], 2, [0,0,0]); +screw([9,1,0], 2, [0,90,0]); +screw([9,1,-1], 2, [90,0,0]); + + +// iPad +color("gray"){ +translate([90,10,-230]){ +cube([10, 190, 250]); +} +} + +} +} \ No newline at end of file diff --git a/src/raspberry-pi.scad b/src/raspberry-pi.scad new file mode 100644 index 0000000..df9cc24 --- /dev/null +++ b/src/raspberry-pi.scad @@ -0,0 +1,22 @@ +/* +Copyright (c) 2013 Timothy Schmidt +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +// All measurements derived from the diagram available here: +// http://www.raspberrypi.org/wp-content/uploads/2012/12/Raspberry-Pi-Mounting-Hole-Template.png + +module MountingHoles() +{ + circle(r=1.5, $fn=25); + + translate([54.5,25.5,0]) + circle(r=1.5, $fn=25); +} \ No newline at end of file