8mm Film Scanner, final version with Canon 1000D

Some of you may have followed the saga of the 8mm scanner I built, using an Arduino and a Canon IXUS95 with 3D printed parts. It worked fine, and produced results that were entirely satisfactory, to a point. I first used a 10X macro lens intended for mobile phones to get a bigger image from the system, and with that I was grabbing images that had a 1400x 1000 pixel usable image out of the frame, which is 4.3 mm wide and 3.5 mm tall.

Then I got a 20X macro lens, yielding even better image size. The new image size was a whopping 3648 x 2436 pixels, and for a while I thought the project was done. But the macro lens that I attached to the IXUS95 with a 3D printed adapter ring had a definite downside in blurring corners and a slight barrel distortion, so I was about to go back to the previous 10X lens.

Image size comparison between EOS and last version of IXUS95

But then I was given a chance to buy a used Canon EOS 1000D from my sons, who went for more serious hardware and it was a legacy piece for them. So I got the camera with its basic 18-55 mm FD lens, and a second, larger zoom lens too. It’s great, as now I have a good enough SLR camera for all other purposes too, besides it being recycled into the 8mm scanner.

What the camera change meant

All I needed was a macro reverse ring. This little gadget allows you to reverse the lens on the bayonet, and then you can shoot amazing macro images with it. The only drawback is that of course the lens loses all automatic features such as access to the aperture and autofocus. In my application, such finesses are not needed of course.

With the macro ring, you have to do some tricks to get any meaning ful depth of focus. If you merely pull off the lens, and attach it reversed, you don’t have any access to the aperture, and at F2.8, you are looking at maybe a millimetre of depth in the focus. It’s not a good idea to go that low, so here’s what you do. Select aperture setting in the camera, turn F to 11 or even 16, then press the Check Depth of Focus button at the same time you disconnect the lens from the bayonet. Now you have the aperture set, and it will stay until you reattach the lens the right way round.

I also found that instead of using Auto White Balance, I could get better results using a halogen lamp with exactly 4,000 K color temperature. Such a lamp was found at the local lamp shop, and then I just adjusted the lamp power with the buck down regulator. As you have seen in the previous post regarding power management, the system takes in 14.4 V at 2A, and it is then delivered via four buck down regulators. The camera now wants 7.8V instead of 3.3V, the new lamp gets 12V, and the servos 6V. Arduino is happy when it has 5V on the power input.

A sample of the final EOS output. No barrel distortion, even brightness,
and even sharpness across the image.

3D printing issues

Then I needed to rethink the camera cradle. In the pocket cam version, I had the X and Z movements in the cradle itself, as seen in the previous posts. Y movement is handled at the film gate. The new camera dictated a new 3D printed bed for the camera, and some guiding structures on the table to make sure the camera stays stable. The film gate didn’t need any rework.

The new camera bed. Blue is the cradle, green is the guide part bolted to the frame.

The new lamp had to be given a new frame. I recycled the old lamp stand, and just printed a U-shaped holder for it. It gets rather hot, but nowhere near the PLA melting point of 200 degrees C. I also recycled the previous lamp holder from the stand, and pasted a piece of office paper on it.

Lamp holder (blue), and light diffuser (black)

This is because the resolution of the lens is so big, and the power of the lamp so high, that without something between the lamp and the film, the film grain starts to show really bad. Therefore the little piece of paper just in front of the film is necessary to even out the light and lose the grain.

Arduino issues and programming

The introduction of the EOS actually made life easier for me. The IXUS95 doesn’t have a remote jack, so I had to install the CHDK so as to gain access to remote triggering. The film port switch tells the Arduino that the frame is in place, and then Arduino sends 5V to the USB port of the camera, which has been programmed to wait for it and then grab an image.

In the new camera, there is a 2.5mm stereo jack on the left side. So, all I did was cut the wires going from the switch, and solder on a jack. I didn’t change the Arduino code – it’s not worth getting inside the program to cut something out of it, since the action side is now different and any voltage isn’t getting passed due to the different wiring. When the switch now closes, it merely causes the camera to shoot.

There is also a USB connector on the camera. This means I can stop the servos from rotating and pause the scanning, turn off the camera, plug in the cable to my computer, and get to the images on my computer. It’s easy to check that the pictures are being scanned properly. And when I want to continue, I just unplug the USB from the computer, turn on the camera again, press SET to raise the mirror, and turn on the servos, at which point the scanning resumes.

So, in essence, this is the final version of the project. Here’s a little video of it running. As always, if you have any comments or questions, just post them here and I will be happy to work with you.

It’s running!


  1. Are you going to upload the modifications to thingiverse? I’m trying to figure out how to build something similar and hoping to work from an existing design, though maybe a bit simpler and hacky

Leave a Reply

Your email address will not be published. Required fields are marked *


This site uses Akismet to reduce spam. Learn how your comment data is processed.