VIXENのSX赤道儀(スフィンクス赤道儀)の改造について紹介します。
※改造については、あくまでご自身の責任にてお願いいたします。本内容は参考情報としてご覧ください。
1. 準備
1.1 Arduino IDEのインストールと設定
Arduino IDEというフリーの開発環境をインストールします。ここでは、version 2.3.4を使ったの説明になっています。
Aruduino IDEのダウンロードサイト
Arduino IDEをインストールしたら、まず初期設定を行い、ESP32を操作できる環境を構築します。
1.ファイル → 基本設定 を開きます。
2.「追加のボードマネージャのURL」に以下の2つのURLを入力します。https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
http://arduino.esp8266.com/stable/package_esp8266com_index.json
これにより、使用するマイコンのコンパイルおよび、書き込みができる環境がダウンロードできるようになります。前者がOnstep本体ESP32用で。後者がSmart web serverのESP8266(Wemos D1 mini Pro等)です。

1.2 ボードの設定
1. ツール → ボードマネージャ を開きます。
2. 「ESP」で検索すると、いくつかの候補が表示されます。
3. 「esp32 by Espressif Systems」 を選択します。最新版ではなく、「2.0.17」 を選択してください。
別のバージョンではコンパイルエラーが発生する可能性があります。
最選択すべきバージョンの最新情報はOnStepの公式サイト を確認ください。

4. ツール → ポート ESP32で、 Dev Moduleを選択します
5. ツール → ポートで、USB接続したボードのCOMポートを選択
windowsのデバイスマネージャで、接続したESPがどのCOMポートに接続されたかを確認します。

1.3 OnstepXのソースファイルのダウンロード
プログラムは、Onstepと、OnstepXがあり、バージョンもいくつか存在します。基板もいくつか種類があります。Congig.hファイルに設定を入力します。必要なConfig.hの設定を順番に説明していきます。今回使用するのは、OnstepX ver10.24cを使用します。
Onstepと、OnstepXの2つがありますが、ここでは、新しいonstepXを使用します。
ダウンロードサイト
ダウンロードしたソースファイルの中にあるConfig.hファイルなどを使用に合わせて修正して、コンパイルしマイコンに書き込みます。以下、設定ファイルの変更について述べていきます。
2. ソースコードの修正
2.1 基板の選択と通信方法の設定
①PINMAPにMaxESP3にします。
ここに基板の種類を入力することで、PIN配置が自動的に読み込まれます。基板は、ここではMaxESP3に準じたものを使用します。
②SERIAL_RADIOは、OFFにします。ESP32の内蔵WIFIを使用する場合は、WIFI_ACCESS_POINTにしますが、ここでは、別体のWIFIを使用するためOFFにします。
Config.h
// PINMAP ------------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Controller#PINMAP
#define PINMAP MaxESP3 // OFF, Choose from: MiniPCB, MiniPCB2, MaxPCB4, MaxESP4, MaxSTM3, FYSETC_E4, <-Req'd
// BTT_SKR_PRO, etc. Other boards and more info. in ~/src/Constants.h
// SERIAL PORT COMMAND CHANNELS --------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Controller#SERIAL_PORTS
#define SERIAL_A_BAUD_DEFAULT 9600 // 9600, n. Where n=9600,19200,57600,115200,230400,460800 (co
2.2 LEDの機能選択
LEDは、ステータスのインジケータか、レクチルに使用することができます。
SX赤道儀に標準で内蔵されている極軸望遠鏡用のLEDを制御するために、このチャンネルを使用します。そのためには、以下のように変更します。RECTILE_LED_DEFAULTは、LEDの明るさを0-255で入力します。0が最も明るく、255が最も暗くなります。SX赤道儀に内蔵されている極軸望遠鏡のLEDを使用するうえでは、252近辺が程よい明るさになります。
ハンドコントローラを接続していれば、ハンドコントローラを使って、明るさの調整が可能です。
Config.h
// STATUS --------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Controller#STATUS_LED
#define STATUS_LED OFF // OFF, Steady illumination if no error, blinks w/error code otherwise. Option
// RETICLE CONTROL ------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Controller#RETICLE_CONTROL
#define RETICLE_LED_DEFAULT 252 // OFF, n. Where n=0..255 (0..100%) activates feature sets default brightness. Option
#define RETICLE_LED_MEMORY OFF // OFF, ON Remember reticle brightness across power cycles. Option
#define RETICLE_LED_INVERT OFF // OFF, ON Inverts control for cases where 0V is max brightness. Option
2.3 モータードライバの選択と駆動スピードの設定
Onstepでは、いくつかの種類のモータードライバーが使用可能です。Config.hに使用するモータードライバに合わせて、Config.hのAXISx_DRIVER_MODELを修正します。
ここでは、TMC2130を使用します。

赤道儀のモータースペック、ギアレシオに合わせて、コードを書き換えます。
こちらのエクセルシートに仕様を入力すると、Config.hのコードに入力する値を計算してくれます。
また、パラメータは、モータ毎(AXIS毎)に設定していきます。
- Gear Reduction / Other steps
モーターとウォームギア間のギアレシオ: ここで紹介する赤道儀のレシオは1になります。参考 - Gear Reduction / Final stages
ウォームギアのギアレシオ: SX赤道儀のギアレシオは180です。 - Step Motor / Stepper-steps :
ステッピングモータのステップ幅:
ここではギア付きのモータを使用しているため、0.1degになります。 - Step Motor / Micro-steps :
マイクロステップ
ステッピングモータステップ幅を分割して、角度分解能をあげることができます。モータードライバによって、選べる数字は異なります。また、マイコンの計算スピードによっても、制約があります。今回は4を選択しています。(数字を大きくしすぎて、正常に動作しない場合は、値を小さくします。) - slew speedはmGOTO時のスピードです。ここでは2.0にしています、これは、480倍速です、SX赤道儀の5deg/s(1200倍速)よりゆっくりに設定しています。状況に合わせて、調整するのがよいでしょう。
Config.hに書かれている変数の値にしががって、Config.hのコードを修正していきます。

その他のパラメータについて
- AXIS1_REVERSE
ステッピングモータの回転方向を決めます。実際に動作をさせて、赤道儀の軸の動作が逆転する場合は場合は、ON/OFFで切り替えます。 - AXIS1_DRIVER_MICROSTEPS_GOTO
GOTOの際は、ステップ幅の解像度は必要ないため、1としておきます。
TMC2130の場合、ソフトウェアからモーター電流を設定できます。モータ及び、ドライバの上限を超えない範囲で、ざっくりと設定します。
(モーターPK243の定格は、0.95A、ドライバのBIGTREETECH TMC2130の定格電流は1.2Aです。)
- AXIS1_DRIVER_IHOLD
- AXIS1_DRIVER_IRUN
- AXIS1_DRIVER_IGOTO
Config.h
// AXIS1 RA/AZM -------------------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Axes
#define AXIS1_DRIVER_MODEL TMC2130 // OFF, Enter motor driver model (above) in both axes to activate the mount. <-Often
// If runtime axis settings are enabled changes in the section below will be ignored (disable in SWS or by wiping NV/EEPROM):
// \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/
#define AXIS1_STEPS_PER_DEGREE 7200 // 12800, n. Number of steps per degree: <-Req'd
// n = (stepper_steps * micro_steps * overall_gear_reduction)/360.0
#define AXIS1_REVERSE ON // OFF, ON Reverses movement direction, or reverse wiring instead to correct. <-Often
#define AXIS1_LIMIT_MIN -180 // -180, n. Where n= -90..-360 (degrees.) Minimum "Hour Angle" or Azimuth. Adjust
#define AXIS1_LIMIT_MAX 180 // 180, n. Where n= 90..
// AXIS2 DEC/ALT ------------------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Axes
#define AXIS2_DRIVER_MODEL TMC2130 // OFF, Enter motor driver model (above) in both axes to activate the mount. <-Often
// If runtime axis settings are enabled changes in the section below will be ignored (disable in SWS or by wiping NV/EEPROM):
// \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/
#define AXIS2_STEPS_PER_DEGREE 7200 // 12800, n. Number of steps per degree: <-Req'd
// n = (stepper_steps * micro_steps * overall_gear_reduction)/360.0
#define AXIS2_REVERSE OFF // OFF, ON Reverses movement direction, or reverse wiring instead to correct. <-Often
#define AXIS2_LIMIT_MIN -90 // -90, n. Where n=-90..0 (degrees.) Minimum allowed Declination or Altitude. Infreq
#define AXIS2_LIMIT_MAX 90 // 90, n. Where n=0..90 (degrees.) Maximum allowed Declination or Altitude. Infreq
#define AXIS2_DRIVER_MICROSTEPS 4 // OFF, n. Microstep mode when tracking. <-Req'd
#define AXIS2_DRIVER_MICROSTEPS_GOTO 1 // OFF, n. Microstep mode used during slews. OFF uses _DRIVER_MICROSTEPS. Option
// for TMC2130, TMC5160, TMC2209, TMC2226 STEP/DIR driver models:
#define AXIS2_DRIVER_IHOLD 300 // OFF, n, (mA.) Current during standstill. OFF uses IRUN/2.0 Option
#define AXIS2_DRIVER_IRUN 600 // OFF, n, (mA.) Current during tracking, appropriate for stepper/driver/etc. Option
#define AXIS2_DRIVER_IGOTO 800 // OFF, n, (mA.) Current during slews. OFF uses IRUN. Option
// /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /\ /
// SLEWING BEHAVIOUR ------------------------------------------ see https://onstep.groups.io/g/main/wiki/Configuration_Mount#SLEWING
#define SLEW_RATE_BASE_DESIRED 1.75 // 1.0, n. Desired slew rate in deg/sec. Adjustable at run-time from <-Req'd
// 1/2 to 2x this rate, and as performace considerations require.
#define SLEW_RATE_MEMORY OFF // OFF, ON Remembers rates set across power cycles. Option
#define SLEW_ACCELERATION_DIST 5.0 // 5.0, n, (degrees.) Approx. distance for acceleration (and deceleration.) Adjust
#define SLEW_RAPID_STOP_DIST 2.0 // 2.0, n, (degrees.) Approx. distance required to stop when a slew Adjust
// is aborted or a limit is exceeded.
#define GOTO_FEATURE ON // ON, Use OFF to disable mount Goto features. Infreq
#define GOTO_OFFSET 0.25 // 0.25, Offset in deg's for goto target unidirectional approach, 0.0 disables Adjust
#define GOTO_OFFSET_ALIGN OFF // OFF, ON skips final phase of goto for align stars so user tends to approach Option
// from the correct direction when centering.
2.4 RTCリアルタイムクロック(オプション)
Onstepが時間を認識するためには、RTCリアルタイムクロックを使用するのが便利です。
これを使用することで、Onstepは電源を落とした状態でも、時間を保持することができるようになるため、毎回時間設定をする手間を省くことができます。

Config.h
// TIME AND LOCATION ---------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Mount#TLS
#define TIME_LOCATION_SOURCE DS3231 // OFF, DS3231 (I2C,) SD3031 (I2C,) TEENSY (T3.2 etc,) GPS, or NTP source. Option
// Provides Date/Time, and if available, PPS & Lat/Long also.
#define TIME_LOCATION_PPS_SENSE OFF // OFF, HIGH senses PPS (pulse per second,) signal rising edge, or use LOW for Option
// falling edge, or use BOTH for rising and falling edges.
3.3.4 GPS受信機(オプション)
GPS受信機を使用することも可能です。これを使用することで、時間と場所の両方を自動的に認識することが可能となります。ただし、RTCとGPSの併用はできません。
GPSは、NEMAフォーマット形式のシリアル通信できるものがが使用可能です。ここでは、秋月電子で購入可能なGT-502MGG-Nを使用しています。

Config.h
// TIME AND LOCATION ---------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Mount#TLS
#define TIME_LOCATION_SOURCE GPS // OFF, DS3231 (I2C,) SD3031 (I2C,) TEENSY (T3.2 etc,) GPS, or NTP source. Option
// Provides Date/Time, and if available, PPS & Lat/Long also.
#define SERIAL_GPS Serial
#define TIME_LOCATION_PPS_SENSE OFF // OFF, HIGH senses PPS (pulse per second,) signal rising edge, or use LOW for Option
// falling edge, or use BOTH for rising and falling edges.
2.5 ハンドコントローラの設定(オプション)
赤道儀は、SWS経由でスマホのタッチパネルで操作できます。しかし、暗闇の中で操作するうえでは、スマホのタッチパネル操作に比べて、ハンドコントローラのようなメカニカルスイッチが非常に扱いやすいです。
ハンドコントローラを使用するために、各フラグをONにします。

Config.h
// ST4 INTERFACE -------------------------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Mount#ST4
// *** It is up to you to verify the interface meets the electrical specifications of any connected device, use at your own risk ***
#define ST4_INTERFACE ON // OFF, ON enables interface. <= 1X guides unless hand control mode. Option
// During goto btn press: aborts slew or continue meridian flip pause home
#define ST4_HAND_CONTROL ON // ON, ON for hand controller special features and SHC support. Option
// Hold [E]+[W] btns >2s: Guide rate [E]- [W]+ [N] trk on/off [S] sync
// Hold [N]+[S] btns >2s: Usr cat item [E]- [W]+ [N] goto [S] snd on/off
#define ST4_HAND_CONTROL_FOCUSER ON // ON, ON alternate to above: Focuser move [E]f1 [W]f2 [N]- [S]+ Option
2.6 温度湿度・気圧センサの設定(オプション)
BME280を取り付けることで、温度、湿度、気圧を取得することができるようになります。
BME280は、I2C通信です。BME280は、SDOpinによって、I2Cアドレスを2つから選択可能です。
| SDO | 2Cアドレス | #define WEATHER |
| VDD | 0x77 | BME280 |
| GND | :0x76 | BME280_0x76 |


Config.h
// WEATHER SENSOR --------------------------------- see https://onstep.groups.io/g/main/wiki/Configuration_Controller#WEATHER_SENSOR
#define WEATHER BME280 // OFF, BME280 (I2C 0x77,) BME280_0x76, BME280_SPI (see pinmap for CS.) Option
// BMP280 (I2C 0x77,) BMP280_0x76, BMP280_SPI (see pinmap for CS.)
// BME280 or BMP280 for temperature, pressure. BME280 for humidity also.
4. Smart Web Serverのプログラミング
Smart Web Serverのハードウェアには、Wemos D1 Proを使用します。プログラムはこのWemos D1 ProにArduino IDEを使用して直接書き込みを行います。
SWSを介することで、Wi-FiでPCやスマホでOnstepと通信ができるようになります。また、SWSと本体とシリアル通信で接続されます。

4.1 ボードの設定
Smart web Serverは以下でダウンロードします。
ダウンロードサイト
(2のステップと同様に、ボードマネージャインストールします。)
1. ツール → ボードマネージャ を開きます。
2. 「ESP8266」で検索すると、いくつかの候補が表示されます。
3. 「esp8266 by ESP8266 Community」 を選択します。最新版ではなく、「2.7.4」 を選択してください。
別のバージョンではコンパイルエラーが発生する可能性があります。
最選択すべきバージョンの最新情報はOnStepの公式サイト を確認ください。されています。

4. ツール → ポート ESP8266で、 LOLIN(WEMOS)D1 mini Proを選択します
5. ツール → ポートで、USB接続したボードのCOMポートを選択
windowsのデバイスマネージャで、接続したESPがどのCOMポートに接続されたかを確認します。
4.2 Smart Web Serverのソースファイルの修正
Smart Web Serverは、 「Access-Point mode(AP)」と「Station mode(STA)」のどちらかを選択可能で、デフォルトでは「Access-Point mode」になっています。
Access-Point mode:
デフォルトではこのモードが有効になっており、OnStepがアクセスポイントとして動作します。 ここで、アクセスポイントの名前やパスワードを任意に変更できます。Smart Web Serverのハードウェアには、Wemos D1 Proを使用します。プログラムはこのWemos D1 ProにArduino IDEを使用して直接書き込みを行います。
SWSを介することで、Wi-FiでPCやスマホでOnstepと通信ができるようになります。また、SWSは、USRTで通信が行われます。
Station mode (connect toAccess-Point):
ホームサーバーなどのアクセスポイントに、OnStepやPCを接続する構成です。 アクセスポイントのSSIDとパスワードを入力し、OnStepのIPアドレスを設定します。 OnStepは起動時に自動でアクセスポイントへ接続します。 PCのブラウザでOnStepのIPアドレスを入力すると、SWSの画面が表示されます。
Extended.config.h
// These settings are stored in NV (EEPROM) and the SWS will not recognize the settings below except on the first upload unless
// NV is wiped, these settings (where applicable) can be changed at runtime however.
#define AP_ENABLED true // true, Wifi Access Point Enabled. Adjust
#define AP_SSID "ONSTEP" // "ONSTEP", Wifi Access Point SSID. Adjust
#define AP_PASSWORD "password" // "password", Wifi Access Point password. Adjust
#define AP_CHANNEL 7 // 7, Wifi Access Point channel. Adjust
#define AP_IP_ADDR {192,168,0,1} // ..,168,0,1}, Wifi Access Point IP Address. Adjust
#define AP_GW_ADDR {192,168,0,1} // ..,168,0,1}, Wifi Access Point GATEWAY Address. Adjust
#define AP_SN_MASK {255,255,255,0} // ..55,255,0}, Wifi Access Point SUBNET Mask. Adjust
#define STA_ENABLED false // false, Wifi Station Enabled. Adjust
#define STA_SSID "Home" // "Home", Wifi Station SSID to connnect to. Adjust
#define STA_PASSWORD "password" // "password", Wifi Station mode password. Adjust
#define STA_DHCP_ENABLED false // false, Wifi Station/Ethernet DHCP Enabled. Adjust
#define STA_IP_ADDR {192,168,1,55} // ..168,1,55}, Wifi Station/Ethernet IP Address. Adjust
#define STA_GW_ADDR {192,168,1,1} // ..,168,1,1}, Wifi Station/Ethernet GATEWAY Address. Adjust
#define STA_SN_MASK {255,255,255,0} // ..55,255,0}, Wifi Station/Ethernet SUBNET Mask. Adjust