Major revision after first test

Major revision after first test

- Wider,  center hole becomes a cutout, and coutouts on upper left and right.

// Frame to mount OLFA rotary cutter on a rail and weigh it down.
// Consists of a back plate, a front plate. Additonally,
// a weight holder (made of wood or polycarb) attaches to the
// front plate.
//
// History:
//  2020 May 1: JMJ Created original design
//
use <../common/extrusions.scad>
$fn = 50;
EPSILON = 0.01;
LARGE = 100;
MM = 25.4; // Inch to mm
hole_dist = 3.75*MM;
base_w = 0.4*MM; // from hole to edge
ro = 0.5*MM;
rod_dia = 5/32*1.1 *MM; // To let #8 threaded rod fit easily

// Back plate
module back_plate() {
    extra_below = 0.5*MM; // lower part is 1"
    t = 0.28*3; // 3 layers
    r = rod_dia/2;
    hole_y = base_w + extra_below;
    difference() {
        union() {

            wbase = 2*base_w + hole_dist;
            hbase = 2*base_w + extra_below;
            oblong(wbase, hbase, ro, t);
        }
        translate([base_w, hole_y, -EPSILON])
            cylinder(r=r, h=2*t);
        translate([base_w + hole_dist, hole_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t);
    }
}

// Front plate
module front_plate() {
    extra_below = 0.25*MM; // lower part is 1"
    big_r = 1.25*MM; // Arc above
    t = 0.28*3;
    arc_y_drop = 0.125*MM;
    rod_y = base_w + extra_below;
    hole_y = rod_y - arc_y_drop; // Center of arc - amount below centerline
    big_hole_dia = 1*MM;
    big_hole_h  = 2*MM; // WAS 1.25
    difference() {
        union() {

            wbase = 2*base_w + hole_dist;
            hbase = 2*base_w + extra_below;
             // wide plate
            //oblong(wbase, hbase, ro, t);
            wpad = wbase/6;
            oblong(wpad, hbase, ro, t);
            translate([wbase - wpad, 0, 0])
                oblong(wpad, hbase, ro, t);
            oblong(wbase, hbase*0.7, ro, t);

            // Semi circle - upper half
            translate([base_w + hole_dist/2, hole_y, 0]) {
                difference() {
                    cylinder(r=big_r, h = t);
                    translate([-big_r, -2*big_r, -EPSILON])
                        cube([2*big_r, 2*big_r, 2*t]);
                }
            }
        }
        translate([base_w, rod_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t); // left rod hole
        translate([base_w + hole_dist, rod_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t); // right rod hole
        bdd = big_hole_dia;
        translate([base_w + hole_dist/2 -bdd/2, hole_y - big_hole_h + bdd/2, -EPSILON])
            oblong(bdd, big_hole_h, bdd, 2*t); // center gap

    }
}

back_plate();
translate([0, 5*base_w, 0])
    front_plate();

// Frame to mount OLFA rotary cutter on a rail and weigh it down.
// Consists of a back plate, a front plate. Additonally,
// a weight holder (made of wood or polycarb) attaches to the
// front plate.
//
// History:
//  2020 May 1: JMJ Created original design
//
use <../common/extrusions.scad>
$fn = 50;
EPSILON = 0.01;
LARGE = 100;
MM = 25.4; // Inch to mm
hole_dist = 3.5*MM;
base_w = 0.4*MM; // from hole to edge
ro = 0.5*MM;
rod_dia = 3/16*1.2*MM; // To let #10 threaded rod fit easily

// Back plate
module back_plate() {
    extra_below = 0.5*MM; // lower part is 1"
    t = 0.5;
    r = rod_dia/2;
    hole_y = base_w + extra_below;
    difference() {
        union() {

            wbase = 2*base_w + hole_dist;
            hbase = 2*base_w + extra_below;
            oblong(wbase, hbase, ro, t);
        }
        translate([base_w, hole_y, -EPSILON])
            cylinder(r=r, h=2*t);
        translate([base_w + hole_dist, hole_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t);
    }
}

// Front plate
module front_plate() {
    extra_below = 0.25*MM; // lower part is 1"
    big_r = 1.25*MM; // Arc above
    t = 0.5;
    hole_y = base_w + extra_below;
    big_hole_dia = 1*MM;
    big_hole_h  = 1.25*MM;
    difference() {
        union() {

            wbase = 2*base_w + hole_dist;
            hbase = 2*base_w + extra_below;
            oblong(wbase, hbase, ro, t);
            translate([base_w + hole_dist/2, hole_y, 0]) {
                difference() {
                    cylinder(r=big_r, h = t);
                    translate([-big_r, -2*big_r, -EPSILON])
                        cube([2*big_r, 2*big_r, 2*t]);
                }
            }
        }
        translate([base_w, hole_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t);
        translate([base_w + hole_dist, hole_y, -EPSILON])
            cylinder(r=rod_dia/2, h=2*t);
        bdd = big_hole_dia;
        translate([base_w + hole_dist/2 -bdd/2, hole_y - bdd    /2, -EPSILON])
            oblong(bdd, bdd, bdd/2, 2*t);

    }
}

back_plate();
translate([0, 5*base_w, 0])
    front_plate();


Micrscope attachment adapter for the RoxtockMaxV2

3D print this and attach to the RostockMaxV2 effector platform instead
of the extruder. Then attach the DynoLite to it.

// A washer with base on x-y plane and axis == z-axis
module washer(id, od, h) {
}

// Creates several cylinders along a circle with diameter cd.
// One application: subtract these from a circular gasket.
// The cylinders have diameter pd and height h. The circle is on the x-y
// plane and it's center the origin. The *base* of the punches is on
// the x-y plane. The cylinders are positioned at the specified vector
// of angles.
module radialCylinders(cd, pd, h, angles) {
}

// Creates a segment of a pipe. The center of the segment is the z-axis.
// The base of the segment is the x-y plane. The base inner/outer dia are
// id1/id2 and the top inner/outer dia are id2/od2. The height of the
// segment is h.
module pipeSegment(id1, od1, id2, od2, h) {
}

error: pathspec 'hw/models/rostockMaxAdapter/RostockCenter_v1.scad' did not match any file(s) known to git


improved projector

improved projector

module projector(width, depth, height, Acer_support_height, lensDiameter, lensX, lensY) {
  color("White")
    difference() {
      translate([0, 0, Acer_support_height])
        cube([width, depth, height]);
      rotate([90,0,0])
        translate([lensX, lensY, -depth-2])
          cylinder(20, lensDiameter, lensDiameter / 3 * 2);
    }
}

module pyramid(w, l, h) {
  mw = w/2;
  ml = l/2;
  polyhedron(points = [
    [0,  0,  0],
    [w,  0,  0],
    [0,  l,  0],
    [w,  l,  0],
    [mw, ml, h]
  ], faces = [
    [4, 1, 0],
    [4, 3, 1],
    [4, 2, 3],
    [4, 0, 2],
    //base
    [0, 1, 2],
    [2, 1, 3]
  ]);
}

module projection(center, distToWidth, widthToHeight, dist) {
  w = distToWidth * dist;
  h = widthToHeight * w;
  rotate([0,90,-90])
    translate([-w/2,-h/2,-dist])
      translate(center)
        pyramid(w, h, dist);
}

Acer_support_height = 8; // ~

Acer_size_width  = 264;
Acer_size_depth  = 220;
Acer_size_height =  78;

Acer_lens_diameter = 30; // ~
Acer_lens_x = 55; // ~
Acer_lens_y = Acer_support_height + Acer_size_height / 2; // ~

acer_projector_distances = [112, 225, 337];

module Acer_H6510BD(showProjection=true) {
  projector(Acer_size_width, Acer_size_depth, Acer_size_height, Acer_support_height, Acer_lens_diameter, Acer_lens_x, Acer_lens_y);
  if(showProjection) {
    distToWidth = 192/225;
    widthToHeight = 16/9;
    color([0.75,1,1,0.1]) {
      for(dist = acer_projector_distances)
        projection([-Acer_lens_y,Acer_lens_x,-Acer_size_depth], distToWidth, widthToHeight, dist);
    }

  }
}

module center_projector(pos) {
  if(pos == 1) { // on lens
    translate([-Acer_lens_x,-Acer_size_depth,-Acer_lens_y])
      children();
  } else {
    translate([-Acer_lens_x,-Acer_size_depth,0])
      children();
  }
}

//Acer_H6510BD();

module projector(width, depth, height, Acer_support_height, lensDiameter, lensX, lensY) {
  color("White")
    difference() {
      translate([0, 0, Acer_support_height])
        cube([width, depth, height]);
      rotate([90,0,0])
        translate([lensX, lensY, -depth-2])
          cylinder(20, lensDiameter, lensDiameter / 3 * 2);
    }
}

module pyramid(w, l, h) {
  mw = w/2;
  ml = l/2;
  polyhedron(points = [
    [0,  0,  0],
    [w,  0,  0],
    [0,  l,  0],
    [w,  l,  0],
    [mw, ml, h]
  ], faces = [
    [4, 1, 0],
    [4, 3, 1],
    [4, 2, 3],
    [4, 0, 2],
    //base
    [0, 1, 2],
    [2, 1, 3]
  ]);
}

module projection(center, distToWidth, widthToHeight, dist) {
  w = distToWidth * dist;
  h = widthToHeight * w;
  rotate([0,90,-90])
    translate([-w/2,-h/2,-dist])
      translate(center)
        pyramid(w, h, dist);
}

Acer_support_height = 8; // ~

Acer_size_width  = 264;
Acer_size_depth  = 220;
Acer_size_height =  78;

Acer_lens_diameter = 30; // ~
Acer_lens_x = 55; // ~
Acer_lens_y = Acer_support_height + Acer_size_height / 2; // ~

module Acer_H6510BD(showProjection=true) {
  projector(Acer_size_width, Acer_size_depth, Acer_size_height, Acer_support_height, Acer_lens_diameter, Acer_lens_x, Acer_lens_y);
  if(showProjection) {
    distToWidth = 192/225;
    widthToHeight = 16/9;
    color([0.75,1,1,0.1]) {
      for(dist = [112, 225, 337])
        projection([-Acer_lens_y,Acer_lens_x,-Acer_size_depth], distToWidth, widthToHeight, dist);
    }

  }
}

module center_projector(pos) {
  if(pos == 1) { // on lens
    translate([-Acer_lens_x,-Acer_size_depth,-Acer_lens_y])
      children();
  } else {
    translate([-Acer_lens_x,-Acer_size_depth,0])
      children();
  }
}

Acer_H6510BD();


updated structure

updated structure

use <projector_plate.scad>;
use <projector.scad>;
use <plate.scad>;
include <profile.scad>;
use <../scad/ob_wheel.scad>
use <../scad/ob_spacer.scad>
include <gantry_cart.scad>

$fn = 12;
$detailed = false;

offset_depth = 50;

projector_movement = 0;

// projector
translate([0, 0, -offset_depth]) {
  translate([0, projector_movement, 0]) {
    center_projector() {
      Acer_Plate(160, 120, 85, 100);
      Acer_H6510BD(true);
    }
  }
}
width = 480;
height = 500;
beam_width = width - 2 * gantry_cart_wheel_mid;

carriage_tower_sections = 2;

translate([0, projector_movement, -offset_depth]) {
  translate([-beam_width/2,-60,-10])
    rotate([90,90,90])
      profile_20x60(beam_width);
  translate([beam_width/2,-60,-10])
    rotate([90,0,90])
      gantry_cart_big(carriage_tower_sections);
  translate([-beam_width/2,-60,-10])
    rotate([-90,0,90])
      gantry_cart_big(carriage_tower_sections);
}

translate([0, 0, -offset_depth]) {
  translate([-width/2,-height/2,-10])
    rotate([-90,0,0])
      profile(carriage_tower_sections, height);
  translate([width/2,-height/2,-10])
    rotate([-90,0,0])
      profile(carriage_tower_sections, height);
}

// base
base_depth = 400;
module base(width, depth, sections = 2) {
  profile_height = sections * 20;
  translate([-width/2,0,-base_depth/2])
    rotate([0,0,0])
      profile(sections, base_depth);

  translate([width/2,0,-base_depth/2])
    rotate([0,0,0])
      profile(sections, base_depth);

  lateral_beam_width = width - 20;
  translate([-lateral_beam_width/2,0,-base_depth/2+10])
    rotate([0,90,0])
      profile(sections, lateral_beam_width);

  translate([-lateral_beam_width/2,0,base_depth/2-10])
    rotate([0,90,0])
      profile(sections, lateral_beam_width);
}

bottom_sections = 4;
translate([0,-(height+bottom_sections*20)/2,0])
  base(width, base_depth, bottom_sections);

middle_sections = 2;
translate([0,(height+middle_sections*20)/2,0])
  base(width, base_depth, middle_sections);

// support towers
tower_pos = base_depth / 2 - 20;
translate([-width/2,-height/2,tower_pos])
  rotate([-90,0,0])
    profile_20x40(height);
translate([width/2,-height/2,tower_pos])
  rotate([-90,0,0])
    profile_20x40(height);

use <projector_plate.scad>;
use <projector.scad>;
include <profile.scad>;

$detailed = false;

offset_depth = 50;

translate([0, 0, -offset_depth])
  center_projector() {
    Acer_Plate(200, 120, 60, 100);
    Acer_H6510BD(true);
  }

width = 480;
offset = 5;
height = 500;
beam_width = width - 2 * (20 + offset);

translate([0, 0, -offset_depth]) {
  translate([-beam_width/2,-60,-10])
    rotate([90,90,90])
      profile_20x60(beam_width);

  translate([-width/2,-height/2,-10])
    rotate([-90,0,0])
      profile_20x40(height);
  translate([width/2,-height/2,-10])
    rotate([-90,0,0])
      profile_20x40(height);
}

// base
base_depth = 400;
module base(width, depth, sections = 2) {
  profile_height = sections * 20;
  translate([-width/2,0,-base_depth/2])
    rotate([0,0,0])
      profile(sections, base_depth);

  translate([width/2,0,-base_depth/2])
    rotate([0,0,0])
      profile(sections, base_depth);

  lateral_beam_width = width - 20;
  translate([-lateral_beam_width/2,0,-base_depth/2+10])
    rotate([0,90,0])
      profile(sections, lateral_beam_width);

  translate([-lateral_beam_width/2,0,base_depth/2-10])
    rotate([0,90,0])
      profile(sections, lateral_beam_width);
}

bottom_sections = 4;
translate([0,-(height+bottom_sections*20)/2,0])
  base(width, base_depth, bottom_sections);

middle_sections = 2;
translate([0,(height+middle_sections*20)/2,0])
  base(width, base_depth, middle_sections);

// support towers
tower_pos = base_depth / 2 - 20;
translate([-width/2,-height/2,-tower_pos])
  rotate([-90,0,0])
    profile_20x40(height);
translate([width/2,-height/2,-tower_pos])
  rotate([-90,0,0])
    profile_20x40(height);

/*
len = 270;
translate([-20,60,-len])
  profile_20x20(len);
translate([-20,140,-len])
  profile_20x20(len);

translate([50, 0, 0])
  profile_20x40(100);

translate([100, 0, 0])
  profile_20x60(100);

translate([150, 0, 0])
  profile_20x80(100);
*/