OpenAutoLab

Free and open-source automatic film development machine.

OpenAutoLab is an attempt at making a cheap and simple film developing machine. Inspired by Jobo Autolab, but cheaper, more repairable and open source. Agitation is done by periodically moving fully submerged film, not rotating the drum constantly, so it is also more flexible, as it supports black-and-white processes.

  • Parts contains information about all used electronic and mechanical components.
  • Build Instructions explains how to build the machine from scratch.
    • Main Board concentrates on main board schematics and PCB layouts.
    • Arduino Code contains build instructions for the source code of the controller of the machine.
  • Usage Instructions explains how to use the finished machine.
  • Web Updater allows firmware upgrades on the main board.

This is still work in progress, so some information may be missing or unclear. Feel free to ask questions via email mailto:openautolab@kauzerei.de

This site contains detailed instructions for building OpenAutoLab.

  • Start out by aquiring all parts of the machine.
  • If you already have all parts, refer to building.
  • If you want to 3d-print some or all of the parts yourself, refer to making parts.
  • If some parts like magnets, valves, hoses, pumps, vessels differ from the ones on the parts list in such a way, that you need changes in models for 3d-printing, refer to modifying parts.
  • If you want to modify the main board, for example make it one-sided for home production, or increase the number of valves for using more than 4 chemicals in one process, refer to the main_board chapter.

Parts to build OpenAutoLab

Components to buy

Main board

  • Arduino Nano
  • 100uH 1A coil
  • 100uF 16V capacitor
  • 1000uF 16V capacitor
  • 12mm buzzer
  • 6 diodes, for example 1N4004, but almost any diode will do
  • 10 screw terminal blocks, for example Phoenix MKDS 3/ 2-5.08 1x2
  • 3 6x6mm push switches
  • 2 12VDC relays, for example SRD-12VDC-SL-C or Finder 36.11.9.012
  • 2 darlington transistor arrays TD62064APG or analogous
  • SPDT ON-ON (or SPST) toggle switch, for example APEM 5026
  • 3x1 right-angle pin header for connecting servo
  • 2x1 pin header for connecting fresh water pimp switch
  • 4x1 socket header for connecting the scale
  • 4x1 socket header wire for connecting display

If the parts listed are unavailable, feel free to modify the PCB to fit the components you want to use instead, like relays, darlington arrays, etc.

Electromechanics

  • 6 normally-closed 12V valves. See the picture as a reference, those are cheap and good enough. Number of valves depends on what process you want to run. 1 valve for water, 1 valve for waste, plus 1 valve for each chemical. 6 is the maximum number supported by the board and it's nice to have all 6 connected even for simplified 3-bath processes: it's nice to have Fotoflo solution in the fourth vessel
  • ZC-A210 or similar 12V gear pump, capable of running in two directions at a speed of about 2l/min for prolonged times.
  • Weight cell and HX711 ADC for it.
  • MG90 servo
  • Brita filter for water
  • Any pump that can work for prolonged periods without overheating
  • Float switch

Other parts to buy

  • M8 threaded rod and nuts.
  • Flexible silicone hose. 6mm ID 9mm OD is recommended.
  • Silicon rubber rings. I suggest 8mm ID, same as thread diameter (mentioned later)
  • 5 T-pipes, one for each valve minus one.
  • Developing tank. AP developing tank is recommended
  • 4 Vessels for chemicals. I suggest STANDARDMÅTT from IKEA
  • 12 12x2 cylindrical neodymium magnets
  • Borrow or buy M8 tap, a tap holder and M8 die for cutting threads. I wouldn't even try to make 3d-printed water-tight hose connections, so tapping and threading should be done by hand.
  • 6 M8x8 plastic screws and 4mm drill as a more practical alternative to 3d-printed screws. More on that in lower_rail section.
  • Sous Vide and a water-tight container for heating the vessels with water.

Parts to 3d-print

STL files for all mentioned parts can be generated using the parts/generate_stls.sh script in the repository. They are also built automatically using GitHub Actions and uploaded as GitHub releases. Find the latest openautolab-stl.zip here.

Frame

The machine consists of an L-shaped frame, which holds two rails: the lower rail holds the vessels and tank, the upper rail holds pumps, valves and electronics. The frame 3d-printable parts are generated from frame.scad and can be customized to use different threaded rod diameter.

  • 16x x-mount. Each pair of parts holds two rods together, two rods are mounted on each of two sides of each of two rails, therefore 16 parts in total.
  • 4x t-mount. Each pair holds two rods at a right angle, the frame needs 2 such L-shaped structures to hold the rails.

Lower rail: vessel and tank interfaces and mounts

To connect the vessels and the developing tank to valves and the pump magnetic hose interfaces are used. To attach those interfaces to the lower rail magnetic holders are used. The interface for the tank has also a light-trap that prevents fogging the film through the hole, to which the hose is connected. Magnetic holder for the tank is mounted to the weight gauge for measuring amount of fluid in it. All of those parts are generated from lower_rail.scad and can be customized to fit magnets of different size and force.

  • 6x hollow_screw - to mount hose interface to vessels and tank through a hole.
  • 5x interface - the interfaces for the vessels
  • interface_light_trap - larger interface with light trap for the developing tank.
  • 6x main_magnet_cover - mounts magnet to the interface.
  • 6x hose_adapter and hose_sleeve to make hose fittings.
  • 5x magnetic_holder to attach vessels to the rail.
  • magnetic_holder_wg to attach developing tank to the weight gauge.
  • 6x holder_magnet_cover to mount magnet to the holder
  • 2x weight_gauge_mount to mount weight gauge to the rail

Upper rail: mounts for valves, pumps and electronic box

Agitation

To agitate the chemicals inside the developing tank servo-powered rod should be attached to the top of the tank. Parts compatible with AP developing tank are provided. Parts compatible with other tanks should be designed individually for each one.

It can be hard to cut good threads in small hard plastic parts, to simplify this process, there are tapping and threading helping tools in the optinoal folder.

Building OpenAutoLab

This is a detailed description of building OpenAutoLab. If you are using a plant container for heated water bath, note that you may have to move around some of the components a little, since different containers may have inner structures you need to avoid, see section about lower rail. If you have any pre-built modules like main board or one of the rails, just skip the section. If you are 3d-printing the parts yourself, please refer to making parts, it contains useful information about the print settings and post-processing. If you want to change the measurements of some parts, due to differently sized magnets, hoses, threaded rods or other components, refer to modifying parts, it describes how to modify parametric models of all 3d-printable parts to meet your needs.

Building frame

picture of the frame
By the end of this chapter you will have the skeleton of the machine with most components mounted on the frame.

Building upper rail: valves, pumps and mount for electronic box

picture of the upper rail
By the end of this section you will have non-water-tight top part of the machine. It is possible that you will have to change placement of some parts due to individual differences in size of components sourced from different manufacturers. The difference should not be drastic, so the mentioned measurements are a good reference.
picture with all mentioned parts

Parts list

NoPartQuantityFilename if 3d-printable
1Main pump1
2Two-part bracket for the main pump1upper_rail_main_pump_bracket.stl
3Fresh water pump1
4Two-part bracket for the fresh water pump1upper_rail_filter_pump_type1_bracket.stl or type2
5magnetic valves6
6two-part brackets for the valves6upper_rail_valve_bracket.stl
7two-part brackets for the electronic enclosure2upper_rail_enclosure_bracket.stl
8M4x15 screws18
9M4x20 screws3
10M4 nuts16
11M8 threaded rods of length 600mm2

When building the rail together, do not tighten the screws all the way, keep the assembly somewhat flexible, as you may want to move the brackets around before fixing them in place.
pump on bracket
Take the main pump and mount it on its bracket with two M4x15 screws.
pump on rail
Push the threaded rods through the mount and tighten the M4x20 screw fixing the position of the pump about 20mm away from the leftmost end of the rod. Note that connecting pipes should point upwards from the pump. It starts better when the gears inside of it are immersed into a small amount of remaining liquid, rather then when the gravity completely pulls the liquid out.
pump and one valve on rail
Take one of the valves and fix it about 2cm away from the pump leaving some space for the electrical connections. Use M4x15 screws and nuts. Mind the orientation at which the valves are mounted: they are better holding pressure in one direction than in the opposite one, which corresponds well to higher pressure generated by pump pushing liquids towards the valves in comparison to sucking through them. Which cannot create pressure difference greater than atmospheric.
pump and all valves on rail
Mount the rest of the valves onto the rail about 5mm apart from one another.
filter pump bracket screwed
Take the fresh water pump brackets and screw them together with two M4x20 screws leaving 3mm gap.
filter pump on the rail
Place the pump between the brackets, and mount them onto the rail, about 20mm away from the rightmost valve.
Now mount the brackets for electronic enclosure. You may have to push around the valves to make space for correct placement of the brackets.
enclosure brackets on rail and PCB for comparison
The distance between the brackets should be exactly the same as the distance between the mounting points of the PCB and therefore of the enclosure. About 12mm to the right from the first and 3mm to the right from the fourth valves is a good place for the brackets, this way the wires from each of the valves should reach their respective connectors on the PCB without problems.
When you are sure that all parts fit nicely, tighten all the screws.

Building lower rail: vessel and tank interfaces and mounts

assembled lower rail
By the end of this section you will have a water-tight bottom part of the machine. It is possible that you will have to change placement of some parts due to differences in placement of the structures inside the outer box. two lower rails in two containers comparison
The difference should not be drastic, the picture is a good reference anyway. If the force gauge was not originally waterproof, follow the instructions in making parts to make it waterproof first.
picture of all mentioned parts

Parts list

NoPartQuantityFilename if 3d-printable
1rod-mountable magnetic holders5lower_rail_magnetic_holder.stl
2bar-mountable magnetic holder1lower_rail_magnetic_holder_wg.stl
3force-gauge mounting brackets2lower_rail_weight_gauge_bracket.stl
4larger magnet covers with outer thread6lower_rail_magnetic_holder_cover.stl
5filter supports2lower_rail_filter_support.stl
6magnets6
7Waterproof force gauge1
8threaded rods M8 of length 600mm2
9M8 nuts24
10M6x25 screws2
11M4x12 screws2

one magnetic holder mounted on rail
Take two threaded rods and place one nut on each of them about 135mm from the end. Push them through one magnetic holder and fix with two nuts on the other side. four magnetic holders on rail
Place two more nuts about 65mm to the right from the previous two. Repeat nuts-holder-nuts-space pattern for a total of 4 holders.
last holder with filter supports
The rightmost holder is for the filter and should be further away due to filter size and requires two additional supports due to its weight and instability. So, after the fourth holder keep about 150mm of space, then place parts in following order: nuts, support, nuts, holder, nuts, support, nuts. The idea is that each part is fixed on both sides and is in the contact with 4 nuts in total.
mounted force gauge with arrow visible
Take the force gauge, and the pair of mounting brackets and fix the gauge on the left about 20mm from the very end of the rods by threading each screw through two brackets into the gauge. Mind the orientation of the gauge, the arrow must be on the free side and should point downwards, and the angle must be fine tuned later so that the tank is as far from touching any of the walls as possible.
holder mounted to force gauge
Mount the last holder to the other side of the gauge with two M5 screws.
magnets in holders
Place the magnets in the same orientation (all north pole up or all north pole down) in each of the six magnetic holders.
process of screwing cover
Screw a larger magnet cover with outer thread into each of the six magnetic holders.

Bringing two rails together

picture with all mentioned parts

Parts list

NoPartQuantityFilename if 3d-printable
1T-mounts4frame_t-mount.stl
2X-mounts16frame_x-mount.stl
3M8x210mm threaded rods2
4M8x110mm threaded rods2
5M8 nuts20

You need to have two pairs of X-mounts on each of four rods to hold one rail on one side. Each pair should be able to be pressed together by two nuts in order to tightly hold the threaded rod of the rail. four rods with x mounts and nuts
To achieve said structure, loosely put the parts in the following order on each of four rods: nut, two X-mounts (two round cutouts facing each other), two nuts some distance apart, two more X-mounts (also cutouts together), nut.
Take the upper rail and two longer (210mm long) rods.
upper rail on perpendicular rods
Place both ends of the rail (left and right) between pairs of X-mounts and tighten the nuts. Make sure that perpendicular rods are in front of the rail, not on the rear side.
Repeat the same procedure with the lower rail and shorter (110mm) rods. Note that exact placement of those perpendicular rods is not really important, the distances between them should be the same for the lower and the upper rail. The left one could be mounted to the right or to the left of the weight gauge bracket, depending on available space in the outer container, you may have to experiment.
t-mounts on lower part
Now use 4 T-mounts to fix the rails together: each of the two newly mounted perpendicular rods of the lower rail should get a nut, a pair of T-mounts and a second nut. upper half inserted into lower
The perpendicular rods of the upper rail are inserted between those pairs, which are then pressed against each other by tightening the nuts.

Building agitation module

agitation module near the tank
If you have some special developing tank and need to make parts that fit it, or 3d-printing them for the recommended AP developing tank, refer to modifying parts, it has description of how to make the right rod and cap. In this document it is supposed that you already have the parts that fit your tank perfectly.
servo mounted on cap
Mount the servo on tank cap in such a way, that its axis is in the center of the cap using the screws provided with the servo.
mounting the rod
Take a long screwdriver and fix the mixing rod to the servo with the M2.5 screw also provided with the servo.

Connecting hoses

assembled view of interface on vessel
blown view of interface assembly
The vessels and the developing tank are connected to the hoses with interfaces, which are fancy L-shaped tubes with inner M8 threads on each end and a magnet on the bottom. The top thread is for the hollow screw, that is put through the hole in the bottom of the vessel, a gasket ring and then tightened to the interface itself. The side thread is for the hose adapter. This part is designed to be interchangeable, because of how easily it could be accidentally broken. For the same reason it is designed with redundant sleeve that holds the hose and adds to the strength of the part. all mentioned parts

Parts list

NoPartQuantityFilename if 3d-printable
1Silicone hose 6mm ID, 9mm OD
2T-connectors for 6mm hose5
3hose sleeve6lower_rail_hose_sleeve.stlv
4hose adapter6lower_rail_hose_adapter.stl
5hollow screw6lower_rail_hollow_screw.stl
6silicone rings12
7straight vessel interfaces5lower_rail_interface.stl
8Tank interface with a light-trap1lower_rail_interface_light_trap.stl
9interface magnet cover6lower_rail_interface_cover.stl
10Filter attachments holder2upper_rail_filter_attachment.stl
11magnets6
12cable ties

Mounting hose adapters

Cut 6 hoses for vessels, filter and tank. Their lengths need to be enough to connect the upper rail and the lower rail and to allow comfortable handling of vessels, mounted to them. Recommended length is about 300mm. Now connect each hose to adapter as follows.
two sleeves on two hoses, with two adapters: one lying near, another already put on
First, the sleeve is put on the hose, the side with hexagonal cutout facing the end of the hose. Then the narrow side of the adapter is put over the hose.
putting sleeve over adapter
Then holding the hose with one hand, slide the sleeve with the second hand. The pulling force will stretch the hose so it becomes narrower and it is easier to fit the sleeve on top of it, however it should be done carefully not to pull the hose away from the assembled adapter. adapter with hose screwed into interface
Screw those adapters on the sides of the interfaces (not on top part which is opposite to the magnet). You can use TPFE tape, silicone or rubber ring (recommended) to make threaded connection water-tight. Keep in mind, that in case adapter is broken, you need to be able to unscrew the thread.

Preparing vessels and tank

six magnets in six covers
Put 6 magnets into the smaller magnetic covers in the same orientation you put them into magnetic holders.
![process of screwing cap on one interface, near lie assembled and disassembled]
Screw those caps onto interfaces.
drill in tank drill in filter
drill in vessel
The machine is designed with AP developing tank, Ikea 500mL shakers and Brita water filter in mind. If you are building the machine from scratch you need to drill 8mm holes in each of those items: 17mm offset from center for the tank and dead center for the others.
Then for each one of those repeat the following mounting process.
process of screwing vessel onto interface
Put the hollow screw through the hole from the inner side, such that the thread is sticking outside. Put a silicone gasket on the thread. Screw the interface on, magnetic side down. Do not over-tight, especially if you have a 3d-printed screw. Tighten just that the interface is not unscrewing itself when forces are applied by the dangling hose during normal operation.

Finishing the liquid connections

pieces hose on valves and t-pieces, assembly progress
Cut 5 pieces of hose, each of which is just long enough to connect a T-piece with a valve and put T-pieces on top of the five leftmost valves. Note that the picture is taken from the back side of the machine.
last valve connected
Cut one more slightly longer hose to connect the last valve to the side of the T-piece of the neighbouring one. From now on measure the length of the hose to be cut judging from the distance of components that it connects. Note that the picture is taken from the back side of the machine.
connecting t-pieces together, assembly progress
Cut four more short hoses and connect 5 T-pieces together. Note that the picture is taken from the back side of the machine.
connecting main pump to valves
Connect the main pump to the only T-piece left.
connect main pump to tank
Connect the other side of the pump to the tank.
connecting hoses to vessels, assembly progress
Connect the four hoses attached to two vessels, water filter to valves 1 through 6, the sixth valve is for dirty water output, it needs to be slightly longer, because it leads outside of the machine to your waste water container.
two external hoses visible
Cut the hose for clean water input about the same size as the waste water hose, it should reach the source of clean water outside the machine. Connect it to the input of the filter pump. connect filter input hose
Cut about 300mm long hose for the filter input. Connect it to the output of the filter pump and fix its other side to the input of the filter.
securing hoses with ties, assembly progress
Secure each end of each hose with a cable ties.
level sensor on filter
Put the level sensor on the filter input so the filter never overflows.

Mounting and connecting electronics

If you want to make the PCB yourself, or just to understand its work better better, refer to main_board subdirectory of this repository. It contains schematics and board layout in KiCAD format, along with some insights about its production. In this document it is supposed that you already have a PCB with all components soldered to it.

Mounting PCB

Parts list

NoPartQuantityFilename if 3d-printable
1PCB1
220x04 LCD display with i2c interface1
3Front half of the electronic enclosure1enclosure_front.stl
4Back half of the electronic enclosure1enclosure_back.stl
5plastic buttons3enclosure_buttons.stl
6M4x20 screws4
7M4x6 screws4
8M4 nuts4

pcb screwed to back of enclosure
Place the board inside the back half of the box. Put 4 screws through the holes in the board and in the box.
putting enclosure onto brackets
Put those screws sticking from the rear of the box through the brackets on the upper rail.
mounting enclosure onto brackets
Tighten it all with 4 nuts from the back.

Connecting power electronics

Before valves can be connected to the main board, the wires need to be prepared.
crimping wires
The optimal way is crimping the ferrules. Covering ends of wires with solder using soldering iron is not optimal, since the solder slowly deforms under pressure with time and connection may become loose, but better than nothing. Screwing the wires as is is strongly not recommended.
connecting wires to pump
If the pumps have already pre-soldered wires, you can use them or replace if the length is not enough. A nice way is to solder nothing to the pumps and use the contact terminals instead.
connecting valves to board
Put each pair of wires of each valve into the screw terminals and tighten them with screws. Polarity does not matter in case of valves.
connecting power
Connect the rightmost terminal to the power supply, here the polarity is important, make sure that the negative contact is on the left, and the positive is on the right.
connect magnetic sensor,filter pump
To the left of the power terminal is magnetic sensor for the filter and further to the left is the filter pump, both cave no incorrect polarity, unless you are using a different from the recommended bidirectional pump.
connecting main pump to the board
Fourth terminal from the right is the main pump. Polarity is important here, but your pump may theoretically have different polarity. In case it does, don't worry, just do the test run in the end and check that the pump moves the water in the right direction and change the polarity of this pump. If the hoses are connected as depicted, connect the wires as depicted, negative on the left, positive on the right. If your pump runs in the wrong direction, either reverse wires polarity or reverse hoses connections.

Signal-level electronics and front panel

connected force gauge and agitation module
Connect the force gauge, to 4-pin connector and the agitation module to a 3-pin connector as depicted, the polarity is very important.
mounting screen
Place the top cover of the electronic box upside down and mount the screen mounting filter pump switch
Mount the pump switch.
putting buttons in place
Insert three plastic buttons into their places. If you do not invert the box completely they do not fall out, but if you struggle with them, you can hold the box screen-down and invert the whole frame to put the box together.
open enclosure, connected front wires
Attach the screen and switch connectors to the board and put the box together.
fix box halves with screws
Fix the box halves together with four side-mounted M4x6 screws.

Making parts

This is a detailed description of making parts for the OpenAutoLab yourself. It contains useful information about 3d-printing and post-processing of the printed parts as well as making force-gauge water-tight for submerging.

Most of the plastic parts can be 3d-printed with any filament, such as ABS, PLA or PETG. All of those filaments absorb water to some degree, so have in mind, that they may fail at some moment.

  • ABS seems to be fine after 2 years of testing in real conditions, which means some residue water and chemicals was always inside the machine.
  • PLA seems fine after 6 months of use, however I had bad experience of using parts printed with PLA in wet conditions in another project.
  • PETG is to be tested.

This part will be updated as the time goes.

As an owner of a cheap 3d-printer, that is incapable of high print speeds, I often recommend to increase nozzle size and layer height for some parts as a way of printing them faster. If you have only one nozzle or don't need to decrease the time of printing, you can of course print everything with one.

If you are not sure if the dimensions of some components like valves and pumps are the same with the ones that were used to design the parts and you don't feel like editing the models, you may print all of the mounting parts with 100% infill and then cut, drill and file the parts if necessary, I did that a lot while prototyping.

Upper rail

All 3d-printable parts of the upper rail do not need high precision and are not heavily loaded. I recommend 0.8mm nozzle, 0.5mm layer height, wall thickness of 2 layers and 20% infill. When using thinner nozzle, make sure wall thickness is 1.5mm or greater so the thin parts, such as valve bracket, are printed solid.

Filter attachment

You may want to heat up the clip a little with a lighter and bend it to the shape of the filter. I found it easier rather than modifying the model and printing until it fits ideally without modifications. Hold it about 15cm above the flame for about 10 seconds until you notice it becomes soft (you can notice that moment visually as the part becomes more glossy when PLA softens)

Lower rail

There are three types of parts in the lower rail, some are trickier to print than the others.

Bulky parts

  • filter support
  • weight gauge bracket

Those are similar to parts from upper rail: 0.8mm nozzle, 0.5mm layer height, (or 0.4mm nozzle and 0.3mm layer height) wall count 2 and 20% infill.

parts with 3d-printed thread

  • interface, both straight and with light trap
  • interface cover
  • magnetic holder, both with rod and weight gauge mounting points
  • magnetic holder cover

If you have calibrated layer expansion of your printer, you may want to turn it off for this print. It's better in this case to have guaranteed wall thickness and change expansion correction in the model itself. Default values are high enough that the threads move good even with large nozzles and layer heights; thread pitch is so large that the threads can be tightened even if the print expansion is small and there is a lot of tolerance between parts. I suggest 0.8mm nozzle and 0.2mm layer. The threads do not need supports, the holder with rectangular mount does: so let the supports be generated for angles larger than inclination of thread walls, threshold of 70° will do.

The parts should be printed with the wall, top and bottom thickness of a couple millimeters to allow thread cutting in interfaces and keeping the part water-tight, and to make sure that printed threads are solid. Or just print with 100% infill to be sure.

[TODO tapping thread in interface]

Two threads need to be tapped in each opening of the interfaces. If it is hard to keep the tap aligned with the hole direction, you can print some helping tools that will guide the tap. There are 4 of them, for the tank interface and for vessel interfaces, for each of two threads on them. If you print with PLA, avoid cutting threads too fast, it is really easy to overheat the plastic with the friction alone and ruin the thread, one half-turn every 2 seconds is about the optimal speed.

[TODO sanded and unsanded surface of interface]

Depending on printing surface you may need to file, sand and polish the faces where the inner threads are. They need to have a good contact with silicone ring to avoid the leaks.

Fine parts

  • hollow screw
  • hose adapter
  • hose sleeve

Fine parts need to be printed with 0.4mm nozzle and 0.1mm layer height.

The trickiest part is the hollow screw, as it is relatively highly loaded for its thickness and preferable print orientation. To make sure it's strong enough you may try several strategies:

  • print it sideways (supports needed and it may be tricky to cut thread on them afterwards)
  • to keep layers thin, speed low and temperature high, without cooling (make sure that layers are squished together and have enough time and temperature to fuse)
  • remelt in powder salt (tricky to fine tune the temperature and time, but may be worth it)

However I recommend buying M8 plastic screws, drilling 4mm holes in them and shortening their heads, that may be way easier. Modified nylon screws is what I use personally and what you can see in those build instructions.

[TODO cutting outer thread]

For the hollow screw and adapter: after printing, drill the inner hole to 4mm and thread the cylindrical part with an M8 die. If you struggle with threading there are two helping tools for holding a die and keeping the screw straight.

[TODO filing the adapter with round file]

File the end of the thread of the adapter where the rubber ring goes with a round file, that decreases the chances of water leaks. As for the hose sleeve, there are some thin walls on top, usually they are not a problem if you print several at once, but if you are having troubles printing only one, set some minimal layer time and use print cooling for this part.

Frame: T-mounts and X-mounts

They are heavily loaded, but their dimensions do not need to be precise. You can print the parts with 0.8mm nozzle, 0.5mm layer height and 100% infill.

Optional tools: Tapping tool, threading tool, wrench

Those are not really necessary, especially if you already have experience and tooling for tapping and threading, but I made them because during developing and prototyping I had to do a lot of threading and tapping of those particular parts, and I also may start making OpenAutoLab kits for sale, which means even more threading and tapping. After printing drill the holes in tapping tools so the tap can move along but without significant slack. For the die-holding tool attach a long m4 screw which will rest inside a die, it helps guiding the work so that the thread is coaxial with the inner tube.

Enclosure

Front and back

0.8mm nozzle, 0.5mm layer height, 100% infill. You may want to use M3 thread inserts for the screen mount or screw directly. You may have to file the rectangular window to fit the screen inside.

Buttons

They are easier printed in bulk with print cooling on max. That way you don't need to worry that each layer has enough time to cool before the next layer is printed. Print with smaller layer height about 0.1mm to increase layer bonding and the strength of the parts will be sufficient.

Agitation

0.8mm nozzle and 100% infill is recommended, but other diameters will do fine.

Cap

You may have to experiment and tweak the parameters of the model depending on the filament and the printer. In case you really don't want to touch any of the parametric models, sometimes you can manage small changes in part size just with scaling and small changes in wall thickness just with layer expansion in your slicer. Otherwise, refer to modifying parts to learn using parametric model for generating the perfect STL.

The cap should hold on to the tank by itself and not rotate when the torque of at least 0.25 N·m is applied, but not too tight so you can put it on and off without struggling and overloading the force gauge, to which the tank is mounted. Since the flaps of this part are loaded in the worst way possible you may have to change the parameters anyway to balance between their strength and resilience. Print with 0.1 layer thickness to reduce probability of breaking it between layers.

Agitating rod

It is really important to get the size of the servo mounting hole correct. The spline on the servo shaft needs to cut grooves inside the rod during first mounting and hold there tightly during operations. If the hole is too small, you can't put the shaft at all, if it is too big, the rod will rotate freely. In order to find an optimal hole size you may want to print the servo gauge with several hole sizes to find the optimum. Print the gauge with exactly same settings as you plan to use on the rod itself. If you really don't want to touch any of the parametric models, you may play with layer expansion setting in your slicer or heat up the shaft a little in case the hole is too small, so it melts into the rod easier, or use some glue if the hole is too big. Otherwise, read the modifying parts, there is a detailed description of using parametric model to generate the perfect STL for your part.

Speeding up the print can make this part really ugly. If you don't care about the looks, go for it, the part is not visible during developing, only during film loading. Otherwise it is recommended to use 0.2mm layer height and half of maximum printing speed for nice walls. The part is loaded with a tiny 0.25 N·m servo, which rotates the film reel, so the strength is not an issue.

Waterproofing the force gauge

If you intend to use the machine with heated water bath, the force gauge should be water-tight. There is an easy way of waterproofing the force gauge using silicone sealant and silicone tubing.

[TODO sealing the force gauge]

Put the four wires of the force gauge into thin silicone hose (ID about 2mm), apply some amount of sealant directly to the wires where they meet the gauge, about 30mm is enough, so that the wires adhere to the hose when you slide it all the way towards the force gauge. Apply sealant on top of the tube, closing any exposed parts of the gauge completely and everything together. Let it dry for a day after you are done.

Modifying Parts

All 3d-printable parts of the machine are designed in OpenSCAD and the original .scad files are included in the repository. That means that you can modify the parts using OpenSCAD or FreeCAD with OpenSCAD extension.

You do not need to be familiar with any CAD software to fine tune the parts. Most of the dimensions you may wish to change such as inner and outer diameters of the hoses or height of the frame etc, can be edited using graphic interface. The shape of each part is calculated from the parameters that have default value, but can be changed to fit your needs.

To make a 3d-printable .stl file you need to open .openscad file that contains the model, make "Parameters" section visible if it is hidden, choose the part you need from the drop-down list and change the parameters you want.

Depending on OpenSCAD version and your computer, the process of generating the part from parameters may take some time. Usually after you change some parameter, preview is automatically generated. Preview is a way to estimate if the changes that you make are the changes you want, it is faster, than generating the printable part but can contain some artifacts like missing or extra faces. Preview generation is also triggered by pressing F5.

To generate the actual part, press F6. It is usually slower than preview, but generates nice parts without artifacts. To speed up this process, use the latest nightly-build of OpenSCAD and turn on Manifold library usage, it is so much faster, that you can ignore preview and always render the part completely after each change.

To save the rendered part to an .stl file press F7.

Upper rail

  • rod diameter outer diameter of the threaded rod.
  • rods distance distance between rods of the upper rail.

Brackets

  • part width width of the holders. Twice the size of the hole is a good start.
  • part thickness thickness of the brackets. About twice as thick as your comfortable wall thickness for not loaded parts.
  • air gap a gap between two halves of the mount. Gives a room for tightening them together on a rail and for printing two halves as one part without having them stuck together.
  • valve offset used to place the valves at certain distance from the plane of upper rail, for example to free some space for a decorative panel that covers parts of the machine.
  • pump offset how far mounting points of the pump are lifted above the surface of the brackets
  • mount hole diameter of the screws that hold the valves.
  • mount hole distance distance between screws that hold the valve.
  • pcb angle angle in degrees at which electronic enclosure is inclined relative to vertical
  • pcb holes distance vertical distance between pcb mounting points
  • extra_room how far is mounting hole of the electronic enclosure from

Filter attachment

  • filter wall size of air gap of the holding clip.
  • offset v vertical offset, distance from mounting plane of the floating switch to the top of the filter.
  • offset h horizontal offset, distance from the axis of the floating switch to the inner filter wall.
  • hole diameter of the mounting diameter of the floating switch.

Advanced upper rail modification

There are brackets for mounting two types of pumps for filling the filter. If you have some special pump you can edit pump_shape function and add your own 2d shape.

Lower rail

  • cut view just a visualization tool, only half of the part is rendered, so you can see the inner structure inside of OpenSCAD interface.
  • rod diameter diameter of the threaded rod
  • override dbr force specific distance between rods (DBR) for the lower rail. Optimal DBR is calculated to minimize height of magnetic holder, however depending on magnet size and machine depth it may be impossible to fit the rail of optimal size inside the frame.
  • distance between rods if the previous parameter is set to true, sets the DBR for the lower rail. Make sure it is smaller, than the value returned by the frame.scad.
  • air gap affects several parts. It's distance between the walls of parts that are meant to go one inside another with some slack. Provides extra space for magnets, makes placing the vessels and the tank in their holders easier and allows helping tools for threading and tapping not to be stuck on the parts they help holding.

Interface

  • light trap if the parameter is set, the hose interface is generated with extra bends inside, so the light can not pass through. Check for the developing tank interface, uncheck for all others.
  • main part holes diameter of inner tube of the interface. Set this to inner diameter of the thread you want to cut in this part.
  • seal length length of the threaded part.
  • hor wall minimal thickness of a horizontal wall between inner tube and bottom in tank interface. Does not affect other vessel interfaces.
  • offset used only for the tank interface, makes effect only if light trap is checked. Since developing tanks usually have some axis in the center it is impossible to mount the interface directly there. Offset is the distance between the center of the tank and where you drill the hole. If set correctly, the tank will be supported with its magnetic holder directly in the middle, although the interfacing hole is offset.

Printed thread and magnet

Those are the parameters of the 3d-printed threads used for mounting magnets. They do not affect the finer hose-mounting threads, which you need to cut with a tap and a die.

It is recommended to turn off layer expansion correction in the slicer and fine tune the tolerances here in the model itself. The reason is to have guaranteed minimal wall thickness. If the tolerance in the model is too small and you make it larger while slicing, the wall between the valley of the inner thread and the opposite wall of the part can become too thin for printing. To better understand the thickness of walls and tolerances between all of the parts, render the part called "testfit" with the "cut view" option on, it will provide a visual clue.

  • thread pitch is the distance between two neighboring coils of the thread. It affects also how much horizontal space the thread takes, 3mm seems to be a good compromise between ease of print and material usage.
  • thread expend horizontal distance between inner wall of outer thread and outer wall of inner thread in models, that guarantee their fit after printing. It should be at least twice the horizontal expansion of the print and smaller than thread pitch. Half of the thread pitch seems to be safely far from both limits.
  • magnet diameter diameter of the magnet, no extra tolerance needed.
  • magnet height height of the magnet, no extra tolerance needed.
  • wall between magnets thickness of a horizontal magnet-separating wall. Keep in mind that there are two of those walls between magnets. The parameter affects maximal attraction force between magnets. This force should be just strong enough to hold an empty vessel when it is partially submerged into temperature stabilizing water bath and to keep it from floating. However the walls need to be strong enough to hold the magnets, so avoid weak magnets. 12x2mm neodymium magnets with 0.8mm wall seem to hold 500ml vessels and are two layers thick even when printing with 0.4mm layer height.
  • wall minimal thickness of walls. Affects distance from thread valley to the nearest opposite wall, thickness of weight gauge mount on magnetic holder, position of rod mounting holes.

Hose adapter and hollow screw

  • screw shape shape of the head. "Allen" option has only hexagonally-shaped inner hole for allen key and cylindrical head. "Hexagonal" and "Square" make polygon-shaped head in addition to hexagonally-shaped inner hole for allen key.
  • adapter shape changes the shape of hose adapter and sleeve. Square takes more space which increases the height of interfaces, but is easier to grab. Round one is the most compact.
  • hose inner diameter and hose outer diameter are self-explanatory.
  • insert diameter and screw diameter are the diameters of hose adapter and hollow screw. Make it the outer diameter of the thread.
  • adapter inner diameter and screw inner diameter are the diameters of inner channels inside hose adapter and hollow screw.

Magnetic holder

  • rod mount true for mounting points for threaded rods, false for mounting onto weight gauge. The tank does not need rail mounts since it is mounted on a weight gauge.
  • nut width space for tightening the holder on the rail, largest width of the nut (from edge to edge).

Weight gauge

  • wg hole size diameter of the thread on the loaded side.
  • wg hole distance center distance between threaded holes on the loaded side.
  • wg ms hole size diameter of the thread on the clamped side.
  • wg ms hole distance center distance between threaded holes on the clamped side.
  • wg height and wg width are the dimensions of the force gauge.

Helper tools

  • onside checked generates tapping tool for the side thread. Unchecked generates the tool for the top thread.
  • leader length length of cylindrical part of the tap.
  • tap length length of the threaded part of the tap.
  • tap diameter diameter of a hole to fit the cutting part of the tap.
  • leader diameter diameter of the cylindrical part of the tap.
  • holding depth depth of the part inpression into the helping tool.
  • die diameter outer diameter of threading die.
  • die height height (thickness) of the die.
  • handle length length of the bar that is used to turn the tool.
  • handle thickness how thick is the turning bar.
  • rounded handle the bar is round in cross section instead of square. Nicer to hold, harder to print.

Frame

OpenAutoLab is designed in such a way that it could be partially submerged into container with water, which is held at a particular temperature. If you want to use cheap off-the-shelf container, rectangular plant container is a good option.

  • rod diameter diameter of threaded rod used to build the frame. M8 seems reasonable, but you can try thinner or thicker rods.
  • nut width is a largest width (from edge to edge) of the nut for the chosen rod diameter from with some tolerance.
  • nut height is a height of the nut for the chosen rod diameter with some tolerance.
  • air gap is here mostly for hole shrinkage compensation.
  • tightening gap width of cut between halves of mounts, the more the tighter the halves can be pressed together.

Enclosure

Careful with last three parameters, it is supposed, that mounting rectangle and viewing window share a center. If one is offset, make the slot bigger.

  • tolerance tolerances for the board itself, for halves of the panel, for the buttons.
  • pcb width with of the main board
  • pcb height height of the main board
  • pcb offset distance from the top of the board (component side) to the front side of the front panel. There should be enough clearance for both the components soldered on the board and for external ones: display and switch.
  • pcb thickness thickness of the board material itself
  • solder thickness distance from the bottom surface of the board to the furthest point on that side. Space occupied by soldered connections.
  • pcb mount holes diameter of mounting points of the PCB
  • walls wall thickness.
  • buttons outer diameter of the buttons as seen from the outside.
  • buttons inner outer diameter of inner structure holding those buttons. Twice the inner diameter is a good start.
  • buttons height the height of the switches themselves. Distance between the component side of the board and the tip of the switch.
  • buttons height height of the actual switch on the surface of the board
  • switches diameter mounting diameter of the filter pump switch.
  • screen pos coordinates of the center of the screen.
  • screen mount vertical and horizontal distance between the mounting holes of the screen.
  • screen mount holes diameter of the screws that hold the screen.
  • screen rect the size of the protruding part of the screen, for which a rectangular slot should be cut on the front panel.

Advanced enclosure modification

Most of the parameters for this part are the positions of different components on the main board. If you modified the board layout, measure X and Y coordinates of the components (and holes) from the upper-left corner of the board and write them inside the code. Unfortunately such arrays of values cannot be set with GUI. However if you understand how to modify the board in such a way it does not fit the box anymore, you'll manage to modify the array also :).

  • pcb_holes_pos array with coordinates of centers of the drilled holes on the PCB used for mounting it.
  • buttons_pos array with coordinates of the centers of buttons.
  • connectors_top array with coordinates of the centers of screw terminals. This model is made for connectors along the upper side of the board.
  • connectors_left array with coordinates of the necessary holes on the left side of the enclosure
  • connectors_right array with coordinates of the necessary holes on the right side of the enclosure
  • switches_pos array with coordinates of the centers of switches. There's only one switch currently, but there may be more in future.

Agitation

Cap

  • outer diameter is an outer diameter of cylindrical part of the tank where the lid is normally mounted. No correction for part thickness is required.
  • outer depth how deep the lid is.
  • extra lip width height of elevation inside the cap that provides extra tension which increases the friction between the tank and the cap. Does not need to be high, it's here mostly to make sure, that the contact point remains at the rim of the cap when the flaps are bent, not at the rim of the tank.
  • extra lip height how high does the elevation go from the rim of the cap.
  • parts thickness wall thickness of the part. Affects both strength and stiffness. If you want your part to be really strong, print it with thicker walls, you can compensate increased stiffness with other parameters.
  • cutouts amount of cuts that allow the cap to stretch.
  • cut width width of each cut. Doesn't need to be wide, just large enough to guarantee separation on printing.
  • cut depth how far from the rim the cutouts go. When smaller, than outer depth the cut affects only the side of the cap. If the stiffness of the part needs to be further decreased, larger cut depth will make it to the flat part also.

Rod

  • servo offset how far is the mounting plane of the servo from the rod.
  • servo mount optimal diameter of the hole for servo axis. This parameter is better found experimentally by printing a gauge with the same printer settings that you plan to use for the rod itself. The diameter needs to be large enough so the axis can be forced in, but small enough so the axis cuts splines inside of it, keeping it from free rotation.
  • rod diameter outer diameter of an agitating rod.
  • distance to coupling distance from the plane going through the upper rim of the tank to the coupling inside the spiral. For the tanks that use protrusions inside the tube that holds spirals (or just a wall dividing this tube in half at some depth) to engage with the rod to agitate through rotation. Distance from this protrusion or wall to the cap.
  • coupling length length of the slot, which moves the spirals. Can be over-sized without real consequences.
  • coupling width width of the slot. Should be larger than protrusion/wall it engages with.

Mainboard PCB

Schematics and PCB layouts are stored in KiCAD 6.0 format.

  • openautolab_2layer.kicad_pcb is automatically routed double-layered version of the board with plated through holes aimed at having it produced by professionals.

  • openautolab.kicad_pcb is hand-routed single-layer version, optimized for DIY production at home. Jumper wires on signal lines could be avoided by routing some tracks between pads, but it requires better precision than toner transfer technique can provide. Two jumper wires on power lines however are a necessity.

Arduino Code Dependencies

Arduino IDE

The Arduino Legacy IDE is the easiest way to program the board. The official documenation contains guides on how to install the Arduino IDE v1.

Libraries

Install the libraries using the Arduino IDE library manager. Take a look at the official documentation for hints on how to install libraries.

You need the following libraries:

General Information

This document is a user manual for an already built OpenAutoLab. If you want to build the machine, refer to the Build Instructions chapter.

If you are new to film development, there is some basic information in this manual, but please note that it is not the complete knowledge base. Please read the documentation on films and chemicals before using them.

OpenAutoLab is a machine designed to simplify the film developing process. It pumps necessary chemicals into developing tank, agitates the film properly for the correct amount of time, pumps the chemicals back, washes the film and does all of that without the help of the user. The user has to load the film into the tank, pour the chemicals into their vessels, connect to the source of clean water and drain for waste water, start the program, wait for the end of the program and dry the developed film. The machine can be used in tempertaure-controlled water bath to achieve good results in color processing or without one if temperature precision is not critical.

Disclaimer

I do not take any responsibility for any damage done by mishandling chemicals.

For most processes rubber gloves suffice to keep you safe, but please refer to documents provided with each chemical you use, some are more toxic than others. This document explains the details of using the machine itself, without much attention towards the handling of chemicals. Research online if you are unsure, use your brain and be safe.

Machine components and operation overview

Machine parts

Developing tank is a special light-tight container, that allows the liquids to be pumped into and from it, while keeping the film in complete darkness. The film should be loaded into the tank also in darkness and is not allowed to be exposed to the light until the end of the development. The main pump moves liquid from the vessel into the tank through the valve, which is defined by the development process and is opened by the machine hardware electronically, and then pumps it back after defined amount of time.

The amount of the pumped liquid is controlled by the force gauge. The correct speed of the chemical reaction and its uniformity is achieved by agitation, i.e. rotation of film spiral inside of the tank with servo motor connected to agitating rod.

To avoid unwanted chemical reactions with minerals dissolved in tap water it is recommended to use distilled water instead, but in most cases tap water just passed through household filter don't leave significant impact on the picture quality, so the machine is build with such filter in mind. The water level on intake of the filter is kept high with the help of secondary pump powered through a float switch.

What does impact the final result are the water droplets left on film before drying: they can leave visible stains, which are residue of minerals that were dissolved in water. One possible solution to this is applying wetting agent on final wash, ideally dissolved in distilled water. Application of this wetting agent can be turned on in settings.

For some processes the chemicals anf film need to be stabilized at certain temperature. The machine was desidned with this in mind and its lower part is water-tight, so the user can submerge the vessels and the tank into water and keep it at desired temperature. For that a slow-cooker can be used (aka Sous Vide) or specialized film processing heater.

Praparation for film processing

Before processing any important film, especially if the machine was not in use for a long time, or after transportation, run an idle process without film, possibly with water instead of developing chemistry. For that I recommend entering service menu, filling all the vessels with clean water and running a cleaning cycle to make sure that all the valves are working and that everything is water-tight.

First of all you need to put the film in complete darkness onto the spiral inside of the developing tank. You can use the light-tight changing bag or the dark room. It needs to be completely dark, no red light is aceptable on this stage, even the tiniest amount of light getting into the room through the perimeter of the closed door can fog the film. If you can see the light, than the film can also "see" it.

Before doing it for real with the film you value, exercise putting the film onto the spiral first in daylight (use the already developed or ruined film strip), then exercise more with closed eyes, and then try the darkroom or changing bag, examining your work afterwards: the film loops should not touch each other and tank walls. Read the instructions of your developing tank or watch some videos on the internet on the topic if you need more information on loading.

Fill the vessels with chemicals. Study film development online a little if you are new. There are lots of different chemicals which are used for film developing, they should be stored and prepared differently, some of them are toxic, read the decumentation on your chemicals for exact instructions. The recommendation that I can give for beginners who did not buy any chemicals yet, is to start with black-and-white process in rodinal (aka r09) and fixing with literally any fixer in liquid form you can find (adofix, fomafix). Liquid concentrates are easy to measure and to mix with water, you just need a syringe and a couple of measuring cups.

Connect the intake of filter pump to water source: submerging the tube into 5l canister should do for developing one film. Turn on the clean water pump and make sure that some amount of water is filtered through: the machine is not going to wait if it needs prewash as the first step.

If you are developing color film or if you want to process black-and-white in higher than room temperature, use heated water bath. Submerge the machine into water-tight container filled with water and put temperature stabilized heater (slow cooker aka Sous Vide works perfectly for that purpose) set to wanted temperature into it.

Put the waste water output into another canister or put it directly into the sink. Make sure it does not run away during the pumping. After all preparation is done you can start the machine.

Initial screen

Agit: 30s/30s/5s
Wash:0x10m+3x5m+WA
B&W: 2    C41: 4
B&W   C41   Settings

On startup the machine shows overview of basic settings and gives the user a choice between developing processes and entering settings. First line shows the mode of agitation: duration of first agitation (directly after pumping each liquid into the tank), agitation period (time between consequent agitations) and agitation duration (length of each of those consequent agitations).

Second line shows the mode of film rinsing: number and duration of pre-washes, number of washes after development and if extra wash with wetting agent should be performed (if yes, letters WA appear on screen). Multiple pre-washes are necessary when developing cinema film with remjet: this remjet layer is first softened with hot stong basic solution and then can be washed away with water. Multiple rinses after development assures no fixer is left in film for archival storage. Wetting agent if needed should be poured into fourth vessel of the machine for both two- and three-stage processes.

Third line displays film count developed in current chemicals. It is important to keep track of it because of depletion: processing time for c41 is calculated from it and becomes longer as chemicals become weaker. For black and white this time recalculation is not implemented, it is expected that the user gives enters expected processing time before each development depending on film stock, developer type and dilution as well as depletion. The user can use one-shot developer like rodinal in which case there is no film count and the developer is pumped directly into waste water after use. More on that in settings.

The fourth line on this machine always depicts what pressing each of the buttons does. In this case you can start black-and-white or c41 developing process or enter global settings.

Black and white process

B&W developing
Film count: 2

Reset    +    Next >

If black-and-white process is chosen, and the developer is not one-shot (more on that in settings) you first land on film count page. Here you can reset the counter by pressing the first button or manually increment it by one with the second button. The incrementation is normally done automatically, so the manual option is added only if you have pressed reset by mistake and want to enter the correct value. The third button brings you to the next screen.

Developing time:
6:00

-      +      Next >

On the next screen you need to enter the development duration. The first button decraeses the time and the second one increases. Increments are not linear and increase as the value gets larger: small values have 5-seond steps, then 30 seconds, 5 minutes, 10 minutes, 30 minutes, 1 hour and 2 hours up to a maximal time of 42 hours. This is an obvious overkill for any standard processing, but can be useful in case you want to experimant with alternative processes (for example if using table salt as a fixer, some sources mention 24 hours as the correct fixing time)

Fixing time:
6:00

-      +      Next >

On the next screen you need to enter the duration of fixing. It works exactly like pre previous screen: the first button decraeses the time and the second one increases with the same exponential-like increment values. The third button starts the processing.

B&W develop    1/6
Developer   pump in

123.45       0:07

During pumping the chemicals into or from the tank the first line on the screen shows the name of the process, current substage index and the total number of substages (each rinse is counted as separate substage, so the user knows approximately how many processing stages are left). The second line shows the name of the substage and if the pump is working towards the tank or away from it. The last line shows the current value on the weight gauge and the total time passed from the processing start. Weight gauge shows negative numbers when the chemicals are pumped put (the weight of the tank decreases), and positive when the chemicals are pumped in. Nothing really changes if the tank is submerged into water of the heating bath: what is shown is the weight difference from the start, which buoyant force does not change. Important is not to change the water bath level during pumping and not to disturb the tank directly or by creating waves, because that can influence the measurements.

B&W develop    1/6
Developer   process
0:23 / 6:00
301.52       0:23

During the processing and agitation the screen shows the same information, but also additionally the time elapsed from the start of the substage and the duration of this substage on the third line. Not to be confuded with this substage timer is the process timer on the last line: it shows the time passed since the start of the film processing, not from the start of current stage in this multistaged process.

B&W develop    6/6
        Done
5:00 / 5:00
-312.64       28:30

When the processing is finished, the word "Done" appears on the second line of the screen and a sound signal brings users attention. You may now open the tank and get the film out for drying. Pressing any button will bring you to the initial screen.

C41 process

C41 developing
Film count: 2

Reset    +    Next >

If C41 process is chosen you land on film count page. Here you can reset the counter by pressing the first button or manually increment it by one with the second button. The incrementation is normally done automatically, so the manual option is added only if you have pressed reset by mistake and want to enter the correct value. The film count value is important as the chemicals become weaker with each development and the processing time is increased automatically. The third button starts the development.

B&W develop    1/10
Developer   process
0:23 / 3:15
301.52       0:23

The information on the screen as well as basic processing principles are the same as in black-and-white mode. The difference is only in number of chemicals involved and therefore number of substages.

Settings

Settings        1/10
Prewash duration
0:30
-      +      Next >

If on the main screen you chose to enter settings, the first page defines the duration of prewash. Prewash is important for bringing the film and the development tank to correct temperature before processing and for washing away antihalation layer. This duration is set up exactly the same way and to same values as processing durations. First and second buttons decrement and increment the value and the third one brings to the next screen.

Settings        2/10
Prewashes number:
1
-      +      Next >

Number of prewashing cycles at the beginning of processing. You can omit the step by setting the number to zero or you can use as many cycles as you wish up to 255.

Settings        3/10
Final washes duration:
5:00
-      +      Next >

Final wash is for getting rid of fixer traces trom the film, which is important for archival storage. This duration is set up exactly the same way and to same values as processing and prewash durations. First and second buttons decrement and increment the value and the third one brings to the next screen.

Settings        4/10
Final washes number:
3
-      +      Next >

Number of prewashing cycles in the end of processing. You set the number to as many cycles as you wish up to 255. Read the datasheet of your film to find the optimal number and duration of washes.

Settings        5/10
Apply wetting agent?
                 Yes
No     Yes    Next >

Wetting agent helps to reduce staining from non-distilled water. Third line shows the current value, first button sets to "No", second to "Yes" and the third updates the value and brings to the next page. If set to "Yes" than after the last rinse in water the machine will wash the film once more in the contents of the fourth vessel. As a wetting agent you may use commercial products like FotoFlo as well as DIY recipies such as droplet of soap in distilled water, glass cleaner for dishwashers and pure isopropil alcohol. Research online if you want to know more.

Settings        6/10
Initial agitation:
0:30
-      +      Next >

Duration of the first agitation performed directly after pumping the chemical into developing tank. This duration is set up exactly the same way and to same values as processing and wash durations. To set this value correctly as well as the next two, refer to film and developer datasheets.

Settings        7/10
Agitations period:
1:00
-      +      Next >

Time between two consequent agitations, to be more precice between the start of one agitation and the start of the next one.

Settings        8/10
Agitation duration:
0:05
-      +      Next >

For how long the servomotor performs each agitation (except for the first one which is usually longer).

Settings        9/10
Tank capacity:
300g
-      +      Next >

How much liquid should be pumped into the developing tank. Depends on the tank itself (some are wider than others) and type of film used (35mm film needs lower liquid level than 60mm medium format film). This value is also used for weight gauge calibration and for washing cycles (more on that topic in service menu.

Settings        10/10
Discard B&W dev?
                 Yes
No     Yes    Next >

Is the black-and-white developer one-shot, i.e. should it be discarded directly after use? If set to "Yes", the film counter does not show up and the used developer is pumped to waste after respective processing stage, not into its original vessel. Third line shows the current value, first button sets to "No", second to "Yes" and the third updates the value and brings to the next page.

Service menu

Some settings and functions are hidden in service menu, which can be accessed by pressing all 3 buttons simultaneously on startup. The motivation of keeping those separate is that they can mess up internal calibration or chemicals that are in the machine's vessels if the wrong button is pressed. If during startup all 3 buttons are pressed, you will see "Service menu" on the screen. Release the buttons immediately and you will see weight gauge calibration page. To calibrate the weight gauge you need to set it to zero by pressing the first button, then pour amount of liquid written on screen into developing tank (this amount can be changed in regular settings) and press the second button. If everything is done right the screen should show correct weight on the third line. To store new calibration values press the third button.

Next pages contain debug and test procedures. At the moment of release there is a program that fills all the vessels (and if needed also the tank) with water and a program that empties the vessels (if needed), fills them up with water and emties again. Use the first one and turn off the machine for some time to test that all interfaces are water tight. Use the second one as a cleaning cycle. I run the first program to fill the vessels and tank, add some basic cleaning solution in each of them and run the second program to rinse. Those programs are work in progress.

Web Flashing Utility

Use this page to upgrade the Firmware on the OpenAutoLab Main Board to the latest release or dev build from the OpenAutoLab GitHub Repo.

Download from GitHub:




Upload to Hardware:


Status Log:

    

How-To

  1. In the Download box, keep the pre-selected Releases channel.

  2. Press the Fetch Versions button.

  3. If in doubt, use the pre-selected latest Version that appeared.

  4. Press the Download Firmware button. This will start a download in your browser.

  5. In the Upload box, press the Choose File button.

  6. Select the file you just downloaded in the previous steps.

  7. Press the Upload Firmware button. This will start the flashing process.

  8. Wait until you either see a success message or an error indication in the status log.

Troubleshooting

Make sure you use a WebSerial compatible browser like Chromium, Chrome or Edge.

Connect the Arduino Nano on the OpenAutoLab mainboard to your PC using a USB cable.

This should work on Linux, Mac OS X and Windows >= 10.

The Releases downloads should always work. For the development Builds downloads you need to be logged-in to GitHub and they can not be too far in the past.