Initial commit
This commit is contained in:
commit
b230f7346a
|
@ -0,0 +1,3 @@
|
|||
[submodule "scad/common"]
|
||||
path = scad/common
|
||||
url = https://git.sixteenmillimeter.com/modules/common.git
|
|
@ -0,0 +1,52 @@
|
|||
# 110 Cartridge
|
||||
|
||||
This module contains a 3D printable 110 cartridge for downspooling 16mm guage film for use with 110 still cameras.
|
||||
Previously this was called the "minolta16_cartridge" on this site but it is compatible with all standard 110 cameras.
|
||||
|
||||
This design requires loading in a changing bag or completely dark room.
|
||||
Initially this was created for [FDM printers](https://en.wikipedia.org/wiki/Fused_filament_fabrication), but updates can be made to the design for it to be used with resin [SLA printers](https://en.wikipedia.org/wiki/Stereolithography).
|
||||
It does not have a top cover on the cartridge itself, currently, because of the minimum z-height for FDM printing but SLA printers should be able to make a cartridge thin enough that it can support a cover.
|
||||
|
||||
The actual opaqueness of available printing materials is another concern, which is why this design is recommended to use only in a changing bag or darkened room.
|
||||
If there is any light transmission at all, this can compromise the film by fogging or flashing it.
|
||||
|
||||
-----
|
||||
|
||||
## 110 Cartridge Body
|
||||
|
||||
This is the main body of the cartridge and is one of only two absolutely necessary parts to print to be able to load and shoot film; the other being the takeup insert.
|
||||
Film is loaded into the feed (smaller) side of the cartridge and threaded through to the takeup side and affixed to the takeup insert
|
||||
|
||||

|
||||
|
||||
[Download STL](./stl/110_cartridge_body.stl)
|
||||
|
||||
-----
|
||||
|
||||
## 110 Cartridge Takeup Insert
|
||||
|
||||
This takeup insert is where film is affixed and wound around it while the camera advances between frames.
|
||||
|
||||

|
||||
|
||||
[Download STL](./stl/110_cartridge_takeup.stl)
|
||||
|
||||
-----
|
||||
|
||||
## 110 Cartridge Case
|
||||
|
||||
This is the case for the cartridge.
|
||||
It should not be considered light safe without testing.
|
||||
As mentioned above, 3D printed materials have different levels of light transmission, even if they are completely black.
|
||||
|
||||

|
||||
|
||||
[Download STL](./stl/110_cartridge_case.stl)
|
||||
|
||||
-----
|
||||
|
||||
## 110 Cartridge Cover
|
||||
|
||||

|
||||
|
||||
[Download STL](./stl/110_cartridge_cover.stl)
|
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Binary file not shown.
After Width: | Height: | Size: 9.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
|
@ -0,0 +1,74 @@
|
|||
{
|
||||
"camera" : {
|
||||
"x" : 0,
|
||||
"y" : 0,
|
||||
"z" : 0,
|
||||
},
|
||||
"objects": [
|
||||
{
|
||||
"name": "110_cartridge_case",
|
||||
"material": "black_plastic",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": -40
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "110_cartridge_body",
|
||||
"material": "black_plastic",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "110_cartridge_takeup",
|
||||
"material": "black_plastic",
|
||||
"position": {
|
||||
"x": -21,
|
||||
"y": 0,
|
||||
"z": 35
|
||||
},
|
||||
"rotation": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 0
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "110_cartridge_takeup",
|
||||
"material": "black_plastic",
|
||||
"position": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"z": 45
|
||||
},
|
||||
"rotation": {
|
||||
"x": 180,
|
||||
"y": 0,
|
||||
"z": 180
|
||||
}
|
||||
}
|
||||
],
|
||||
"src" : [
|
||||
"README.md",
|
||||
"LICENSE",
|
||||
"scad.sh",
|
||||
"scad/110_cartridge.scad",
|
||||
"scad/common/common.scad",
|
||||
"scad/common/c14n_stl.py",
|
||||
"scad/common/scad.sh"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
bash scad/common/scad.sh scad/110_cartridge.scad "${@}"
|
|
@ -0,0 +1,185 @@
|
|||
use <./common/common.scad>;
|
||||
|
||||
$fn = 150;
|
||||
|
||||
SPACING = 42;
|
||||
WALL_THICKNESS = 1.25 + .5;
|
||||
|
||||
PLANE_BACK = 1.55;
|
||||
|
||||
CART_H = 16.85 + .75;
|
||||
|
||||
FEED_D = 19.14;
|
||||
TAKEUP_D = 22.04;
|
||||
|
||||
TAKEUP_OFFSET_Y = -(TAKEUP_D - FEED_D) / 2;
|
||||
|
||||
CONNECT_X = SPACING - (TAKEUP_D / 2) - (FEED_D / 2) + 2;
|
||||
CONNECT_Y = 8.85;
|
||||
CONNECT_Z = 1.3;
|
||||
|
||||
CONNECT_OFFSET_X = ((TAKEUP_D / 2) - (FEED_D / 2)) / 2;
|
||||
CONNECT_OFFSET_Y = (FEED_D / 2) - (CONNECT_Y / 2) - 5.02;
|
||||
CONNECT_OFFSET_Z = -(CART_H / 2) + (CONNECT_Z / 2);
|
||||
|
||||
FILM_NEG_Y = .75;
|
||||
|
||||
FILM_NEG_OFFSET_Y = 8.5;
|
||||
|
||||
CAP_LIP_H = 5.92;
|
||||
CAP_LIP = .56;
|
||||
CAP_THICKNESS = .5;
|
||||
|
||||
TOP_H = 1;
|
||||
|
||||
|
||||
module 110_cartridge_case () {
|
||||
H = 19;
|
||||
|
||||
FOD = FEED_D + 3;
|
||||
FID = FEED_D + .5;
|
||||
TOD = TAKEUP_D + 3;
|
||||
TID = TAKEUP_D + .5;
|
||||
MID = 17;
|
||||
MID_OFFSET = 2.55;
|
||||
|
||||
difference () {
|
||||
union () {
|
||||
translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD), h = H, center = true);
|
||||
translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD), h = H, center = true);
|
||||
translate([0, MID_OFFSET, 0]) cube([SPACING, MID, H], center = true);
|
||||
}
|
||||
translate([0, 0, -1]) union () {
|
||||
translate([SPACING / 2, 0, 0]) cylinder(r = R(FID), h = H, center = true);
|
||||
translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TID), h = H, center = true);
|
||||
translate([0, MID_OFFSET - .25, 0]) cube([SPACING, MID - 2, H], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module 110_cartridge_cover () {
|
||||
H = 4;
|
||||
|
||||
FOD = FEED_D + 3;
|
||||
TOD = TAKEUP_D + 3;
|
||||
MID = 17;
|
||||
MID_OFFSET = 2.55;
|
||||
|
||||
difference () {
|
||||
union () {
|
||||
translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD + 3), h = H, center = true);
|
||||
translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD + 3), h = H, center = true);
|
||||
translate([0, MID_OFFSET, 0]) cube([SPACING, MID + 3, H], center = true);
|
||||
}
|
||||
translate([0, 0, 1.5]) union () {
|
||||
translate([SPACING / 2, 0, 0]) cylinder(r = R(FOD), h = H, center = true);
|
||||
translate([-SPACING / 2, TAKEUP_OFFSET_Y, 0]) cylinder(r = R(TOD), h = H, center = true);
|
||||
translate([0, MID_OFFSET, 0]) cube([SPACING, MID, H], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module 110_cartridge_takeup () {
|
||||
H = 15.95;
|
||||
D = 15.5;
|
||||
INNER_D = 14;
|
||||
difference() {
|
||||
cylinder(r = R(D), h = H, center = true);
|
||||
translate([0, 0, .65]) cylinder(r = R(INNER_D), h = H, center = true);
|
||||
translate([-3, 7, .65]) rotate([0, 0, 60]) cube([10, .5, H], center = true);
|
||||
}
|
||||
translate([0, 0, -(D / 2) + 1.5]) cylinder(r = R(4), h = 3, center = true);
|
||||
for (i = [0:3]) {
|
||||
rotate([0, 0, i * 90]) translate([(D / 4) - .75, 1.25, -(D / 2) + 1.5]) cube([(D / 2) + 1, 1, 3], center = true);
|
||||
}
|
||||
}
|
||||
|
||||
module 110_cartridge_takeup_cover () {
|
||||
INNER_D = TAKEUP_D - WALL_THICKNESS;
|
||||
difference () {
|
||||
union () {
|
||||
cylinder(r = R(TAKEUP_D), h = 1, center = true);
|
||||
translate([TAKEUP_D / 4, TAKEUP_D / 4, 0]) {
|
||||
cube([TAKEUP_D / 2, TAKEUP_D / 2, 1], center = true);
|
||||
}
|
||||
translate([0, 0, -1.5]) cylinder(r = R(13.87) + .2, h = 3, center = true);
|
||||
}
|
||||
translate([0, 0, .65]) cylinder(r = R(13.87) - .5, h = 100, center = true);
|
||||
}
|
||||
translate([(TAKEUP_D / 2) - 1, 7.5, -1]) cube([1.8, 1.8, 1.8], center = true);
|
||||
}
|
||||
|
||||
module feed (pos = [0, 0, 0]) {
|
||||
INNER_D = FEED_D - WALL_THICKNESS;
|
||||
1_OFFSET_Z = (CART_H / 2) - (CAP_LIP_H / 2);
|
||||
|
||||
translate(pos) difference () {
|
||||
union () {
|
||||
cylinder(r = R(FEED_D), h = CART_H, center = true);
|
||||
translate([-FEED_D / 4, FEED_D / 4, 0]) {
|
||||
cube([FEED_D / 2, FEED_D / 2, CART_H], center = true);
|
||||
}
|
||||
}
|
||||
translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true);
|
||||
//film neg
|
||||
translate ([-FEED_D / 2, FILM_NEG_OFFSET_Y, WALL_THICKNESS / 2]) {
|
||||
cube([FEED_D, FILM_NEG_Y, CART_H], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module feed_cap () {
|
||||
cylinder(r = R(FEED_D), h = CART_H, center = true);
|
||||
}
|
||||
|
||||
module feed_cap_neg () {
|
||||
INNER_D = FEED_D - CAP_LIP;
|
||||
|
||||
difference () {
|
||||
cylinder(r = R(FEED_D), h = CAP_LIP_H, center = true);
|
||||
translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true);
|
||||
translate([-FEED_D / 4, FEED_D / 4, 0]) {
|
||||
cube([FEED_D / 2, FEED_D / 2, CART_H], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module takeup (pos = [0, 0, 0]) {
|
||||
INNER_D = TAKEUP_D - WALL_THICKNESS;
|
||||
translate(pos) difference () {
|
||||
union () {
|
||||
cylinder(r = R(TAKEUP_D), h = CART_H, center = true);
|
||||
translate([TAKEUP_D / 4, TAKEUP_D / 4, 0]) {
|
||||
cube([TAKEUP_D / 2, TAKEUP_D / 2, CART_H], center = true);
|
||||
}
|
||||
}
|
||||
//notch
|
||||
translate([0, 0, WALL_THICKNESS]) cylinder(r = R(INNER_D), h = CART_H, center = true);
|
||||
//film neg
|
||||
translate ([TAKEUP_D / 2, FILM_NEG_OFFSET_Y - TAKEUP_OFFSET_Y, WALL_THICKNESS / 2]) {
|
||||
cube([TAKEUP_D, FILM_NEG_Y, CART_H], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module connector (pos = [0, 0, 0]) {
|
||||
translate(pos) cube([CONNECT_X, CONNECT_Y, CONNECT_Z], center = true);
|
||||
}
|
||||
|
||||
module 110_cartridge_body () {
|
||||
feed([SPACING / 2, 0, 0]);
|
||||
takeup([-SPACING / 2, TAKEUP_OFFSET_Y, 0]);
|
||||
connector([CONNECT_OFFSET_X, CONNECT_OFFSET_Y, CONNECT_OFFSET_Z]);
|
||||
}
|
||||
|
||||
PART = "body";
|
||||
|
||||
if (PART == "case") {
|
||||
rotate([180, 0, 0]) 110_cartridge_case();
|
||||
} else if (PART == "cover") {
|
||||
110_cartridge_cover();
|
||||
} else if (PART == "takeup") {
|
||||
110_cartridge_takeup();
|
||||
} else if (PART == "body") {
|
||||
110_cartridge_body();
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Subproject commit e2eeb27f173d739a174c0d147bcb62a16859e2d9
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue