Jump to content

Banner.jpg.b83b14cd4142fe10848741bb2a14c66b.jpg

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


chemistorge

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 5
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.

3BF5DBCC-7E31-49A1-A13E-0770B99D8B27.thumb.jpeg.b102e8062d527800f4dcd011d7417049.jpeg

31C2E532-DD86-4727-82F2-AA41F474BEFD.thumb.jpeg.af2650cb18e35489335033ff5c7f7b71.jpeg

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 HALLSENSORTYPE 2 // SET to 1 for ANALOG HALL Sensor, CHANGE to 2 for DIGITAL HALL SENSOR 
#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.

Thanks..

OscarP

Link to comment
Share on other sites

  • 8 months later...

I was looking at this project and I think it's fantastic!
I have several Xagyl filter wheels including 2 to 8 filters which no longer work because of the electrical circuit, I called on the company as well as several retailers who sell this product to have new circuits, but without success . Is it possible to have a code for a filter wheel for 8 filters?
This would undoubtedly save (if I can make the adaptation), my 2 wheels with filters which no longer work.
Thanks in advance!

Link to comment
Share on other sites

  • 2 weeks later...
On 16/03/2023 at 12:40, OscarP said:

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 HALLSENSORTYPE 2 // SET to 1 for ANALOG HALL Sensor, CHANGE to 2 for DIGITAL HALL SENSOR 
#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.

Thanks..

OscarP

Line 8: the 4 sets the mode of the Accelstepper driver to Unipolar.

Line 22: 

#define analogSensorThreshold 430 // set the threshold below which the homing sensor is triggered

set threshold for trigger if using an analog Hall Sensor (analog is 0-1023), with no magnet it will read ~512.

 

#define HALLSENSORTYPE 2 // SET to 1 for ANALOG HALL Sensor, CHANGE to 2 for DIGITAL HALL SENSOR 
#define HALLACTIVETYPE 2 // SET to 1 for ACTIVE HIGH Digital Sensor, CHANGE to 2 for ACTIVE LOW digital Sensor
 
change to suit hall sensor type.
 
ine 26
const int filterPos[] = {0, 56, 466, 876, 1286, 1696}; //Rough alignment of filterPos
 
rough position of filter positions from Hall Sensor (sensor, filter1, filter2, filter3, filter4, filter5). used to set rough position of filters in motor steps from home. The position offsets are later used to fine tune these values.
 
line 85
  stepper.runToNewPosition(stepper.currentPosition() - 500); //back magnet off sensor
used to move the magnet off the sensors so that if by chance the sensor and magent are aligned we can remove the signal
 
  stepper.moveTo(3000); //set move to as 3000 (one rotation is ~2000 steps so if not homed by then raise error.
 
do just over one revolution of the filter wheel looking for sensor signal. We must find the homing signal by then.
 
 
 
 

 

Link to comment
Share on other sites

On 13/12/2023 at 03:53, JBD said:

I was looking at this project and I think it's fantastic!
I have several Xagyl filter wheels including 2 to 8 filters which no longer work because of the electrical circuit, I called on the company as well as several retailers who sell this product to have new circuits, but without success . Is it possible to have a code for a filter wheel for 8 filters?
This would undoubtedly save (if I can make the adaptation), my 2 wheels with filters which no longer work.
Thanks in advance!

Hi this is possible, the current code is hard coded for 5 in several places (bad me), but I will try and have time to update to a more general code for filter numbers up to 8. Do the official filter wheels do magnetic sensing?

Link to comment
Share on other sites

On 13/12/2023 at 03:53, JBD said:

I was looking at this project and I think it's fantastic!
I have several Xagyl filter wheels including 2 to 8 filters which no longer work because of the electrical circuit, I called on the company as well as several retailers who sell this product to have new circuits, but without success . Is it possible to have a code for a filter wheel for 8 filters?
This would undoubtedly save (if I can make the adaptation), my 2 wheels with filters which no longer work.
Thanks in advance!

Code now updated to include any number for filters. Change the following settings to suit your setup

 

// SETTINGS - MAIN PARAMETERS
#define stepsPerRevolution 2048 //set number motor steps for wheel to rotate once
#define numberOfFilters 5
#define offSetResolution 5 //number of motor steps for one offset change
#define homingOffsetSteps 56 // number of steps from homing point to centre of first filter
#define buzzerConnected 0 //1 to enable on pin 2, 0 to disable
#define ledConnected 1 //1 to enable on pin 3, 0 to disable 

// SETTINGS - MOTOR
#define IN1 9 // unipolar motor pins (set all pins)
#define IN2 6 //motor driver step pin
#define IN3 8
#define IN4 7 //motor driver dir pin
#define motorType 1 //1 for unipolar, 2 for motor drive board (e.g. A4988)


// SETTINGS - HALL SENSOR
#define analogSensorThreshold 430 // set the threshold below which the homing sensor is triggered
#define HALLSENSORTYPE 2          // SET to 1 for ANALOG HALL Sensor, CHANGE to 2 for DIGITAL HALL SENSOR
#define HALLACTIVETYPE 2          // SET to 1 for ACTIVE HIGH Digital Sensor, CHANGE to 2 for ACTIVE LOW digital Sensor

 

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • 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.