加速度センサーでLX200 の安全対策 予備実験

あいかわらず天気が悪く、なかなか観測ができない。晴れているようでも、透明度がいまいちで、観測・測定したデータはエラーが多い。とまれ、望遠鏡を動かす時間は増えているので、トラブルもいくつかある。先日、朝に観測室に入ってみたら、望遠鏡が下を向いていた。前日の観測を終えたときに電源を切り忘れた。もうすこしでケーブルをひきちぎったりするところだった。

以前にも、このようにして、壊したことがあるので、LX200の電源LEDを自己点滅型に交換して動作していることがわかるようにしてある。それでもこの有様なので、懸案となっている安全対策を考えることにした。

比較的単純なのは、LIMIT SWである。写真のようなマイクロスイッチを適当な場所に取り付けて、赤径・赤緯軸が限界まで回転すると動作するようにして電源を切るなどして、動作を止める。この方法は、単純で確実なのだが、赤道儀に適切に取り付けるのがめんどうである。

イメージ 4

いささか複雑になるが、角度センサー+マイコンで考えてみることにした。角度センサーで望遠鏡の向いているところを検出できれば、間違って GOTOコマンドを実行したときにも対応できそうである。
角度センサーは秋月などで入手できるものがいろいろあるが、単にチルトを検出するだけだったり、アナログ出力だったりして、使えない。そんなわけで、秋月で取り扱っている加速度センサーADXL345を使って角度を検出することにした。

このセンサーは安価なわりにはかなり高機能であり、使い方も複雑なのだが、Arduinoのライブラリがあるため、簡単に使うことができる。図のように接続して、サンプルをたよりにプログラムを書いてテストする。
イメージ 1

ブレッドボードで実験。
イメージ 2

こんなふうにボードを傾けて置いたりして、シリアルモニタに出力したところ、らしい値が検出された。
イメージ 3

LX200に実装するには、もうすこしいろいろなことを詰めないといけないけれども、とりえず角度を検出するという初期の目標はクリア。

参考までに、Arduino のスケッチ。
動作は、Arduinoシリアルモニタで確認する。何か一文字送信すると、加速度を検出し、角度を計算してPCに送信する。

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

#include <Wire.h>
#include <ADXL345.h>
 
ADXL345 adxl;         //variable adxl is an instance of the ADXL345 library
char incoming_char; // Character read from serial stream
  
void setup(){
  Serial.begin(9600);
  adxl.powerOn();             // Sensor Power ON
 
}
 
void loop(){
 int x,y,z;                    // X,Y,Z value
 double Xangle,Yangle;
 
 //Check for character
  if(Serial.available()>0){
    incoming_char = Serial.read();

    adxl.readAccel(&x, &y, &z);     // Read the accelerometer values and store them in variables  x,y,z
 
    // Output x,y,z values
   
    Xangle = atan2(x,z)/3.14*180;   // Calcurate angle
    Yangle = atan2(y,z)/3.14*180;
   
    Serial.print("X=  ");           Serial.print(x);
    Serial.print("  Xangle=  ");    Serial.println(Xangle,1);
    Serial.print("Y=  ");           Serial.print(y);
    Serial.print("  Yangle=  ");    Serial.println(Yangle,1);
    Serial.print("Z=  ");
    Serial.println(z);              Serial.println();
 
 delay(10) ;        // Wait 10 msec
  } 
}