Jump to content


DIY 3D Printable Motorised 1.25" Filter Wheel (ASCOM and INDI)


Recommended Posts

Hi All, 

I recently bought myself a little SW MAK102. While doing this I though it might be nice to use my ASI120MM-S camera with it for mono planetary imaging (just for fun!). To this end I though I could do with a  filter wheel, so I searched for 3D printable one. I choose this one:  https://www.thingiverse.com/thing:1292900 . It printed fine but I had to reprint the carousel several times to get the filter holes correctly sized. Also the model has female threads on both sides with no adaptor. 

Time when on and I thought why not motorise it! I looked online and found a git hub (https://github.com/Blueshawk/Rayz-indi-wheel) with Arduino code compatible with Xagyl filter wheel drivers and instructions to modify cheap manual filter wheels. This looked good until I tried the code, it was very buggy with INDI and the serial latency was poor. 

Fast Forward: 

I decided to design a motorised filter wheel from scratch and also completely rewrite the arduino code and I am happy to say it works completely with INDI (Kstars) and ASCOM (tested with sharp cap).  The functions are limited to moving filters and set offsets only, but what else do you need. Additionally there are buttons on the wheel to manually move filters (although no feedback) . 

The filter wheel in the videos and pictures is my prototype. I have made slight modifications in the 3d cad files to improve the design.  There are two designs for the bottom, either M42 for T2 connection to scope or M48 for connection via coma corrector.  The filter box is bolted with M3 bolts and nuts and the circuitry lid uses M3 bolts that are threaded into plastic holes.  The circuitry holder fits the Arduino Nano, Motor driver board and 28BYJ-48 motor and Hall Sensor.

See GitHub for files and Code https://github.com/chemistorge/Arduino-Motorised-Filter-Wheel-Xagyl-compatible-ASCOM-and-INDI-IMG_20210902_215242068.thumb.jpg.217edc810367cec9e82d538f16e2a072.jpgIMG_0086.thumb.JPG.d5b121ff64e4796e13994db2b0126d1d.JPGIMG_0087.thumb.JPG.b72a3e8bd4a829e7bfbc3f1f4796d51b.JPGIMG_0088.thumb.JPG.5e81f37058713c2ac07df966bfef4b47.JPG


With indi drivers, you have to save configuration after setting offsets otherwise it resets them when you next connect. You can also use a serial monitor to talk to the wheel.. see code for commands.


I will be adding more to Git hub as I get time.

Video with ASCOM and SharpCap:

Video with INDI: 

Edited by chemistorge
  • Like 4
Link to comment
Share on other sites

Here is a photo with a asi120mm and 2x Barlow connected. One thing to note with Indi is to put the driver into auto search mode, I have sometimes 4 arduinos connected (mount, focuser, dew heater, filter wheel) and the driver needs to hunt for the correct one.



Edited by chemistorge
  • Like 2
Link to comment
Share on other sites

  • 1 year later...

Very interesting building. 

I have the wheel (purchased one, i hate make theads in my 3d printer), i have the electronic, ascom recognize it, wheel move , but need config and choose a position for the hall sensor......

....but, please, can you explain me what i must change in the code for use the same motor attached to the exterior side of the inner wheel?  using friction to move, but a lot of more steps per revolution.....

Watching your video i see that you installed the magnet between two filter positions, i have a very small neodymiun that trigger the digital hall sensor perfectly, but what values must i change? (i see the changes in lines 23 y 24 for choose digital and low sensor).


I see some lines that sure i must change,  but i am not a programmer (only a "copy and paste" man), and it was very usefull to know what changes i must make depending of the total steps for revolution...

line 8
#define Steps 4 //stepper steps 2048 per rev
line 22
#define analogSensorThreshold 430 // set the threshold below which the homing sensor is triggered
#define HALLACTIVETYPE 2 // SET to 1 for ACTIVE HIGH Digital Sensor, CHANGE to 2 for ACTIVE LOW digital Sensor
line 26
const int filterPos[] = {0, 56, 466, 876, 1286, 1696}; //Rough alignment of filterPos
line 85
  stepper.runToNewPosition(stepper.currentPosition() - 500); //back magnet off sensor
  stepper.moveTo(3000); //set move to as 3000 (one rotation is ~2000 steps so if not homed by then raise error.



Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. By using this site, you agree to our Terms of Use.