加速度センサーでLX200 の安全対策 運用開始

先日来実験していた、加速度センサーを使った LX200 の安全対策は、とりあえず運用を開始した。LX200への取り付けは、写真のようにフォークの回転軸に固定して、赤径のオーバーランのみを検出するようにした。望遠鏡に取り付けて全方向で検出するようにすることは、今後の課題とする。

イメージ 1

オーバーランを検出したら、SSRをOFFにして、LX200の電源をOFFにするしくみ。そのコントロールBOXは、写真のとおり。
イメージ 2
電源をOFFにしたら、もとに戻すには、クランプをゆるめて動かすことになるが、ハンドセットやリモートでも動かせるように、強制電源ONのスイッチも取り付けた。

参考までに、回路図は、
イメージ 3

Arduino のスケッチ(プログラム)は、以下のとおり。
加速度センサーから読み込んで、角度を検出し、東西それぞれのLimit を超えたら、SSR をOFFにして電源を切るという簡単なもの。
加速度センサーからの出力の精度が良くないため、検出に際して ON/OFF のヒステリシスを設定してバタツキを抑えている。

/*******************************************************
Name: ADXL345_AngleSSR2
Function:  ADXL345加速度センサーモジュール角度検出
  SSR Power Controle
Notes:
1.  Originally from  http://bildr.org/2011/03/adxl345-arduino/
2.  Compile Arduino 1.66
********************************************************/

#include <Wire.h>
#include <ADXL345.h>
// include the library code:
 
ADXL345 adxl;                    //variable adxl is an instance of the ADXL345 library
char incoming_char;               // Character read from serial stream
const int LED = 13;
const int SSR = 2;
const int LimitLED = 3;
const double LimitEast = -60.0;   // Set East Limit
const double LimitWest =  60.0;   // Set East Limit
const double Hyster = 5.0;        // Set Hysteresis
boolean LimitON;
  
void setup(){

  adxl.powerOn();                 // ADXL345加速度センサーSensor Power ON

  pinMode(SSR, OUTPUT);           // SSR
  pinMode(LimitLED, OUTPUT);      // Limit LED
  LimitON = false;                // Initial set
}
 
void loop(){
 int x,y,z;                       // X,Y,Z value
 double Xangle,Yangle;

 adxl.readAccel(&x, &y, &z);      // Read the accelerometer values and store
 Xangle = atan2(x,z)/3.14*180;    // Calcurate X Y angle
 Yangle = atan2(y,z)/3.14*180;
 
 if (LimitON ==false){                                                 // Limit not Detected
   digitalWrite(LED,LOW);
   digitalWrite(SSR,HIGH);                                             // SSR ON
   digitalWrite(LimitLED,HIGH);                                        // Limit LED OFF
   // re-Check Limit
   if *1 LimitON = true;
   }
 else {                                                                 // Limit Detected
    digitalWrite(SSR,LOW);                                              // SSR OFF
    digitalWrite(LimitLED,LOW);                                         // Limit LED ON
    // re-Check Limit   
    if (!(( Yangle > (LimitWest - Hyster) )||( Yangle < (LimitEast + Hyster )))) LimitON = false;
    }

 delay(100) ;                      // Wait 100 msec






*1: Yangle > LimitWest )||( Yangle < LimitEast