Another Build By Jeremy Woodham:
This rotator consists of a NEMA 11 geared stepper (27:1) (the dual shaft is not necessary) mounted to a piece 1/8" aluminum angle 1.5" x 1.5" x 1.5". The angle is attached to the CAA using the locking screw threads using a 10mm x 1.5mm pitch bolt with the hex head ground down for clearance. Two 10mm jam nuts (thin) are used for locking. The drive mechanism is a timing belt that was cut in half lengthwise to minimize backfocus consumption and fit behind the focus tube rack gear. The length was measured once the unit was assembled. A 1" portion of the belt was shaved flat with a razor blade to provide overlap and was glued with superglue to form a circle (with a very firm hold). The gear shoulder was removed on a mini-lathe and set-screw holes were drilled and tapped in the gear tooth portion to attach to the shaft (It may be possible to eliminate this step by changing the stepper mount configuration). The belt tension is adjusted with the trimmed head 10mm bolt. The stepper is driven by an Arduino and a Pololu stepper driver.
The initial build with a narrow belt ended up slipping too much. I eliminated some back focus by making a custom adapter for the AO (here) allowing for the full width belt to be used. (much better)
I also increased friction by using contact cement to attach an opposing belt on focus tube. A notch in the drive belt for the rack on the bottom of the focus tube also helps prevent slipping, but only when engaged, if the motor is over this position it still slips occasionally. To fix this an anti-slip cog was made from small pieces of belt (3 layers) that was super-glued to the focus tube belt. Notches were cut in the rotator belt to accommodate the cog and the rack on the bottom of the focus tube.
A final improvement was made by using a custom made ring gear with a slot for the focus rack that holds it in place, elminating the need for the reverse belt glued to the tube. (BTW the contact cement came off with goo gone).
The Hall effect sensor is mounted with double sided foam tape (less than ideal but works for now). The magnet is attached to a plastic coated aluminum rod (from a toy set) and secured to a small aluminum plate with a nylon tie wrap.
Arduino firmware and ASCOM driver can be found at the bottom of the page.
My first test was on a very cold MN night at -10F and there was surprisingly very little slippage.
First, determine how many steps it takes for the rotator to complete one complete revolution. This can be done by placing a pencil line that goes across the CAA and the focus tube. Use the Manual move switch while monitoring stepper motor position using the Arduino Serial monitor. The initial stepper position will be reported on startup. It can be set to zero by sending a P 0# command. If you don't have a manual move switch, move commands can be issued by sending M xxxx# (note space) which will move the stepper to the absolute position xxxx. Keep moving to find exact number of steps for 1 revolution.
Then enter that value x 2 in the firmware maxSteps variable. You will also need to enter this value/360 in the driver setup to designate Steps/degree.
1) Stepper - Stepperonline.com These geared stepper are great. There is essentially no backlash and they hold very strong without needing to be continuously powered. Many (not all) models are also available via Amazon prime. I only got the dual shaft since it was available on Amazon and non-dual wasn't.
2) Timing belt/gear - Amazon.com
3) Aluminum and Misc Hardware from local hardware store
4) Stepper Driver - pololu.com
5) Arduino uno (any)
6) Hall Effect Sensor OH090U - Digi-Key
7) Misc Components (~270 and ~660 ohm resistors, and an LED)
Download and unzip the firmware below. You'll need to install the accelstepper library from here: http://www.airspayce.com/mikem/arduino/AccelStepper/. Upload to Arduino. You'll need to determine how many steps it takes for the rotator to complete one complete revolution. This can be done by placing a pencil line or pieces of tape that go across the CAA and the focus tube to mark position. Use the Manual move switch while monitoring stepper motor position using the Arduino Serial monitor. The initial stepper position will be reported on startup. It can be set to zero by sending a P 0# command. If you don't have a manual move switch, move commands can be issued by sending M xxxx# (note space) which will move the stepper to the absolute position xxxx. Keep moving to find exact number of steps for 1 revolution. To display the current position send the G# command. Once steps for 1 revolution are determined...leave the stepper to that position for the first time driver setup (below).
Then enter that stepper position value x 2 in the Arduino firmware "maxSteps" variable. You will also need to enter this value/360 in the driver setup to designate Steps/degree.
Install the driver (below) by downloading, unzip and run setup. (To uninstall go to control panel, uninstall program and find ASCOM scopefocus Rotator Driver, select and click uninstall)
The driver and firmware are setup up to allow 2 complete revolutions of the rotator. From the starting position of 0 the rotator can go 1 revolution in either direction. In general moves to the last 90 degrees of this range are avoided. This allows for shorter move excursions. For example if at 10 degrees and want to go back to 355 degrees...the rotator will go back through zero to 355. If further adjustments are made it will always travel the shortest route until it gets to within the last 90 degrees. If it's still a very short move it will go there...if it's coming from more than 90 degrees away...it will avoid this region and go back around favoring the area around the zero starting point. This is to minimize chord wrap.
The Zero starting position can be defined in the driver setup. Make Sure the Stepper position is at the 1 complete revolution position (half of the "maxSteps" value) if not, use arduino serial monitor and the M xxxxx# command to get there. Then in the Driver Setup (Click properties), check the "Set Position" box and enter 0. This will set the position in the middle of that 0-720 degree range (i.e. 360) and report the position as 0 degrees.
Alternatively, there is a Home function that will initiate rotation until the magnet is sensed then assign that as 0 degree starting point. To minimize confusion and adhere to rotator position conventions, the position will always be reported between 0 and 360 degrees regardless of where in the 0-720 degree range it is. Homing can be initiated by sending the H# command from the serial monitor, pushing the Home button from scopefocus or the Rotator Control application (below). This is not standard ASCOM function so most control applications will not support this feature.
To use the Control App download, unzip and run setup.exe. Click Choose, select the scopefocus driver, (you must click properties on first use, enter steps/degree and select the COM port, then OK). Then can control via relative moves of chosen step size with the CW and CCW buttons, or go to an absolute position.
The 'Sky angle' can be utilized from a platesolve of the current orientation. Syncing the rotator to an orientation angle from plate solve will cause the position to be reported relative to that sync. scopefocus will report both eh actual angle on the telescope and the synced sky angle. Other applications (e.g. SGP) will simply correct for sync and only report the new corrected camera angle.
There is also a Continuous hold feature. Normally these geared steppers do not need to be powered to hold their position so the stepper driver is disabled (via the ENABLE Pin) after every move. If your setup doesn't hold position, Check the "Continuous Hold" box in the driver setup (accessed via Properties button in the chooser) and the motor will stayed powered after each move to hold position. This can also be set through the Serial monitor by sending the command C 1# for on and C 0# for off.
****** REVERSE: If you find the the rotator is going the wrong direction, simply change the following code in the arduino firmware: Init tab, 3rd line from the bottom, change from reverseDir(false); to reverseDir(true); ******
Custom made ring gear.
Arduino Diagram (click to enlarge)
Focus Rack gear notch prevent slippage
Small magnet mounted on Focus gear mount cover
Opposing timing belt attached to focus tube with contact cement
Notch for anti-slip cogging
Stack of belt pieces - 3 layers to anit-slip cog
First Attempt - narrow belt slipped and wouldn't stay on opposing belt.
previous narrow belt consumes minimal backfocus.
Rotator Driver: use the most recent by date: RotatorscopefocusServer_Ver6_5_7610_24758
(updated to ensure function w/ ASCOM platform 6.5)