Add additional images and the first version of the pdf

This commit is contained in:
Matt McWilliams 2025-04-18 17:21:53 -04:00
parent 6c9bfe7cde
commit 720b3eab1d
7 changed files with 77 additions and 40 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -34,12 +34,20 @@ A light shown from behind the negative picture source that passes through it and
The contact between the two film strips is essential because the direct contact of the picture stocks developed emulsion to the undeveloped emulsion of the print stock ensures that the copy is as sharp as possible. The contact between the two film strips is essential because the direct contact of the picture stocks developed emulsion to the undeveloped emulsion of the print stock ensures that the copy is as sharp as possible.
Any distance between the two will result in an unfocused copy. Any distance between the two will result in an unfocused copy.
Contact printers can be continuous or intermittent-motion: meaning that they expose each frame individually, pausing for each exposure. ```{=latex}
\begin{center}
```
![Illustration of intermittent-motion vs. continuous printers](../img/contact_printer_types.png){ width=4in height=2.66in }
```{=latex}
\end{center}
```
Contact printers can be continuous or intermittent-motion: meaning that they expose each frame individually, pausing for each exposure [@contactpridx8].
This project will create a continuous printer for simplicity. This project will create a continuous printer for simplicity.
Intermittent-motion printers require precise movements, more complex lamps or shutter mechanisms and would make this a more complicated DIY project. Intermittent-motion printers require precise movements, more complex lamps or shutter mechanisms and would make this a more complicated DIY project.
This is to be avoided; for now. This is to be avoided for now.
![Illustration of intermittent-motion vs. continuous printers]()
# Motivations # Motivations
@ -67,7 +75,15 @@ Designing a new contact printer at the same scale and feature complexity as the
Creating one at the size and scale the Uhler Cine Printer that can be made using rapid prototyping techniques, however, will find a use to many artists. Creating one at the size and scale the Uhler Cine Printer that can be made using rapid prototyping techniques, however, will find a use to many artists.
A small, portable contact printer that can be quickly stored or even mounted vertically on a wall means that artists will not have to sacrifice floor or even table space to own and operate it. A small, portable contact printer that can be quickly stored or even mounted vertically on a wall means that artists will not have to sacrifice floor or even table space to own and operate it.
![Photograph of the Bell & Howell Model C printer]() ```{=latex}
\begin{center}
```
![Photograph of the Bell and Howell Model C printer](../img/Bell_and_Howell_Model_CL_Printer.png){ width=2.5in height=3in }
```{=latex}
\end{center}
```
# Design Philosophy # Design Philosophy
@ -85,11 +101,21 @@ Git is a distributed version control software which means that all copies of the
Changes that are made and "committed" to the git repository are stored as "diffs" or just the difference between the new code and the previous state. Changes that are made and "committed" to the git repository are stored as "diffs" or just the difference between the new code and the previous state.
This allows for the tracking of changes over time, with notes annotated why they were made and what they address, and provides the ability to roll back changes to earlier versions of the project. This allows for the tracking of changes over time, with notes annotated why they were made and what they address, and provides the ability to roll back changes to earlier versions of the project.
![Illustration of OpenSCAD code next to a rendered model of what that code produces]()
Using a human-readable design format means that even if the software for rendering the printable models no longer exists or no longer works or for some reason cannot be executed, the features of the design can be theoretically preserved and recreated by reading the measurements the code describes. Using a human-readable design format means that even if the software for rendering the printable models no longer exists or no longer works or for some reason cannot be executed, the features of the design can be theoretically preserved and recreated by reading the measurements the code describes.
Dimensions and makeup of each part are stored in such a way with adjacent comments and other semantic signifiers to describe the 3D objects in such a way that a person with the OpenSCAD code printed out on paper could reconstruct or recreate in another CAD software or physically. Dimensions and makeup of each part are stored in such a way with adjacent comments and other semantic signifiers to describe the 3D objects in such a way that a person with the OpenSCAD code printed out on paper could reconstruct or recreate in another CAD software or physically.
In the below code example a cube measuring 4 mm x 5 mm x 3 mm has a cylindrical void with a 1.5 mm radius removed from it via the "difference" boolean operation.
```{=latex}
\begin{center}
```
![Illustration of OpenSCAD code next to a rendered model of what that code produces](../img/openscad_example.png){ width=4in height=2.22in }
```{=latex}
\end{center}
```
The ultimate goal of this project is to create a free and open design that is a platform others can expand on to fulfill their production needs. The ultimate goal of this project is to create a free and open design that is a platform others can expand on to fulfill their production needs.
The goal is *not* to create a product and take on all of the expectations and economic considerations that endeavor requires. The goal is *not* to create a product and take on all of the expectations and economic considerations that endeavor requires.
The licensing of the project allows for the possibility of motivated individuals or organizations to produce and sell the contact printer without any restrictions. The licensing of the project allows for the possibility of motivated individuals or organizations to produce and sell the contact printer without any restrictions.
@ -139,9 +165,12 @@ Resin printing is capable of resolutions not possible with FDM desktop printing
The ultra-cheap resin printer used in prototyping this sprocketed roller is the Anycubic Mono 4K [@anycubic] which has a Z axis resolution of 10 microns (0.01mm) and a XY resolution of 35 microns (0.035mm). The ultra-cheap resin printer used in prototyping this sprocketed roller is the Anycubic Mono 4K [@anycubic] which has a Z axis resolution of 10 microns (0.01mm) and a XY resolution of 35 microns (0.035mm).
This can be compared to the resolutions available in the FDM printer used to make this prototype, the Creality Ender 3 [@ender3], which extrudes plastic through a 400 micron (0.4mm) nozzle and has a range of vertical and horizontal resolutions from 100 to 300 microns (0.1mm to 0.3mm). This can be compared to the resolutions available in the FDM printer used to make this prototype, the Creality Ender 3 [@ender3], which extrudes plastic through a 400 micron (0.4mm) nozzle and has a range of vertical and horizontal resolutions from 100 to 300 microns (0.1mm to 0.3mm).
The reason these resolutions are important is because of the specification for 16mm perforations on film.
![Illustration of the 8-frame sprocketed roller and the 18-frame roller created with the same module]() ![Illustration of the 8-frame sprocketed roller and the 18-frame roller created with the same module]()
Development of this sprocketed drive roller was kickstarted by using an existing parametric model[@param-roller] that was designed to replace an 8-frame roller and work on this project was upstreamed into that module so that it may benefit other use cases. Development of this sprocketed drive roller was kick-started by using an existing parametric model[@param-roller] that was designed to replace an 8-frame roller and work on this project was up-streamed into that module so that it may benefit other use cases.
That work has already proven useful to the mcopy [@mcopy] project as the updated module has been used to design a gate compatible with JK optical printers. That work has already proven useful to the mcopy [@mcopy] project as the updated module has been used to design a gate compatible with JK optical printers.
Due to the model being parametric, it can be used in designing film transport mechanisms in other, future projects, and additional improvements to the measurements and tolerances will benefit those projects as well. Due to the model being parametric, it can be used in designing film transport mechanisms in other, future projects, and additional improvements to the measurements and tolerances will benefit those projects as well.
@ -193,6 +222,8 @@ For this reason only the take-up side *needs* to be motorized.
This reduces the overall cost of the build and removes the need for additional motor-controlling electronics. This reduces the overall cost of the build and removes the need for additional motor-controlling electronics.
The take-up mechanisms for the picture and stock are inspired by a feature in the The Shaffer Linear Processor [@slp]: the magnetic clutch [@slp-clutch]. The take-up mechanisms for the picture and stock are inspired by a feature in the The Shaffer Linear Processor [@slp]: the magnetic clutch [@slp-clutch].
In principle a magnetic clutch is two parts; one is driven at a constant speed and a second part, secured only by magnets, slips while tension against it is too great to allow it to move.
The design in this project uses 6 mm neodymium magnets on a drive wheel attached to a coupler with a steel washer and a square pegs for film spools and core adapters.
```{=latex} ```{=latex}
\begin{center} \begin{center}
@ -205,8 +236,12 @@ The take-up mechanisms for the picture and stock are inspired by a feature in th
``` ```
The choice to direct drive the take-up is due to the fact that powerful geared DC motors are cheap and available. The choice to direct drive the take-up is due to the fact that powerful geared DC motors are cheap and available.
Driving them separately, rather than using a belt, means that the speed can be controlled individually. Driving them separately, rather than using a belt, means that the speed can be controlled individually but that they do not need to.
The speed of one take-up can be set to expect a 3 inch core but The speed of one take-up can be set to expect a daylight spool but could be adjusted in future work to optimize for a 2 or 3 inch core.
The take-up mechanism was designed as a standalone module that is broken out from the project and lives in its own git repository [@takeup] so that it may be easily included in other projects.
This module has already been used in the mcopy project [@mcopy] as a motorized film take-up and feed system for JK optical printers.
Improvements to the module during the development of either project--catching defects, adding optional features--will benefit the other.
## The Lamp ## The Lamp
@ -222,7 +257,7 @@ The solution of raising the brightness of the lamp allows for more color filters
The L298N motor controller module provides a stable 5 volt DC signal that is used for powering the ESP32 and is wired via a transistor to power the lamp. The L298N motor controller module provides a stable 5 volt DC signal that is used for powering the ESP32 and is wired via a transistor to power the lamp.
In theory, the signal provided by the ESP32 to the transistor could be modulated with a PWM channel. In theory, the signal provided by the ESP32 to the transistor could be modulated with a PWM channel.
The reason this is being avoided at this stage is that PWM, as in it's name, pulses light to acheive perceptual brightness. The reason this is being avoided at this stage is that PWM, as in it's name, pulses light to achieve perceptual brightness.
In the case of a continuous contact print, this would mean the light would be, essentially, flashing on and off as the film passed by the gate. In the case of a continuous contact print, this would mean the light would be, essentially, flashing on and off as the film passed by the gate.
Using a standard Arduino PWM rate of 5 kHz and assuming the printer is running at an ideal 24 fps (24 Hz) means that the LEDs would blink on and off ~208 per frame. Using a standard Arduino PWM rate of 5 kHz and assuming the printer is running at an ideal 24 fps (24 Hz) means that the LEDs would blink on and off ~208 per frame.
What this *could* result in is 208 distinct lines along the vertical axis of the image. What this *could* result in is 208 distinct lines along the vertical axis of the image.
@ -268,8 +303,8 @@ It is a relatively simple process but it requires precision in the gates to ensu
## The Frame ## The Frame
Within reason, the aluminum frame for this project is resizable. Within reason, the aluminum frame for this project is resizable.
The first draft of the original prototype was made to support 100 foot daylight spools and was 300mm by 175mm (11.8" x 6.9"). The first draft of the original prototype was made to support 100 foot daylight spools and was 300 mm by 175 mm (11.8" x 6.9").
This was changed increase the dimensions to allow for 400 foot reels and is now 400mm by 260mm (15.75" x 10.25"). This was changed increase the dimensions to allow for 400 foot reels and is now 400 mm by 260 mm (15.75" x 10.25").
Being able to reduce or increase the area of the frame is one way to make it easier to modify and customize tools built using this platform. Being able to reduce or increase the area of the frame is one way to make it easier to modify and customize tools built using this platform.
There is nothing preventing the creation of a version of this printer with a much larger footage capacity by expanding the frame even further. There is nothing preventing the creation of a version of this printer with a much larger footage capacity by expanding the frame even further.
@ -285,38 +320,24 @@ It would be possible to increase the rigidity, if needed, by adding additional i
## The Firmware ## The Firmware
The Arduino platform uses a subset of C++ which has the benefits of being approachable and easy to use while at the same time preserving all the functionalities of the full C++ language for when they are needed. The Arduino platform uses a subset of C++ which has the benefits of being approachable and easy to use while at the same time preserving the functionalities of the full C++ language for when they are needed.
The project is built with an object-oriented programming style that allows for abstraction over the functionality of the physical hardware and other features at the class level. The project is built with an object-oriented programming style that allows for abstraction over the functionality of the physical hardware and other features at the class level.
This approach serves the project's larger goal to leverage modularity by making use of pre-existing classes and creating reusable ones for other projects. This approach serves the project's larger goal to leverage modularity by making use of pre-existing classes and creating reusable ones for other projects.
The firmware can be compiled and uploaded using the Arduino IDE [@arduino-ide] or the arduino-cli [@arduino-cli] application using the "esp32:esp32:esp32" FBQN (Fully Qualified Board Name). The firmware can be compiled and uploaded using the Arduino IDE [@arduino-ide] or the arduino-cli [@arduino-cli] application using the "esp32:esp32:esp32" FBQN (Fully Qualified Board Name).
The code can be compiled *without* the ESP32 Arduino libraries and just the standard AVR libraries but the GPIO usage and LED PWM channel usage is such that it would have to be refactored to work on another board.
Had this project targeted a different Arduino board from the start there would be limitations in the PWM duty rates of the motors and the ability to add network features.
The initial release of the firmware simply starts the printer when a button is pressed and stops it when that same button is pressed. Functionality is abstracted into three classes: the high-level "ContactPrinter" class which then imports the "DriveMotor" and "Lamp" classes.
There is a stub for the HTTP networking features named "WebGUI" which does not do anything but host a placeholder page at this time.
The ContactPrinter class manages the take-up motors directly but the DriveMotor class is broken out into its own abstraction because it is expected to stabilize and manage the speed of the drive motor more accurately with feedback from the drive motors encoder and also keeps track of the number of frames passed using the same encoder data.
The Lamp class, at this time, simply turns the contact printer lamp on or off using a method.
The initial release of the firmware simply starts the printer when a button is pressed, turns the lamp on after 24 frames pass and stops it when that same button is pressed.
Additional features, to be discussed in future work, can allow for the adjustment of several behaviors; changing the number of frames that pass before the lamp is struck, running only for a set number of frames, reducing the speed of the printer, etc. Additional features, to be discussed in future work, can allow for the adjustment of several behaviors; changing the number of frames that pass before the lamp is struck, running only for a set number of frames, reducing the speed of the printer, etc.
# Assembly
## Printing the Components
By volume, the majority of parts for this project can be printed using an FDM printer.
For the first prototypes the materials used were PLA and PETG.
This may seem obvious but just to be clear: dark colored plastics reflect less light.
Printing parts in all black plastic is an easy way to make sure that there is the lowest amount of potential light reflection occurring near the lamp and gate areas.
For the detailed parts, resin SLA printing is recommended.
This would be for the sprocketed drive roller and the gates.
Overall this is a very small amount of SLA printing needed and for people without access to resin printing technology these parts could be made by a print-on-demand service.
## Assembling the Frame
The frame is assembled with eight (8) `corner_foot` printed parts and attached with 32 M3 bolts and matching "T Slot Nuts" which are inserts that accept an M3 thread and rotate to grip the inside of the aluminum extrusion.
## Assembling the Electronics
# Operation
# Future Work # Future Work
## Interfaces ## Interfaces
@ -325,6 +346,7 @@ Physical interfaces are another area of future expansion and development.
Requests have been made, for example, to add a dial for controlling lamp brightness. Requests have been made, for example, to add a dial for controlling lamp brightness.
This was avoided in the prototyping phase because it would add parts to the bill of materials and create additional potential points of failure in the wiring. This was avoided in the prototyping phase because it would add parts to the bill of materials and create additional potential points of failure in the wiring.
## Sound ## Sound
## Color Lamp Control ## Color Lamp Control

Binary file not shown.

View File

@ -0,0 +1,3 @@
#!/bin/bash
cat README.md | grep '\!\[' | grep '\(\)' | grep -v '..\/img' | awk -F'[' '{print $2}' | awk -F']' '{print "- ", $1}'

View File

@ -47,6 +47,12 @@
urldate={2025-03-28} urldate={2025-03-28}
} }
@online{perforations,
title={Film perforations},
url={https://en.wikipedia.org/wiki/Film_perforations},
urldate={2025-04-18}
}
@online{spudic-device, @online{spudic-device,
author={Hrvoje Spudić}, author={Hrvoje Spudić},
title={DIY 16mm optical sound recorder, v2: The device.}, title={DIY 16mm optical sound recorder, v2: The device.},
@ -121,11 +127,17 @@
} }
@online{param-roller, @online{param-roller,
title={16mm Sprocketed Roller}, title={modules/sprocketed_roller: Parametric sprocketed roller for 16mm.},
url={https://git.sixteenmillimeter.com/modules/sprocketed_roller}, url={https://git.sixteenmillimeter.com/modules/sprocketed_roller},
urldate={2025-04-07} urldate={2025-04-07}
} }
@online{takeup,
title={modules/takeup: Modular takeup design for winding film using a magnetic coupling.},
url={https://git.sixteenmillimeter.com/modules/takeup},
urldate={2025-04-07}
}
@online{lift, @online{lift,
title={Liaison of Independent Filmmakers of Toronto}, title={Liaison of Independent Filmmakers of Toronto},
url={https://lift.ca/}, url={https://lift.ca/},