├── .github └── FUNDING.yml ├── .gitignore ├── CAD ├── gears.scad ├── ligra.scad ├── ligra_flashlight.scad ├── ligra_frame.scad ├── ligra_lava_disk.scad ├── ligra_lens.scad ├── ligra_misc.scad ├── ligra_par_spot.scad ├── ligra_projectorlens.scad ├── ligra_stage.scad ├── ligra_tripod.scad └── stls │ ├── fd_back_conn.stl │ ├── fd_frontcage_28_80.stl │ ├── fd_frontcage_70_210.stl │ ├── ligra_interlock.stl │ ├── ligra_lava_disk_arm.stl │ ├── ligra_lava_disk_arm_l.stl │ ├── ligra_lava_disk_arm_r.stl │ ├── ligra_lava_disk_bracket.stl │ ├── ligra_lava_disk_motor_mount.stl │ ├── ligra_lava_disk_motorgear.stl │ ├── ligra_lava_disk_rolls.stl │ ├── ligra_lava_disk_servo_shaft.stl │ ├── ligra_lens_frontcage_fd_28_80.stl │ ├── ligra_lens_frontcage_fd_70_210.stl │ ├── ligra_lens_frontcap_35-105.stl │ ├── ligra_lens_frontcap_38-95.stl │ ├── ligra_lens_lenscagefd.stl │ ├── ligra_misc_cap.stl │ ├── ligra_misc_foot.stl │ ├── ligra_par_spot_stencil_cage.stl │ ├── ligra_projectorlens.stl │ ├── ligra_stage_stage_motor_rot_base.stl │ ├── ligra_stage_stage_motor_rot_gear_l.stl │ ├── ligra_stage_stage_motor_rot_rotor.stl │ ├── ligra_stage_stencil_cage.stl │ ├── ligra_stage_stencil_cage_counter.stl │ └── ligra_tripod_tripod_plate.stl ├── LICENSE ├── README.md ├── images ├── 0b2d5d8d6d914120.jpg ├── 11bd2950d9579037.jpg ├── 263e70de6c5d269f.jpg ├── 528b30a321972028.jpg ├── IMG_1345.jpg ├── Screenshot from 2024-06-14 23-38-24.png ├── Screenshot from 2024-06-14 23-38-51.png ├── Screenshot from 2024-06-14 23-39-46.png ├── Screenshot from 2024-06-14 23-40-12.png ├── Screenshot from 2024-06-14 23-40-50.png ├── Screenshot from 2024-06-14 23-44-12.png ├── Screenshot from 2024-06-14 23-45-00.png ├── Screenshot from 2024-06-14 23-45-36.png ├── Screenshot from 2024-06-15 01-42-35.png ├── Screenshot from 2024-06-15 01-42-41.png ├── Screenshot from 2024-06-15 01-42-53.png ├── Screenshot from 2024-06-15 01-43-00.png ├── Screenshot from 2024-06-15 01-43-40.png ├── Screenshot from 2024-06-15 01-44-55.png ├── Screenshot from 2024-06-15 01-45-05.png ├── Screenshot from 2024-06-15 01-58-11.png ├── Screenshot from 2024-06-15 01-59-12.png ├── Screenshot from 2024-06-15 02-27-37.png ├── Screenshot from 2024-06-15 16-40-58.png ├── Screenshot from 2024-06-15 16-41-32.png ├── Screenshot from 2024-06-15 16-42-16.png ├── Screenshot from 2024-06-15 17-51-15.png ├── Screenshot from 2025-01-04 12-20-47.png ├── Screenshot from 2025-01-04 12-24-28.png ├── da240891a95fc2dd.jpg ├── drawing.jpg ├── drawing.svg ├── e5e7f5f40d520a76.jpg ├── front.png ├── pcb-back-1.png ├── pcb-back-2.png ├── pcb-front-1.png ├── pcb-front-2.png ├── signal-2024-06-01-161329_002.jpeg ├── signal-2024-06-01-161329_003.jpeg ├── signal-2024-06-01-161329_004.jpeg ├── signal-2024-06-01-161329_005.jpeg ├── signal-2024-06-01-161619_002.jpeg ├── signal-2024-06-01-163210_002.jpeg ├── signal-2024-06-14-204829_005.jpeg ├── signal-2024-06-14-204829_007.jpeg ├── signal-2024-06-14-210620_004.jpeg ├── signal-2024-06-14-210620_005.jpeg ├── signal-2024-06-14-210620_007.jpeg ├── signal-2024-06-15-020726_002.jpeg ├── signal-2024-07-07-143311.jpeg ├── signal-2025-01-04-134830_002.jpeg ├── signal-2025-01-04-134830_003.jpeg ├── signal-2025-01-04-134830_004.jpeg ├── signal-2025-01-04-134830_005.jpeg └── signal-2025-01-04-140044_002.jpeg ├── instructions.md ├── ligra_back ├── README.md ├── ligra_back.kicad_pcb ├── ligra_back.kicad_prl ├── ligra_back.kicad_pro └── ligra_back.kicad_sch ├── ligra_front ├── README.md ├── ligra_front.kicad_pcb ├── ligra_front.kicad_prl ├── ligra_front.kicad_pro └── ligra_front.kicad_sch ├── pcb_graphics ├── bitmap.png ├── bitmap_2.png ├── bitmap_3.png ├── bitmap_4.png └── ligra.svg ├── projection-media.md ├── staging-stages.md └── stencils └── 2D_stencil_print.svg /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: Jana-Marie 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # kicad 2 | *-backups 3 | gerber 4 | fp-info-cache 5 | fp-lib-table 6 | *-bak 7 | *.step 8 | *.stp 9 | bom 10 | *.lck 11 | -------------------------------------------------------------------------------- /CAD/ligra.scad: -------------------------------------------------------------------------------- 1 | use 2 | use 3 | use 4 | use 5 | use 6 | use 7 | use 8 | use 9 | 10 | // nya! Welcome to the 3D planning & design file of ligra 11 | // use this file to plan your porjector, see the two pre-planned- 12 | // projectors (28_80_300 & 70_210_400) below. Use all the files in this 13 | // directory to design and adapt custom parts. You can work on the parts 14 | // in their respective files and just use them here afterwards. 15 | // That should keep everything easy to understand and fast to work on. 16 | // Please plan your files (F5) in the $preview clause and add them to the 17 | // 'else' clause for rendering (F6). 18 | // Enjoy~ 19 | // 20 | // - Jana 21 | 22 | if($preview){ 23 | // Canon FD 28-80mm base projector, PAR Spot, rot-stencil stage, 300mm frame 24 | translate([-70,0,60])rotate([80,0,0])translate([0,0,-150])projector_28_80_300(); 25 | 26 | // Canon FD 70-210mm base projector, PAR Spot, rot-stencil stage, 400mm frame 27 | translate([ 70,0,60])rotate([80,0,0])translate([0,0,-150])projector_70_210_400(); 28 | } else{ 29 | } 30 | 31 | // Canon FD 28-80mm base projector, PAR Spot, rot-stencil stage, 300mm frame 32 | module projector_28_80_300(){ 33 | $fn=60; 34 | offx=170; 35 | 36 | // frame 37 | color("silver")frame(300,45); 38 | 39 | // lens 40 | color("Khaki")translate([0,0,offx])lenscage_fd(45); 41 | color("Khaki")translate([0,0,offx+98+6])frontcage_fd_28_80(45); 42 | 43 | translate([0,0,offx+1])lenscap_fd(); 44 | translate([0,0,offx+1+13.6])lens_fd_28_80(); 45 | 46 | // tripod mount 47 | color("Tomato")translate([0,0,160])tripod_plate(45); 48 | 49 | // stencil stage 50 | translate([0,0,offx-40])stage_motor_rot_assembly(45); 51 | 52 | // PAR Spot 53 | translate([0,0,120])rotate([180,0,0])par_spot_cage(45); 54 | 55 | // PCB 56 | color("DarkslateGray")translate([0,0,302.6])rotate([180,0,0])front_pcb(); 57 | color("DarkslateGray")translate([0,0,-1])rotate([180,0,0])back_pcb(); 58 | 59 | 60 | for(i=[-1:2:1],j=[-1:2:1]){ 61 | // foot 62 | color("DarkTurquoise")translate([i*38.6,j*38.6,-1.6])rotate([180,0,0])foot(); 63 | // cap 64 | color("Red")translate([i*38.6,j*38.6,-2])rotate([0,0,45])cap(); 65 | color("Red")translate([i*38.6,j*38.6,302])rotate([180,0,45])cap(); 66 | } 67 | 68 | // Obsolete, flashlight light source 69 | *translate([0,0,20])flashlight(); 70 | *color("Olive")translate([0,0,166])flashlight_cage(45); 71 | *color("Olive")translate([0,0,100])flashlight_counter(); 72 | } 73 | 74 | // Canon FD 70-210mm base projector, PAR Spot, rot-stencil stage, 400mm frame 75 | module projector_70_210_400(){ 76 | $fn=60; 77 | offx=185; 78 | // frame 79 | color("silver")frame(400,45); 80 | 81 | // lens 82 | color("Khaki")translate([0,0,offx])lenscage_fd(45); 83 | color("Khaki")translate([0,0,offx+185+6])frontcage_fd_70_210(45); 84 | 85 | translate([0,0,offx+1])lenscap_fd(); 86 | translate([0,0,offx+1+13.6])lens_fd_70_210(); 87 | 88 | // tripod mount 89 | color("Tomato")translate([0,0,260])tripod_plate(45); 90 | color("Tomato")translate([0,0,80])tripod_plate(45); 91 | 92 | // stencil stage 93 | translate([0,0,offx-40])stage_motor_rot_assembly(); 94 | 95 | // PAR Spot 96 | translate([0,0,120])rotate([180,0,0])par_spot_cage(45); 97 | 98 | // PCB 99 | color("DarkslateGray")translate([0,0,402.6])rotate([180,0,0])front_pcb(); 100 | color("DarkslateGray")translate([0,0,0])rotate([180,0,0])back_pcb(); 101 | 102 | for(i=[-1:2:1],j=[-1:2:1]){ 103 | // foot 104 | color("DarkTurquoise")translate([i*38.6,j*38.6,-1.6])rotate([180,0,0])foot(); 105 | // cap 106 | color("Red")translate([i*38.6,j*38.6,-2])rotate([0,0,45])cap(); 107 | color("Red")translate([i*38.6,j*38.6,402])rotate([180,0,45])cap(); 108 | } 109 | 110 | // Obsolete, flashlight light source 111 | *translate([0,0,20])flashlight(); 112 | *color("Olive")translate([0,0,166])flashlight_cage(45); 113 | *color("Olive")translate([0,0,100])flashlight_counter(); 114 | } 115 | 116 | -------------------------------------------------------------------------------- /CAD/ligra_flashlight.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // flashlight file 4 | // 5 | // my first light source, a good one even, a simple flashlight 6 | 7 | if($preview){ 8 | translate([0,0,-146])flashlight(); 9 | color("DeepPink")translate([0,0,0])flashlight_cage(45); 10 | color("HotPink")translate([0,0,-52])flashlight_counter(); 11 | } else { 12 | flashlight_cage(45); 13 | *flashlight_counter(); 14 | } 15 | 16 | module flashlight(){ 17 | difference(){ 18 | union(){ 19 | color("SlateGray")translate([0,0,5])cylinder(d=29.6,h=160-5); 20 | color("SlateGray")translate([0,0,160-39])cylinder(d=38,h=39); 21 | color("SlateGray")translate([0,0,160-39-17])cylinder(d2=38,d1=30,h=17); 22 | color("SlateGray")translate([0,0,160-39-17])cylinder(d2=38,d1=30,h=17); 23 | color("SlateGray")translate([0,0,5])resize(newsize=[29.6,29.6,10]) sphere(r=10); 24 | }union(){ 25 | translate([0,0,160-9])cylinder(d=36,h=10); 26 | } 27 | } 28 | color("AliceBlue")translate([0,0,160-5])resize(newsize=[36,36,8]) sphere(r=10); 29 | } 30 | 31 | module flashlight_cage(spacing=45){ 32 | // corner 33 | ch = 28; 34 | wt = 4; 35 | difference(){ 36 | union(){ 37 | for(i = [0:90:270]){ 38 | // corner 39 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 40 | minkowski(){ 41 | cube([wt-1,19-1,ch-1],center=true); 42 | rotate([0,90,0])cylinder(d=1,h=1); 43 | } 44 | hull(){ 45 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 46 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 47 | } 48 | 49 | // middle sec 50 | cylinder(d=38.1+8,h=18); 51 | // connectors 52 | for(j = [-1:2:1]){ 53 | hull(){ 54 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 55 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 56 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+24])cube([wt,1,1],center=true); 57 | rotate([0,0,45+i-45*j])translate([(38.1+3)/2,0,0])cylinder(d=2,h=17); 58 | } 59 | } 60 | } 61 | 62 | 63 | }union(){ 64 | // corner 65 | for(i = [0:90:270]){ 66 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 67 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 68 | 69 | rotate([0,0,45+i])translate([0,30,20])cube([30,2,4],center=true); 70 | } 71 | // middle sec 72 | translate([0,0,-1])cylinder(d=38.1,h=17); 73 | translate([0,0,14])cylinder(d=36,h=5); 74 | } 75 | } 76 | } 77 | 78 | module flashlight_counter(){ 79 | difference(){ 80 | union(){ 81 | cylinder(d=36,h=10); 82 | for(i = [0:90:270]){ 83 | hull(){ 84 | rotate([0,0,45+i-10])translate([33/2,0,8])cylinder(d=3,h=2); 85 | rotate([0,0,45+i+10])translate([33/2,0,8])cylinder(d=3,h=2); 86 | rotate([0,0,45+i])translate([45/2,0,1])cylinder(d=2,h=2); 87 | } 88 | } 89 | }union(){ 90 | translate([0,0,-0.5])cylinder(d=30,h=20); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /CAD/ligra_frame.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // frame & extrusion file 4 | // 5 | // the extrusions and frame are generated in here 6 | 7 | frame(100); 8 | 9 | // Base frame 10 | module frame(l=10,spacing=45){ 11 | b = spacing/sin(45); 12 | echo("a = ", spacing); 13 | echo("b = ", b); 14 | echo("h = " , b*sin(spacing)); 15 | 16 | for(i = [0:90:270]){ 17 | rotate([0,0,45+i])translate([spacing+10,0,0])profile(l); 18 | } 19 | } 20 | 21 | // 20x20mm Aluminium extrusion generator 22 | module profile(l=10){ 23 | difference(){ 24 | union(){ 25 | translate([0,0,l/2-0.001/2]) 26 | minkowski(){ 27 | cube([20-2,20-2,l-0.001], center=true); 28 | cylinder(d=2,h=0.001); 29 | } 30 | }union(){ 31 | for(i = [0:90:270]){ 32 | rotate([0,0,i]) 33 | hull(){ 34 | translate([0,9,l/2-0.1])cube([6,2,l+0.3],center=true); 35 | translate([0,11,l/2-0.1])cube([9,2,l+0.3],center=true); 36 | } 37 | } 38 | translate([0,0,-0.1])cylinder(d=4.2, h=l+0.3); 39 | } 40 | } 41 | } -------------------------------------------------------------------------------- /CAD/ligra_lava_disk.scad: -------------------------------------------------------------------------------- 1 | use 2 | use 3 | 4 | $fn=100; 5 | 6 | // Lava-Disk file 7 | 8 | if($preview){ 9 | // frame 10 | intersection(){ 11 | translate([0,50/2,0])cube([200,50,200],center=true); 12 | color("silver")frame(30,45); 13 | } 14 | translate([0,-15.5,1.5+4])lava_disk(); 15 | lava_disk_stage(); 16 | mirror([1,0,0])lava_disk_stage(); 17 | mirror([0,1,0])translate([0,-78,0])lava_disk_motor_mount(); 18 | lava_disk_servo_shaft(); 19 | lava_disk_servo_shaft_bulge(); 20 | } else { 21 | lava_disk_motor_mount(); 22 | } 23 | 24 | module lava_disk_stage(spacing=45){ 25 | // corner 26 | ch = 34; 27 | wt = 4; 28 | i=0; 29 | difference(){ 30 | union(){ 31 | 32 | echo(i); 33 | // corner 34 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 35 | minkowski(){ 36 | cube([wt-1,19-1,ch-1],center=true); 37 | rotate([0,90,0])cylinder(d=1,h=1); 38 | } 39 | hull(){ 40 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 41 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 42 | } 43 | 44 | // screw 45 | if($preview){ 46 | color("silver")rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 47 | color("silver")rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=9.5,h=5); 48 | } 49 | 50 | // ball bearing 51 | if($preview){ 52 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,8])ballbearing(); 53 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,8])lava_disk_rolls(); 54 | } 55 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,0])cylinder(d=4.05,h=12.5); 56 | hull(){ 57 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,0])cylinder(d=4,h=8); 58 | rotate([0,0,45+i])translate([spacing-wt/2,-7,0])cylinder(d=4,h=4); 59 | rotate([0,0,45+i])translate([spacing-wt/2, 7,0])cylinder(d=4,h=4); 60 | } 61 | 62 | // fixture 63 | //back 64 | hull(){ 65 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,0])cylinder(d=4,h=5); 66 | rotate([0,0,45+i])translate([spacing-wt/2,0,0])cylinder(d=4,h=5); 67 | rotate([0,0,45+i])translate([spacing-wt/2-30,-50,0])cylinder(d=4,h=5); 68 | } 69 | hull(){ 70 | rotate([0,0,45+i])translate([spacing-wt/2-1,-20,0])cylinder(d=4,h=5); 71 | rotate([0,0,45+i])translate([spacing-wt/2,0,0])cylinder(d=4,h=5); 72 | rotate([0,0,45+i])translate([spacing-wt/2-15,15,0])cylinder(d=4,h=5); 73 | } 74 | //front 75 | hull(){ 76 | rotate([0,0,45+i])translate([spacing-wt/2-15,10,14.75])cylinder(d=4,h=4); 77 | rotate([0,0,45+i])translate([spacing-wt/2,-7,14.75])cylinder(d=4,h=4); 78 | rotate([0,0,45+i])translate([spacing-wt/2,7,14.75])cylinder(d=4,h=4); 79 | } 80 | hull(){ 81 | rotate([0,0,45+i])translate([spacing-wt/2-10,-10,14.75])cylinder(d=4,h=4); 82 | rotate([0,0,45+i])translate([spacing-wt/2,-7,14.75])cylinder(d=4,h=4); 83 | rotate([0,0,45+i])translate([spacing-wt/2,7,14.75])cylinder(d=4,h=4); 84 | } 85 | }union(){ 86 | // corner 87 | if(!$preview){ 88 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 89 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01-wt*3])cylinder(d=12,h=wt*4); 90 | } 91 | } 92 | } 93 | } 94 | 95 | // motor mount 96 | module lava_disk_motor_mount(spacing=45){ 97 | // corner 98 | ch = 34; 99 | wt = 4; 100 | difference(){ 101 | union(){ 102 | for(i = [0:90:90]){ 103 | echo(i); 104 | // corner 105 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2])minkowski(){ 106 | cube([wt-1,19-1,ch-1],center=true); 107 | rotate([0,90,0])cylinder(d=1,h=1); 108 | } 109 | 110 | hull(){ 111 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 112 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 113 | } 114 | 115 | // screw 116 | if($preview){ 117 | color("silver")rotate([0,90,45+i])translate([-9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 118 | color("silver")rotate([0,90,45+i])translate([-9.5,0,spacing-wt-wt-0.01])cylinder(d=9.5,h=5); 119 | } 120 | } 121 | hull(){ 122 | for(i = [0:90:90]){ 123 | rotate([0,0,45+i])translate([spacing-wt,10-1,ch-0.5])rotate([0,90,0])cylinder(d=1,h=4); 124 | rotate([0,0,45+i])translate([spacing-wt,-10+1,ch-0.5])rotate([0,90,0])cylinder(d=1,h=4); 125 | rotate([0,0,45+i])translate([spacing-wt,10-1,ch-15])rotate([0,90,0])cylinder(d=1,h=4); 126 | rotate([0,0,45+i])translate([spacing-wt,-10+1,ch-15])rotate([0,90,0])cylinder(d=1,h=4); 127 | rotate([0,0,45+i])translate([spacing-wt-15,0,ch-15])rotate([0,90,0])cylinder(d=1,h=4); 128 | rotate([0,0,45+i])translate([spacing-wt-15,0,ch-0.5])rotate([0,90,0])cylinder(d=1,h=4); 129 | } 130 | } 131 | }union(){ 132 | for(i = [0:90:90]){ 133 | // corner 134 | if(!$preview){ 135 | rotate([0,90,45+i])translate([-9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 136 | rotate([0,90,45+i])translate([-9.5,0,spacing-wt-wt-0.01-wt*3])cylinder(d=12,h=wt*4); 137 | } 138 | } 139 | translate([23/2-6,0,0])union(){ 140 | translate([0,28,15.5/2+18.5])cube([23,13.5,15.5],center=true); 141 | translate([0,28,7/2+18.5])cube([33,13.5,7],center=true); 142 | translate([-1.5/2,28,15.5/2+18.5])cube([24.5,4,15.5],center=true); 143 | translate([ 27/2,28,5/2+18.5])cylinder(d=1.3, h=10); 144 | translate([-27/2,28,5/2+18.5])cylinder(d=1.3, h=10); 145 | } 146 | //mirror([0,0,1])translate([0,28,-44])lava_disk_motor(); 147 | //translate([0,28,20])cube([13,15,15],center=true); 148 | } 149 | } 150 | } 151 | 152 | // motor gear 153 | module lava_disk_servo_shaft(){ 154 | difference(){ 155 | union(){ 156 | cylinder(d=7,h=10); 157 | }union(){ 158 | cylinder(d=5,h=3); 159 | cylinder(d=2,h=10); 160 | } 161 | } 162 | } 163 | 164 | // motor gear 165 | module lava_disk_servo_shaft_bulge(){ 166 | difference(){ 167 | union(){ 168 | cylinder(d=7,h=10); 169 | intersection(){ 170 | translate([0,0,5])scale([1.08,1.08,4])sphere(d=7); 171 | cylinder(d=30,h=10); 172 | } 173 | }union(){ 174 | cylinder(d=5,h=3); 175 | cylinder(d=2,h=10); 176 | } 177 | } 178 | } 179 | 180 | // motor gear 181 | module lava_disk_motor(){ 182 | difference(){ 183 | union(){ 184 | color("lavender")intersection(){ 185 | cylinder(d=20, h=25); 186 | translate([0,0,30/2])cube([30,15,30],center=true); 187 | } 188 | color("lavender")translate([0,0,25])cylinder(d=6, h=1.5); 189 | color("Thistle")translate([0,0,26.5])cylinder(d=2, h=8); 190 | }union(){ 191 | 192 | } 193 | } 194 | } 195 | 196 | // just for preview 197 | module lava_disk(){ 198 | color("white")difference(){ 199 | union(){ 200 | translate([0,0,0])cylinder(d=100,h=2); 201 | translate([0,0,2])cylinder(d=93,h=5); 202 | translate([0,0,7])cylinder(d=100,h=2); 203 | }union(){ 204 | translate([0,0,-1])cylinder(d=75, h=11); 205 | } 206 | } 207 | color("lightblue")union(){ 208 | translate([0,0,2.5])cylinder(d=76,h=1); 209 | translate([0,0,6.5-1])cylinder(d=76,h=1); 210 | } 211 | } 212 | 213 | // ###################################### // 214 | 215 | // arm 216 | module lava_disk_arm(){ 217 | color("silver")difference(){ 218 | union(){ 219 | // bracket 220 | *hull(){ 221 | translate([0,0,4.05])cylinder(d=4.5,h=3.9); 222 | translate([5,0,4.05])cylinder(d=6.5,h=3.9); 223 | } 224 | *translate([5,0,-4])cylinder(d=6.5,h=20); 225 | // arms 226 | al=120; 227 | hull(){ 228 | translate([5,0,-4.5])cylinder(d=6.5,h=4.5); 229 | translate([al,0,-4.5])cylinder(d=6,h=4.5); 230 | translate([106.8,0,-4.5])cylinder(d=12,h=4.5); 231 | } 232 | hull(){ 233 | translate([106.8,0,-4.5])cylinder(d=12,h=4.5); 234 | translate([106.8-10,0,-4.5])cylinder(d=12,h=4.5); 235 | translate([106.8-10,60,-4.5])cylinder(d=22,h=4.5); 236 | } 237 | hull(){ 238 | translate([5,0,11])cylinder(d=6.5,h=9.5); 239 | translate([al,0,11])cylinder(d=6,h=9.5); 240 | translate([106.8,0,11])cylinder(d=12,h=9.5); 241 | } 242 | translate([al,0,-4])cylinder(d=6,h=20); 243 | //notch 244 | hull(){ 245 | translate([110,0,-4.5])cylinder(d=6,h=4.5); 246 | translate([118,8,-4.5])cylinder(d=3,h=4.5); 247 | } 248 | hull(){ 249 | translate([110,0,16])cylinder(d=6,h=4.5); 250 | translate([118,8,16])cylinder(d=3,h=4.5); 251 | } 252 | }union(){ 253 | // pin 254 | #translate([4.5,0,-5])cylinder(d=1.54, h=30); 255 | translate([4.9,0,11])cylinder(d=9,h=5.1); 256 | //motor 257 | translate([106.8,0,-4.5])cylinder(d=9,h=4.5); 258 | } 259 | } 260 | } 261 | 262 | // ball bearing disks 263 | module lava_disk_rolls(){ 264 | color("silver")difference(){ 265 | union(){ 266 | translate([0,0,0])cylinder(d=14,h=4.5); 267 | }union(){ 268 | translate([0,0,-1])cylinder(d=9, h=6.5); 269 | } 270 | } 271 | } 272 | 273 | // motor gear 274 | module lava_disk_motor_gear(){ 275 | color("darksilver")difference(){ 276 | union(){ 277 | translate([0,0,0])cylinder(d=8.8,h=12); 278 | translate([0,0,0])cylinder(d=14.5,h=4.5); 279 | }union(){ 280 | intersection(){ 281 | translate([0,0,5])cylinder(d=5.5, h=20); 282 | cube([4,20,40],center=true); 283 | } 284 | translate([0,0,-1])cylinder(d=2, h=20); 285 | } 286 | } 287 | } 288 | 289 | -------------------------------------------------------------------------------- /CAD/ligra_lens.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // lens planning file 4 | // 5 | // use this file to add your lens model, plan the lens mount 6 | // the generic one should be great already and work on the frontcage. 7 | // The frontcage is a supplementary mount in which the 8 | // lens-front can freely move 9 | 10 | if($preview){ 11 | /* 12 | color("HotPink")translate([-70,0,-16])lenscage_fd(); 13 | translate([-70,0,-15])lenscap_fd(); 14 | translate([-70,0,0])lens_fd_28_80(); 15 | color("HotPink")translate([-70,0,90])frontcage_fd_28_80(); 16 | 17 | color("DeepPink")translate([70,0,-16])lenscage_fd(); 18 | translate([70,0,-15])lenscap_fd(); 19 | translate([70,0,0])lens_fd_70_210(); 20 | color("DeepPink")translate([70,0,180])frontcage_fd_70_210(); 21 | */ 22 | frontcage_fd_38_95(); 23 | }else{ 24 | frontcage_fd_38_95(); 25 | } 26 | 27 | // 35-105mm lens 28 | // frontcage 29 | module frontcage_fd_38_95(spacing=45){ 30 | // corner 31 | ch = 23; 32 | wt = 4; 33 | difference(){ 34 | union(){ 35 | for(i = [0:90:270]){ 36 | // corner 37 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 38 | minkowski(){ 39 | cube([wt-1,19-1,ch-1],center=true); 40 | rotate([0,90,0])cylinder(d=1,h=1); 41 | } 42 | hull(){ 43 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 44 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 45 | } 46 | 47 | // middle sec 48 | cylinder(d=70+6,h=8); 49 | 50 | // connectors 51 | for(j = [-1:2:1]){ 52 | hull(){ 53 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 54 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 55 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 56 | rotate([0,0,45+i-30*j])translate([(70+3)/2,0,0])cylinder(d=1,h=8); 57 | } 58 | } 59 | } 60 | 61 | 62 | }union(){ 63 | // corner 64 | for(i = [0:90:270]){ 65 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 66 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 67 | } 68 | // middle sec 69 | translate([0,0,-1])cylinder(d=70,h=15); 70 | } 71 | } 72 | } 73 | 74 | 75 | // 35-105mm lens 76 | // frontcage 77 | module frontcage_fd_35_105(spacing=45){ 78 | // corner 79 | ch = 23; 80 | wt = 4; 81 | difference(){ 82 | union(){ 83 | for(i = [0:90:270]){ 84 | // corner 85 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 86 | minkowski(){ 87 | cube([wt-1,19-1,ch-1],center=true); 88 | rotate([0,90,0])cylinder(d=1,h=1); 89 | } 90 | hull(){ 91 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 92 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 93 | } 94 | 95 | // middle sec 96 | cylinder(d=75+6,h=8); 97 | 98 | // connectors 99 | for(j = [-1:2:1]){ 100 | hull(){ 101 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 102 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 103 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 104 | rotate([0,0,45+i-30*j])translate([(75+3)/2,0,0])cylinder(d=1,h=8); 105 | } 106 | } 107 | } 108 | 109 | 110 | }union(){ 111 | // corner 112 | for(i = [0:90:270]){ 113 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 114 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 115 | } 116 | // middle sec 117 | translate([0,0,-1])cylinder(d=75,h=15); 118 | } 119 | } 120 | } 121 | 122 | // 70-210mm lens 123 | // frontcage 124 | module frontcage_fd_70_210(spacing=45){ 125 | // corner 126 | ch = 23; 127 | wt = 4; 128 | difference(){ 129 | union(){ 130 | for(i = [0:90:270]){ 131 | // corner 132 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 133 | minkowski(){ 134 | cube([wt-1,19-1,ch-1],center=true); 135 | rotate([0,90,0])cylinder(d=1,h=1); 136 | } 137 | hull(){ 138 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 139 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 140 | } 141 | 142 | // middle sec 143 | cylinder(d=66+6,h=8); 144 | 145 | // connectors 146 | for(j = [-1:2:1]){ 147 | hull(){ 148 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 149 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 150 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 151 | rotate([0,0,45+i-30*j])translate([(66+3)/2,0,0])cylinder(d=1,h=8); 152 | } 153 | } 154 | } 155 | 156 | 157 | }union(){ 158 | // corner 159 | for(i = [0:90:270]){ 160 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 161 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 162 | } 163 | // middle sec 164 | translate([0,0,-1])cylinder(d=66.1,h=15); 165 | translate([0,0,-1])cylinder(d=48,h=3); 166 | } 167 | } 168 | } 169 | 170 | // lens 171 | module lens_fd_70_210(){ 172 | difference(){ 173 | union(){ 174 | color("DimGray")cylinder(d=65,h=185); 175 | color("DimGray")translate([0,0,60])cylinder(d=78,h=85); 176 | color("DimGray")translate([0,0,60-14])cylinder(d2=78, d1=67,h=14); 177 | color("DimGray")translate([0,0,60+85])cylinder(d1=78, d2=67,h=2); 178 | }union(){ 179 | translate([0,0,-0.1])cylinder(d1=36, d2=62,h=185+0.2); 180 | } 181 | } 182 | color("AliceBlue")translate([0,0,180])resize(newsize=[62,62,8]) sphere(r=10); 183 | color("AliceBlue")translate([0,0,10])resize(newsize=[38,38,8]) sphere(r=10); 184 | } 185 | 186 | // 28-80mm lens 187 | // frontcage 188 | module frontcage_fd_28_80(spacing=45){ 189 | // corner 190 | ch = 23; 191 | wt = 4; 192 | difference(){ 193 | union(){ 194 | for(i = [0:90:270]){ 195 | // corner 196 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 197 | minkowski(){ 198 | cube([wt-1,19-1,ch-1],center=true); 199 | rotate([0,90,0])cylinder(d=1,h=1); 200 | } 201 | hull(){ 202 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 203 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 204 | } 205 | 206 | // middle sec 207 | cylinder(d=70+6,h=8); 208 | 209 | // connectors 210 | for(j = [-1:2:1]){ 211 | hull(){ 212 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 213 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 214 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 215 | rotate([0,0,45+i-30*j])translate([(70+3)/2,0,0])cylinder(d=1,h=8); 216 | } 217 | } 218 | } 219 | 220 | 221 | }union(){ 222 | // corner 223 | for(i = [0:90:270]){ 224 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 225 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 226 | } 227 | // middle sec 228 | translate([0,0,-1])cylinder(d=70.1,h=15); 229 | translate([0,0,-1])cylinder(d=48,h=3); 230 | } 231 | } 232 | } 233 | 234 | // lens 235 | module lens_fd_28_80(){ 236 | difference(){ 237 | union(){ 238 | color("DimGray")cylinder(d=64,h=17); 239 | color("DimGray")translate([0,0,17])cylinder(d=62,h=62); 240 | color("DimGray")translate([0,0,17+3])cylinder(d=68,h=33); 241 | color("DimGray")translate([0,0,17+3+33+5])cylinder(d=68,h=20); 242 | color("DimGray")translate([0,0,17+62])cylinder(d1=65,d2=70,h=8.5); 243 | color("DimGray")translate([0,0,17+62+8.5])cylinder(d=70,h=10); 244 | }union(){ 245 | translate([0,0,-0.1])cylinder(d1=36, d2=60,h=62+17+0.2); 246 | translate([0,0,-0.1+62+17])cylinder(d1=60, d2=68,h=20); 247 | } 248 | } 249 | color("AliceBlue")translate([0,0,92])resize(newsize=[68,68,14]) sphere(r=10); 250 | color("AliceBlue")translate([0,0,10])resize(newsize=[38,38,8]) sphere(r=10); 251 | } 252 | 253 | // all lenses 254 | // FD-lens back-lenscap 255 | module lenscap_fd(){ 256 | difference(){ 257 | union(){ 258 | color("darkgrey")cylinder(d=51,h=16); 259 | color("darkgrey")translate([0,0,15])cylinder(d=54,h=1); 260 | }union(){ 261 | translate([0,0,1])cylinder(d=48,h=16); 262 | translate([0,0,-1])cylinder(d=45,h=3); 263 | } 264 | } 265 | } 266 | 267 | // generic lens, copy & paste this to add your own lens 268 | module lens_fd(){ 269 | difference(){ 270 | union(){ 271 | color("DimGray")cylinder(d=65,h=185); 272 | color("DimGray")translate([0,0,60])cylinder(d=78,h=85); 273 | color("DimGray")translate([0,0,60-14])cylinder(d2=78, d1=67,h=14); 274 | color("DimGray")translate([0,0,60+85])cylinder(d1=78, d2=67,h=2); 275 | }union(){ 276 | translate([0,0,-0.1])cylinder(d1=36, d2=62,h=185+0.2); 277 | } 278 | } 279 | color("AliceBlue")translate([0,0,180])resize(newsize=[62,62,8]) sphere(r=10); 280 | color("AliceBlue")translate([0,0,10])resize(newsize=[38,38,8]) sphere(r=10); 281 | } 282 | 283 | // generic lenscage for fd lenses 284 | module lenscage_fd(spacing=45){ 285 | // corner 286 | ch = 28; 287 | wt = 4; 288 | difference(){ 289 | union(){ 290 | for(i = [0:90:270]){ 291 | // corner 292 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 293 | minkowski(){ 294 | cube([wt-1,19-1,ch-1],center=true); 295 | rotate([0,90,0])cylinder(d=1,h=1); 296 | } 297 | hull(){ 298 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 299 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 300 | } 301 | 302 | // middle sec 303 | hull(){ 304 | rotate([0,0,i])translate([30,0,13.1/2])cube([2,14,8],center=true); 305 | cylinder(d=51+8,h=14); 306 | } 307 | // connectors 308 | for(j = [-1:2:1]){ 309 | hull(){ 310 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 311 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 312 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+24])cube([wt,1,1],center=true); 313 | rotate([0,0,45+i-45*j])translate([(51+4)/2,0,0])cylinder(d=2,h=8); 314 | } 315 | } 316 | } 317 | 318 | 319 | }union(){ 320 | // corner 321 | for(i = [0:90:270]){ 322 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 323 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 324 | rotate([0,90,i])translate([-13.1/2,0,51/2])cylinder(d=3.2,h=10); 325 | } 326 | // middle sec 327 | translate([0,0,1])cylinder(d=51.2,h=13.1); 328 | translate([0,0,-1])cylinder(d=48,h=3); 329 | translate([0,0,-0.5])cylinder(d1=48+1+0.8,d2=48-1+0.8,h=1); 330 | translate([0,0,14])cylinder(d=69,h=10); 331 | } 332 | } 333 | } 334 | 335 | // generic fd lens front support 336 | module lensfrontcage_fd(spacing=45){ 337 | // corner 338 | ch = 23; 339 | wt = 4; 340 | difference(){ 341 | union(){ 342 | for(i = [0:90:270]){ 343 | // corner 344 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 345 | minkowski(){ 346 | cube([wt-1,19-1,ch-1],center=true); 347 | rotate([0,90,0])cylinder(d=1,h=1); 348 | } 349 | hull(){ 350 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 351 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 352 | } 353 | 354 | // middle sec 355 | cylinder(d=65+6,h=8); 356 | 357 | // connectors 358 | for(j = [-1:2:1]){ 359 | hull(){ 360 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 361 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 362 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 363 | rotate([0,0,45+i-30*j])translate([(65+3)/2,0,0])cylinder(d=1,h=8); 364 | } 365 | } 366 | } 367 | 368 | 369 | }union(){ 370 | // corner 371 | for(i = [0:90:270]){ 372 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 373 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 374 | } 375 | // middle sec 376 | translate([0,0,-1])cylinder(d=65.1,h=15); 377 | translate([0,0,-1])cylinder(d=48,h=3); 378 | } 379 | } 380 | } 381 | 382 | 383 | 384 | 385 | -------------------------------------------------------------------------------- /CAD/ligra_misc.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // misc file 4 | // 5 | // everything else belongs in this file, currently 6 | // the PCB feet, the PCB spacer and a wall prototype 7 | 8 | if($preview){ 9 | for(i=[-1:2:1],j=[-1:2:1]){ 10 | color("DeepPink")translate([15*i,15*j-30,0])cap(); 11 | color("HotPink")translate([10*i,10*j+20,0])foot(); 12 | } 13 | color("PaleVioletRed")translate([35,-10,0])wall_patterned(); 14 | color("LightPink")translate([-95,-65,0])front_pcb(); 15 | color("Pink")translate([-95,65,0])back_pcb(); 16 | } else { 17 | *foot(); 18 | cap(); 19 | } 20 | 21 | module back_pcb(){ 22 | difference(){ 23 | union(){ 24 | translate([0,0,0.8])minkowski(){ 25 | rotate([0,0,45])cube([20,20,0.001],center=true); 26 | cube([106.65-30,106.65-30,1.6],center=true); 27 | } 28 | }union(){ 29 | } 30 | } 31 | } 32 | 33 | module front_pcb(){ 34 | difference(){ 35 | union(){ 36 | translate([0,0,0.8])minkowski(){ 37 | rotate([0,0,45])cube([20,20,0.001],center=true); 38 | cube([106.65-30,106.65-30,1.6],center=true); 39 | } 40 | }union(){ 41 | translate([0,0,-0.2])cylinder(r=42.5,h=2); 42 | } 43 | } 44 | } 45 | 46 | module foot(){ 47 | difference(){ 48 | union(){ 49 | cylinder(d1=12,d2=9,h=15); 50 | }union(){ 51 | cylinder(d=5.1,h=15); 52 | } 53 | } 54 | } 55 | 56 | module cap(){ 57 | difference(){ 58 | union(){ 59 | translate([0,0,1.5])minkowski(){ 60 | cube([19,19,0.5],center=true); 61 | rotate([0,0,45])cube([1,1,0.5],center=true); 62 | } 63 | hull(){ 64 | translate([0,0,6/2+0.5])cube([8,8,4],center=true); 65 | translate([0,0,2/2+0.5])cube([12,12,1],center=true); 66 | } 67 | }union(){ 68 | translate([0,0,-0.5])cylinder(d=5.2,h=3); 69 | translate([0,0,4/2+2.1])cube([7.3,7.3,4.1],center=true); 70 | 71 | translate([0,0,4/2+2.1])rotate([0,0,45])cube([1.7,20,4.1],center=true); 72 | translate([0,0,4/2+2.1])rotate([0,0,-45])cube([1.7,20,4.1],center=true); 73 | } 74 | } 75 | } 76 | 77 | module wall_patterned(l=50){ 78 | w=76; 79 | h=4; 80 | gw=2;//gl=10; 81 | gl=round((l-16)/10)-1; 82 | difference(){ 83 | union(){ 84 | translate([l/2,0,h/2])cube([l,w,h],center=true); 85 | }union(){ 86 | *translate([l/2,0,h/2-0.1])cube([l-16,w-16,h+0.2],center=true); 87 | for(i=[-gw:1:gw],j=[0:1:gl]){ 88 | translate([12*j+8+5,12*i,h/2])rotate([0,0,12])cube([10,10,h+0.2],center=true); 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /CAD/ligra_par_spot.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // PAR-spot file 4 | // 5 | // used to generate the PAR-spot mount that I like to use 6 | 7 | if($preview){ 8 | color("DeepPink")rgb_par_spot_cage(); 9 | } else { 10 | rgb_par_spot_cage(); 11 | } 12 | 13 | module par_spot_cage(spacing=45){ 14 | // corner 15 | ch = 28; 16 | wt = 4; 17 | difference(){ 18 | union(){ 19 | for(i = [0:90:270]){ 20 | // corner 21 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 22 | minkowski(){ 23 | cube([wt-1,19-1,ch-1],center=true); 24 | rotate([0,90,0])cylinder(d=1,h=1); 25 | } 26 | hull(){ 27 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 28 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 29 | } 30 | 31 | // middle sec 32 | cylinder(d=54.1+8,h=18); 33 | // connectors 34 | for(j = [-1:2:1]){ 35 | hull(){ 36 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 37 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 38 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+24])cube([wt,1,1],center=true); 39 | rotate([0,0,45+i-45*j])translate([(54.1+3)/2,0,0])cylinder(d=2,h=17); 40 | } 41 | } 42 | // screw reinforements 43 | if(i < 180) 44 | { 45 | translate([0,0,12])rotate([90,0,i])translate([0,0,26])cylinder(d1=12,d2=6,h=8); 46 | } 47 | } 48 | 49 | 50 | }union(){ 51 | // corner 52 | for(i = [0:90:270]){ 53 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 54 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01-wt*3])cylinder(d=12,h=wt*4); 55 | if(i < 180) 56 | { 57 | translate([0,0,12])rotate([90,0,i])cylinder(d=2.3,h=100); 58 | } 59 | } 60 | // middle sec 61 | translate([0,0,7])cylinder(d=54.1,h=17); 62 | translate([0,0,-1])cylinder(d=52,h=10); 63 | } 64 | } 65 | } 66 | 67 | module rgb_par_spot_cage(spacing=45){ 68 | // corner 69 | ch = 28; 70 | wt = 4; 71 | difference(){ 72 | union(){ 73 | for(i = [0:90:270]){ 74 | // corner 75 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 76 | minkowski(){ 77 | cube([wt-1,19-1,ch-1],center=true); 78 | rotate([0,90,0])cylinder(d=1,h=1); 79 | } 80 | hull(){ 81 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,7.5,ch],center=true); 82 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,6.5,ch],center=true); 83 | } 84 | 85 | // middle sec 86 | cylinder(d=62+8,h=18); 87 | // connectors 88 | for(j = [-1:2:1]){ 89 | hull(){ 90 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 91 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 92 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+24])cube([wt,1,1],center=true); 93 | rotate([0,0,45+i-45*j])translate([(62+3)/2,0,0])cylinder(d=2,h=17); 94 | } 95 | } 96 | // screw reinforements 97 | if(i < 180) 98 | { 99 | translate([0,0,12])rotate([90,0,i])translate([0,0,30])cylinder(d1=12,d2=6,h=8); 100 | } 101 | } 102 | 103 | 104 | }union(){ 105 | // corner 106 | for(i = [0:90:270]){ 107 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 108 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01-wt*3])cylinder(d=12,h=wt*4); 109 | if(i < 180) 110 | { 111 | translate([0,0,12])rotate([90,0,i])cylinder(d=2.3,h=100); 112 | } 113 | } 114 | // middle sec 115 | translate([0,0,-1])cylinder(d=62,h=27); 116 | } 117 | } 118 | } 119 | 120 | // todo draw actual PAR spot -------------------------------------------------------------------------------- /CAD/ligra_projectorlens.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // lens planning file 4 | // 5 | // use this file to add your lens model, plan the lens mount 6 | // the generic one should be great already and work on the frontcage. 7 | // The frontcage is a supplementary mount in which the 8 | // lens-front can freely move 9 | 10 | if($preview){ 11 | color("pink")rotate([180,0,30])projectorlens_lens(); 12 | translate([0,0,0])projectorlens_connector(); 13 | }else{ 14 | projectorlens_connector(); 15 | } 16 | 17 | 18 | // frontcage 19 | module projectorlens_connector(spacing=45){ 20 | // corner 21 | ch = 23; 22 | wt = 4; 23 | difference(){ 24 | union(){ 25 | for(i = [0:90:270]){ 26 | // corner 27 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 28 | minkowski(){ 29 | cube([wt-1,19-1,ch-1],center=true); 30 | rotate([0,90,0])cylinder(d=1,h=1); 31 | } 32 | hull(){ 33 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8,ch],center=true); 34 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7,ch],center=true); 35 | } 36 | 37 | // middle sec 38 | cylinder(d=66+6,h=8); 39 | 40 | // connectors 41 | for(j = [-1:2:1]){ 42 | hull(){ 43 | rotate([0,90,45+i])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 44 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 45 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5)*j,0.5+12])cube([wt,1,1],center=true); 46 | rotate([0,0,45+i-30*j])translate([(66+3)/2,0,0])cylinder(d=1,h=8); 47 | } 48 | } 49 | } 50 | rotate([0,0,30])intersection(){ 51 | translate([0,0,6/2])cube([75,75,6],center=true); 52 | translate([0,0,6/2])rotate([0,0,45])cube([102,102,6],center=true); 53 | } 54 | }union(){ 55 | // corner 56 | for(i = [0:90:270]){ 57 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 58 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 59 | } 60 | // middle sec 61 | translate([0,0,-1])cylinder(d=66.1,h=15); 62 | translate([0,0,-1])cylinder(d=48,h=3); 63 | // lens screes 64 | rotate([0,0,30]) 65 | union(){for(i = [-1:2:1], j = [-1:2:1]){ 66 | translate([i*64/2,j*65/2,-0.1])cylinder(d=4.2,h=6.2); 67 | } 68 | } 69 | } 70 | } 71 | } 72 | 73 | // Lens 74 | module projectorlens_lens(spacing=45){ 75 | difference(){ 76 | union(){ 77 | intersection(){ 78 | translate([0,0,3/2])cube([75,75,3],center=true); 79 | translate([0,0,3/2])rotate([0,0,45])cube([102,102,3],center=true); 80 | } 81 | translate([0,0,3])cylinder(d=75,h=26); 82 | }union(){ 83 | translate([0,0,-1])cylinder(d=69,h=100); 84 | for(i = [-1:2:1], j = [-1:2:1]){ 85 | translate([i*64/2,j*65/2,-0.1])cylinder(d=4.2,h=3.2); 86 | } 87 | } 88 | } 89 | } -------------------------------------------------------------------------------- /CAD/ligra_stage.scad: -------------------------------------------------------------------------------- 1 | include 2 | 3 | // gear calculations, ignore this 4 | m=1;n1=10;n2=57;ad=(m/2)*(n1+n2); 5 | 6 | $fn=100; 7 | 8 | // stage file 9 | // 10 | // as stage, for example a stencil is meant. On the stage resides what will become the focus 11 | // of ligra, figuratively and metaphorically. Use this file to plan what will be projected 12 | 13 | // this file is still a bit messy ;-; 14 | 15 | if($preview){ 16 | //stage_motor_rot_assembly(); 17 | //color("HotPink")translate([0,0,4.1])stencil_cage(27.1); 18 | stage(); 19 | translate([0,0,13])stage_rot_yaw(); 20 | }else{ 21 | //stencil_cage(27.1); 22 | stage_motor_rot_base(45); 23 | } 24 | 25 | module stage_motor_rot_assembly(spacing=45){ 26 | stage_motor_rot_base(spacing); 27 | color("PaleVioletRed")stage_motor_rot_rotor(); 28 | color("HotPink")translate([0,0,4.1])stencil_cage(); 29 | color("DeepPink")translate([0,0,6])stencil_cage_counter(); 30 | if($preview)translate([0,0,6.0])stencil(); 31 | 32 | // optional for motor use, but handy for hand usage 33 | translate([0,0,-3])rotate([180,0,0])stage_motor_rot_gear_l(); 34 | // optional for motor use 35 | translate([-34.5,0,-3])rotate([180,0,0])stage_motor_rot_gear_s(); 36 | } 37 | 38 | // motor-rot stage for 2D printed stencils, this is the most useful one imo 39 | // its base 40 | module stage_motor_rot_base(spacing=45){ 41 | //translate([0,0,0])stage_rot_2(); 42 | // corner 43 | ch = 25; 44 | wt = 4; 45 | difference(){ 46 | color("LightPink")union(){ 47 | for(i = [0:90:270]){ 48 | // corner 49 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2-0.5]) 50 | minkowski(){ 51 | cube([wt-1,19-1,ch-1],center=true); 52 | rotate([0,90,0])cylinder(d=1,h=1); 53 | } 54 | hull(){ 55 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2-0.5])cube([wt,7.5,ch],center=true); 56 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2-0.5])cube([wt+0.33,6.5,ch],center=true); 57 | } 58 | } 59 | // middle cylinder 60 | for(i = [0:90:270]){ 61 | hull(){ 62 | translate([0,0,-0.4])cylinder(d=58,h=5.05); 63 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,3.6/2-0.5])cube([1,19-1,3.6],center=true); 64 | } 65 | } 66 | // motor 67 | translate([-34,0,-0.5])cylinder(d=8,h=6); 68 | 69 | }union(){ 70 | // corner 71 | for(i = [00:90:270]){ 72 | rotate([0,90,45+i-90])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 73 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 74 | rotate([0,0,45+i])translate([spacing+1,0,0])rotate([0,-45,0])cube([wt,22,2],center=true); 75 | rotate([0,0,45+i])translate([spacing+1,0,ch])rotate([0,45,0])cube([wt,22,2],center=true); 76 | // screwhole 77 | rotate([0,0,45+i])translate([33,0,-1])cylinder(d=2.3,h=5); 78 | 79 | } 80 | // middle 81 | translate([0,0,0.4])union(){ 82 | translate([0,0,-1])cylinder(d=51.1,h=6); 83 | *translate([0,0,-0.25])cylinder(d2=51.1,d1=50.5,h=0.5); 84 | *translate([0,0,-1])cylinder(d=50,h=3.5); 85 | } 86 | // motor 87 | translate([-34,0,-0.75])cylinder(d=5.99,h=8); 88 | // ball bearing 89 | for(i = [0:1:4]){ 90 | rotate([0,0,360/4*i+29])translate([56/2+1,0,0.7/4])cylinder(d=10,h=5); 91 | } 92 | } 93 | } 94 | 95 | // ball bearing 96 | if($preview){ 97 | for(i = [0:1:4]){ 98 | rotate([0,0,360/4*i+29])translate([56/2+1,0,0.7/4])ballbearing(); 99 | } 100 | } 101 | for(i = [0:1:4]){ 102 | rotate([0,0,360/4*i+29])translate([56/2+1,0,0.7/4])cylinder(d=4,h=3); 103 | } 104 | } 105 | 106 | 107 | module stage_motor_rot_rotor(){ 108 | difference(){ 109 | union(){ 110 | intersection(){ 111 | translate([0,0,0])minkowski(){ 112 | cylinder(d=49-0.7+0.8,h=5-0.7); 113 | sphere(d=0.7); 114 | } 115 | translate([0,0,0.7/4-0.05/2])union(){ 116 | cylinder(d=48.8,h=4.05); 117 | translate([0,0,4.05])cylinder(d1=49,d2=54,h=1); 118 | translate([0,0,-1])cylinder(d2=49,d1=54,h=1); 119 | } 120 | } 121 | }union(){ 122 | // optical path 123 | translate([0,0,-1])cylinder(d=37,h=11); 124 | // magnets!!!1! 125 | for(i = [0:1:12]){ 126 | if(i != 2 && i != 6 && i != 10){ 127 | rotate([0,0,360/12*i])translate([42/2+1,0,-0.5])cylinder(d=3.1,h=5.1); 128 | } 129 | if( i == 0 || i == 4 || i == 8){ 130 | rotate([0,0,360/12*i+60])translate([42/2+1,0,-0.5])cylinder(d=2.2,h=6); 131 | } 132 | } 133 | } 134 | } 135 | } 136 | 137 | module stencil_cage_counter(sd=39.2){ 138 | // Stencil 139 | difference(){ 140 | union(){ 141 | translate([0,0,0])cylinder(d=sd,h=1); 142 | }union(){ 143 | // inner cylinders 144 | translate([0,0,-1])cylinder(d=sd-4,h=11); 145 | } 146 | } 147 | } 148 | 149 | module stencil_cage(sd=39.2){ 150 | // Stencil 151 | *translate([0,0,1.55])union(){ 152 | color("black")cylinder(d=35,h=0.201); 153 | color("red")cylinder(d=39,h=0.2); 154 | } 155 | difference(){ 156 | union(){ 157 | translate([0,0,0.2])minkowski(){ 158 | hull(){ 159 | // cylinder 160 | translate([0,0,])cylinder(d=42,h=2.5-0.4); 161 | // magnets 162 | for(i = [0:1:2]){ 163 | rotate([0,0,360/3*i])translate([42/2+1,0,0])cylinder(d=5.1,h=2.5); 164 | } 165 | } 166 | // chamfer thingie 167 | sphere(d=0.4); 168 | } 169 | }union(){ 170 | // inner cylinders 171 | translate([0,0,1.5])cylinder(d=sd,h=11); 172 | translate([0,0,-1])cylinder(d=sd-4,h=11); 173 | 174 | // magnets 175 | for(i = [0:1:2]){ 176 | rotate([0,0,360/3*i])translate([42/2+1,0,0.5])cylinder(d=3.1,h=2.6); 177 | } 178 | // alignment 179 | translate([-15,0,1+1.5])cube([30,2,2],center=true); 180 | } 181 | } 182 | } 183 | 184 | module ballbearing(id=4,od=9,h=4){ 185 | color("silver") 186 | difference(){ 187 | union(){ 188 | cylinder(d=od,h=h); 189 | }union(){ 190 | translate([0,0,-1])cylinder(d=id,h=h+2); 191 | } 192 | } 193 | } 194 | 195 | module stencil(){ 196 | color("LightSteelBlue")cylinder(d=38,h=0.1); 197 | } 198 | 199 | 200 | module stage_motor_rot_gear_l(spacing=45){ 201 | color("yellow") 202 | intersection(){ 203 | difference(){ 204 | union(){ 205 | spur_gear(m, n2, 3, 49,optimized=false); 206 | translate([0,0,-2.7])cylinder(d=49,h=5.7); 207 | }union(){ 208 | // middle 209 | translate([0,0,-3])cylinder(d=38,h=10); 210 | for(i = [0:1:12]){ 211 | if( i == 0 || i == 4 || i == 8){ 212 | rotate([0,0,360/12*i+60])translate([42/2+1,0,-3])cylinder(d=3.05,h=10); 213 | } 214 | } 215 | } 216 | } 217 | union(){ 218 | translate([0,0,-2.7])cylinder(d=54.8,h=15); 219 | translate([0,0,0.5])cylinder(d=59,h=2); 220 | translate([0,0,2.5])cylinder(d1=59,d2=54.8,h=0.5); 221 | translate([0,0,00])cylinder(d2=59,d1=54.8,h=0.5); 222 | } 223 | } 224 | } 225 | 226 | module stage_motor_rot_gear_s(spacing=45){ 227 | color("yellow") 228 | intersection(){ 229 | difference(){ 230 | union(){ 231 | translate([0,0,0])spur_gear(m, n1, 3, 2.05,optimized=false); 232 | translate([2-0.45,0,3/2])cube([2,2,3],center=true); 233 | }union(){ 234 | } 235 | } 236 | union(){ 237 | translate([0,0,0.5])cylinder(d=12,h=2); 238 | translate([0,0,2.5])cylinder(d1=12,d2=7.5,h=0.5); 239 | translate([0,0,00])cylinder(d1=7.5,d2=12,h=0.5); 240 | } 241 | } 242 | } 243 | 244 | 245 | // other, clean me uwu 246 | module stage_motor_rot_gear(){ 247 | difference(){ 248 | union(){ 249 | // base cylinder 250 | translate([0,0,-1])cylinder(d=49,h=4); 251 | cylinder(d=52,h=2.45); 252 | }union(){ 253 | // optical path 254 | translate([0,0,-2])cylinder(d=40,h=12); 255 | 256 | // magnets!!!1! 257 | for(i = [0:1:2]){ 258 | rotate([0,0,360/3*i+60])translate([42/2+1,0,-1.1])cylinder(d=3,h=6); 259 | } 260 | } 261 | } 262 | } 263 | 264 | module stage_fix_top2(spacing=45){ 265 | color("yellow") 266 | difference(){ 267 | union(){ 268 | hull(){ 269 | for(i = [0:90:270]){ 270 | rotate([0,0,45+i])translate([33,0,0])cylinder(d=12,h=1); 271 | } 272 | cylinder(d=50.5,h=1); 273 | } 274 | for(i = [0:1:4]){ 275 | rotate([0,0,360/4*i+29])translate([56/2+1,0,-1.5])cylinder(d=4,h=1.5); 276 | } 277 | }union(){ 278 | // corner 279 | for(i = [00:90:270]){ 280 | // screwhole 281 | rotate([0,0,45+i])translate([33,0,-1])cylinder(d=3.05,h=5); 282 | 283 | } 284 | // middle 285 | translate([0,0,-2])cylinder(d=50,h=3.5); 286 | } 287 | } 288 | } 289 | 290 | 291 | module stage_fix_top(spacing=45){ 292 | color("yellow") 293 | difference(){ 294 | union(){ 295 | hull(){ 296 | for(i = [0:90:270]){ 297 | rotate([0,0,45+i])translate([33,0,0])cylinder(d=12,h=1); 298 | } 299 | cylinder(d=50.5,h=1); 300 | } 301 | }union(){ 302 | // corner 303 | for(i = [00:90:270]){ 304 | // screwhole 305 | rotate([0,0,45+i])translate([33,0,-1])cylinder(d=3.05,h=5); 306 | 307 | } 308 | // middle 309 | translate([0,0,-2])cylinder(d=50,h=3.5); 310 | } 311 | } 312 | } 313 | 314 | 315 | 316 | 317 | 318 | module stage_rot_yaw(){ 319 | *translate([0,0,0])stage_rot(); 320 | difference(){ 321 | union(){ 322 | translate([0,0,-0.4])cylinder(d=58,h=4); 323 | 324 | // hook 325 | rotate([0,0,-45-55])translate([58/2+0.8,0,4/2-0.4])rotate([0,0,20])cube([1,10,4],center=true); 326 | rotate([0,0,-45+55])translate([58/2+0.8,0,4/2-0.4])rotate([0,0,-20])cube([1,10,4],center=true); 327 | 328 | // screws 329 | hull(){ 330 | rotate([0,0,180])translate([58/2+4,0,-0.4])cylinder(d=8,h=4); 331 | translate([0,0,-0.4])cylinder(d=58,h=4); 332 | } 333 | hull(){ 334 | rotate([0,0,180-90])translate([58/2+4,0,-0.4])cylinder(d=8,h=4); 335 | translate([0,0,-0.4])cylinder(d=58,h=4); 336 | } 337 | rotate([0,0,90])translate([58/2+10.5,0,1.5])rotate([0,-90,0])cylinder(d=2,h=6); 338 | rotate([0,0,180])translate([58/2+10.5,0,1.5])rotate([0,-90,0])cylinder(d=2,h=6); 339 | if($preview){ 340 | color("pink")rotate([0,0,-45])translate([58-10,0,1.5])rotate([0,-90,0])cylinder(d=2.9,h=20); 341 | color("pink")rotate([0,0,-45])translate([58-10,0,1.5])rotate([0,-90,0])cylinder(d=5,h=2); 342 | 343 | color("pink")rotate([0,0,90])translate([58/2+4,0,-10])cylinder(d=4.05,h=30); 344 | color("pink")rotate([0,0,90])translate([58/2+4,0,-10])cylinder(d=8.05,h=4); 345 | 346 | color("pink")rotate([0,0,180])translate([58/2+4,0,-10])cylinder(d=2.9,h=30); 347 | color("pink")rotate([0,0,180])translate([58/2+4,0,-10])cylinder(d=5,h=2); 348 | } 349 | }union(){ 350 | translate([0,0,-1.25])cylinder(d=51.1,h=4); 351 | translate([0,0,2.75])cylinder(d1=51.1,d2=50.5,h=0.5); 352 | translate([0,0,0.25])cylinder(d=50,h=3.5); 353 | // head 354 | rotate([0,0,-45])translate([58/2-0.6,0,-0.5+2])sphere(d=3); 355 | // screws 356 | rotate([0,0,180-90])translate([58/2+4,0,-0.5])cylinder(d=3.3,h=4.2); 357 | rotate([0,0,180])translate([58/2+4,0,-0.5])cylinder(d=3.3,h=4.2); 358 | 359 | } 360 | } 361 | } 362 | 363 | 364 | 365 | 366 | module stage_rot(){ 367 | *translate([0,0,3.1])stencil_cage(); 368 | *translate([0,0,-3])stage_gear(); 369 | difference(){ 370 | union(){ 371 | // magnets and rotation 372 | for(i = [0:1:12]){ 373 | if(i != 2 && i != 6 && i != 10){ 374 | hull(){ 375 | // base cylinder 376 | cylinder(d=42,h=3); 377 | 378 | minkowski(){ 379 | rotate([0,0,360/12*i])translate([42/2+1,0,0.7/2])cylinder(d=7-0.7-0.1,h=3-0.7); 380 | sphere(d=0.7); 381 | } 382 | } 383 | } 384 | // gear conn 385 | hull(){ 386 | // base cylinder 387 | cylinder(d=42,h=3); 388 | minkowski(){ 389 | rotate([0,0,360/3*i+60])translate([42/2+1,0,0.25])cylinder(d=5-0.5,h=3-0.5); 390 | sphere(d=0.5); 391 | } 392 | } 393 | } 394 | }union(){ 395 | // optical path 396 | translate([0,0,-1])cylinder(d=37,h=11); 397 | 398 | // magnets!!!1! 399 | for(i = [0:1:12]){ 400 | if(i != 2 && i != 6 && i != 10){ 401 | rotate([0,0,360/12*i])translate([42/2+1,0,-0.1])cylinder(d=3.1,h=2.6); 402 | } 403 | if( i == 0 || i == 4 || i == 8){ 404 | rotate([0,0,360/12*i+60])translate([42/2+1,0,-0.1])cylinder(d=2.2,h=5); 405 | } 406 | } 407 | } 408 | } 409 | } 410 | 411 | module stage_gear(){ 412 | difference(){ 413 | union(){ 414 | // base cylinder 415 | translate([0,0,-1])cylinder(d=49,h=4); 416 | cylinder(d=52,h=2.45); 417 | }union(){ 418 | // optical path 419 | translate([0,0,-2])cylinder(d=40,h=12); 420 | 421 | // magnets!!!1! 422 | for(i = [0:1:2]){ 423 | rotate([0,0,360/3*i+60])translate([42/2+1,0,-1.1])cylinder(d=3,h=6); 424 | } 425 | } 426 | } 427 | } 428 | 429 | 430 | 431 | module stage(spacing=45){ 432 | // corner 433 | ch = 30; 434 | wt = 4; 435 | difference(){ 436 | union(){ 437 | for(i = [0:90:270]){ 438 | // corner 439 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 440 | minkowski(){ 441 | cube([wt-1,19-1,ch-1],center=true); 442 | rotate([0,90,0])cylinder(d=1,h=1); 443 | } 444 | hull(){ 445 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 446 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 447 | } 448 | if(i == 0 || i == 270){ 449 | hull(){ 450 | rotate([0,90,45+i-90])translate([-ch+0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 451 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 452 | } 453 | hull(){ 454 | rotate([0,90,45+i])translate([-ch+0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 455 | rotate([0,90,45+i-90])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 456 | } 457 | } 458 | // stage connect 459 | if(i == 90 || i == 180){ 460 | hull(){ 461 | rotate([0,90,45+i])translate([-ch+0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 462 | rotate([0,90,45+i])translate([-ch+2.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 463 | rotate([0,90,45+i-90])translate([-ch+0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 464 | rotate([0,90,45+i-90])translate([-ch+2.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 465 | rotate([0,0,i])translate([58/2+4,0,ch-wt+1])cylinder(d=6,h=2.5); 466 | } 467 | rotate([0,0,i])translate([58/2+4,0,ch-wt+2])rotate([0,-90,0])cylinder(d=2,h=6); 468 | } 469 | } 470 | hull(){ 471 | rotate([0,90,45+90])translate([-ch+0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 472 | rotate([0,0,90])translate([58/2+4,0,ch-wt+1])cylinder(d=6,h=2.5); 473 | } 474 | hull(){ 475 | rotate([0,90,45+90])translate([-ch+0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 476 | rotate([0,0,180])translate([58/2+4,0,ch-wt+1])cylinder(d=6,h=2.5); 477 | } 478 | }union(){ 479 | // corner 480 | for(i = [90:90:270]){ 481 | rotate([0,90,45+i-90])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 482 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 483 | rotate([0,0,45+i])translate([spacing+0.5,0,0])rotate([0,-45,0])cube([wt,22,2],center=true); 484 | rotate([0,0,i])translate([58/2+4,0,ch-wt+1-0.1])cylinder(d=3.2,h=0.5); 485 | 486 | } 487 | // pin 488 | rotate([0,0,-45])translate([58/2-0.25,0,8.5])rotate([0,90,0])cylinder(d=2.3,h=30); 489 | 490 | // upper lip 491 | hull(){ 492 | rotate([0,0,-45])translate([58/2-0.25,-3,8.5+7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 493 | rotate([0,0,-45])translate([58/2-0.25,+3,8.5+7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 494 | } 495 | hull(){ 496 | rotate([0,0,-45])translate([58/2-0.25,-3,8.5+7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 497 | rotate([0,0,-45])translate([58/2-0.25,-2,8.5+4])rotate([0,90,0])cylinder(d=2.3,h=30); 498 | } 499 | hull(){ 500 | rotate([0,0,-45])translate([58/2-0.25,+3,8.5+7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 501 | rotate([0,0,-45])translate([58/2-0.25,+2,8.5+4])rotate([0,90,0])cylinder(d=2.3,h=30); 502 | } 503 | // lower lip 504 | hull(){ 505 | rotate([0,0,-45])translate([58/2-0.25,-3,8.5-7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 506 | rotate([0,0,-45])translate([58/2-0.25,+3,8.5-7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 507 | } 508 | hull(){ 509 | rotate([0,0,-45])translate([58/2-0.25,-3,8.5-7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 510 | rotate([0,0,-45])translate([58/2-0.25,-2,8.5-4])rotate([0,90,0])cylinder(d=2.3,h=30); 511 | } 512 | hull(){ 513 | rotate([0,0,-45])translate([58/2-0.25,+3,8.5-7.6])rotate([0,90,0])cylinder(d=2.3,h=30); 514 | rotate([0,0,-45])translate([58/2-0.25,+2,8.5-4])rotate([0,90,0])cylinder(d=2.3,h=30); 515 | } 516 | } 517 | } 518 | } 519 | 520 | module STENCILcage(spacing=40){ 521 | // corner 522 | ch = 22; 523 | wt = 4; 524 | difference(){ 525 | union(){ 526 | for(i = [0:90:270]){ 527 | // corner 528 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 529 | minkowski(){ 530 | cube([wt-1,19-1,ch-1],center=true); 531 | rotate([0,90,0])cylinder(d=1,h=1); 532 | } 533 | hull(){ 534 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 535 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 536 | } 537 | 538 | // bars 539 | hull(){ 540 | rotate([0,90,45+i])translate([-0.5,-19/2+0.5,spacing-wt])cylinder(d=1,h=wt); 541 | rotate([0,90,45+i-90])translate([-0.5,19/2-0.5,spacing-wt])cylinder(d=1,h=wt); 542 | rotate([0,0,45+i])translate([spacing-wt/2,(-19/2+0.5),0.5+4])cube([wt,1,1],center=true); 543 | rotate([0,0,45+i-90])translate([spacing-wt/2,(19/2-0.5),0.5+4])cube([wt,1,1],center=true); 544 | } 545 | 546 | // pins 547 | for(k = [-1:2:1], l = [-1:2:1]){ 548 | hull(){ 549 | #translate([52/2*k,69/2*l,0])cylinder(d=wt,h=2); 550 | #translate([69/2*k,52/2*l,0])cylinder(d=wt,h=2); 551 | translate([40.5/2*k,40.5/2*l,0])cylinder(d=4,h=2); 552 | } 553 | hull(){ 554 | translate([40.5/2*k,40.5/2*l,0])cylinder(d=2.95,h=1); 555 | translate([40.5/2*k,40.5/2*l,3])sphere(d=3.05); 556 | } 557 | } 558 | } 559 | }union(){ 560 | // corner 561 | for(i = [0:90:270]){ 562 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 563 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt-0.01])cylinder(d=10,h=wt); 564 | } 565 | } 566 | } 567 | } 568 | 569 | -------------------------------------------------------------------------------- /CAD/ligra_tripod.scad: -------------------------------------------------------------------------------- 1 | $fn=100; 2 | 3 | // tripod mount file 4 | // 5 | // use this file to generate tripod mounts, the generic one should be fine already 6 | 7 | //color("DeepPink")tripod_plate(45); 8 | color("salmon")interlock(45); 9 | 10 | module tripod_plate(spacing=45){ 11 | // corner 12 | ch = 45; 13 | wt = 5; 14 | translate([0,-78,0]) 15 | difference(){ 16 | union(){ 17 | hull(){ 18 | for(i = [0:90:90]){ 19 | // corner 20 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 21 | minkowski(){ 22 | cube([wt-1,19-1,ch-1],center=true); 23 | rotate([0,90,0])cylinder(d=1,h=1); 24 | } 25 | } 26 | } 27 | for(i = [0:90:90]){ 28 | hull(){ 29 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,8.5,ch],center=true); 30 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,7.5,ch],center=true); 31 | } 32 | } 33 | }union(){ 34 | // corner 35 | for(i = [0:90:90]){ 36 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 37 | rotate([0,90,45+i])translate([-9.5,0,spacing-wt-1])cylinder(d=5,h=wt+2); 38 | rotate([0,90,45+i])translate([-ch+9.5,0,spacing-wt-wt*3-0.01])cylinder(d=10,h=wt*3); 39 | rotate([0,90,45+i])translate([-9.5,0,spacing-wt-wt*3-0.01])cylinder(d=10,h=wt*3); 40 | } 41 | rotate([0,90,90])translate([-ch/2,0,20])cylinder(d=8,h=20); 42 | } 43 | } 44 | } 45 | 46 | module interlock(spacing=45){ 47 | // corner 48 | ch = 20; 49 | wt = 5; 50 | translate([0,-78,0]) 51 | difference(){ 52 | union(){ 53 | hull(){ 54 | hull(){ 55 | for(i = [0:90:90]){ 56 | // corner 57 | rotate([0,0,45+i])translate([spacing-wt/2-1/2,0,ch/2]) 58 | minkowski(){ 59 | cube([wt-1,19-1,ch-1],center=true); 60 | rotate([0,90,0])cylinder(d=1,h=1); 61 | } 62 | } 63 | } 64 | hull(){ 65 | translate([0,49,0]) 66 | for(i = [0:90:90]){ 67 | // corner 68 | rotate([0,0,180+45+i])translate([spacing-wt/2-1/2,0,ch/2]) 69 | minkowski(){ 70 | cube([wt-1,19-1,ch-1],center=true); 71 | rotate([0,90,0])cylinder(d=1,h=1); 72 | } 73 | } 74 | } 75 | } 76 | for(i = [0:90:90]){ 77 | hull(){ 78 | rotate([0,0,45+i])translate([spacing-wt/2,0,ch/2])cube([wt,7.5,ch],center=true); 79 | rotate([0,0,45+i])translate([spacing-wt/2+0.33/2,0,ch/2])cube([wt+0.33,6.5,ch],center=true); 80 | } 81 | } 82 | }union(){ 83 | // corner 84 | for(i = [0:90:90]){ 85 | rotate([0,90,45+i])translate([-ch/2,0,spacing-wt-1])cylinder(d=5,h=wt+2); 86 | rotate([0,90,45+i])translate([-ch/2,0,spacing-wt-wt*10-0.01])cylinder(d=10,h=wt*10); 87 | } 88 | } 89 | } 90 | } -------------------------------------------------------------------------------- /CAD/stls/fd_back_conn.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/fd_back_conn.stl -------------------------------------------------------------------------------- /CAD/stls/fd_frontcage_28_80.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/fd_frontcage_28_80.stl -------------------------------------------------------------------------------- /CAD/stls/fd_frontcage_70_210.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/fd_frontcage_70_210.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_interlock.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_interlock.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_arm.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_arm.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_arm_l.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_arm_l.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_arm_r.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_arm_r.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_bracket.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_bracket.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_motor_mount.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_motor_mount.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_motorgear.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_motorgear.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_rolls.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_rolls.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lava_disk_servo_shaft.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lava_disk_servo_shaft.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lens_frontcage_fd_28_80.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lens_frontcage_fd_28_80.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lens_frontcage_fd_70_210.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lens_frontcage_fd_70_210.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lens_frontcap_35-105.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lens_frontcap_35-105.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lens_frontcap_38-95.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lens_frontcap_38-95.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_lens_lenscagefd.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_lens_lenscagefd.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_misc_cap.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_misc_cap.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_misc_foot.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_misc_foot.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_par_spot_stencil_cage.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_par_spot_stencil_cage.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_projectorlens.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_projectorlens.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_stage_stage_motor_rot_base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_stage_stage_motor_rot_base.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_stage_stage_motor_rot_gear_l.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_stage_stage_motor_rot_gear_l.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_stage_stage_motor_rot_rotor.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_stage_stage_motor_rot_rotor.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_stage_stencil_cage.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_stage_stencil_cage.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_stage_stencil_cage_counter.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_stage_stencil_cage_counter.stl -------------------------------------------------------------------------------- /CAD/stls/ligra_tripod_tripod_plate.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/CAD/stls/ligra_tripod_tripod_plate.stl -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | CERN Open Hardware Licence Version 2 - Strongly Reciprocal 2 | 3 | 4 | Preamble 5 | 6 | CERN has developed this licence to promote collaboration among 7 | hardware designers and to provide a legal tool which supports the 8 | freedom to use, study, modify, share and distribute hardware designs 9 | and products based on those designs. Version 2 of the CERN Open 10 | Hardware Licence comes in three variants: CERN-OHL-P (permissive); and 11 | two reciprocal licences: CERN-OHL-W (weakly reciprocal) and this 12 | licence, CERN-OHL-S (strongly reciprocal). 13 | 14 | The CERN-OHL-S is copyright CERN 2020. Anyone is welcome to use it, in 15 | unmodified form only. 16 | 17 | Use of this Licence does not imply any endorsement by CERN of any 18 | Licensor or their designs nor does it imply any involvement by CERN in 19 | their development. 20 | 21 | 22 | 1 Definitions 23 | 24 | 1.1 'Licence' means this CERN-OHL-S. 25 | 26 | 1.2 'Compatible Licence' means 27 | 28 | a) any earlier version of the CERN Open Hardware licence, or 29 | 30 | b) any version of the CERN-OHL-S, or 31 | 32 | c) any licence which permits You to treat the Source to which 33 | it applies as licensed under CERN-OHL-S provided that on 34 | Conveyance of any such Source, or any associated Product You 35 | treat the Source in question as being licensed under 36 | CERN-OHL-S. 37 | 38 | 1.3 'Source' means information such as design materials or digital 39 | code which can be applied to Make or test a Product or to 40 | prepare a Product for use, Conveyance or sale, regardless of its 41 | medium or how it is expressed. It may include Notices. 42 | 43 | 1.4 'Covered Source' means Source that is explicitly made available 44 | under this Licence. 45 | 46 | 1.5 'Product' means any device, component, work or physical object, 47 | whether in finished or intermediate form, arising from the use, 48 | application or processing of Covered Source. 49 | 50 | 1.6 'Make' means to create or configure something, whether by 51 | manufacture, assembly, compiling, loading or applying Covered 52 | Source or another Product or otherwise. 53 | 54 | 1.7 'Available Component' means any part, sub-assembly, library or 55 | code which: 56 | 57 | a) is licensed to You as Complete Source under a Compatible 58 | Licence; or 59 | 60 | b) is available, at the time a Product or the Source containing 61 | it is first Conveyed, to You and any other prospective 62 | licensees 63 | 64 | i) as a physical part with sufficient rights and 65 | information (including any configuration and 66 | programming files and information about its 67 | characteristics and interfaces) to enable it either to 68 | be Made itself, or to be sourced and used to Make the 69 | Product; or 70 | ii) as part of the normal distribution of a tool used to 71 | design or Make the Product. 72 | 73 | 1.8 'Complete Source' means the set of all Source necessary to Make 74 | a Product, in the preferred form for making modifications, 75 | including necessary installation and interfacing information 76 | both for the Product, and for any included Available Components. 77 | If the format is proprietary, it must also be made available in 78 | a format (if the proprietary tool can create it) which is 79 | viewable with a tool available to potential licensees and 80 | licensed under a licence approved by the Free Software 81 | Foundation or the Open Source Initiative. Complete Source need 82 | not include the Source of any Available Component, provided that 83 | You include in the Complete Source sufficient information to 84 | enable a recipient to Make or source and use the Available 85 | Component to Make the Product. 86 | 87 | 1.9 'Source Location' means a location where a Licensor has placed 88 | Covered Source, and which that Licensor reasonably believes will 89 | remain easily accessible for at least three years for anyone to 90 | obtain a digital copy. 91 | 92 | 1.10 'Notice' means copyright, acknowledgement and trademark notices, 93 | Source Location references, modification notices (subsection 94 | 3.3(b)) and all notices that refer to this Licence and to the 95 | disclaimer of warranties that are included in the Covered 96 | Source. 97 | 98 | 1.11 'Licensee' or 'You' means any person exercising rights under 99 | this Licence. 100 | 101 | 1.12 'Licensor' means a natural or legal person who creates or 102 | modifies Covered Source. A person may be a Licensee and a 103 | Licensor at the same time. 104 | 105 | 1.13 'Convey' means to communicate to the public or distribute. 106 | 107 | 108 | 2 Applicability 109 | 110 | 2.1 This Licence governs the use, copying, modification, Conveying 111 | of Covered Source and Products, and the Making of Products. By 112 | exercising any right granted under this Licence, You irrevocably 113 | accept these terms and conditions. 114 | 115 | 2.2 This Licence is granted by the Licensor directly to You, and 116 | shall apply worldwide and without limitation in time. 117 | 118 | 2.3 You shall not attempt to restrict by contract or otherwise the 119 | rights granted under this Licence to other Licensees. 120 | 121 | 2.4 This Licence is not intended to restrict fair use, fair dealing, 122 | or any other similar right. 123 | 124 | 125 | 3 Copying, Modifying and Conveying Covered Source 126 | 127 | 3.1 You may copy and Convey verbatim copies of Covered Source, in 128 | any medium, provided You retain all Notices. 129 | 130 | 3.2 You may modify Covered Source, other than Notices, provided that 131 | You irrevocably undertake to make that modified Covered Source 132 | available from a Source Location should You Convey a Product in 133 | circumstances where the recipient does not otherwise receive a 134 | copy of the modified Covered Source. In each case subsection 3.3 135 | shall apply. 136 | 137 | You may only delete Notices if they are no longer applicable to 138 | the corresponding Covered Source as modified by You and You may 139 | add additional Notices applicable to Your modifications. 140 | Including Covered Source in a larger work is modifying the 141 | Covered Source, and the larger work becomes modified Covered 142 | Source. 143 | 144 | 3.3 You may Convey modified Covered Source (with the effect that You 145 | shall also become a Licensor) provided that You: 146 | 147 | a) retain Notices as required in subsection 3.2; 148 | 149 | b) add a Notice to the modified Covered Source stating that You 150 | have modified it, with the date and brief description of how 151 | You have modified it; 152 | 153 | c) add a Source Location Notice for the modified Covered Source 154 | if You Convey in circumstances where the recipient does not 155 | otherwise receive a copy of the modified Covered Source; and 156 | 157 | d) license the modified Covered Source under the terms and 158 | conditions of this Licence (or, as set out in subsection 159 | 8.3, a later version, if permitted by the licence of the 160 | original Covered Source). Such modified Covered Source must 161 | be licensed as a whole, but excluding Available Components 162 | contained in it, which remain licensed under their own 163 | applicable licences. 164 | 165 | 166 | 4 Making and Conveying Products 167 | 168 | You may Make Products, and/or Convey them, provided that You either 169 | provide each recipient with a copy of the Complete Source or ensure 170 | that each recipient is notified of the Source Location of the Complete 171 | Source. That Complete Source is Covered Source, and You must 172 | accordingly satisfy Your obligations set out in subsection 3.3. If 173 | specified in a Notice, the Product must visibly and securely display 174 | the Source Location on it or its packaging or documentation in the 175 | manner specified in that Notice. 176 | 177 | 178 | 5 Research and Development 179 | 180 | You may Convey Covered Source, modified Covered Source or Products to 181 | a legal entity carrying out development, testing or quality assurance 182 | work on Your behalf provided that the work is performed on terms which 183 | prevent the entity from both using the Source or Products for its own 184 | internal purposes and Conveying the Source or Products or any 185 | modifications to them to any person other than You. Any modifications 186 | made by the entity shall be deemed to be made by You pursuant to 187 | subsection 3.2. 188 | 189 | 190 | 6 DISCLAIMER AND LIABILITY 191 | 192 | 6.1 DISCLAIMER OF WARRANTY -- The Covered Source and any Products 193 | are provided 'as is' and any express or implied warranties, 194 | including, but not limited to, implied warranties of 195 | merchantability, of satisfactory quality, non-infringement of 196 | third party rights, and fitness for a particular purpose or use 197 | are disclaimed in respect of any Source or Product to the 198 | maximum extent permitted by law. The Licensor makes no 199 | representation that any Source or Product does not or will not 200 | infringe any patent, copyright, trade secret or other 201 | proprietary right. The entire risk as to the use, quality, and 202 | performance of any Source or Product shall be with You and not 203 | the Licensor. This disclaimer of warranty is an essential part 204 | of this Licence and a condition for the grant of any rights 205 | granted under this Licence. 206 | 207 | 6.2 EXCLUSION AND LIMITATION OF LIABILITY -- The Licensor shall, to 208 | the maximum extent permitted by law, have no liability for 209 | direct, indirect, special, incidental, consequential, exemplary, 210 | punitive or other damages of any character including, without 211 | limitation, procurement of substitute goods or services, loss of 212 | use, data or profits, or business interruption, however caused 213 | and on any theory of contract, warranty, tort (including 214 | negligence), product liability or otherwise, arising in any way 215 | in relation to the Covered Source, modified Covered Source 216 | and/or the Making or Conveyance of a Product, even if advised of 217 | the possibility of such damages, and You shall hold the 218 | Licensor(s) free and harmless from any liability, costs, 219 | damages, fees and expenses, including claims by third parties, 220 | in relation to such use. 221 | 222 | 223 | 7 Patents 224 | 225 | 7.1 Subject to the terms and conditions of this Licence, each 226 | Licensor hereby grants to You a perpetual, worldwide, 227 | non-exclusive, no-charge, royalty-free, irrevocable (except as 228 | stated in subsections 7.2 and 8.4) patent licence to Make, have 229 | Made, use, offer to sell, sell, import, and otherwise transfer 230 | the Covered Source and Products, where such licence applies only 231 | to those patent claims licensable by such Licensor that are 232 | necessarily infringed by exercising rights under the Covered 233 | Source as Conveyed by that Licensor. 234 | 235 | 7.2 If You institute patent litigation against any entity (including 236 | a cross-claim or counterclaim in a lawsuit) alleging that the 237 | Covered Source or a Product constitutes direct or contributory 238 | patent infringement, or You seek any declaration that a patent 239 | licensed to You under this Licence is invalid or unenforceable 240 | then any rights granted to You under this Licence shall 241 | terminate as of the date such process is initiated. 242 | 243 | 244 | 8 General 245 | 246 | 8.1 If any provisions of this Licence are or subsequently become 247 | invalid or unenforceable for any reason, the remaining 248 | provisions shall remain effective. 249 | 250 | 8.2 You shall not use any of the name (including acronyms and 251 | abbreviations), image, or logo by which the Licensor or CERN is 252 | known, except where needed to comply with section 3, or where 253 | the use is otherwise allowed by law. Any such permitted use 254 | shall be factual and shall not be made so as to suggest any kind 255 | of endorsement or implication of involvement by the Licensor or 256 | its personnel. 257 | 258 | 8.3 CERN may publish updated versions and variants of this Licence 259 | which it considers to be in the spirit of this version, but may 260 | differ in detail to address new problems or concerns. New 261 | versions will be published with a unique version number and a 262 | variant identifier specifying the variant. If the Licensor has 263 | specified that a given variant applies to the Covered Source 264 | without specifying a version, You may treat that Covered Source 265 | as being released under any version of the CERN-OHL with that 266 | variant. If no variant is specified, the Covered Source shall be 267 | treated as being released under CERN-OHL-S. The Licensor may 268 | also specify that the Covered Source is subject to a specific 269 | version of the CERN-OHL or any later version in which case You 270 | may apply this or any later version of CERN-OHL with the same 271 | variant identifier published by CERN. 272 | 273 | 8.4 This Licence shall terminate with immediate effect if You fail 274 | to comply with any of its terms and conditions. 275 | 276 | 8.5 However, if You cease all breaches of this Licence, then Your 277 | Licence from any Licensor is reinstated unless such Licensor has 278 | terminated this Licence by giving You, while You remain in 279 | breach, a notice specifying the breach and requiring You to cure 280 | it within 30 days, and You have failed to come into compliance 281 | in all material respects by the end of the 30 day period. Should 282 | You repeat the breach after receipt of a cure notice and 283 | subsequent reinstatement, this Licence will terminate 284 | immediately and permanently. Section 6 shall continue to apply 285 | after any termination. 286 | 287 | 8.6 This Licence shall not be enforceable except by a Licensor 288 | acting as such, and third party beneficiary rights are 289 | specifically excluded. 290 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ligra 2 | 3 | ligra is an open source image projector build from scratch and based off of flea market parts. ligra is not neccessarily a PCB-project nor a single thing, but rather an idea of how to design your own image-projection system. It is an introduction on how to create light-grafittis, how to share messages at large. 4 | 5 | It's not strictly a Gobo, rather a way of building a system that may resemble one, but may also resemble a video projector or an abstract source of art. I have mostly used it with 2D printed stencils, usually used with so called "overhead projectors", one can of course also use metal-stencils, coloured effect-foils, 3D printed stencils and even LCDs, or really anything that may project an image. Get creative! 6 | 7 | 8 | 9 | 10 | 13 | 16 | 17 | 18 | 21 | 22 | 23 |
11 | 12 | 14 | 15 |
19 | 20 |
24 | 25 | 26 | 27 | This repo is very WIP and shall be expanded soon :3 28 | 29 | ## Working principle 30 | 31 | ligra essentially functions as a backwards camera, well, most projectors do. This becomes more visible when we talk about its inner workings, it's heart and most fixed element is the lens, a Canon FD lens in our case. But instead of using it to project and image **onto** a 35mm film slide, we will project light **through** a ruffly 35mm film slide-sized, image forming medium (i.e. a 2D printed stencil). This light will enter the lens from the back, projecting an image onto a scene with the properties of the lens (focal length, aperture and focus). Given the quality of even early lenses, we can expect some sharp and crisp projections. [WIP ...] 32 | 33 | ## [Instructions](https://github.com/Jana-Marie/ligra/blob/main/instructions.md) 34 | 35 | (Want to build one? ^ click me) 36 | 37 | 38 | 39 | 40 | 43 | 44 | 45 |
41 | 42 |
46 | 47 | ## [Projection-Media](https://github.com/Jana-Marie/ligra/blob/main/projection-media.md) 48 | 49 | (You have one and need stencils? ^ click me) 50 | 51 | 52 | 53 | 54 | 57 | 60 | 63 | 64 | 65 |
55 | 56 | 58 | 59 | 61 | 62 |
66 | 67 | 68 | ## [Staging-Stages](https://github.com/Jana-Marie/ligra/blob/main/staging-stages.md) 69 | 70 | (You have one and want to work on a different stage, a different way of adding media for projection? ^ click me) 71 | 72 | 73 | 74 | 75 | 78 | 81 | 84 | 85 | 86 |
76 | 77 | 79 | 80 | 82 | 83 |
87 | 88 | ## Todo 89 | 90 | - [ ] Add assembly instructions (85% done) 91 | - [ ] Refine by adding real images (45% done) 92 | - [ ] Add 3D print instructions (5% done) 93 | - [ ] Add BOM (0% done) 94 | - [ ] Add drawings (60% done) 95 | - [x] Make projection-media page more expressive 96 | - [x] Design more stages 97 | - [x] Cleanup OpenSCAD file 98 | -------------------------------------------------------------------------------- /images/0b2d5d8d6d914120.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/0b2d5d8d6d914120.jpg -------------------------------------------------------------------------------- /images/11bd2950d9579037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/11bd2950d9579037.jpg -------------------------------------------------------------------------------- /images/263e70de6c5d269f.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/263e70de6c5d269f.jpg -------------------------------------------------------------------------------- /images/528b30a321972028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/528b30a321972028.jpg -------------------------------------------------------------------------------- /images/IMG_1345.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/IMG_1345.jpg -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-38-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-38-24.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-38-51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-38-51.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-39-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-39-46.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-40-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-40-12.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-40-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-40-50.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-44-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-44-12.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-45-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-45-00.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-14 23-45-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-14 23-45-36.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-42-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-42-35.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-42-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-42-41.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-42-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-42-53.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-43-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-43-00.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-43-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-43-40.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-44-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-44-55.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-45-05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-45-05.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-58-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-58-11.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 01-59-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 01-59-12.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 02-27-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 02-27-37.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 16-40-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 16-40-58.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 16-41-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 16-41-32.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 16-42-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 16-42-16.png -------------------------------------------------------------------------------- /images/Screenshot from 2024-06-15 17-51-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2024-06-15 17-51-15.png -------------------------------------------------------------------------------- /images/Screenshot from 2025-01-04 12-20-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2025-01-04 12-20-47.png -------------------------------------------------------------------------------- /images/Screenshot from 2025-01-04 12-24-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/Screenshot from 2025-01-04 12-24-28.png -------------------------------------------------------------------------------- /images/da240891a95fc2dd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/da240891a95fc2dd.jpg -------------------------------------------------------------------------------- /images/drawing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/drawing.jpg -------------------------------------------------------------------------------- /images/e5e7f5f40d520a76.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/e5e7f5f40d520a76.jpg -------------------------------------------------------------------------------- /images/front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/front.png -------------------------------------------------------------------------------- /images/pcb-back-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/pcb-back-1.png -------------------------------------------------------------------------------- /images/pcb-back-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/pcb-back-2.png -------------------------------------------------------------------------------- /images/pcb-front-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/pcb-front-1.png -------------------------------------------------------------------------------- /images/pcb-front-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/pcb-front-2.png -------------------------------------------------------------------------------- /images/signal-2024-06-01-161329_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-161329_002.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-01-161329_003.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-161329_003.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-01-161329_004.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-161329_004.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-01-161329_005.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-161329_005.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-01-161619_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-161619_002.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-01-163210_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-01-163210_002.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-14-204829_005.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-14-204829_005.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-14-204829_007.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-14-204829_007.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-14-210620_004.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-14-210620_004.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-14-210620_005.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-14-210620_005.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-14-210620_007.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-14-210620_007.jpeg -------------------------------------------------------------------------------- /images/signal-2024-06-15-020726_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-06-15-020726_002.jpeg -------------------------------------------------------------------------------- /images/signal-2024-07-07-143311.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2024-07-07-143311.jpeg -------------------------------------------------------------------------------- /images/signal-2025-01-04-134830_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2025-01-04-134830_002.jpeg -------------------------------------------------------------------------------- /images/signal-2025-01-04-134830_003.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2025-01-04-134830_003.jpeg -------------------------------------------------------------------------------- /images/signal-2025-01-04-134830_004.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2025-01-04-134830_004.jpeg -------------------------------------------------------------------------------- /images/signal-2025-01-04-134830_005.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2025-01-04-134830_005.jpeg -------------------------------------------------------------------------------- /images/signal-2025-01-04-140044_002.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/images/signal-2025-01-04-140044_002.jpeg -------------------------------------------------------------------------------- /instructions.md: -------------------------------------------------------------------------------- 1 | # Instructions 2 | 3 | This document shall serve as a comprehenive assembly-manual. Feel free to diverge at any point to build the ligra you want. 4 | 5 | ## Table of Contents 6 | 7 | * [Preface](#preface) 8 | * [Planning](#planning) 9 | * [BOM](#bom) 10 | * [3D-Prints](#3d-prints) 11 | * [Required Tools](#required-tools) 12 | * [Detailed Instructions](#detailed-instructions) 13 | * [Lens](#lens) 14 | * [Stage](#Stage) 15 | * [Light-Source](#light-source) 16 | * [PAR-Spot](#par-spot) 17 | * [Flashlight](#flashlight) 18 | * [Tripod-Mount](#tripod-mount) 19 | * [Interlock](#tripod-mount) 20 | * [Frame](#frame) 21 | * [Assembly](#assembly) 22 | 23 | ## Preface 24 | 25 | This guide assumes that you are building the same ligra as I did, I will try to make it clear, when something is either optional or specific to my hardware/your hardware. All in all I want to show you, how you can design your own projector, Gobo, light-graffiti, art-, whatever-light-machine. I want to show you, how you can bring a lens, a light source and something image forming together to crate something that allows you to be creative. 26 | 27 | Each ligra consists of various parts that all invidially fulfill a purpose, all working together to make ligra what it is. Each part can be individually modified, build to purpose or replaced. I tried to reflect this by showing how to build each part, but also how to assemble all of them into ligra. Feel free to replace or modify any part that you need to have changed. One ligra basically consists of the frame, the light source, the stage (a stencil in my case), a tripod mount and the lens. You can see each of these as an assembly to be changed internally or as a whole, however, they all fulfill a purpose and cannot simply be removed. 28 | 29 | ## Planning 30 | 31 | Given that this is rather an instruction on how to design and build various projectors instead of a speicific one, you should think about which tools you have at your disposal, what your targeted usecase may be and what materials you have and can work with. Before starting, read all the instructions and plan your ligra accordingly. 32 | 33 | 34 | 35 | 36 | 39 | 42 | 43 | 44 | 47 | 48 | 49 |
37 | 38 | 40 | 41 |
45 | 46 |
50 | 51 | Please consult the OpenSCAD script 'ligra.scad' for this phase aswell. 52 | 53 | 54 | 55 | 56 | 59 | 60 | 61 |
57 | 58 |
62 | 63 | ## BOM 64 | 65 | For one ligra, you will need ruffly the following parts. 66 | *** 67 | * 1 **Lens** (Canon FD works great here) 68 | * Low f-number is preferable (\ 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | Our lensmount will actually be made out of two 3D printed and one pre-fabricated part. The latter is a lenscap that we need to buy, pretty much any lenscap should do, I got mine from amazon. One of the 3D printed parts will be joined with the lenscap, firmly attaching lens and frame to each other. The second 3D printed part will be a more loose support of the lenses front opening, we don't want the full levering force of the lens being exorted into the rear mount. This mount however, cannot be fully fixed to the lens as it moves and turns during focus and focal-length change. 175 | 176 | ### Stage 177 | 178 | **3D Print** 179 | 180 | * 1x [Stencil stage](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_stage_stage_motor_rot_base.stl) 181 | * 1x [Stencil rotor](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_stage_stage_motor_rot_rotor.stl) 182 | * 1x [Stencil gear](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_stage_stage_motor_rot_gear_l.stl) 183 | * A whole bunch of [Stencil-cages](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_stage_stencil_cage.stl) + [Cage-lids](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_stage_stencil_cage_counter.stl) 184 | 185 | The stage ist probably the part where you can be the most creative, as already teased there are just so many ways of intercepting and transforming your light source. For more ideas, check out the [Projection-Media](https://github.com/Jana-Marie/ligra/blob/main/projection-media.md) page. 186 | 187 | We will focus here on a, optionally motorized rotating stage, that hosts 2D laser-printed stencils. With stencil I mean foil that has been printed on. Initially I worked on 3-point rotary stage, which would allow for trapez correction. That idea got pushed to the back, to make room for a simpler stage, that is easier to iterate on. Eventually I will return to developing more stages. Check out the [Staging-Stages](https://github.com/Jana-Marie/ligra/blob/main/staging-stages.md) page. 188 | 189 | 190 | 191 | 192 | 195 | 198 | 199 | 200 |
193 | 194 | 196 | 197 |
201 | 202 | The design I came up with is illustrated above. It is for the most part 3D printed, making production quite accessible to me. The light pink, big outer part will be screwed to the frame. 203 | 204 | 205 | 206 | 207 | 210 | 213 | 216 | 219 | 222 | 223 | 224 |
208 | 209 | 211 | 212 | 214 | 215 | 217 | 218 | 220 | 221 |
225 | 226 | It hosts 4 ball-bearings with an inner diameter of 4mm, an outer diameter of 9mm and a height of ~4mm. They will be pushed into place altogether with dark-pink ring into their respective slots. Before you do that, you should put 9 magnets with a size of 3mm diameter and 2mm height into the 9 larger slots of the inner ring. It's important that all magnets face the same direction! Since it is a tight fit, they all should stay in place, you can of course fill all slots up with some UV-cure resin or glue. Now you can gently push the ring and all four ball-bearings into place. Afterwards, turn over the assembly and screw the big yellow gear into the ring. You can ignore the small gear for now, it can be mounted to a motor and used to automatically turn the stencil this stage will host. If you don't need this, skip it, the big gear will still be handy for aligning the stencil manually 227 | 228 | 229 | 230 | 231 | 234 | 237 | 240 | 241 | 242 |
232 | 233 | 235 | 236 | 238 | 239 |
243 | 244 | Next up, you can print a whole bunch of these stencil frames. Each will clamp and hold one stencil, each will also host 3 magnets that allow the holder to snap to the stage. This allows for easy stencil preparation and exchange, just remove the old frame from the stage by hand, it will come right off and put a new one in place, it will gently snap to it. You can now go ahead and print stencils on foil, cut them and puit each into its own holder. Add the magnets in a similar fashion to what you did before, make sure that they all are aligned with your stage. 245 | 246 | Your finished stage should look similiar to this. (Please ignore the frame in the last two images for now) 247 | 248 | 249 | 250 | 251 | 254 | 257 | 260 | 261 | 262 |
252 | 253 | 255 | 256 | 258 | 259 |
263 | 264 | ### Light-Source 265 | 266 | Depending on your light-source you will need a way of driving it. As I've choosen a 10W LED, I designed a board that can drive it from a USB power source, it is called the back-board and fully optional. [Back-Board](https://github.com/Jana-Marie/ligra/tree/main/ligra_back) 267 | 268 | #### PAR-Spot 269 | 270 | **3D Print** 271 | 272 | 1x [Par spot holder](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_par_spot_stencil_cage.stl) 273 | 274 | **Parts** 275 | 276 | 1x [Par spot](https://www.ebay.de/itm/314966001859) 277 | * 4x sets of nuts + bolts for the extrusions 278 | 279 | 280 | 281 | 282 | 285 | 286 | 287 |
283 | 284 |
288 | 289 | 290 | #### Flashlight 291 | 292 | In my earlier tests I used a flashlight as light-source and honestly I cannot recommend that enough if you are planning on testing the optical path. It's much easier to handle, easier to adapt and can freely held by hand at first. It helped me in establishing this project. I don't use it anymore, I've gotten myself a better light-source, still, I would like to quickly illuminate (heh!) its assembly. 293 | 294 | 295 | 296 | 297 | 300 | 303 | 306 | 309 | 310 | 311 |
298 | 299 | 301 | 302 | 304 | 305 | 307 | 308 |
312 | 313 | It's quite simple and I don't think I need to explain a lot here, this LEDLenser flashlight is pressed into this simple block with four hair-ties and a counter-ring. This assembly is then asserted into ligra from the back. You can see on the last image, that this version is somewhat old already, based on the trivial, fixed stencil mount visible. 314 | 315 | ### Tripod-Mount 316 | 317 | **3D Print** 318 | 319 | * 1x [Tripod-Plate](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_tripod_tripod_plate.stl) 320 | 321 | **Parts** 322 | 323 | * 1x [¼" thread insert](https://www.amazon.de/-/en/ruthex-Threaded-Insert-Bushings-Printing/dp/B09MTS6ZZQ/ref=sr_1_16 324 | * 4x sets of nuts + bolts for the extrusions 325 | 326 | 327 | 328 | 329 | 332 | 333 | 334 |
330 | 331 |
335 | 336 | A 3D printed plate that allows you to attach ligra to a typical tripod with a ¼" thread. The thread is a heat-insert, please make sure you sink it into the correct side of the 3D print. Also make sure the print is sturdy and the tripod is sufficient to support the weight. Screw the plate to the bottom of ligra, I usually like to start the whole build with this plate as it provides a solid base with two beams. 337 | 338 | ### Interlock 339 | 340 | **3D Print** 341 | 342 | * 2x [Interlock](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_interlock.stl) 343 | 344 | **Parts** 345 | 346 | * 4x sets of nuts + bolts for the extrusions 347 | 348 | 349 | 350 | 351 | 354 | 355 | 356 |
352 | 353 |
357 | 358 | A screw-in block that allows for easier stacking of ligras. There is not a whole lot behind it, besides alignemnt, please use tension straps to affix ligras together. 359 | 360 | ### Frame 361 | 362 | After choosing the four alluminium extrusions you want to use, I recommend 20x20mm stock with a length of 400mm (for 70-210mm lenses) or 300mm (for 24-105mm lenses), you will need to tap both ends of each bar with a M5 tap. If you want to save on parts, you can reduce the build to just use the bottom extrusions. 363 | 364 | 365 | 366 | 367 | 370 | 371 | 372 |
368 | 369 |
373 | 374 | ## Assembly 375 | 376 | **3D Print** 377 | 378 | * 8x [3D printed endcaps](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_misc_cap.stl) 379 | * 4x [3D printed feet](https://github.com/Jana-Marie/ligra/blob/main/CAD/stls/ligra_misc_foot.stl) 380 | 381 | **Parts** 382 | 383 | * 8x Bolts 384 | 385 | -------------------------------------------------------------------------------- /ligra_back/README.md: -------------------------------------------------------------------------------- 1 | # Back-Board 2 | 3 | This board serves as power-input and LED controller for a 0-3A 0-5V LED. It currently is v1.0.0 and has an additional DC-motor speed controller onboard, you can safely ignore it. I plan to build a different version for myself, that is a bit more advanced, feel free to then also use it. Generally this board is fully optional, but may prove to be very useful. 4 | 5 | 6 | 7 | 8 | 11 | 14 | 15 | 16 |
9 | 10 | 12 | 13 |
17 | 18 | [Todo, add BOM and assembly instructions here] -------------------------------------------------------------------------------- /ligra_back/ligra_back.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 38, 4 | "active_layer_preset": "", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "ffcffff_ffffffff", 68 | "zone_display_mode": 0 69 | }, 70 | "git": { 71 | "repo_password": "", 72 | "repo_type": "", 73 | "repo_username": "", 74 | "ssh_key": "" 75 | }, 76 | "meta": { 77 | "filename": "ligra_back.kicad_prl", 78 | "version": 3 79 | }, 80 | "project": { 81 | "files": [] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ligra_back/ligra_back.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "apply_defaults_to_fp_fields": false, 7 | "apply_defaults_to_fp_shapes": false, 8 | "apply_defaults_to_fp_text": false, 9 | "board_outline_line_width": 0.1, 10 | "copper_line_width": 0.2, 11 | "copper_text_italic": false, 12 | "copper_text_size_h": 1.5, 13 | "copper_text_size_v": 1.5, 14 | "copper_text_thickness": 0.3, 15 | "copper_text_upright": false, 16 | "courtyard_line_width": 0.05, 17 | "dimension_precision": 4, 18 | "dimension_units": 3, 19 | "dimensions": { 20 | "arrow_length": 1270000, 21 | "extension_offset": 500000, 22 | "keep_text_aligned": true, 23 | "suppress_zeroes": false, 24 | "text_position": 0, 25 | "units_format": 1 26 | }, 27 | "fab_line_width": 0.1, 28 | "fab_text_italic": false, 29 | "fab_text_size_h": 1.0, 30 | "fab_text_size_v": 1.0, 31 | "fab_text_thickness": 0.15, 32 | "fab_text_upright": false, 33 | "other_line_width": 0.15, 34 | "other_text_italic": false, 35 | "other_text_size_h": 1.0, 36 | "other_text_size_v": 1.0, 37 | "other_text_thickness": 0.15, 38 | "other_text_upright": false, 39 | "pads": { 40 | "drill": 0.762, 41 | "height": 1.524, 42 | "width": 1.524 43 | }, 44 | "silk_line_width": 0.15, 45 | "silk_text_italic": false, 46 | "silk_text_size_h": 1.0, 47 | "silk_text_size_v": 1.0, 48 | "silk_text_thickness": 0.15, 49 | "silk_text_upright": false, 50 | "zones": { 51 | "min_clearance": 0.154 52 | } 53 | }, 54 | "diff_pair_dimensions": [ 55 | { 56 | "gap": 0.0, 57 | "via_gap": 0.0, 58 | "width": 0.0 59 | } 60 | ], 61 | "drc_exclusions": [], 62 | "meta": { 63 | "version": 2 64 | }, 65 | "rule_severities": { 66 | "annular_width": "error", 67 | "clearance": "error", 68 | "connection_width": "warning", 69 | "copper_edge_clearance": "error", 70 | "copper_sliver": "warning", 71 | "courtyards_overlap": "error", 72 | "diff_pair_gap_out_of_range": "error", 73 | "diff_pair_uncoupled_length_too_long": "error", 74 | "drill_out_of_range": "error", 75 | "duplicate_footprints": "warning", 76 | "extra_footprint": "warning", 77 | "footprint": "error", 78 | "footprint_symbol_mismatch": "warning", 79 | "footprint_type_mismatch": "ignore", 80 | "hole_clearance": "error", 81 | "hole_near_hole": "error", 82 | "invalid_outline": "error", 83 | "isolated_copper": "warning", 84 | "item_on_disabled_layer": "error", 85 | "items_not_allowed": "error", 86 | "length_out_of_range": "error", 87 | "lib_footprint_issues": "warning", 88 | "lib_footprint_mismatch": "warning", 89 | "malformed_courtyard": "error", 90 | "microvia_drill_out_of_range": "error", 91 | "missing_courtyard": "ignore", 92 | "missing_footprint": "warning", 93 | "net_conflict": "warning", 94 | "npth_inside_courtyard": "ignore", 95 | "padstack": "warning", 96 | "pth_inside_courtyard": "ignore", 97 | "shorting_items": "error", 98 | "silk_edge_clearance": "warning", 99 | "silk_over_copper": "warning", 100 | "silk_overlap": "warning", 101 | "skew_out_of_range": "error", 102 | "solder_mask_bridge": "error", 103 | "starved_thermal": "error", 104 | "text_height": "warning", 105 | "text_thickness": "warning", 106 | "through_hole_pad_without_hole": "error", 107 | "too_many_vias": "error", 108 | "track_dangling": "warning", 109 | "track_width": "error", 110 | "tracks_crossing": "error", 111 | "unconnected_items": "error", 112 | "unresolved_variable": "error", 113 | "via_dangling": "warning", 114 | "zones_intersect": "error" 115 | }, 116 | "rules": { 117 | "max_error": 0.005, 118 | "min_clearance": 0.0, 119 | "min_connection": 0.0, 120 | "min_copper_edge_clearance": 0.0, 121 | "min_hole_clearance": 0.2, 122 | "min_hole_to_hole": 0.2, 123 | "min_microvia_diameter": 0.2, 124 | "min_microvia_drill": 0.1, 125 | "min_resolved_spokes": 2, 126 | "min_silk_clearance": 0.0, 127 | "min_text_height": 0.8, 128 | "min_text_thickness": 0.08, 129 | "min_through_hole_diameter": 0.3, 130 | "min_track_width": 0.0, 131 | "min_via_annular_width": 0.1, 132 | "min_via_diameter": 0.3, 133 | "solder_mask_clearance": 0.0, 134 | "solder_mask_min_width": 0.0, 135 | "solder_mask_to_copper_clearance": 0.0, 136 | "use_height_for_length_calcs": true 137 | }, 138 | "teardrop_options": [ 139 | { 140 | "td_onpadsmd": true, 141 | "td_onroundshapesonly": false, 142 | "td_ontrackend": false, 143 | "td_onviapad": true 144 | } 145 | ], 146 | "teardrop_parameters": [ 147 | { 148 | "td_allow_use_two_tracks": true, 149 | "td_curve_segcount": 0, 150 | "td_height_ratio": 1.0, 151 | "td_length_ratio": 0.5, 152 | "td_maxheight": 2.0, 153 | "td_maxlen": 1.0, 154 | "td_on_pad_in_zone": false, 155 | "td_target_name": "td_round_shape", 156 | "td_width_to_size_filter_ratio": 0.9 157 | }, 158 | { 159 | "td_allow_use_two_tracks": true, 160 | "td_curve_segcount": 0, 161 | "td_height_ratio": 1.0, 162 | "td_length_ratio": 0.5, 163 | "td_maxheight": 2.0, 164 | "td_maxlen": 1.0, 165 | "td_on_pad_in_zone": false, 166 | "td_target_name": "td_rect_shape", 167 | "td_width_to_size_filter_ratio": 0.9 168 | }, 169 | { 170 | "td_allow_use_two_tracks": true, 171 | "td_curve_segcount": 0, 172 | "td_height_ratio": 1.0, 173 | "td_length_ratio": 0.5, 174 | "td_maxheight": 2.0, 175 | "td_maxlen": 1.0, 176 | "td_on_pad_in_zone": false, 177 | "td_target_name": "td_track_end", 178 | "td_width_to_size_filter_ratio": 0.9 179 | } 180 | ], 181 | "track_widths": [ 182 | 0.0, 183 | 0.2, 184 | 0.3, 185 | 0.4, 186 | 0.5, 187 | 0.8, 188 | 1.0, 189 | 1.2, 190 | 1.4, 191 | 1.6 192 | ], 193 | "tuning_pattern_settings": { 194 | "diff_pair_defaults": { 195 | "corner_radius_percentage": 80, 196 | "corner_style": 1, 197 | "max_amplitude": 1.0, 198 | "min_amplitude": 0.2, 199 | "single_sided": false, 200 | "spacing": 1.0 201 | }, 202 | "diff_pair_skew_defaults": { 203 | "corner_radius_percentage": 80, 204 | "corner_style": 1, 205 | "max_amplitude": 1.0, 206 | "min_amplitude": 0.2, 207 | "single_sided": false, 208 | "spacing": 0.6 209 | }, 210 | "single_track_defaults": { 211 | "corner_radius_percentage": 80, 212 | "corner_style": 1, 213 | "max_amplitude": 1.0, 214 | "min_amplitude": 0.2, 215 | "single_sided": false, 216 | "spacing": 0.6 217 | } 218 | }, 219 | "via_dimensions": [ 220 | { 221 | "diameter": 0.0, 222 | "drill": 0.0 223 | } 224 | ], 225 | "zones_allow_external_fillets": false 226 | }, 227 | "ipc2581": { 228 | "dist": "", 229 | "distpn": "", 230 | "internal_id": "", 231 | "mfg": "", 232 | "mpn": "" 233 | }, 234 | "layer_presets": [], 235 | "viewports": [] 236 | }, 237 | "boards": [], 238 | "cvpcb": { 239 | "equivalence_files": [] 240 | }, 241 | "erc": { 242 | "erc_exclusions": [], 243 | "meta": { 244 | "version": 0 245 | }, 246 | "pin_map": [ 247 | [ 248 | 0, 249 | 0, 250 | 0, 251 | 0, 252 | 0, 253 | 0, 254 | 1, 255 | 0, 256 | 0, 257 | 0, 258 | 0, 259 | 2 260 | ], 261 | [ 262 | 0, 263 | 2, 264 | 0, 265 | 1, 266 | 0, 267 | 0, 268 | 1, 269 | 0, 270 | 2, 271 | 2, 272 | 2, 273 | 2 274 | ], 275 | [ 276 | 0, 277 | 0, 278 | 0, 279 | 0, 280 | 0, 281 | 0, 282 | 1, 283 | 0, 284 | 1, 285 | 0, 286 | 1, 287 | 2 288 | ], 289 | [ 290 | 0, 291 | 1, 292 | 0, 293 | 0, 294 | 0, 295 | 0, 296 | 1, 297 | 1, 298 | 2, 299 | 1, 300 | 1, 301 | 2 302 | ], 303 | [ 304 | 0, 305 | 0, 306 | 0, 307 | 0, 308 | 0, 309 | 0, 310 | 1, 311 | 0, 312 | 0, 313 | 0, 314 | 0, 315 | 2 316 | ], 317 | [ 318 | 0, 319 | 0, 320 | 0, 321 | 0, 322 | 0, 323 | 0, 324 | 0, 325 | 0, 326 | 0, 327 | 0, 328 | 0, 329 | 2 330 | ], 331 | [ 332 | 1, 333 | 1, 334 | 1, 335 | 1, 336 | 1, 337 | 0, 338 | 1, 339 | 1, 340 | 1, 341 | 1, 342 | 1, 343 | 2 344 | ], 345 | [ 346 | 0, 347 | 0, 348 | 0, 349 | 1, 350 | 0, 351 | 0, 352 | 1, 353 | 0, 354 | 0, 355 | 0, 356 | 0, 357 | 2 358 | ], 359 | [ 360 | 0, 361 | 2, 362 | 1, 363 | 2, 364 | 0, 365 | 0, 366 | 1, 367 | 0, 368 | 2, 369 | 2, 370 | 2, 371 | 2 372 | ], 373 | [ 374 | 0, 375 | 2, 376 | 0, 377 | 1, 378 | 0, 379 | 0, 380 | 1, 381 | 0, 382 | 2, 383 | 0, 384 | 0, 385 | 2 386 | ], 387 | [ 388 | 0, 389 | 2, 390 | 1, 391 | 1, 392 | 0, 393 | 0, 394 | 1, 395 | 0, 396 | 2, 397 | 0, 398 | 0, 399 | 2 400 | ], 401 | [ 402 | 2, 403 | 2, 404 | 2, 405 | 2, 406 | 2, 407 | 2, 408 | 2, 409 | 2, 410 | 2, 411 | 2, 412 | 2, 413 | 2 414 | ] 415 | ], 416 | "rule_severities": { 417 | "bus_definition_conflict": "error", 418 | "bus_entry_needed": "error", 419 | "bus_to_bus_conflict": "error", 420 | "bus_to_net_conflict": "error", 421 | "conflicting_netclasses": "error", 422 | "different_unit_footprint": "error", 423 | "different_unit_net": "error", 424 | "duplicate_reference": "error", 425 | "duplicate_sheet_names": "error", 426 | "endpoint_off_grid": "warning", 427 | "extra_units": "error", 428 | "global_label_dangling": "warning", 429 | "hier_label_mismatch": "error", 430 | "label_dangling": "error", 431 | "lib_symbol_issues": "warning", 432 | "missing_bidi_pin": "warning", 433 | "missing_input_pin": "warning", 434 | "missing_power_pin": "error", 435 | "missing_unit": "warning", 436 | "multiple_net_names": "warning", 437 | "net_not_bus_member": "warning", 438 | "no_connect_connected": "warning", 439 | "no_connect_dangling": "warning", 440 | "pin_not_connected": "error", 441 | "pin_not_driven": "error", 442 | "pin_to_pin": "warning", 443 | "power_pin_not_driven": "error", 444 | "similar_labels": "warning", 445 | "simulation_model_issue": "ignore", 446 | "unannotated": "error", 447 | "unit_value_mismatch": "error", 448 | "unresolved_variable": "error", 449 | "wire_dangling": "error" 450 | } 451 | }, 452 | "libraries": { 453 | "pinned_footprint_libs": [], 454 | "pinned_symbol_libs": [] 455 | }, 456 | "meta": { 457 | "filename": "ligra_back.kicad_pro", 458 | "version": 1 459 | }, 460 | "net_settings": { 461 | "classes": [ 462 | { 463 | "bus_width": 12, 464 | "clearance": 0.127, 465 | "diff_pair_gap": 0.25, 466 | "diff_pair_via_gap": 0.25, 467 | "diff_pair_width": 0.2, 468 | "line_style": 0, 469 | "microvia_diameter": 0.3, 470 | "microvia_drill": 0.1, 471 | "name": "Default", 472 | "pcb_color": "rgba(0, 0, 0, 0.000)", 473 | "schematic_color": "rgba(0, 0, 0, 0.000)", 474 | "track_width": 0.25, 475 | "via_diameter": 0.5, 476 | "via_drill": 0.3, 477 | "wire_width": 6 478 | } 479 | ], 480 | "meta": { 481 | "version": 3 482 | }, 483 | "net_colors": null, 484 | "netclass_assignments": null, 485 | "netclass_patterns": [] 486 | }, 487 | "pcbnew": { 488 | "last_paths": { 489 | "gencad": "", 490 | "idf": "", 491 | "netlist": "", 492 | "plot": "gerber/", 493 | "pos_files": "", 494 | "specctra_dsn": "", 495 | "step": "", 496 | "svg": "", 497 | "vrml": "" 498 | }, 499 | "page_layout_descr_file": "" 500 | }, 501 | "schematic": { 502 | "annotate_start_num": 0, 503 | "bom_fmt_presets": [], 504 | "bom_fmt_settings": { 505 | "field_delimiter": ",", 506 | "keep_line_breaks": false, 507 | "keep_tabs": false, 508 | "name": "CSV", 509 | "ref_delimiter": ",", 510 | "ref_range_delimiter": "", 511 | "string_delimiter": "\"" 512 | }, 513 | "bom_presets": [], 514 | "bom_settings": { 515 | "exclude_dnp": false, 516 | "fields_ordered": [ 517 | { 518 | "group_by": false, 519 | "label": "Reference", 520 | "name": "Reference", 521 | "show": true 522 | }, 523 | { 524 | "group_by": true, 525 | "label": "Value", 526 | "name": "Value", 527 | "show": true 528 | }, 529 | { 530 | "group_by": false, 531 | "label": "Datasheet", 532 | "name": "Datasheet", 533 | "show": true 534 | }, 535 | { 536 | "group_by": false, 537 | "label": "Footprint", 538 | "name": "Footprint", 539 | "show": true 540 | }, 541 | { 542 | "group_by": false, 543 | "label": "Qty", 544 | "name": "${QUANTITY}", 545 | "show": true 546 | }, 547 | { 548 | "group_by": true, 549 | "label": "DNP", 550 | "name": "${DNP}", 551 | "show": true 552 | } 553 | ], 554 | "filter_string": "", 555 | "group_symbols": true, 556 | "name": "Grouped By Value", 557 | "sort_asc": true, 558 | "sort_field": "Reference" 559 | }, 560 | "connection_grid_size": 50.0, 561 | "drawing": { 562 | "dashed_lines_dash_length_ratio": 12.0, 563 | "dashed_lines_gap_length_ratio": 3.0, 564 | "default_line_thickness": 6.0, 565 | "default_text_size": 50.0, 566 | "field_names": [], 567 | "intersheets_ref_own_page": false, 568 | "intersheets_ref_prefix": "", 569 | "intersheets_ref_short": false, 570 | "intersheets_ref_show": false, 571 | "intersheets_ref_suffix": "", 572 | "junction_size_choice": 3, 573 | "label_size_ratio": 0.375, 574 | "operating_point_overlay_i_precision": 3, 575 | "operating_point_overlay_i_range": "~A", 576 | "operating_point_overlay_v_precision": 3, 577 | "operating_point_overlay_v_range": "~V", 578 | "overbar_offset_ratio": 1.23, 579 | "pin_symbol_size": 25.0, 580 | "text_offset_ratio": 0.15 581 | }, 582 | "legacy_lib_dir": "", 583 | "legacy_lib_list": [], 584 | "meta": { 585 | "version": 1 586 | }, 587 | "net_format_name": "", 588 | "page_layout_descr_file": "", 589 | "plot_directory": "", 590 | "spice_current_sheet_as_root": false, 591 | "spice_external_command": "spice \"%I\"", 592 | "spice_model_current_sheet_as_root": true, 593 | "spice_save_all_currents": false, 594 | "spice_save_all_dissipations": false, 595 | "spice_save_all_voltages": false, 596 | "subpart_first_id": 65, 597 | "subpart_id_separator": 0 598 | }, 599 | "sheets": [ 600 | [ 601 | "467cbe4f-837e-49c0-bf8f-1655ca6eb890", 602 | "Root" 603 | ] 604 | ], 605 | "text_variables": {} 606 | } 607 | -------------------------------------------------------------------------------- /ligra_front/README.md: -------------------------------------------------------------------------------- 1 | # Front-Board 2 | 3 | There is not a whole lot to say about this board, it serves no electrical function, merely an aesthetic one, as well as a protector against bumping into bare aluminium. 4 | 5 | 6 | 7 | 8 | 11 | 14 | 15 | 16 |
9 | 10 | 12 | 13 |
17 | 18 | Please order them with a thickness of 1.6mm. -------------------------------------------------------------------------------- /ligra_front/ligra_front.kicad_prl: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "active_layer": 44, 4 | "active_layer_preset": "All Layers", 5 | "auto_track_width": true, 6 | "hidden_netclasses": [], 7 | "hidden_nets": [], 8 | "high_contrast_mode": 0, 9 | "net_color_mode": 1, 10 | "opacity": { 11 | "images": 0.6, 12 | "pads": 1.0, 13 | "tracks": 1.0, 14 | "vias": 1.0, 15 | "zones": 0.6 16 | }, 17 | "selection_filter": { 18 | "dimensions": true, 19 | "footprints": true, 20 | "graphics": true, 21 | "keepouts": true, 22 | "lockedItems": false, 23 | "otherItems": true, 24 | "pads": true, 25 | "text": true, 26 | "tracks": true, 27 | "vias": true, 28 | "zones": true 29 | }, 30 | "visible_items": [ 31 | 0, 32 | 1, 33 | 2, 34 | 3, 35 | 4, 36 | 5, 37 | 8, 38 | 9, 39 | 10, 40 | 11, 41 | 12, 42 | 13, 43 | 15, 44 | 16, 45 | 17, 46 | 18, 47 | 19, 48 | 20, 49 | 21, 50 | 22, 51 | 23, 52 | 24, 53 | 25, 54 | 26, 55 | 27, 56 | 28, 57 | 29, 58 | 30, 59 | 32, 60 | 33, 61 | 34, 62 | 35, 63 | 36, 64 | 39, 65 | 40 66 | ], 67 | "visible_layers": "fffffff_ffffffff", 68 | "zone_display_mode": 0 69 | }, 70 | "git": { 71 | "repo_password": "", 72 | "repo_type": "", 73 | "repo_username": "", 74 | "ssh_key": "" 75 | }, 76 | "meta": { 77 | "filename": "ligra_front.kicad_prl", 78 | "version": 3 79 | }, 80 | "project": { 81 | "files": [] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ligra_front/ligra_front.kicad_pro: -------------------------------------------------------------------------------- 1 | { 2 | "board": { 3 | "3dviewports": [], 4 | "design_settings": { 5 | "defaults": { 6 | "board_outline_line_width": 0.09999999999999999, 7 | "copper_line_width": 0.19999999999999998, 8 | "copper_text_italic": false, 9 | "copper_text_size_h": 1.5, 10 | "copper_text_size_v": 1.5, 11 | "copper_text_thickness": 0.3, 12 | "copper_text_upright": false, 13 | "courtyard_line_width": 0.049999999999999996, 14 | "dimension_precision": 4, 15 | "dimension_units": 3, 16 | "dimensions": { 17 | "arrow_length": 1270000, 18 | "extension_offset": 500000, 19 | "keep_text_aligned": true, 20 | "suppress_zeroes": false, 21 | "text_position": 0, 22 | "units_format": 1 23 | }, 24 | "fab_line_width": 0.09999999999999999, 25 | "fab_text_italic": false, 26 | "fab_text_size_h": 1.0, 27 | "fab_text_size_v": 1.0, 28 | "fab_text_thickness": 0.15, 29 | "fab_text_upright": false, 30 | "other_line_width": 0.15, 31 | "other_text_italic": false, 32 | "other_text_size_h": 1.0, 33 | "other_text_size_v": 1.0, 34 | "other_text_thickness": 0.15, 35 | "other_text_upright": false, 36 | "pads": { 37 | "drill": 0.762, 38 | "height": 1.524, 39 | "width": 1.524 40 | }, 41 | "silk_line_width": 0.15, 42 | "silk_text_italic": false, 43 | "silk_text_size_h": 1.0, 44 | "silk_text_size_v": 1.0, 45 | "silk_text_thickness": 0.15, 46 | "silk_text_upright": false, 47 | "zones": { 48 | "min_clearance": 0.5 49 | } 50 | }, 51 | "diff_pair_dimensions": [], 52 | "drc_exclusions": [], 53 | "meta": { 54 | "version": 2 55 | }, 56 | "rule_severities": { 57 | "annular_width": "error", 58 | "clearance": "error", 59 | "connection_width": "warning", 60 | "copper_edge_clearance": "error", 61 | "copper_sliver": "warning", 62 | "courtyards_overlap": "error", 63 | "diff_pair_gap_out_of_range": "error", 64 | "diff_pair_uncoupled_length_too_long": "error", 65 | "drill_out_of_range": "error", 66 | "duplicate_footprints": "warning", 67 | "extra_footprint": "warning", 68 | "footprint": "error", 69 | "footprint_type_mismatch": "ignore", 70 | "hole_clearance": "error", 71 | "hole_near_hole": "error", 72 | "invalid_outline": "error", 73 | "isolated_copper": "warning", 74 | "item_on_disabled_layer": "error", 75 | "items_not_allowed": "error", 76 | "length_out_of_range": "error", 77 | "lib_footprint_issues": "warning", 78 | "lib_footprint_mismatch": "warning", 79 | "malformed_courtyard": "error", 80 | "microvia_drill_out_of_range": "error", 81 | "missing_courtyard": "ignore", 82 | "missing_footprint": "warning", 83 | "net_conflict": "warning", 84 | "npth_inside_courtyard": "ignore", 85 | "padstack": "warning", 86 | "pth_inside_courtyard": "ignore", 87 | "shorting_items": "error", 88 | "silk_edge_clearance": "warning", 89 | "silk_over_copper": "warning", 90 | "silk_overlap": "warning", 91 | "skew_out_of_range": "error", 92 | "solder_mask_bridge": "error", 93 | "starved_thermal": "error", 94 | "text_height": "warning", 95 | "text_thickness": "warning", 96 | "through_hole_pad_without_hole": "error", 97 | "too_many_vias": "error", 98 | "track_dangling": "warning", 99 | "track_width": "error", 100 | "tracks_crossing": "error", 101 | "unconnected_items": "error", 102 | "unresolved_variable": "error", 103 | "via_dangling": "warning", 104 | "zones_intersect": "error" 105 | }, 106 | "rules": { 107 | "max_error": 0.005, 108 | "min_clearance": 0.0, 109 | "min_connection": 0.0, 110 | "min_copper_edge_clearance": 0.0, 111 | "min_hole_clearance": 0.25, 112 | "min_hole_to_hole": 0.25, 113 | "min_microvia_diameter": 0.19999999999999998, 114 | "min_microvia_drill": 0.09999999999999999, 115 | "min_resolved_spokes": 2, 116 | "min_silk_clearance": 0.0, 117 | "min_text_height": 0.7999999999999999, 118 | "min_text_thickness": 0.08, 119 | "min_through_hole_diameter": 0.3, 120 | "min_track_width": 0.0, 121 | "min_via_annular_width": 0.09999999999999999, 122 | "min_via_diameter": 0.5, 123 | "solder_mask_clearance": 0.0, 124 | "solder_mask_min_width": 0.0, 125 | "solder_mask_to_copper_clearance": 0.0, 126 | "use_height_for_length_calcs": true 127 | }, 128 | "teardrop_options": [ 129 | { 130 | "td_allow_use_two_tracks": true, 131 | "td_curve_segcount": 5, 132 | "td_on_pad_in_zone": false, 133 | "td_onpadsmd": true, 134 | "td_onroundshapesonly": false, 135 | "td_ontrackend": false, 136 | "td_onviapad": true 137 | } 138 | ], 139 | "teardrop_parameters": [ 140 | { 141 | "td_curve_segcount": 0, 142 | "td_height_ratio": 1.0, 143 | "td_length_ratio": 0.5, 144 | "td_maxheight": 2.0, 145 | "td_maxlen": 1.0, 146 | "td_target_name": "td_round_shape", 147 | "td_width_to_size_filter_ratio": 0.9 148 | }, 149 | { 150 | "td_curve_segcount": 0, 151 | "td_height_ratio": 1.0, 152 | "td_length_ratio": 0.5, 153 | "td_maxheight": 2.0, 154 | "td_maxlen": 1.0, 155 | "td_target_name": "td_rect_shape", 156 | "td_width_to_size_filter_ratio": 0.9 157 | }, 158 | { 159 | "td_curve_segcount": 0, 160 | "td_height_ratio": 1.0, 161 | "td_length_ratio": 0.5, 162 | "td_maxheight": 2.0, 163 | "td_maxlen": 1.0, 164 | "td_target_name": "td_track_end", 165 | "td_width_to_size_filter_ratio": 0.9 166 | } 167 | ], 168 | "track_widths": [], 169 | "via_dimensions": [], 170 | "zones_allow_external_fillets": false 171 | }, 172 | "ipc2581": { 173 | "dist": "", 174 | "distpn": "", 175 | "internal_id": "", 176 | "mfg": "", 177 | "mpn": "" 178 | }, 179 | "layer_presets": [], 180 | "viewports": [] 181 | }, 182 | "boards": [], 183 | "cvpcb": { 184 | "equivalence_files": [] 185 | }, 186 | "erc": { 187 | "erc_exclusions": [], 188 | "meta": { 189 | "version": 0 190 | }, 191 | "pin_map": [ 192 | [ 193 | 0, 194 | 0, 195 | 0, 196 | 0, 197 | 0, 198 | 0, 199 | 1, 200 | 0, 201 | 0, 202 | 0, 203 | 0, 204 | 2 205 | ], 206 | [ 207 | 0, 208 | 2, 209 | 0, 210 | 1, 211 | 0, 212 | 0, 213 | 1, 214 | 0, 215 | 2, 216 | 2, 217 | 2, 218 | 2 219 | ], 220 | [ 221 | 0, 222 | 0, 223 | 0, 224 | 0, 225 | 0, 226 | 0, 227 | 1, 228 | 0, 229 | 1, 230 | 0, 231 | 1, 232 | 2 233 | ], 234 | [ 235 | 0, 236 | 1, 237 | 0, 238 | 0, 239 | 0, 240 | 0, 241 | 1, 242 | 1, 243 | 2, 244 | 1, 245 | 1, 246 | 2 247 | ], 248 | [ 249 | 0, 250 | 0, 251 | 0, 252 | 0, 253 | 0, 254 | 0, 255 | 1, 256 | 0, 257 | 0, 258 | 0, 259 | 0, 260 | 2 261 | ], 262 | [ 263 | 0, 264 | 0, 265 | 0, 266 | 0, 267 | 0, 268 | 0, 269 | 0, 270 | 0, 271 | 0, 272 | 0, 273 | 0, 274 | 2 275 | ], 276 | [ 277 | 1, 278 | 1, 279 | 1, 280 | 1, 281 | 1, 282 | 0, 283 | 1, 284 | 1, 285 | 1, 286 | 1, 287 | 1, 288 | 2 289 | ], 290 | [ 291 | 0, 292 | 0, 293 | 0, 294 | 1, 295 | 0, 296 | 0, 297 | 1, 298 | 0, 299 | 0, 300 | 0, 301 | 0, 302 | 2 303 | ], 304 | [ 305 | 0, 306 | 2, 307 | 1, 308 | 2, 309 | 0, 310 | 0, 311 | 1, 312 | 0, 313 | 2, 314 | 2, 315 | 2, 316 | 2 317 | ], 318 | [ 319 | 0, 320 | 2, 321 | 0, 322 | 1, 323 | 0, 324 | 0, 325 | 1, 326 | 0, 327 | 2, 328 | 0, 329 | 0, 330 | 2 331 | ], 332 | [ 333 | 0, 334 | 2, 335 | 1, 336 | 1, 337 | 0, 338 | 0, 339 | 1, 340 | 0, 341 | 2, 342 | 0, 343 | 0, 344 | 2 345 | ], 346 | [ 347 | 2, 348 | 2, 349 | 2, 350 | 2, 351 | 2, 352 | 2, 353 | 2, 354 | 2, 355 | 2, 356 | 2, 357 | 2, 358 | 2 359 | ] 360 | ], 361 | "rule_severities": { 362 | "bus_definition_conflict": "error", 363 | "bus_entry_needed": "error", 364 | "bus_to_bus_conflict": "error", 365 | "bus_to_net_conflict": "error", 366 | "conflicting_netclasses": "error", 367 | "different_unit_footprint": "error", 368 | "different_unit_net": "error", 369 | "duplicate_reference": "error", 370 | "duplicate_sheet_names": "error", 371 | "endpoint_off_grid": "warning", 372 | "extra_units": "error", 373 | "global_label_dangling": "warning", 374 | "hier_label_mismatch": "error", 375 | "label_dangling": "error", 376 | "lib_symbol_issues": "warning", 377 | "missing_bidi_pin": "warning", 378 | "missing_input_pin": "warning", 379 | "missing_power_pin": "error", 380 | "missing_unit": "warning", 381 | "multiple_net_names": "warning", 382 | "net_not_bus_member": "warning", 383 | "no_connect_connected": "warning", 384 | "no_connect_dangling": "warning", 385 | "pin_not_connected": "error", 386 | "pin_not_driven": "error", 387 | "pin_to_pin": "warning", 388 | "power_pin_not_driven": "error", 389 | "similar_labels": "warning", 390 | "simulation_model_issue": "ignore", 391 | "unannotated": "error", 392 | "unit_value_mismatch": "error", 393 | "unresolved_variable": "error", 394 | "wire_dangling": "error" 395 | } 396 | }, 397 | "libraries": { 398 | "pinned_footprint_libs": [], 399 | "pinned_symbol_libs": [] 400 | }, 401 | "meta": { 402 | "filename": "ligra_front.kicad_pro", 403 | "version": 1 404 | }, 405 | "net_settings": { 406 | "classes": [ 407 | { 408 | "bus_width": 12, 409 | "clearance": 0.2, 410 | "diff_pair_gap": 0.25, 411 | "diff_pair_via_gap": 0.25, 412 | "diff_pair_width": 0.2, 413 | "line_style": 0, 414 | "microvia_diameter": 0.3, 415 | "microvia_drill": 0.1, 416 | "name": "Default", 417 | "pcb_color": "rgba(0, 0, 0, 0.000)", 418 | "schematic_color": "rgba(0, 0, 0, 0.000)", 419 | "track_width": 0.25, 420 | "via_diameter": 0.8, 421 | "via_drill": 0.4, 422 | "wire_width": 6 423 | } 424 | ], 425 | "meta": { 426 | "version": 3 427 | }, 428 | "net_colors": null, 429 | "netclass_assignments": null, 430 | "netclass_patterns": [] 431 | }, 432 | "pcbnew": { 433 | "last_paths": { 434 | "gencad": "", 435 | "idf": "", 436 | "netlist": "", 437 | "plot": "", 438 | "pos_files": "", 439 | "specctra_dsn": "", 440 | "step": "", 441 | "svg": "", 442 | "vrml": "" 443 | }, 444 | "page_layout_descr_file": "" 445 | }, 446 | "schematic": { 447 | "annotate_start_num": 0, 448 | "bom_fmt_presets": [], 449 | "bom_fmt_settings": { 450 | "field_delimiter": ",", 451 | "keep_line_breaks": false, 452 | "keep_tabs": false, 453 | "name": "CSV", 454 | "ref_delimiter": ",", 455 | "ref_range_delimiter": "", 456 | "string_delimiter": "\"" 457 | }, 458 | "bom_presets": [], 459 | "bom_settings": { 460 | "exclude_dnp": false, 461 | "fields_ordered": [ 462 | { 463 | "group_by": false, 464 | "label": "Reference", 465 | "name": "Reference", 466 | "show": true 467 | }, 468 | { 469 | "group_by": true, 470 | "label": "Value", 471 | "name": "Value", 472 | "show": true 473 | }, 474 | { 475 | "group_by": false, 476 | "label": "Datasheet", 477 | "name": "Datasheet", 478 | "show": true 479 | }, 480 | { 481 | "group_by": false, 482 | "label": "Footprint", 483 | "name": "Footprint", 484 | "show": true 485 | }, 486 | { 487 | "group_by": false, 488 | "label": "Qty", 489 | "name": "${QUANTITY}", 490 | "show": true 491 | }, 492 | { 493 | "group_by": true, 494 | "label": "DNP", 495 | "name": "${DNP}", 496 | "show": true 497 | } 498 | ], 499 | "filter_string": "", 500 | "group_symbols": true, 501 | "name": "Grouped By Value", 502 | "sort_asc": true, 503 | "sort_field": "Reference" 504 | }, 505 | "connection_grid_size": 50.0, 506 | "drawing": { 507 | "dashed_lines_dash_length_ratio": 12.0, 508 | "dashed_lines_gap_length_ratio": 3.0, 509 | "default_line_thickness": 6.0, 510 | "default_text_size": 50.0, 511 | "field_names": [], 512 | "intersheets_ref_own_page": false, 513 | "intersheets_ref_prefix": "", 514 | "intersheets_ref_short": false, 515 | "intersheets_ref_show": false, 516 | "intersheets_ref_suffix": "", 517 | "junction_size_choice": 3, 518 | "label_size_ratio": 0.375, 519 | "operating_point_overlay_i_precision": 3, 520 | "operating_point_overlay_i_range": "~A", 521 | "operating_point_overlay_v_precision": 3, 522 | "operating_point_overlay_v_range": "~V", 523 | "overbar_offset_ratio": 1.23, 524 | "pin_symbol_size": 25.0, 525 | "text_offset_ratio": 0.15 526 | }, 527 | "legacy_lib_dir": "", 528 | "legacy_lib_list": [], 529 | "meta": { 530 | "version": 1 531 | }, 532 | "net_format_name": "", 533 | "page_layout_descr_file": "", 534 | "plot_directory": "", 535 | "spice_current_sheet_as_root": false, 536 | "spice_external_command": "spice \"%I\"", 537 | "spice_model_current_sheet_as_root": true, 538 | "spice_save_all_currents": false, 539 | "spice_save_all_dissipations": false, 540 | "spice_save_all_voltages": false, 541 | "subpart_first_id": 65, 542 | "subpart_id_separator": 0 543 | }, 544 | "sheets": [ 545 | [ 546 | "467cbe4f-837e-49c0-bf8f-1655ca6eb890", 547 | "Root" 548 | ] 549 | ], 550 | "text_variables": {} 551 | } 552 | -------------------------------------------------------------------------------- /ligra_front/ligra_front.kicad_sch: -------------------------------------------------------------------------------- 1 | (kicad_sch 2 | (version 20231120) 3 | (generator "eeschema") 4 | (generator_version "8.0") 5 | (uuid "467cbe4f-837e-49c0-bf8f-1655ca6eb890") 6 | (paper "A4") 7 | (lib_symbols 8 | (symbol "Connector:Screw_Terminal_01x01" 9 | (pin_names 10 | (offset 1.016) hide) 11 | (exclude_from_sim no) 12 | (in_bom yes) 13 | (on_board yes) 14 | (property "Reference" "J" 15 | (at 0 2.54 0) 16 | (effects 17 | (font 18 | (size 1.27 1.27) 19 | ) 20 | ) 21 | ) 22 | (property "Value" "Screw_Terminal_01x01" 23 | (at 0 -2.54 0) 24 | (effects 25 | (font 26 | (size 1.27 1.27) 27 | ) 28 | ) 29 | ) 30 | (property "Footprint" "" 31 | (at 0 0 0) 32 | (effects 33 | (font 34 | (size 1.27 1.27) 35 | ) 36 | (hide yes) 37 | ) 38 | ) 39 | (property "Datasheet" "~" 40 | (at 0 0 0) 41 | (effects 42 | (font 43 | (size 1.27 1.27) 44 | ) 45 | (hide yes) 46 | ) 47 | ) 48 | (property "Description" "Generic screw terminal, single row, 01x01, script generated (kicad-library-utils/schlib/autogen/connector/)" 49 | (at 0 0 0) 50 | (effects 51 | (font 52 | (size 1.27 1.27) 53 | ) 54 | (hide yes) 55 | ) 56 | ) 57 | (property "ki_keywords" "screw terminal" 58 | (at 0 0 0) 59 | (effects 60 | (font 61 | (size 1.27 1.27) 62 | ) 63 | (hide yes) 64 | ) 65 | ) 66 | (property "ki_fp_filters" "TerminalBlock*:*" 67 | (at 0 0 0) 68 | (effects 69 | (font 70 | (size 1.27 1.27) 71 | ) 72 | (hide yes) 73 | ) 74 | ) 75 | (symbol "Screw_Terminal_01x01_1_1" 76 | (rectangle 77 | (start -1.27 1.27) 78 | (end 1.27 -1.27) 79 | (stroke 80 | (width 0.254) 81 | (type default) 82 | ) 83 | (fill 84 | (type background) 85 | ) 86 | ) 87 | (polyline 88 | (pts 89 | (xy -0.5334 0.3302) (xy 0.3302 -0.508) 90 | ) 91 | (stroke 92 | (width 0.1524) 93 | (type default) 94 | ) 95 | (fill 96 | (type none) 97 | ) 98 | ) 99 | (polyline 100 | (pts 101 | (xy -0.3556 0.508) (xy 0.508 -0.3302) 102 | ) 103 | (stroke 104 | (width 0.1524) 105 | (type default) 106 | ) 107 | (fill 108 | (type none) 109 | ) 110 | ) 111 | (circle 112 | (center 0 0) 113 | (radius 0.635) 114 | (stroke 115 | (width 0.1524) 116 | (type default) 117 | ) 118 | (fill 119 | (type none) 120 | ) 121 | ) 122 | (pin passive line 123 | (at -5.08 0 0) 124 | (length 3.81) 125 | (name "Pin_1" 126 | (effects 127 | (font 128 | (size 1.27 1.27) 129 | ) 130 | ) 131 | ) 132 | (number "1" 133 | (effects 134 | (font 135 | (size 1.27 1.27) 136 | ) 137 | ) 138 | ) 139 | ) 140 | ) 141 | ) 142 | (symbol "power:GND" 143 | (power) 144 | (pin_names 145 | (offset 0) 146 | ) 147 | (exclude_from_sim no) 148 | (in_bom yes) 149 | (on_board yes) 150 | (property "Reference" "#PWR" 151 | (at 0 -6.35 0) 152 | (effects 153 | (font 154 | (size 1.27 1.27) 155 | ) 156 | (hide yes) 157 | ) 158 | ) 159 | (property "Value" "GND" 160 | (at 0 -3.81 0) 161 | (effects 162 | (font 163 | (size 1.27 1.27) 164 | ) 165 | ) 166 | ) 167 | (property "Footprint" "" 168 | (at 0 0 0) 169 | (effects 170 | (font 171 | (size 1.27 1.27) 172 | ) 173 | (hide yes) 174 | ) 175 | ) 176 | (property "Datasheet" "" 177 | (at 0 0 0) 178 | (effects 179 | (font 180 | (size 1.27 1.27) 181 | ) 182 | (hide yes) 183 | ) 184 | ) 185 | (property "Description" "Power symbol creates a global label with name \"GND\" , ground" 186 | (at 0 0 0) 187 | (effects 188 | (font 189 | (size 1.27 1.27) 190 | ) 191 | (hide yes) 192 | ) 193 | ) 194 | (property "ki_keywords" "global power" 195 | (at 0 0 0) 196 | (effects 197 | (font 198 | (size 1.27 1.27) 199 | ) 200 | (hide yes) 201 | ) 202 | ) 203 | (symbol "GND_0_1" 204 | (polyline 205 | (pts 206 | (xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27) 207 | ) 208 | (stroke 209 | (width 0) 210 | (type default) 211 | ) 212 | (fill 213 | (type none) 214 | ) 215 | ) 216 | ) 217 | (symbol "GND_1_1" 218 | (pin power_in line 219 | (at 0 0 270) 220 | (length 0) hide 221 | (name "GND" 222 | (effects 223 | (font 224 | (size 1.27 1.27) 225 | ) 226 | ) 227 | ) 228 | (number "1" 229 | (effects 230 | (font 231 | (size 1.27 1.27) 232 | ) 233 | ) 234 | ) 235 | ) 236 | ) 237 | ) 238 | ) 239 | (symbol 240 | (lib_id "power:GND") 241 | (at 147.32 177.8 270) 242 | (unit 1) 243 | (exclude_from_sim no) 244 | (in_bom yes) 245 | (on_board yes) 246 | (dnp no) 247 | (fields_autoplaced yes) 248 | (uuid "1ae1a9bf-2342-4d3e-9b32-ab5e3ff0c0d4") 249 | (property "Reference" "#PWR04" 250 | (at 140.97 177.8 0) 251 | (effects 252 | (font 253 | (size 1.27 1.27) 254 | ) 255 | (hide yes) 256 | ) 257 | ) 258 | (property "Value" "GND" 259 | (at 143.51 177.8 90) 260 | (effects 261 | (font 262 | (size 1.27 1.27) 263 | ) 264 | (justify right) 265 | ) 266 | ) 267 | (property "Footprint" "" 268 | (at 147.32 177.8 0) 269 | (effects 270 | (font 271 | (size 1.27 1.27) 272 | ) 273 | (hide yes) 274 | ) 275 | ) 276 | (property "Datasheet" "" 277 | (at 147.32 177.8 0) 278 | (effects 279 | (font 280 | (size 1.27 1.27) 281 | ) 282 | (hide yes) 283 | ) 284 | ) 285 | (property "Description" "" 286 | (at 147.32 177.8 0) 287 | (effects 288 | (font 289 | (size 1.27 1.27) 290 | ) 291 | (hide yes) 292 | ) 293 | ) 294 | (pin "1" 295 | (uuid "9a1f7157-373d-4865-8ac9-d5bdd7a8ba29") 296 | ) 297 | (instances 298 | (project "ligra_front" 299 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 300 | (reference "#PWR04") 301 | (unit 1) 302 | ) 303 | ) 304 | ) 305 | ) 306 | (symbol 307 | (lib_id "Connector:Screw_Terminal_01x01") 308 | (at 152.4 182.88 0) 309 | (unit 1) 310 | (exclude_from_sim no) 311 | (in_bom yes) 312 | (on_board yes) 313 | (dnp no) 314 | (fields_autoplaced yes) 315 | (uuid "3c00ce6c-c870-4d3d-ba13-e1eda699408f") 316 | (property "Reference" "J3" 317 | (at 154.94 181.61 0) 318 | (effects 319 | (font 320 | (size 1.27 1.27) 321 | ) 322 | (justify left) 323 | ) 324 | ) 325 | (property "Value" "Mount" 326 | (at 154.94 184.15 0) 327 | (effects 328 | (font 329 | (size 1.27 1.27) 330 | ) 331 | (justify left) 332 | ) 333 | ) 334 | (property "Footprint" "MountingHole:MountingHole_5.3mm_M5_Pad_Via" 335 | (at 152.4 182.88 0) 336 | (effects 337 | (font 338 | (size 1.27 1.27) 339 | ) 340 | (hide yes) 341 | ) 342 | ) 343 | (property "Datasheet" "~" 344 | (at 152.4 182.88 0) 345 | (effects 346 | (font 347 | (size 1.27 1.27) 348 | ) 349 | (hide yes) 350 | ) 351 | ) 352 | (property "Description" "" 353 | (at 152.4 182.88 0) 354 | (effects 355 | (font 356 | (size 1.27 1.27) 357 | ) 358 | (hide yes) 359 | ) 360 | ) 361 | (pin "1" 362 | (uuid "fa678fde-6d86-4621-915f-507fd6a09ca1") 363 | ) 364 | (instances 365 | (project "ligra_front" 366 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 367 | (reference "J3") 368 | (unit 1) 369 | ) 370 | ) 371 | ) 372 | ) 373 | (symbol 374 | (lib_id "power:GND") 375 | (at 147.32 182.88 270) 376 | (unit 1) 377 | (exclude_from_sim no) 378 | (in_bom yes) 379 | (on_board yes) 380 | (dnp no) 381 | (fields_autoplaced yes) 382 | (uuid "3f6d67b0-ecfe-4de4-b90f-a6595ba0ed02") 383 | (property "Reference" "#PWR03" 384 | (at 140.97 182.88 0) 385 | (effects 386 | (font 387 | (size 1.27 1.27) 388 | ) 389 | (hide yes) 390 | ) 391 | ) 392 | (property "Value" "GND" 393 | (at 143.51 182.88 90) 394 | (effects 395 | (font 396 | (size 1.27 1.27) 397 | ) 398 | (justify right) 399 | ) 400 | ) 401 | (property "Footprint" "" 402 | (at 147.32 182.88 0) 403 | (effects 404 | (font 405 | (size 1.27 1.27) 406 | ) 407 | (hide yes) 408 | ) 409 | ) 410 | (property "Datasheet" "" 411 | (at 147.32 182.88 0) 412 | (effects 413 | (font 414 | (size 1.27 1.27) 415 | ) 416 | (hide yes) 417 | ) 418 | ) 419 | (property "Description" "" 420 | (at 147.32 182.88 0) 421 | (effects 422 | (font 423 | (size 1.27 1.27) 424 | ) 425 | (hide yes) 426 | ) 427 | ) 428 | (pin "1" 429 | (uuid "b9df3187-4598-43bc-9611-ab5d1be2932d") 430 | ) 431 | (instances 432 | (project "ligra_front" 433 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 434 | (reference "#PWR03") 435 | (unit 1) 436 | ) 437 | ) 438 | ) 439 | ) 440 | (symbol 441 | (lib_id "power:GND") 442 | (at 147.32 193.04 270) 443 | (unit 1) 444 | (exclude_from_sim no) 445 | (in_bom yes) 446 | (on_board yes) 447 | (dnp no) 448 | (fields_autoplaced yes) 449 | (uuid "afea5822-5ff7-4596-8ac5-964dd3244901") 450 | (property "Reference" "#PWR01" 451 | (at 140.97 193.04 0) 452 | (effects 453 | (font 454 | (size 1.27 1.27) 455 | ) 456 | (hide yes) 457 | ) 458 | ) 459 | (property "Value" "GND" 460 | (at 143.51 193.04 90) 461 | (effects 462 | (font 463 | (size 1.27 1.27) 464 | ) 465 | (justify right) 466 | ) 467 | ) 468 | (property "Footprint" "" 469 | (at 147.32 193.04 0) 470 | (effects 471 | (font 472 | (size 1.27 1.27) 473 | ) 474 | (hide yes) 475 | ) 476 | ) 477 | (property "Datasheet" "" 478 | (at 147.32 193.04 0) 479 | (effects 480 | (font 481 | (size 1.27 1.27) 482 | ) 483 | (hide yes) 484 | ) 485 | ) 486 | (property "Description" "" 487 | (at 147.32 193.04 0) 488 | (effects 489 | (font 490 | (size 1.27 1.27) 491 | ) 492 | (hide yes) 493 | ) 494 | ) 495 | (pin "1" 496 | (uuid "296a5ab8-f494-4a8e-8039-e6987c26cbf7") 497 | ) 498 | (instances 499 | (project "ligra_front" 500 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 501 | (reference "#PWR01") 502 | (unit 1) 503 | ) 504 | ) 505 | ) 506 | ) 507 | (symbol 508 | (lib_id "Connector:Screw_Terminal_01x01") 509 | (at 152.4 187.96 0) 510 | (unit 1) 511 | (exclude_from_sim no) 512 | (in_bom yes) 513 | (on_board yes) 514 | (dnp no) 515 | (fields_autoplaced yes) 516 | (uuid "b14a1059-77e5-40d5-ad30-d1d1b645c6a6") 517 | (property "Reference" "J2" 518 | (at 154.94 186.69 0) 519 | (effects 520 | (font 521 | (size 1.27 1.27) 522 | ) 523 | (justify left) 524 | ) 525 | ) 526 | (property "Value" "Mount" 527 | (at 154.94 189.23 0) 528 | (effects 529 | (font 530 | (size 1.27 1.27) 531 | ) 532 | (justify left) 533 | ) 534 | ) 535 | (property "Footprint" "MountingHole:MountingHole_5.3mm_M5_Pad_Via" 536 | (at 152.4 187.96 0) 537 | (effects 538 | (font 539 | (size 1.27 1.27) 540 | ) 541 | (hide yes) 542 | ) 543 | ) 544 | (property "Datasheet" "~" 545 | (at 152.4 187.96 0) 546 | (effects 547 | (font 548 | (size 1.27 1.27) 549 | ) 550 | (hide yes) 551 | ) 552 | ) 553 | (property "Description" "" 554 | (at 152.4 187.96 0) 555 | (effects 556 | (font 557 | (size 1.27 1.27) 558 | ) 559 | (hide yes) 560 | ) 561 | ) 562 | (pin "1" 563 | (uuid "f53c2c7a-a424-4170-8984-f6e6329ada59") 564 | ) 565 | (instances 566 | (project "ligra_front" 567 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 568 | (reference "J2") 569 | (unit 1) 570 | ) 571 | ) 572 | ) 573 | ) 574 | (symbol 575 | (lib_id "Connector:Screw_Terminal_01x01") 576 | (at 152.4 193.04 0) 577 | (unit 1) 578 | (exclude_from_sim no) 579 | (in_bom yes) 580 | (on_board yes) 581 | (dnp no) 582 | (fields_autoplaced yes) 583 | (uuid "b9dcfe40-48b6-4e4b-81ea-aa6ade710de6") 584 | (property "Reference" "J1" 585 | (at 154.94 191.77 0) 586 | (effects 587 | (font 588 | (size 1.27 1.27) 589 | ) 590 | (justify left) 591 | ) 592 | ) 593 | (property "Value" "Mount" 594 | (at 154.94 194.31 0) 595 | (effects 596 | (font 597 | (size 1.27 1.27) 598 | ) 599 | (justify left) 600 | ) 601 | ) 602 | (property "Footprint" "MountingHole:MountingHole_5.3mm_M5_Pad_Via" 603 | (at 152.4 193.04 0) 604 | (effects 605 | (font 606 | (size 1.27 1.27) 607 | ) 608 | (hide yes) 609 | ) 610 | ) 611 | (property "Datasheet" "~" 612 | (at 152.4 193.04 0) 613 | (effects 614 | (font 615 | (size 1.27 1.27) 616 | ) 617 | (hide yes) 618 | ) 619 | ) 620 | (property "Description" "" 621 | (at 152.4 193.04 0) 622 | (effects 623 | (font 624 | (size 1.27 1.27) 625 | ) 626 | (hide yes) 627 | ) 628 | ) 629 | (pin "1" 630 | (uuid "5e6d82e2-035c-41f6-b5a6-be687a96d5bd") 631 | ) 632 | (instances 633 | (project "ligra_front" 634 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 635 | (reference "J1") 636 | (unit 1) 637 | ) 638 | ) 639 | ) 640 | ) 641 | (symbol 642 | (lib_id "power:GND") 643 | (at 147.32 187.96 270) 644 | (unit 1) 645 | (exclude_from_sim no) 646 | (in_bom yes) 647 | (on_board yes) 648 | (dnp no) 649 | (fields_autoplaced yes) 650 | (uuid "f29b3d99-c806-40c3-9c9e-48186e231f87") 651 | (property "Reference" "#PWR02" 652 | (at 140.97 187.96 0) 653 | (effects 654 | (font 655 | (size 1.27 1.27) 656 | ) 657 | (hide yes) 658 | ) 659 | ) 660 | (property "Value" "GND" 661 | (at 143.51 187.96 90) 662 | (effects 663 | (font 664 | (size 1.27 1.27) 665 | ) 666 | (justify right) 667 | ) 668 | ) 669 | (property "Footprint" "" 670 | (at 147.32 187.96 0) 671 | (effects 672 | (font 673 | (size 1.27 1.27) 674 | ) 675 | (hide yes) 676 | ) 677 | ) 678 | (property "Datasheet" "" 679 | (at 147.32 187.96 0) 680 | (effects 681 | (font 682 | (size 1.27 1.27) 683 | ) 684 | (hide yes) 685 | ) 686 | ) 687 | (property "Description" "" 688 | (at 147.32 187.96 0) 689 | (effects 690 | (font 691 | (size 1.27 1.27) 692 | ) 693 | (hide yes) 694 | ) 695 | ) 696 | (pin "1" 697 | (uuid "8cb1f7be-6af8-4504-9543-72bc57c5efff") 698 | ) 699 | (instances 700 | (project "ligra_front" 701 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 702 | (reference "#PWR02") 703 | (unit 1) 704 | ) 705 | ) 706 | ) 707 | ) 708 | (symbol 709 | (lib_id "Connector:Screw_Terminal_01x01") 710 | (at 152.4 177.8 0) 711 | (unit 1) 712 | (exclude_from_sim no) 713 | (in_bom yes) 714 | (on_board yes) 715 | (dnp no) 716 | (fields_autoplaced yes) 717 | (uuid "ff4b0c43-4a36-42e4-a15b-1533b092740f") 718 | (property "Reference" "J4" 719 | (at 154.94 176.53 0) 720 | (effects 721 | (font 722 | (size 1.27 1.27) 723 | ) 724 | (justify left) 725 | ) 726 | ) 727 | (property "Value" "Mount" 728 | (at 154.94 179.07 0) 729 | (effects 730 | (font 731 | (size 1.27 1.27) 732 | ) 733 | (justify left) 734 | ) 735 | ) 736 | (property "Footprint" "MountingHole:MountingHole_5.3mm_M5_Pad_Via" 737 | (at 152.4 177.8 0) 738 | (effects 739 | (font 740 | (size 1.27 1.27) 741 | ) 742 | (hide yes) 743 | ) 744 | ) 745 | (property "Datasheet" "~" 746 | (at 152.4 177.8 0) 747 | (effects 748 | (font 749 | (size 1.27 1.27) 750 | ) 751 | (hide yes) 752 | ) 753 | ) 754 | (property "Description" "" 755 | (at 152.4 177.8 0) 756 | (effects 757 | (font 758 | (size 1.27 1.27) 759 | ) 760 | (hide yes) 761 | ) 762 | ) 763 | (pin "1" 764 | (uuid "38d79384-9be3-4470-963f-3972152253cf") 765 | ) 766 | (instances 767 | (project "ligra_front" 768 | (path "/467cbe4f-837e-49c0-bf8f-1655ca6eb890" 769 | (reference "J4") 770 | (unit 1) 771 | ) 772 | ) 773 | ) 774 | ) 775 | (sheet_instances 776 | (path "/" 777 | (page "1") 778 | ) 779 | ) 780 | ) 781 | -------------------------------------------------------------------------------- /pcb_graphics/bitmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/pcb_graphics/bitmap.png -------------------------------------------------------------------------------- /pcb_graphics/bitmap_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/pcb_graphics/bitmap_2.png -------------------------------------------------------------------------------- /pcb_graphics/bitmap_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/pcb_graphics/bitmap_3.png -------------------------------------------------------------------------------- /pcb_graphics/bitmap_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Jana-Marie/ligra/8a98f3938c20fe3ed07bfb34e7d43f243e21f519/pcb_graphics/bitmap_4.png -------------------------------------------------------------------------------- /projection-media.md: -------------------------------------------------------------------------------- 1 | # Projection-Media 2 | 3 | A collection of different projection-media ideas. 4 | 5 | Similar to a camera, where only a part of the imaged are is in focus on the sensor, only a narrow band of projection media becomes sharp on your projection site. This is both a disatvantage as we have to move our focus to get our subject to appear sharp, as well as an advantage. Our subject becomes really sharp, sharper than many projectors can do and we can play with focus. 6 | 7 | ## Table of Contents 8 | 9 | * [2D Print](#2d-print) 10 | * [Step prints](#step-prints) 11 | * [Metal-Stencil](#metal-stencil) 12 | * [2.5D Print](#2.5d-print) 13 | * [Oil Disc](#Oil-Disc) 14 | * [LCD](#lcd) 15 | 16 | ## 2D Print 17 | 18 | Arguably the most easy and fast way is to 2D print a stencil on laser or inkjet printer. To do so, you will need to buy some printable foil, take note that it must be compatible with the printing technology (i.e. laser/toner, inkjet, riso??, ...) available to you. Sometimes such foil is called "overhead-projector media". You can find a template in [`/stencils/`](/stencils/2D_stencil_print.svg), called `2D_stencil_print.svg`. It is compatible with the [stage mentioned in the instructions](https://github.com/Jana-Marie/ligra/blob/main/instructions.md#Stage). 19 | 20 | You will find 24 black circles in the document, place your design within the green border that is visible on these black dots. Note that there will be considerable vignetting towards their edges, center your designs well and keep some distance. I've left four designs as an example. Everything white will become visible/illuminated, everything black will be blocked out and everything inbetween will be visible as inbetween. Get creative! Oh and one last thing, turn off the visibility of the "Visible Media" layer before printing to dinA4, it is meant as a guide and is not to be printed. 21 | 22 | 23 | 24 | 25 | 28 | 31 | 34 | 35 | 36 |
26 | 27 | 29 | 30 | 32 | 33 |
37 | 38 | ### Step prints 39 | 40 | You can also stack multiple stencils, moving them in the focal plane of the projector. With this you can create blurry backgrounds or sceneries, while maintaining sharper subjects. 41 | 42 | 43 | 44 | 45 | 48 | 49 | 50 |
46 | 47 |
51 | 52 | ## Metal stencil 53 | 54 | Instead of a 2D printed stencil, you can of course also design and buy a metal stencil from a PCB/Stencil vendor like JLCpcb, PCBway, AllPCB, OSHStencils and others. 55 | 56 | Furthermore, you can head over to AliExpress and other vendors to buy pre-made Gobo-Projector stencils, [like these.](https://www.aliexpress.com/item/1005004907991627.html). A diameter between 37.5mm to 25mm should work, ~36mm is an ideal size. Please adapt the [stencil cage](https://github.com/Jana-Marie/ligra/blob/main/instructions.md#Stage) mentioned in the stage section accordingly. 57 | 58 | 59 | 60 | 61 | 64 | 65 | 66 |
62 | 63 |
67 | 68 | ## 2.5D Print 69 | 70 | If you have a 3D printer, which you likely do if you are replicating this, you can of course directly print a stencil on the printer itself, with the filament you are using to print the stencil cage. Never tried this though.. 71 | 72 | ## LCD 73 | 74 | Lastly, this is on my todo list, you can of course replace the whole static stencil with an LCD screen (or any other light disrupting display technology). Would love to know how this looks like. 75 | 76 | ## Oil Disc 77 | 78 | Another fun projection media are oil disks, from e.g. Mathmos. They require some modification to the frame as they are usually too big to fit and need to rotated constantly. 79 | 80 | 81 | 82 | 83 | 86 | 89 | 92 | 93 | 94 |
84 | 85 | 87 | 88 | 90 | 91 |
95 | 96 | ## Other ideas? 97 | 98 | Any other ideas? Pleeeease send them to me, would love to test them. -------------------------------------------------------------------------------- /staging-stages.md: -------------------------------------------------------------------------------- 1 | # Staging-Stages 2 | 3 | There is of course more than one posssible stage, this page is here to collect ideas for different pages. 4 | 5 | ## Table of Contents 6 | 7 | 8 | * [Open Ideas](#open-ideas) 9 | * [Motor-Rotating Stage](#motor-rotating-stage) 10 | * [3-Point Stage](#3-point-stage) 11 | * [Oil Disc](#oil-disc) 12 | 13 | ## Open Ideas 14 | 15 | - [ ] 35mm Film Stage 16 | - [ ] Dia-Film Stage 17 | - [ ] Plexiglas-Block with Effect-Particles Inside 18 | - [ ] Effect-Foil 19 | 20 | ## Motor-Rotating Stage 21 | 22 | Please refer to [the instructions](https://github.com/Jana-Marie/ligra/blob/main/instructions.md#Stage) for this one, it is detailed there. 23 | 24 | 25 | 26 | 27 | 30 | 33 | 34 | 35 |
28 | 29 | 31 | 32 |
36 | 37 | ## 3-Point Stage 38 | 39 | My earliest attempt, make a 3-point connected stage for trapez-correction. I designed and built one, it worked, but was so flimsy. Didn't keep on improving it, but eventually an overhaul is due. 40 | 41 | 42 | 43 | 44 | 47 | 50 | 51 | 52 |
45 | 46 | 48 | 49 |
53 | 54 | ## Oil Disc 55 | 56 | Another fun stage is to use a 70s style oil disc. They are available from Mathmos or used on ebay, but require some modification to the whole frame. 57 | 58 | 59 | 60 | 61 | 64 | 67 | 68 | 69 | 72 | 75 | 76 | 77 |
62 | 63 | 65 | 66 |
70 | 71 | 73 | 74 |
--------------------------------------------------------------------------------