Sunday, December 11, 2011
Canon 1000D/XS/Kiss F DSLR cooling modification - images and overview
Note: This blog is provided for interest only. I suggest using an old or second hand camera that is dispensable. I purchased a very cheap used camera with faulty firmware for parts back up - just in case.
Acknowledgements: This project would not be possible without the generous assistance of the Arduino forum members, a very helpful Jaycar employee (I bought the more substantial components from Jaycar) and encouragement from my fellow Ice In Space members.
Note: If you would like further details about this mod, please use the contact form.
Note: The Arduino shield used for this modification is a hacked motor shield designed for another project. While designing and etching a shield might be tidier way of doing things, other options such as a DIY shield will do - a bread board at a scrape. This is the next step in the project!!!
Why a cooling mod?
For those not familiar with the why’s and wherefore’s of astrophotography/image processing, specialised CCD cameras used for astrophotography (scientific purposes) are cooled, whereas, DSLR CMOS/CCD sensors are not. DSLR sensors get hot during extended operation, that is, in excess of 10 seconds as a rule. Thermal (dark) current, as it is called, is the heat signature of the sensor and a significant source of noise. Cooling the sensor reduces thermal current and noise in the image.
Reality check
This modification has limitations. For instance, if you live in a coastal area and humidity is high, cooling will be limited by dew point. If you live inland and the air is usually dry, then it is possible to cool to lower temperatures. When designing a cooling mod’, the extent of cooling is a consideration. For example, if the camera will not travel inland, condensation on the front face of the low pass filter will be a significant limitation. Without a means of dew control, cooling is restricted by dew point temperature. Condensation management of the low pass filter is a work in progress.
The Idea
Cooling DSLR cameras is not new - several modifications may be found on the web. Cold boxes and cold fingers use thermo electric cooling (TEC) or Peltier modules, as they are called. A design philosophy is that changes should be reversible, with the capacity to return the camera to its original condition - as much as possible. If you use a cold box, modification of the camera is not necessary. Cold fingers however, require special treatment and this is a cold finger mod.
Importantly, design should achieve, quick cooling, a flexible temperature range, accurate temperature control and low power consumption. Some cold finger and cooling box designs impose unnecessary cooling demands on the TEC. This design minimizes the mass to be cooled, and therefore energy demands, using pulse width modulation (PWM) to control and maintain temperature as accurately as possible - using an Arduino microprocessor board. The native 490hz PWM provided by the Arduino board is acceptable for driving the MOSFET gate.
A constant temperature is maintained by comparing ambient air temperature with cold finger temperature and scheduling pulse width modulation (PWM) to meet the energy requirements. To date, the system has run continuously for several hours at 7C without a hitch.
The Camera
Note: Upgrade to the latest firmware. This is particularly applicable to the 1000D/XS/KissF models. Check that firmware is better than 1.0.5. Preferably, the latest, at the time of writing, 1.0.7.
Canon 1000D/XS/Kiss F DSLR and variants. It is assumed that the camera has been optically modified by replacement of the manufacturers IR filter with an astronomical filter - Astrodon Inside filter (purchased from Hap Griffin), Hutech - or no filter at all, to increase the transmission of Hydrogen alpha wavelengths (the red colour in nebulas). See Gary Honis’ modification instructions/ There seems little point to the cooling mod’ otherwise.
The 1000D/XS/Kiss F, conveniently, provides a pathway for the cold finger, fitting between the back of the sensor and the flat insulated underside of the sensor electronics board, protruding between the back and rear body covers. The video, remote and USB receptacle cover can not be fitted with the cold finger in place.
Bending the cold finger accurately, to fit between the video/remote PCB and camera chassis, is probably the most difficult part of cold finger fabrication - 1.2mm copper plate is easy to bend, but work hardens - a butane torch might help - a heavy duty vice, some thick steel or aluminium plate and a mallet/hammer to form sharp bends is essential.
Note: The camera sensor assembly was stowed in an airtight bag with several dessicant packs (silica gel) after completing the filter modification. Sealing the sensor assembly with silicon was completed a few days later. As a result, and despite cooling below dew point, no moisture is evident between the layers of glass filters. All moisture appears on the face of the low pass filter which is exposed to the air (This can be viewed using the manual cleaning function, which flips the mirror up and opens the shutter to allow cleaning of the filter face. The sensor is not powered in this condition).
The Electronics
This was perhaps the most difficult part of the project, aside from writing the software, which improved with experience.
Electromagnetic interference has been a major design issue. Wiring associated with the cold finger, temperature sensor and the TEC should be shielded with braid. I pulled apart a length of ~5mm coaxial cable, removing the inner plastic coated wire and the outer insulation leaving the braid. Wires were threaded through the braid with tape at either end to prevent fraying. The braid must be connected to ground.
The Peltier (TEC) device is 12v 8a sealed with a QMax of 68.5C. Made in China. Tellurex apparently make a superior product and their FAQ is mandatory reading before tackling a similar project.
Temperature is controlled by switching the Peltier device through a Logic Level N-Channel MOSFET LowRds(on), using Pulse Width Modulation supplied by an Arduino micro processor board. The negative wire of the Peltier is connected to the Drain of the MOSFET. The Gate of the MOSFET is connected to the digital pin of the Arduino board, and the MOSFET Source is connected to GND. For any required temperature (max 30 below ambient) PWM is scheduled by comparing ambient temperature with that of the cold finger.
Rds(on) should be very low to avoid heating of the MOSFET. This one - NXP PSMN1R6-30PL is 0.0014ohms while have a very high power handling capacity. No heat sink required, but it has one anyway, just in case!
A 100R 1/4 watt series resistor is connected between the FET Gate and the Arduino digital pin for current limiting.
To ensure that the MOSFET Gate switches correctly a 750R pull down resistor is connected from the Gate to GND. 1K will probably suffice.
Power to the +ve side of the Peltier is supplied by a 12v 12.5a switched mode power supply, which is very noisy (EMI) and requires damping, as would be the case for any noisy supply. Perhaps a linear supply of a similar rating will do, but they are more expensive.
The temperature probes are TMP36 linear sensors and do not require calibration. Google ladyada for details. The sensors are located, one on the cold finger (finger temperature) close to the camera sensor and one on the PCB mounted on the Arduino board (ambient temperature) - 3.3aRef voltage is used - ladyada for details.
Arduino software calculates and schedules the required PWM signal to the MOSFET Gate, as a function of ambient temperature and desired Set Point temperature, which is set by push button.
There are 2 push buttons. Pressing both simultaneously resets the Set Point temperature ambient temperature (set point == ambient). Pressing Button 1 reduces set point temperature by 2C with each push. Pressing Button 2 reduces Set Point temperature by 1C.
When set point temperature is reduced to ambient -30C or more, by Button 2, Set Point temperature is automatically set to ambient -30. Further Button 2 pushes have no effect on temperature control. Pushing Button 1 however, will reset Set Point temperature to ambient - alternatively, press both buttons at any time to reset temperature scheduling, then start again.
One LED indicates the system on temperature, while another warns that temperature scheduling has been reset, that is, ambient temperature == Set Point temperature.
Interference lines may show up on live view during operation of the cooling system. To eliminate, a 22uf capacitor is required MOSFET Gate to GND, essentially across both sides of the 750R resistor, mentioned above. I tried many variations of snubbers etc and drew a blank. The camera chassis must also be connected to GND. I imagine that an electronics engineer would do a better job.
A PCB is a neater way of doing the electronics and this can be mounted on the side of the heat sink. Given that much experimenting was required with the prototype, I elected to use a two sided bus connector (I think that’s what it’s called). That way, I could move wires around and make alterations, as required.
Ground loops can be a problem where it is decided to separate the GND of the analog temperature sensors. That is, keeping analog and digital GND separate, to prevent feedback from digital GND to the analog circuit. In any case a common ground must eventually connect all GND’s. This is done at the Arduino board.
The Outcome
Maximum temperature differential is 34C (from ambient). A sensible and easily controlled temperature range is 30C. Cooling is rapid, but exponentially slower near maximum differential. At temperature, PWM (pulse width modulation) does a good job keeping the set point temperature, conservatively, within 1C, but it does a lot better and 0.5C is realistic.
Testing at 0C (ambient 20C on the day) showed good thermal inertia. Removing power from the Peltier, the cold finger temperature (measured near the camera CMOS sensor) remained within 0.96C for 13 seconds. This tends to indicate, that irrespective of transient spikes in temperature, plus or minus, thermal stability prevents immediate reaction to changes in PWM scheduling, which quickly recovers in response to normal temperature sensor readings.
System response can be further reduced by increasing capacitance across the MOSFET gate and source. But this also reduces the rate of cooling - this might be desirable in some cases.
Cool down time is quick. For example, from 25C to 0C in a matter of minutes. There is a slight overshoot, followed by undershoot, after which temperature remains within the tolerances mentioned previously and suspect that this is a consequence of capacitance in the cold finger temperature sensor circuit.
Note: Software needs refinement - my skills are fairly basic. Consequently, a second Arduino board to manage cooling separately, removed interference from other functions - shutter control, dithering robot and calibration frame semi-automation.
The materials for this project were many and varied. It is fiddly, particularly cold finger fabrication, insulation (electrical and thermal), condensation elimination from electronic parts, modifying the shutter remote cable, installing the temperature sensor on the cold finger and so on.
Summarizing, the prototype works well and there is room for improvement. Particularly, clearance between the camera and cold finger/Peltier interface, to fit remote cables, video and USB more readily. Perhaps, bending the cold finger toward the front if the camera is a better option. It’s all a matter of usability and access to lens controls.
Tuesday, November 29, 2011
Basic astrophotography image processing in GIMP - Part 2: increasing SNR (image alignment, integration and enhancement)
I thought this section deserved more attention. Leaving off in part 1, we discussed combining images - to use astrophotography jargon, stacking and aligning - more correctly, registration.
Please remember that these tutorials are intended for beginners, using very basic equipment and software. The methodology is the basics of image calibration and processing, but very much hands on, using what we have at our disposal.
Recapping, the purpose of combining images is to increase the signal to noise ratio (SNR); that is, less noise and more signal, improving the overall appearance of our combined final image - our integrated image (more jargon).
We are going to select the best light frames and combine them into a single image. But, noise reduction strategies start before uploading images to our computer. We employ a nifty method during image capture; that is, we make sure that our images are slightly offset one from the other during the imaging session (yet more jargon). The technical term for this is dithering, a science and a separate discussion altogether.
For our purposes however, we will take advantage of our fixed set up. We note that the stars move across the sky and change position from East to West at 15.0416 degrees/hour (the siderial rate), we let the stars drift across the camera sensor between exposures. Of course, after a while the object that we are imaging will drift out of view. For 6 or 10 images there should be no need to recenter our target.
In part 1 we exposed for 10 seconds. Adding a 3 second delay between exposures ensures that a few pixels separate the next image from the previous - in effect offsetting our images. Very crude dithering - effective all the same. And, furthermore, once complete, our total exposure time is 60 seconds vs 10 seconds. However, SNR increases by the square root of the number of combined images. 2 images increases SNR by 1.414 - approximating for our purposes.
So, starting where we left off in part 1, the image below shows the second and third images in our set of calibrated light images - we have already aligned the bottom and second image in the stack. In this case, the third image is selected with Mode set to Difference (and View 8:1, for clarity). This layer is transparent, showing the difference between the two images as they came out of the camera. We can use the drag tool to align the transparent (difference layer) with the image below.
And this is the result in Difference mode. The pixels have been aligned.
We then set Mode to Normal and select the image above, by selecting its ‘eye’ and highlighting the layer, setting its Mode to Difference. As before we drag the image into alignment with the image below, and so on up the stack.
Note: We loaded our images, File > Open as Layers, and need to deselect the ‘eyes’ of the images above the image that we are dragging so that it is visible.
The image below is the first of our image stack (the ‘eyes’ above it are deselected to make it visible). It’s noisy.

Lets see what happens when we average the images; that is, with Mode set to Normal for all images, (all ‘eyes’ selected), we set the Opacity slider of the bottom image to 100% - the default setting. Select the second image and set it to 50%, third to 25%, 4th to 12.5%, 5th to 6.3% and our 6th image to 3.1%.
As you proceed up the layers, note the change - dithering has been to good effect and pixels that were not removed during calibration are hidden behind good pixels. Additionally, because ambient noise is random the image is becoming less noisy. If we had 50 or 100 images, noise would be reduced even further. Still, for 6 images the result is impressive - as below - and much smoother.

Just to finish things off, Image > Flatten, to fuse all the layers together. Apply a sharpen algorithm to the luminous layer. This can be found at, FX-Foundry > Photo > Sharpen > Luminosity Sharpen. You can also use, Filters > Enhance > Sharpen (Smart Redux), or any of the available sharpen algorithms available for GIMP. Avoid the use of unsharp mask if you can. It too, tends to overdo the image (my personal view).

And here is our completed image.

For comparison, the image below is the final image from part 1, which is a single layer, as opposed to 6 layers in the image above.
Comparing the position of the constellation Orion on the frames shown, it should be evident that any one of our light images may be selected as the base or background image, framing the scene as preferred. Terrestrial objects do not align in any case, and we have to live with that.

The availability of free programs to perform calibration, registration and integration, and then using GIMP to finish off with brightness, contrast, colour and enhancement, makes the process much easier. (Keep in mind that images that contain terrestrial objects may interfere with alignment in some programs, essentially designed to align stars).
The next step perhaps, is to use RegiStax or Deep Sky Stacker (DSS) to do all the heavy lifting (calibration, registration and integration of our images) and follow up with GIMP. Now we are getting into serious amateur stuff. But, we can still use our fixed tripod/camera set up, to take beautiful shots of the Milky Way, well beyond the spectrum of the human eye.
Perhaps you need one of these.
Sunday, November 27, 2011
Tangent Error Minimized Tracker - A Double Arm Drive
Double Arm Drives have been used to photograph the night sky for over 20 years. Originally designed by Dave Trott, based on the Haig or Scotch mount (otherwise known as a Barn Door Tracker), the Double Arm Drive is a platform used to track and capture images of celestial objects, using slow shutter speeds necessary for this type of photography. The proposed design, while conventional, attempts to refine the tracking performance of the double arm design. Hence, the Tangent Error Minimized (TEM) Tracker - this is the prototype.
Basic image acquisition
Basic image processing
Notes:
Alternate methods of tangent error reduction in barn door drives include cams and varying motor speed. The point of the Tracker design, is to minimize tangent error while retaining simplicity of construction and operation.
The Tracker need only be driven at a steady rate of 1 rpm by hand or with a drive mechanism - in this case a programmable microprocessor (Arduino), precisely governing the speed of a stepper motor - Google
Vibration is inevitable when using stepper motors. A reduction system such as a gear box, gear train, or pulley system between the motor and drive shaft will reduce vibration significantly - Google.
TEM Tracker
View complete set of Tracker images
Front and rear views, with the original resonance dampers - the cork and spring arrangement is surprisingly effective. A reduction drive is more effective. The original build is shown here for illustration purposes.

The Equatorial Wedge (EW) provides active adjustment of altitude, particularly useful for refining tracking performance on the fly - limited to a range of latitudes in which the device is expected to be used. If attached to an adjustable tripod, directly to the Altitude board, the Azimuth board is not required, and may be omitted. Although, an EW is a more rigid design and easier to set up.
Notes:
For simplicity of construction the Conventional Layout is recommended - some cross referencing of the Tracker Plan is required. Observe the dimensions and ensure that the Points of Rotation are aligned when the Tracker is closed. All Tracker dimensions are metric (unless otherwise stated), including the Drive Shaft thread.
For the non-metric world, imperial measurements for use with the 1/4 inch 20 tpi drive screw can be found at the bottom of the page in Appendix;
The algorithm used to calculate the Tracker dimensions was kindly supplied by my brother. For any combination of Drive Shaft thread (metric or imperial) and rate of rotation, the algorithm calculates Critical Dimensions - that is, Drive Arm and Camera Arm length and corresponding hinge-to-hinge distance. Any mistakes are mine!
“Section 1” Development and Testing
Double arm design seems to be a set of compromises, trade offs, to minimize deviation about mean performance. An in-depth analysis can be found here.
The dimensions of the TEM Tracker are set at their current values because, among other things, they provide very accurate tracking in the first 15 to 20 minutes and subsequent tracking error is minor to 60 minutes. A design goal was accurate tracking for up to 60 minutes. In practice, accurate performance has been observed beyond 60 minutes.
A simple method to resolve tangent error during the final 40 minutes of tracking was not immediately evident. Varying motor speed or fitting a cam, while effective, is not preferred because of undesired complexity, whereas, constant motor speed can be replicated in a variety of ways.
An alternative method was found and, for want of better terminology, is simplicity itself. While experimenting with arms and arcs, using a 2D CAD program, the answer to the problem became evident. Raising the Camera Arm hinge tilts the arc followed by the Camera Arm backwards, reducing tangent error, retaining accuracy during the early stages of operation.
Geometry
Definitions
Siderial rate: The rate at which the Earth rotates on its axis - approximately 15.0416 degrees/hour.
Drive cycle: From boards closed to 60 minutes (zero to nominally, 15.0416 degrees).
Contact Point: The physical point at which the Drive Arm lifts the Camera Arm - 349.95mm (350mm).
Optimal Contact Point: The position at which the contact point ‘would’ intersect the Camera Arm, if it were to move (optimally) throughout the drive cycle. In practice, too complex.
Points of Rotation: Hinge and pinion centres should line up when the Tracker is closed, except the Camera-arm hinge which is slightly elevated. Why is it important? The performance of the Tracker is predicated on this arrangement - its the zero datum. What really matters is that the geometrical relationship between the components is retained.
Methodology
A spreadsheet was used to calculate Drive Arm and Camera Arm dimensions with tracking tolerances set to 4 decimal places of a degree, using the following fixed parameters;
motor speed, 1 rpm ; drive screw pitch, 1 thread/mm (6M (6mm) or 8mm fine - which has the same 1 tpmm pitch as 6M).
Camera Arm - Drive Arm Trend
Optimised angular displacement of the Camera Arm was calculated to 4 decimal places at 1 minute intervals for 60 minutes; i.e., 15.0416/60. Optimal contact points were determined to match the displacement of the Camera Arm at these intervals. The start and end points being 349.95 (350mm) and 347.11mm, respectively.
With the contact point fixed at 350mm (349.95mm) the Camera Arm is driven through 14.9517 degrees (in 60 minutes). If the contact point is fixed at 347.11 mm the Camera Arm is driven through 15.0416 degrees, which is optimal, but problematic because error is introduced during the early part of the drive cycle. The object is to drive the Camera Arm between these two points and take advantage of accurate performance at both ends of the drive cycle. This can be achieved by raising the Camera Arm hinge 0.4mm (4 thicknesses of 80gsm paper).
Calculating 30 contact points (two minute intervals) made it possible to verify the arc derived from the CAD program; angles subtended from the Camera Arm hinge to the Camera Arm arc correspond very closely to the optimal contact points.
Performance
A Canon G9, fitted with a 2x tele-converter lens with the camera lens set at 24x digital zoom, an approximate focal length of 1600mm, was used to take 10 x 64 second exposures (Spica, southern hemisphere) over 22 minutes, of which 5 were stacked, showing no apparent trailing. The others, subject to atmospheric distortion and vibration, due to construction faults, were discarded. Similarly, trailing was not apparent. Spica1 and Spica5 are the first and last in the series of 10 exposures.
Accurate tracking was observed > 30 minutes; that is, 15 minutes to resolve polar alignment using the drift method, 10 minutes to verify tracking and 22 minutes of photography, including a period of approximately 5 minutes where the setup was unattended after the shooting cycle was complete.
Spica - 5 x 64 second exposures over 22 minutes




Software control of motor speed is optimal because it eliminates a variable that tends to mask other errors, such as construction faults and/or poor polar alignment.
Programming an ATMEL ATMEGA168 microprocessor on an ‘Arduino’ board mated with a motor shield is an effective solution (if you know what this means, you may wish to skip this section). This arrangement was used to test the tracker.
Alternatively, inexpensive electronic control, using one of the many circuits to be found on-line may suffice. Other methods include, utilizing a 1rpm clock motor, or gearing down a DC or Servo motor. Otherwise, the device may be hand driven by reference to a time piece to produce acceptable wide field images.
Electronic control may not provide consistent performance, particularly where variations in ambient temperature affects the timing of the circuit (a function of resistance). There are ways to compensate for this, and it is recommended that if choosing this type of circuitry, adding temperature compensation is essential. However, using an oscillator/crystal type circuit is probably a better solution.
Polar Alignment
Accurate Polar alignment is essential! (Google)
Note: First, level the tracker, preferably with a circle type spirit level, or these days, a smart phone level. Align the axis of the camera arm roughly true South (SH), true North (NH). A compass with magnetic variation applied, Google map, survey maps, street directory, GPS may assist with the direction of the poles in relation to property boundaries.
I use the following procedure and find it more accurate than optical polar alignment for this type of mount.
1. Point the camera comfortably (for your neck and back) near the Celestial Equator, closer to Zenith than the horizon.
2. Expose for 10 seconds and check the image for star drift (trails instead of points of light) - adjust the tracker in Azimuth opposite to the star drift (horizontally) and Altitude (vertically). During the next exposure of 20 seconds the star trails will hopefully be shorter. If you adjust the wrong way the star trails will get longer, so adjust back the other way, plus a bit more.,
3. Repeat this process, increasing the length of exposure with each try. Eventually, tracking error will be minimized to allow for approximately 3 minutes. Don’t expect to achieve 10, 20 or 30 minutes, besides which there is no point. Testing was done with specially made vernier adjustment, specifically for verification purposes.
Start with 10 seconds (gross error check), increase to 20 seconds, then 30 seconds, achieving good tracking at each stage, and then increase to 60 seconds. If tracking is good at 60 seconds, there’s a very good probability that this is sustainable to 2 or 3 minutes.
4. Expose for 2 or 3 minutes, depending on whether you choose to expose for 2 or 3 minutes and check for drift. Resolving errors in Azimuth and Altitude.
Notes:
The reason this method is successful is that it accounts for refraction of the position of the Celestial Pole through the atmosphere.
If you’re in a suburban light polluted area, 3 minute exposures is as much as you will need (iso800). Any more and the sky glow will dominate the image, any less and the signal from the image you are taking will be drowned in noise.
If exposures are too long they will be over exposed. Lots of optimal exposures stacked together is the best method for a good image.
To verify the authenticity of tracking, in-camera software (CHDK) was used to combine/stack the Spica images (at that time they were not stacked using a computer program that automatically rotates and aligns images), further noise reduction and conversion to jpeg was done with GIMP. The more recent image was combined in GIMP. Very little adjustment was required to align the Spica images - a few pixels at most.
Spica

Note:
CHDK provides slow shutter speeds to 64 seconds (now much longer), besides other functions. Scripting allows automated multiple shots with a single press of the shutter. The process can be interrupted between exposures by pushing the shutter release button.
“Section 2” Design and Resources
Design criteria; construction possible using hand tools - a drill press is a handy addition;
simplicity retained throughout;
‘critical dimensions’ easily measured and reproducible;
tracking accurate up to 60 minutes - this seems adequate for most astrophotography;
final build tracking within 2 decimal places of a degree or better;
the device portable and easily deployed in the field;
lightweight and rigid.
Tracker Plan
Providing the Critical Dimensions, Points of Rotation and other design conventions are observed, performance should be consistent in various configurations.
Note:
The centre line through the Drive Arm hinge and the Drive Nut pinion, including the motor mount hinges (Points of Rotation), when the device is closed, represents the intersection of two planes. A third exists between the centre of the raised Camera Arm hinge and the Contact Point. These ‘virtual’ planes are the design datum; it is important that construction proceed with this concept in mind, otherwise design performance cannot be guaranteed.
Construction Tips
Not all pairs of boards are square, even if you had them cut at the timber yard. Choose the squarest end of each board and mark the edges; be careful to measure to these edges. The square ends should be at the drive end of the board the measurements referenced to a common datum. In other words, don’t introduce error during construction by assuming that the boards are square.
Preparing the drive end, before committing to other measurements, referenced to the centre of the Drive Shaft, is preferable, making sure that the 20mm (nominal) drive shaft holes in the top and bottom boards are aligned prior to marking the location of other components. That is, marking out the motor/drive shaft assembly end first, will minimize construction errors - readily corrected during this stage.
The boards pictured are 17mm ply coated with laminate - a cut-off picked up at a timber yard. This material is used for concrete form-work and is very stable - resists warping etc. The Camera Arm is cut out of the drive arm. 12mm waterproof ply is acceptable, but is getting a bit light.
Drive-end Construction
Notice that the motor is mounted on the top board and hinged. It may be mounted on the bottom board in a similar fashion - a matter of preference. Importantly, the centre of the drive shaft should be coincident with the centre of the motor mount hinge and the centre of the Drive Nut pinions. It may be necessary to ‘pack the motor up’ to provide clearance between the Drive Nut and the motor shaft.
An easy way to make Drive Shaft pinions, and have them match up with the Motor Mount hinges, is to cut the ends off the hinges to be used for the Motor Mount. The part with the pin is retained (see photo); additional holes are drilled to accept locking screws, once the Drive Nut pinions have been mounted and centered - use tape to hold things in place while drilling.
Another refinement is the use of springs on the pinions to minimize slack in the assembly. Alternatively, remove the pins and tap threads to fit grub screws for centering the Drive Nut (recommended). The most difficult task was drilling the holes in the sides of the Drive Nut and ensuring that they were concentric.
While it is important to ensure that everything is properly aligned during construction, it is recommended that the Tracker be started slightly open - say 10 - 15mm - to stabilize the drive shaft and pinion. With the Tracker closed the drive shaft tends to lean due to its proximity to the drive nut pinion assembly. A bit of triangularity stabilizes the drive.
Nylon nuts and bolts can be easily modified with side-cutters, and are useful replacements for hinge pins and pinions - they tend to reduce the transmission of motor resonance. Nylon threads are noticeably tighter.
Tip - place a small ball of Blutak on the end of the screw before pushing it into the hinge - this will further isolate hard surfaces without compromising rigidity.
Tracker - Drive End Assembly - Motor Mount - Contact Point
Drive Shaft & Nut Assembly (replaced with a nylon sleeve and plastic tube insert tapped to 6mm)

Azimuth and Altitude boards
If intending to mount the drive on an adjustable (sturdy) tripod, the azimuth board may be omitted. This part of the design is flexible.
Camera Mount
It is advisable to place a layer or two of Neoprene under the Camera Mount bracket to reduce transmission of resonance. Having said that, an improved Motor Mount is needed. Be careful of heavy telephoto lens that may topple the Camera Arm - restraint or a counter balance may be necessary.
Two hinges are better than one for the camera arm, tending to be more stable. A wider footprint for the camera arm and drive arm is recommended - use the alternate layout and build the unit a little wider for stability, but not so wide that it becomes cumbersome.
Electronics
The Printed Circuit Board (PCB) is designed as a motor shield and fits on top of the Arduino board. It utilises an L293D or SN754410NE H-Bridge bipolar stepper driver, and a ULN2003AN (or similar) to drive a unipolar stepper motor. Primarily, logic is used to control the motor function. A three position switch selects Forward, Stop and Reverse and a ‘Kill Switch’ stops the motor once the Drive Arm is back in the start position; the motor is held in position with its coils energised. Turn off supply power to rotate by hand, if necessary.
Limit (Kill) Switch
The L293D is probably a better choice because it has in-built protection to prevent damage to your Arduino from voltage spikes generated by the motor; the SN754410NE does not. However, the use of the Arduino pull-up resistors may well serve to provide additional protection; no problems have been experienced to date.
The L293D and SN754410NE use two separate power sources, one for the chip and one for the motor. As such, the motor shield is designed to provide several control configurations. For example, the SN754410NE may utilise a “power-off” kill switch, or the Arduino logic. Similarly, for the L293D, the board may also be configured to remove power from the logic and power supply. This is more derivative, through design evolution, than a deliberate feature.
The ULN2003AN Darlington Array, drives a 5 or 6 wire uni-polar motor. Changing the pin allocation in the ‘Global’ section of the ‘Wiring’ program is necessary with the current program.
Fitting a heat sink to the 780x (x = the motor supply voltage) IC and attaching a cooling fan will be necessary where more powerful stepper motors, consuming large amounts of current, are used. A 5 volt 4 wire 200 or 400 step bi-polar motor, or 5 or 6 wire unipolar is adequate for the job, unless you have other requirements. Besides, there are several motor shields available for the Arduino if you prefer an alternative, for some reason.
Motors
Stepper motors can be purchased at most electronic stores or on-line. Many sites speak of using motors from old dot matrix printers. A suitable motor with sufficient torque can be purchased for about $20. These motors usually have 200 steps/revolution. Less expensive hobby motors have as few as 48 steps (probably too coarse for digital photography at high magnification used without using a gear box). Don’t forget to change the motorStep line of your Arduino script to suit your motor. If using a gearbox of some kind, increase the speed of the motor for the gearbox reduction - for a ratio of 5:1: motorSpeed must be 5rpm to maintain 1rpm at the drive shaft.
Arduino motor shield
Arduino Resources
Direction and Kill Switch wiring
StepperDriver.brd (Eagle Board Milling)
StepperDriver.pdf (PCB Etching)
Notes:
Copy and Paste the Arduino code to your editor and upload to the board.
The PCB pdf file prints the actual size of the shield to fit the Arduino (Decimilia or similar) - it was printed directly from Eagle. Print to a transfer medium then iron onto a single sided board for etching. It may be wise to print to paper first, cut out, and check for fit with the Arduino board. A Laser printer is required, as well as a 1mm and 0.8mm drills, fine hacksaw and file to cut to shape.
Refer to the parts list and use the image of the Arduino Motor Shield for guidance (note the two jumpers - logic setup). The 100uf capacitor is nearest the diode and 4 pin connection header, the 1uf capacitor is at the back of the shield. The L293D (SN754410NE) is the IC to the front of the image/board. The ULN 2003AN is located at the back of the board.
The Direction Switch is an 8 pin 3 position sliding switch. Terminal layout as shown, is 3 + 1 and 1 + 3. The limit switch, when closed, sets Pin2 LOW. Note, that in the Stop and Reverse positions Pin 3 is always LOW. Forward, sets Pins 2 and 3 HIGH, overriding the limit switch.
If problems are experienced getting the stepper motor to rotate; i.e., it ticks one way then the other, the motor wiring will need rearranging in the socket. If the motor turns the wrong way, plug the socket in the opposite way.
If intending to have a board made commercially, use the “Eagle Board Milling” file.
The “PCB Etching” file has bigger pads to improve adhesion during image transfer (ironing) and provides more copper for better adhesion to the board.
Warning the program makes use of the pull up resistors on the Arduino board for voltage protection. No resistors have been used in this design. Use of the L293D is recommended because it has in-built protection.
“Section 3” Concluding
It has been 2 years since designing the Tracker, and it is safe to say that it will consistently provide accurate tracking, consistent with accurate polar alignment, for 3 - 4 minute exposures, which is adequate.
Demonstrated performance, more than 30 minutes, was achieved under controlled conditions, specifically to verify the design parameters - which it did quite well
Appendix
Large Imperial version:
Similar profile to the Metric version, for exposures up to and beyond 60 minutes - say 90 minutes.
Drive Arm hinge - Drive Nut pinion / Drive Shaft centre = 16 inches; Drive Arm hinge - Contact Point = 14 inches; Drive Arm and Camera Arm hinge = 4 inches. Pack up the Camera Arm hinge with 2 layers of 80 gsm paper, because the uncorrected error after 60 minutes is half that of the metric version.
Compact Imperial version (see Section 3 Acknowledgements):
Indicates superior tracking up to 40 - 45 mins with no camera arm correction (packing up, as in the tracker design) and may be ideal for hand driven exposures of shorter duration. A computerised motor driven version should demonstrate exceptional tracking to 42 minutes - more than enough.
DA hinge - DN pinion / DS centre = 14” ; CA hinge - CP = 12.92” ; DA hinge - CA hinge = 1.9”. No packing is required. Calipers may be useful for measuring down to 1/100”.
Acknowledgements
Dave Trott,, the original designer of the Double Arm Drive, proposed the concept in the Sky and Telescope magazine, 1988. Containing a wealth of information, his web-site is also beautifully designed.
My brother, the interested sceptic, and the brains behind the spreadsheet. Without whom this project may not have had the impetus to continue. The spreadsheet enabled experimentation with various component dimensions.
Mike Mohaupt - whose Compact Imperial design prompted further research to optimise the performance of his very accurate design which provided the data for 1/4” 20tpi dimensions.
Open source software (Linux) - Qcad, without which the idea would have escaped my attention.
Eagle PCB software and the Arduino Decimilia provided the tools to develop the electronics platform to drive the stepper motor.
Not forgetting Stellarium an excellent open source desktop planetarium.
GIMP the image manipulation program, another open source astronomical imaging tool.
The CHDK developers and many excellent sites devoted to digital astrophotography and Double Arm Drive design.
Licence
This work is licensed under a Creative Commons Attribution-Noncommercial 2.5 Australia License.
Disclaimer
The information on this site is provided in good faith. The author/owner of the material of this site accepts no responsibility for reader/user outcomes, of any nature, directly or indirectly associated with this and/or any other site associated with, or affiliated, by any means or interpretation. Please use the information freely, at your own risk.
Recent reading
Science
The Smithsonian Intimate Guide to the Cosmos - Visualising the Realities of Space (Dana Derry). Beautifully illustrated. A pictorial guide to the universe, with some informative and interesting comment.
The special theory of relativity (Albert Einstein - of course) - Does this really need an introduction? Time, it seems, shapes not only the universe constraining its limits, but shapes the lives of everyone.
General
The Sound of One Hand Clapping (Richard Flanagan) - Set in Tasmania. The style of writing is unusual but effective. A must read.
Galileo: A Dramatised Life (Gerald Smith) - An interesting approach that traces the life of Galileo in some detail.
Rogue Economics: Capitalisms new reality (Loretta Napoleoni) - If you want to know what drives world economics, Rogue Economics is a must.
Blind Man’s Bluff (Sherry Sontag and Christopher Drew, with Anette Lawrence Drew) - Blind Man’s Bluff traces the history of submarine espionage during the Cold War years. Fascinating reading.
The Brief Life of HMS Trooper (David Renwick Grant) - HMS Trooper served in the Mediterranean during World War II. A technical and personal look at the exploits of Trooper and its crew. If you have an interest in submarine life of that era, this book is a good resource while serving as a tribute to submariners, many of whom were lost as was the Trooper.
White Fang (Jack London) - A classic. More than a story of survival and the pressing need to live in a hostile environment. White Fang is a story about the nature of men, good and bad.
Philosophy and Theology
Bible A must read.
Word Studies in The Greek New Testament (Kenneth Wuest) Wuest has been the richest resource imaginable. Comprising 4 volumes, one of which is the Wuest version of the New Testament (available for multi-function devices, such as the Palm).
Wuest conveys the richness of the Greek language and in doing so elaborates the New Testament demonstrating its consistency.
The Republic (Plato)
Escape From Reason (Francis A. Schaeffer). Escape From Reason is an inspiring work. For those who recognise, or suspect, that discovering the true nature of one’s being is hampered by the conventions of modern thinking, Escape From Reason is a must read.
The Last Superstition (Edward Feser). A rebuttal of atheist writings such as The God Delusion (Richard Dawkins) and that of other prominent atheist authors. A demanding read, but well worth the effort for those wanting to acquire an alternative perspective. Feser exposes the flaws in naturalistic and modernist thinking.
Consciousness And the Existence of God (J.P. Moreland). Very much an academic work, arguing God’s existence in view of human consciousness. Moreland discusses the unlikely emergence of consciousness from physical processes, postulated by a naturalistic world view.
Kingdom Triangle (J.P. Moreland). A must read. Not so academic. Moreland addresses the crisis of this age from the perspective of competing philosophies, Scientific Naturalism and Post Modernism and elaborates the underlying issues that invade human thinking.
Moreland exposes the truths about modern thinking and its departure from God mindedness, demonstrating very clearly where humanity is at, in this day and age.
The Rough Guide to The Da Vinci Code (Michael Haag and Veronica Haag). More informative than the Da Vinci Code.
The God Delusion (Dawkins). One may ask, why list this here, among such worthy works of Christian insight. Richard is entitled to his views. No matter how much he may abhor theists.
Richard’s scornful, passionate objection and need to reconcile naturalism and theism, is an obvious and predictable imperative, with an equally obvious solution - reject theism.
The Scarlet Letter - Nathaniel Hawthorne. Included here, because it illustrates how man gets the Christian message wrong. Written in the 19th Century, Hawthorne illustrates the hypocritical, legalistic notions of 16th Century Puritans. Grace seldom abounds in a climate of self righteousness. The message forgotten so Readily amid the clamour of the fallen human condition.
Jane Eyre - Charlotte Bronte’ The Wikipedia entry describes Jane Eyre as early feminist writing and moralistic. Seen through secular eyes, that’s as close as one might get to the substance of Jane Eyre.
Given the propensity for secularism to misinterpret Christian concepts, indeed, Spirit led behaviour, in the midst of human weakness, it’s not surprising that Jane Eyre is interpreted as such - a poor substitute for the truths within.
Jane Eyre is however, an exposition of human frailty, beautifully characterized in all its light and shade. Above all a story of redemption and the enduring heart of the Christian soul, empowered by the Spirit of God, in the salvation of Christ.
As far as gender distinctions are concerned, Paul the apostle tells the Romans, that all are one in Christ, that distinctions are neither present nor made. Concluding, that whatever distinctions exist are those made by men, not the vestiges of Christ.
The Lost History of Christianity: The Thousand-Year Golden Age of the Church in the Middle East, Africa, and Asia–and How It Died (Philip Jenkins).
Tracing the decline of Christianity in the East.
The message of the gospel is simple - as Paul put it. “There is only one gospel… …Christ crucified…
Fast Infrared (FIR) how-to for applicable Toshiba laptops
I wrote this several years ago, once I figured out how to get IR working. It was primarily aimed at Slackware users, and now includes ubuntu 8.10, 9.04, 10.04 and 11.x - not tested. There seems no reason it shouldn’t work… However, it may be getting a little out of date and reference only.
IRDA (FIR mode) on Toshiba laptop with an smsc-ircc IrDA device and no BIOS setting.
Because the laptop came with IRDA, this was more of a challenge than anything else, and more difficult than first imagined. Most people get SIR working, I didn’t!
Acknowledgements to the various IR sites - GMane in particular.
——————————————————————–
If your laptop (Toshiba) is equipped with an “ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge”, and a 24cc controller or similar, it will require the smsc-ircc2 kernel module driver. Patches are added from time to time and may be viewed on Gmane; http://blog.gmane.org/gmane.linux.irda.general
If you want to support a specific combination of bridge and controller Gmane may be a good place to start, to see if your combination is supported.
Distribution
Slackware 11.0, 12.0 and 12.1 running a recent 2.6.x kernel, and more recently ubuntu up to 11.x
Please read the documentation for your distribution.
NOTE: The smsc-ircc2 module is experimental and may break your system.
Software requirements
Latest irdautils, openobex and recent kernel (2.6.17.13 at the time of writing) (still working with 2.6.26.3 and ubuntu 2.6.27-9-generic - plus).
Kernel setup
Not an issue with ubuntu
Networking > IRDA (compiled as modules).
ISA and Serial support enabled (SIR capable).
The smsc-ircc2 module is experimental, therefore it is necessary to set > Code maturity level options > Prompt for development and/or incomplete code/drivers = y.
Please refer to the many howto’s on compiling and installing the linux kernel.
IrDA hardware
PCI by name (the relevant bits)
#lspci -v
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
Flags: bus master, medium devsel, latency 0
PCI by numbers
#lspci -v -n
00:1f.0 0601: 8086:24cc (rev 03)
Flags: bus master, medium devsel, latency 0
Install the software and then create the IrDA devices (linux irda howto - 2.6 kernel)
# mknod /dev/ircomm0 c 161 0
# mknod /dev/ircomm1 c 161 1
# mknod /dev/irlpt0 c 161 16
# mknod /dev/irlpt1 c 161 17
# mknod /dev/irnet c 10 187
# chmod 666 /dev/ir*
Set the aliases in /etc/modprobe.d - Kernel 2.6.x requires a separate entry eg. /etc/modprobe.d/smsc-ircc2 will do.
Regardless of options placed in modprobe.d, I chose to pass the required options during modprobe. It was impossible to load the module otherwise.
alias irda0 smsc-ircc2
alias tty-ldisc-11 irtty-sir
alias char-major-161 ircomm-tty
alias char-major-10-187 irnet
For information on your chip, run smcinit
NOTE: Other than for setup, never run smcinit to initialize the smsc-ircc IrDA device - it will prevent IR from working.
#smcinit -v
smcinit 0.5cvs
SIR ioport: 0×3f8
FIR ioport: 0×130
FIR interupt: 3
FIR DMA: 3
Detected IO hub vendor id: 0×8086
Detected IO hub device id: 0×24cc.
Detected Chip id: 0×7a
SIR ioport register write: 0xfe read: 0xfe
FIR interrupt register write: 0×3 read: 0×3
FIR ioport register write: 0×26 read: 0×26
FIR dma register write: 0×3 read: 0×3
Initialization of the SMC 47Nxxx succeeded
Windows device manager indicates the following values
I/O 02f8 - 02FF (SIR)
I/O 0130-0137 (FIR)
IRQ 07 (FIR)
DMA 01 (FIR)
Controller 24cc
There are differences in some values between Windows and smcinit. I used the smcinit values.
The SIR serial device in this case is /dev/ttyS0
but may vary depending on your hardware.
To confirm
#setserial /dev/ttyS0
/dev/ttyS0, UART: 16550A, Port: 0×03f8, IRQ: 4
From smcinit above, SIR ioport: 0×3f8 = /dev/ttyS0 Port: 0×03f8.
dmesg will provide the same information concerning your serial ports, however, it may be necessary to match the correct serial driver with the irda hardware, as they may vary from machine to machine.
To initialize FIR, first disable the serial device
#setserial /dev/ttyS0 uart none
or whatever your SIR port /dev/ttySX is.
Load the smsc-ircc2 module using the values provided by smcinit;
#modprobe smsc-ircc2 -v –ignore-install ircc_dma=3 ircc_irq=3 ircc_fir=0×130 ircc_sir=0×3f8
–ignore-install was not always necessary, but occasionally the module would not load without it? See “man modprobe” for details. ircc_dma=7 works also. Otherwise, the values are fixed as far as I can tell. -v for debugging.
dmesg
# dmesg grep | tail
Detected unconfigured Toshiba laptop with Intel 8281DBM LPC bridge SMSC IrDA chip, pre-configuring device.
Setting up Intel 82801 controller and SMSC device
Overriding FIR address 0×0130
Overriding SIR address 0×03f8
SMsC IrDA Controller found
IrCC version 2.0, firport 0×130, sirport 0×3f8 dma=3, irq=3
No transceiver found. Defaulting to Fast pin select
IrDA: Registered device irda0
Then
#irattach irda0 -s
If all has gone well you should see something similar to this in /var/log/messages
#tail /var/log/messages
Oct 20 16:32:38 localhost irattach: executing: ‘/sbin/modprobe irda0′
Oct 20 16:32:38 localhost irattach: executing: ‘echo xx > /proc/sys/net/irda/devname’
Oct 20 16:32:38 localhost irattach: executing: ‘echo 1 > /proc/sys/net/irda/discovery’
Oct 20 16:32:38 localhost irattach: Starting device irda0
“xx” the laptop - 1 device discovered.
Then run irdadump to verify the whole process. You should see your computer and any device that you used to test the link. In this case a Palm.
#irdadump
07:32:53.284907 xid:cmd 286e7df5 > ffffffff S=6 s=5 (14)
07:32:53.374893 xid:cmd 286e7df5 > ffffffff S=6 s=* xx hint=0400 [ Computer ] (18)
07:32:54.462330 xid:rsp 286e7df5 < 3ea004c9 S=6 s=5 zz hint=8220 [ PDA/Palmtop IrOBEX ] (20)
07:32:55.834526 xid:cmd 286e7df5 > ffffffff S=6 s=0 (14)
xx is the computer name, zz is the Palm username.
And, just to be sure, the following shows the Palm device.
# cat /proc/sys/net/irda/discovery
IrLMP: Discovery log:
nickname: zz, hint: 0×8220, saddr: 0×286e7df5, daddr: 0×3ea004c9
This start|stop|restart script is adapted from the slmodemd script. Added module loading and unloading, to ensure that all relevant modules are loaded before the smsc-ircc2 module, otherwise IR will not work, and to unload the modules when stopping IR, ready for the next start. Not really necessary, but it is cleaner and prevents problems.
NOTE: Don’t use this script in ubuntu
#!/bin/sh
# rc.irda
#
# Start irda
#
irda_start()
{
if [ -x /sbin/setserial ]; then
echo -n “Starting irda:”
/sbin/setserial /dev/ttyS0 uart none
/sbin/modprobe ircomm
/sbin/modprobe ircomm-tty
/sbin/modprobe smsc-ircc2 –ignore-install ircc_dma=3 ircc_irq=3 ircc_fir=0×130 ircc_sir=0×3f8
/usr/sbin/irattach irda0 -s
fi
}
irda_stop()
{
echo “Shutting down irda”
killall irattach
/sbin/rmmod smsc-ircc2
/sbin/rmmod ircomm-tty
/sbin/rmmod ircomm
/sbin/rmmod irda
}
irda_restart()
{
irda_stop
sleep 1
irda_start
}
case “$1” in
’start’)
irda_start
;;
’stop’)
irda_stop
;;
‘restart’)
irda_restart
;;
*)
echo “usage $0 start|stop|restart”
esac
Make it executable - as su or sudo
#chmod +x /etc/rc.d/rc.irda
Run as su or sudo
#/etc/rc.d/rc.irda
Irlan, irnet, rfcomm, phone and pda connections etc, are adequately explained in other tutorials.
I did manage to sync the Palm with my desktop. Set /dev/ircomm0 in Kpilot or Jpilot preferences. If you are using Gnome, it’s under Evolution, Edit>Synchronisation options… menu, or the Gnome Preferences menu.
ubuntu setup: up to and including 11.x should be OK.
1. Ubuntu kernel has smsc-ircc2 module configured.
2. In /etc/modprobe.d/irda-utils add line: alias irda0 smsc-ircc2
3. In /etc/default/irda-utils edit: DEVICE=”irda0” SETSERIAL=”/dev/ttyS0” SMCINIT=”no”
4. In /etc/init.d/irda-setup under FIR=”smsc-ircc2”; add line
OPTIONS=”–ignore-install ircc_dma=3 ircc_irq=3 ircc_fir=0×130 ircc_sir=0×3f8”
NOTE: Invoking smcinit or setting to “yes” in /etc/defaults/irda-utils prevents the operation of IR. Ensure other related modules are loaded before invoking /etc/init.d/irda-utils start.