Projector lens to M42 adapter

Next madness level of using vintage lenses on modern camera – use even older projector lenses…

Generated STL of extension tube for Voigtländer TALON f2.8 100mm / Will-Wetzlar Maginon 100mm f2.8

KISS (keep it simple stupid) OpenSCAD code, using NutsAndBolts.ipynb lib:

//https://gist.github.com/pschatzmann/3c2600cc70a1da5a3c5532d4f0e0ca99#file-nutsandbolts-ipynb
include <../libs/bolts/threads.scad>;

module cylinder_hollow(r, w, h, z=0, angle_start=0, angle_use=360, angle_x=0, overhang_topinside=false) {
  translate([0, 0, z]) {
    rotate([angle_x,0,angle_start]) {
      rotate_extrude(angle = angle_use, convexity = 10) {
        translate([r, 0, 0]) {
            square([w, h], false);
          if (overhang_topinside) {
            polygon (points=[[0,h], [w,h], [w,h*2]] );
          }
        }
      }
    }
  }
}



$fn= $preview ? 72 : 180;
angle = ($preview) ? 180 : 360;

thread_th=3;

tube_d=42.2+0.6; //well, printer is not idea, so "fine tuning"
tube_h=50+10-2;  //well, iterations of best height
tube_w=1.6;
tube_w2=1.6+2;

grooves=false;
pin_d=2.4;
pin_h1=thread_th+tube_h-5;
pin_h2=pin_h1-5.5; //5.5 thread pitch


module thread(td=42.2, tp=1, th=3, tz=0, internal=true, angle=45) {
  translate([0,0,tz])
    metric_thread(diameter=td, pitch=tp, length=th, internal=internal, angle=angle); 
}

module cylinder_details() {
  cylinder_hollow(r=tube_d/2, w=tube_w, h=tube_h, z=thread_th, angle_use=angle); 
  if (grooves) {
    cylinder_hollow(r=tube_d/2, w=tube_w2, h=15, z=thread_th+tube_h-15, angle_use=angle); 
  }
}

module cylinder_holes() {
  if (grooves) {
    translate([0,0,pin_h1])
      rotate([0, 90, 0])
        #cylinder(r=pin_d, h=30);
    translate([0,0,pin_h2])
      rotate([0, 270, 0])
        #cylinder(r=pin_d, h=30);
  }  
}  


//thread itself
difference() {
  thread(td=42-0.2, tp=1, th=thread_th, tz=0, internal=false, angle=45);
  cylinder_hollow(r=0, w=tube_d/2-2, h=thread_th, z=0, angle_use=angle); 
}  

difference() {
  cylinder_details();
  cylinder_holes(); 
}  

//overhang for printing
cylinder_hollow(r=tube_d/2-2, w=tube_w+0.6, h=2, z=thread_th, angle_use=angle, overhang_topinside=true); 

Result (on APSC camera) from both lens almost identical, differs only dust location: