Welcome back to this guide on building your own JOBO-style automatic film processor. If you recall, in part 1 we build the water tank and assembled the film processor roller assembly; and installed the sous vide cooker, which acts as our temperature control. In this part we will be designing and installing the motor/drive system for the roller assembly.
There’s a lot to cover, so lets dive in.


Design considerations

There were two primary design concerns: the roller hardware controller and the software to operate the roller itself.
I took into consideration that many photographers do not have any electronics or hardware / software experience. Therefore I wanted to choose a hardware/software solution that would be very easy for a novice to implement. In short: no soldering, no wiring, no sourcing of individual electronics parts to assemble them.
With that in mind, I selected the Lego Mindstorms NXT kit. Before I jump into to the build, allow me to first break down my design considerations:

Roller assembly hardware/software components

In order to rotate the film development tank automatically we need three things: a micro controller, a motor driver and an electric motor.
A micro controller is just a computer like your personal computer, but smaller and less powerful, and usually only performs a set of simple instructions. Also just like your personal computer, it has to be told what to do and how to do it. This is done by writing a program and putting that program inside the memory of the micro controller.
This process is called programming and once complete, the program is then (downloaded) into the memory of the micro controller using a personal computer and a USB cable, along with some special software.
A motor driver is an electronics circuit board that is constructed to control an electric motor’s speed and direction.

Operation of the film processor

A micro controller is the perfect solution for our film processor, we need to consider the physical actions involved during film development. Here are the most basic actions/steps we want our film processor to perform for us:

  1. Start or stop the rotation of the development tank (by pushing a button)
  2. Change the direction of the rotation of the development tank every 5 seconds..
  3. Give us a visual indication that the processing has started, has been paused, or has ended.

Later, we could modify our program to time the film tank rotation, stopping when each phase of film development is completed. We could even have an audio tone played to notify us that we are done with that particular phase of film development but for now, let’s leave that and go into a bit more detail on how the program we want will function.
When the controller is turned on and the program has loaded, a message is presented to the user that the program is waiting for instructions. A “Waiting…” message is displayed on the screen.
The user has three buttons that can be pressed. The program is waiting for, you the user, to select one of three buttons:

  • Start rotation
  • Pause rotation
  • End program

When the user presses the “Start Rotation” button the film development tank will start to rotate and change directions every 5 seconds.
When the user presses the “Pause Rotation” button the film development tank will stop rotation and wait for further instructions.
When the user presses the “End program” button, the film processing program will end.

Choosing a solution

With these basic requirements outlined, I chose a hardware platform that requires no assembly and only requires simple plug and play operation: The Lego Mindstorms NXT.
I developed the software for this platform using simple programming techniques purposely and have made it available for anyone to use. If you want to modify the program later, you can do so easily.
For the more astute hobbyist I will make some recommendations that you can use to take the project to a higher level, if so desired. If you want to re-write your program to use event-driven or multi-tasking operations, the platform that I chose supports these advanced techniques.
With considerations out of the way, let’s start the build


I selected the Lego Mindstorms NXT programmable robotics kit to act as my micro controller. This kit includes all of the required functionality, neatly arranged into modular components.
The Lego Mindstorms NXT kit was originally designed for grade school and high school kids as an educational tool to introduce them to various engineering and science principles. It’s a perfect accessible solution for us to start with.

Parts List

We will be using two main components of the Lego Mindstorms NXT kit. The components we will be using are the following:

  • The Main NXT processor or computer
  • A single NXT motor
  • NXT modular cable
  • NXT motor axle spline
  • Assorted Lego bricks for mounting the NXT controller and motor to the water box…
  • Or stop off at your local hardware store and custom make your own mounting hardware.

You can purchase individual Lego parts from the online Lego store or eBay.
The beauty of the NXT processor is that it has the microcontroller, a motor driver, a display and input buttons all built into a single component.
All you have to do is plug one end of the modular phone-like cable into the motor and the other end of the cable into the NXT computer. That is all that is needed to complete the hardware portion of your roller assembly.
See below images of the NXT controller, motor and connecting cable:


Step 1.1: NXT Controller AC conversion (optional)

There is one more step we have to do. The NXT controller is normally battery powered. You have the choice to use the NXT controller as it is with batteries, or upgrading the NXT controller to use an AC power adapter.
This step does require some soldering and is totally optional.
I purchased a 9 volt, 1 ampere AC power adapter. I soldered the positive and negative leads of the AC power adapter to the connectors in the battery compartment of the NXT controller as oer the images below.

Now that we have the hardware, let’s jump into assembly.

Step 2: Modifying the roller assembly

In part one of this project we built the roller assembly. In order to attach the NXT motor to the roller assembly we have to modify one of the threaded rods so that the NXT motor can be attached to it.

Step 2.2: Drilling the Threaded Rod for the Drive Spline

This is the trickiest part or the whole build process. But I did it and so you can to.
I will be honest with you, I have a lathe, so I cheated a bit. I drilled out the center of the threaded rod for the drive spine on the lathe but I then took a spare threaded rod and drilled by hand to make sure it could be done.

Practice on the left over threaded rod you have after cutting your threaded rod to length.
The hardest part is center punching the threaded rod exactly on the center line.
Here are the tools you will need:

You will need the following tools (from the top of the image)

  • 3/16” drill bit, make sure it it sharp
  • Center Punch (Hardware store)
  • Nail with a sharp point, You could use this instead of the center punch
  • Center drill, you could use a smaller drill bit instead
  • Felt-tipped pen
  • Small fine division ruler (1/16 or smaller)

The Process
Take your threaded rod and using a file, or grinder or belt sander, sand or file the end of one end of the threaded rod flat as you can.
Now take a fine division ruler and try to eyeball the center spot on the end of the threaded rod. The best way is to use a fine felt tipped pen. Measure and lightly mark one dot on the threaded rod. Then rotate the threaded rod 90 degrees and mark again. You should be pretty close.
Now the critical point. Take either the nail or center punch and lightly tap the spot with a hammer. I mean really lightly. If you do not get the center marked properly, you will have to file off the center mark and try again. Once you get the exact center marked and lightly punched, the you can hit the center punch much harder to set the center hole.
The reason you do this is so the drill will align itself to that punched hole. If you center punch hole is off center, no matter how much you try the drill will still follow the center punch. This is why you have to get it right before you drill.
Now once you have center punched the hole you can put either the center drill or small drill bit into your hand drill and drill a small hole for the drill bit to sit in:

Drill very slowly and use some oil to cool the drill bit. If you drill to hard you will break the drill bit and you will not be able to drill that out, as drill bits and center drills are hardened. You will have to hack saw off the section and try again. Ask me how I know.
Now that you have drilled a slightly larger hole, then you can use the 3/16” drill bit and drill the hole deeper.
Your total depth does not have to be deeper than 1/2” You will be using epoxy to cement the plastic spline into the end of the threaded rod.
When done drilling, take a file and file away the burrs that were left behind by the drilling process. Now clean up the drilled hole with some acetone and some paper towels. Roll up a little section of paper towel and wipe the inside of the hole, repeat until clean.

Epoxy the spline into the Threaded Rod
Mix up some epoxy and coat the inside of the hole and dab some epoxy onto 1/2” of the plastic spline. Insert the spline into the threaded rod hole and wipe up any loose epoxy.

Step 2.3: Mount the motor and controller

If you have not done so already, re-insert the modified threaded rod to attach the motor drive spline in the water tank.
You have two choices available to mount the drive motor and controller to the water box:

  • Option 1: Purchase some Lego parts, as I did and fit the motor to the water box.
  • Option 2: Custom make some brackets from parts found at your local hardware store.

I chose option one. Please refer to the below image for an example of how I mounted the motor.
Visit this Lego web page and order these parts from their or your preferred local source:

  • Friction pin: Element ID: 4121715  x14 pieces
  • 7m beam: Element ID: 4495931 x7 pieces
  • Cross axle 5M: Element ID: 4211639  x1 piece
  • 6x 1” wood screws from your local hardware store

Here are some images of the mounting using Lego parts:
Mounting the motor. Below image shows the motor mounted flush to the side of the water box. The cross axle (spline) is shown running through the motor axle mount.

Motor mounted
Motor mounted

Let us break down the motor mounting into separate images to see how the Lego parts are used to mount it.
First, the right side motor mount: disassembled. Notice that two Lego 7M beams are joined together to move the motor mount away from the water box to give the thicker motor section clearance for a flush mounting.
Notice the also black friction pins are used to join the 7M beams together and to mount the beams to the actual motor.
Right side motor mount, disassembled
Right side motor mount, disassembled

Next is an image of the left side of the motor mount. This image shows a better view of the two 7M beams together. The lower 7M beam is used to allow a flush mount for the side of the motor.
Also notice the 1” wood screws that secure the 7M beams to the water box.
Left side motor mount, disassembled
Left side motor mount, disassembled

Another view of the motor mounted.
Motor (mounted)
Motor (mounted)

The images below show the controller mounted to the water box.
The back of the controller has holes that can be used to mount the Lego friction pins. These friction pins can be inserted into the 7M beam sections on each side of the controller. Again notice the 1” wood screws are used to mount the 7M beams to the water box.


Step 3: Programming your controller

Do not freak out on this step. I have done all of the work for you and I will walk you through the process of programming your NXT controller.
All you need is a USB A to B cable, a Windows computer (or a Mac with a Windows emulation tool), and a free trial of some software that we will discuss shortly.
Grab your NXT controller and your USB cable and go sit down at your computer.

USB A to B cable
USB A to B cable

In this step you will need to power on your NXT controller, using either batteries or an AC adapter as described in Step 1.1 above.

Step 3.1: Download and install the software

We are going to download a free trial of a software package called RobotC from the Carnegie Mellon Robotics Academy for Microsoft Windows.
If you want to run this software on a Mac you will need to use Parallels, VM Ware Fusion, Boot Camp, Virtual Box or another virtualization/emulation tool.
In addition: do not purchase this software, unless you plan on programming more microcontrollers.
Here are the steps you will need to follow to install the software:

  1. Navigate to the following web site: www.robotc.net/download/nxt.
  2. Select the Download version 3.65 (includes free trial).
  3. Once the software has downloaded, navigate to your downloads folder using Windows File Explorer.
  4. Locate the following program, “RobotCforMINDSTORMS_365.exe”.
    Install software
  5. Double-click on this program and wait for the install program to execute.
  6. In response to the “Do you want to allow this app to make changes to your device?” Select “Yes”.
  7. When the installation program loads, answer the following questions:
  8. In response to the dialog that reads “Welcome to the InstallShield Wizard for RobotC for MINDSTORMS”, select the Next button.Start installer
  9. On the “END USER SOFTWARE LICENSE” dialog, select the “I accept the terms in the license agreement” radio button and select the Next button.Accept EULA
  10. On the “Destination Folder” dialog, accept the default location by selecting the Next button.Destination folder
  11. On the “Ready to Install the Program” dialog select the Install button.Begin installation
  12. After the install is completed, select the Finish button.Finish installation


Step 3.2 Load RobotC and upload the firmware

In order to use RobotC with the Lego Mindstorms NXT we have to upload new firmware to the controller. Think of firmware as a simplified version of your computer’s operating system.
RobotC is not only a programming language but also an operating system for the NXT controller.
So the first step we have to do is upload the RobotC firmware to the NXT controller:

  1. Find the RobotC Icon on your Windows desktop.
  2. Double click this icon to start the program.Load RobotC
  3. Now plug in your NXT controller or install the batteries. If you do not hear the NXT melody, press the Orange start button.NXT Controller
  4. Plug in the USB A-to-B cable into your USB port on your computer and the USB port on the NXT ControllerNXT Modular Cable
  5. On the RobotC program select the Robot menu option and select the Download Firmware > Standard File (NXT_0968.rfw) menu option.Download Firmware
  6. An NXT Brick Download dialog appears. Note, the dialog should show the NXT Address of your NXT Controller. If you do not see this dialog, try turning on the NXT controller again and re-attaching the USB cable to your computer and NXT controller again.
  7. Re-select the Download Firmware > Standard File (NXT_0968.rfw) menu option again.
  8. Refer to the below Image, highlighted in red.
  9. If you see the NXT Brick in the above dialog, select the F/W Download button.

The RobotC program will now download the firmware to your NXT controller. This step should take about 1 minute. If the firmware was correctly downloaded you should see the message above (highlighted in red).
Congratulations, your NXT controller has been configured to execute RobotC programs.
One more simple step is required to setup your NXT controller to control your roller base.

Step 3.3: Downloading the film processor program to the NXT Controller

I have already created the program that controls the film processor roller base. You have to download this program from the website I uploaded it to: GitHub.
Here’s what we need to do:

  1. Navigate to the following site
  2. Select the Clone or Download link and select the Download Zip web link.
  3. A Save As dialog will open, select the Save button. The FilmProcessor-master.zip file will be down loaded to your Downloads folder.
  4. Open the Windows File Explorer and navigate to the This PC > Downloads folder. Locate the FilmProcessor-master.zip file and double click on this file.
  5. A Zip file program will open and allow you to extract the FilmProcessor.c file from the .Zip file. Select the Extract Icon on the Zip File program.
  6. The Zip program will create a folder in your downloads folder called FilmProcessor-master.zip
  7. Open the Windows File Explorer program and look into the Downloads folder. You should see the following folder:
  8. You are now ready to open the FilmProcessor.c file in the RobotC program.
  9. Select the RobotC program and select the File > Open and Compile menu option:
  10. You screen should look like the following:
  11. Once you select the Open and Compile another file dialog should open, Select the download folder and the FilmProcessor-master folder and highlight the FilmProcessor.c file.
  12. Now select the Open button.
  13. Your RobotC screen should look like the following:

The FilmProcessor.c program has been loaded into the RobotC program and has been compiled, (checked for errors and converted into a format that the NXT can understand)
You should see the following message, that is highlighted in red. This indicates that there were no errors in the program and that the program is ready to download to the NXT controller.

Installing the file

Now make sure that you NXT controller is on, more than likely the NXT controller has shut itself off (battery conservation). Press the Orange button on the NXT controller, You should hear the NXT melody.
Now Select the Robot > Compile and Download menu option

Once you select the Robot > Compile and Download option RobotC will download the FilmProcessor program to the NXT controller, this should only take a few seconds.
If you see the following screen, your NXT was successfully programmed. If you see any other dialog, you must repeat the same operations again.
Congratulations your NXT controller is ready for operation!

Step 4.0: Controller Operation

If you removed your controller from the water box for programming, please re-attach the NXT controller and the motor to the drive spline. We are going to test the NXT operation.
Make sure that you plug the phone-style cord from the motor to the NXT controller into port A. Port A is the left most port when looking at the display side of the NXT controller.

If the NXT controller has shut down, press the orange key once. Again you should hear the NXT melody play.
Let us look at the NXT display:
The first screen you will see is the My Files menu, If the My Files menu is not selected press either the left arrow or right arrow until the square box is on the My Files menu.
Press the orange button once to select My Files.
(If you make a mistake, you can always select the dark gray button to move to the previous menu selection.)

Now, using the arrow keys select the Software Files menu selection and press the orange button once.

Now, using the Arrow keys, select the Film Processor menu selection and press the orange button once.

To Start the Film Processor program, select the Run menu option and press the orange button once.

Once the program is running, the NXT controller is waiting for one of three key presses:

  • Left arrow to start the rotation.
  • Right arrow to pause the rotation.
  • Three presses on the dark gray key to abort the program.

If you press the Left Arrow key the roller base will start rolling, switching direction every 5 seconds.

The rolling base will continue rotating until you press a different button. The Right Arrow will pause the rolling base.

Pressing the Dark Gray key three times will abort the program and return you to the first menu selection.


Step 5.0: Final testing

Fill the water tank with water. You want to establish a water level high enough, so that the buoyancy of the development tank will hold the tank in contact with the rollers, but not too high that undo friction will slow down or over stress the drive motor.
Do some searching out on the web, when doing rotary film processing, many film developers indicate a reduced volume of film developer. Check the specifications of the developers that you normally like to use.
For example, here is a specification for the Jobo processor.

Fill your development tank with the recommended volume of water. Place the development tank under the roller wheels and run some tests.
Vary the water level until you get the correct water level. Mark this level with a waterproof felt-tipped pen.

Other Controller Alternatives

As I mentioned earlier in this article, the reason I choose the Lego Mindstorms NXT controller and motor is because the NXT controller:

  • is self-contained
  • has built-in buttons
  • a built-in display
  • and a motor driver.

The NXT Controller has an easy easy plug and play interface to the external motor, by using a phone style plug.
From a hardware point of view it is the easiest way for someone with little electronics knowledge to build the micro-controller platform.
The only draw back is the NXT solution is a bit more expensive than other alternatives. You can save a bit of money purchasing individual electronics components and building your own controller.
To do this, you have to have quite a bit more knowledge of electronics, and the programming requirements will be more complex as there are many different hardware interfaces.
I feel that the more expensive NXT solution will save you more money in the long run, if you do not have the needed knowledge.
But If you feel comfortable working with programing languages, electronics and hardware/software interfaces then by all means you can build and program your own system.
Check the below image. Here are a variety of micro-controllers, a motor driver, a motor and a display board. You would also need three push buttons and a threaded rod-to-motor coupler.
There is even a way to interface a micro controller to a NXT motor. So you could, if you wanted use the NXT motor with a third party controller.

Here is an example of a stepper motor with a coupler:

Since there are so many hardware/software possibilities, I cannot provide any coding examples for the alternative processor platforms.
I will leave this up to you.

Lessons learned and conclusion

Build a smaller water box! After using the film processor a number of times I realized that it takes a lot of water.  Being concerned about ecology issues I would reduce the overall size of the water box. At the size built, it takes over 5 gallons to fill the water box in order to have enough water height to properly rotate the development tank.
After setting up the proper width of the wheels in the roller assembly, make sure you tighten the lock nuts to keep the wheels from moving on the threaded rods. When testing I only tightened the lock nuts finger tight, the wheels started to move which caused the motor to bind and I fried the drive motor.  Save yourself the trouble and tighten the wheel lock nut and the lock nuts against the water box sides.
The Sous Vide controller does circulate the water in the water box, but upon testing I found that there was not enough circulation to evenly heat the water.  So I added a small inexpensive aquarium pump opposite the the location of the Sous Vide controller. This increased the overall circulation and created a more even water temperature.
Chemical bottle racks or hangers. I found that if you are using various sized chemical bottles, that the smaller sized bottle will float and become unstable and want to tip over.  I plan on placing either a raised rack or some kind of support that the smaller chemical bottles can sit on so they will not tip over when placed in the water box.
When running the film processor I have noticed that the drive motor does strain a bit on larger sized tanks or when you use larger chemical volumes. I have not had issues as of yet but you may want to consider placing a drive motor on the idler roller.  This would require a minor code change.  Let me know if you want to do this and I will update the existing code and create a second program that will drive two motors.
Overall this was a fun project to build. I now use the film processor to process all of my color film and use the film processor for black and white film by using the roller assembly without filling the water box.
~ Joe Pitz

Write for EMULSIVE




  1. i think by the time you do all that programming etc. that my unidrum is a better simpler solution. it does depend on the temperture you are trying to maintain. if it’s color at 104F that’s a bit tougher than bw at 70F. but to use a unidrum film tank, which is insulated, at 104F for example, you start at maybe 106F and run the drum on a roller and measure the temp drop every 30 seconds… when you get to the end time, you just find the average temp you need to be at … pretty simple once you try it. most color processes are pretty short, and only the developer steps are critical anyway

  2. Great project. I’m hoping to build one of these myself using your instructions. I’m curious about the results you had with the film as it was finished. Was it on par with what you get from the labs or what you had to do by hand in the past?

Leave a comment