HOME >> 鉄道模型工学 > 測定装置の製作 測定の自動化 機能テストとセンサの較正

測定装置の製作 測定の自動化 機能テストとセンサの校正

■ シールドと電圧・電流ユニットの機能テスト

 ハードの準備が整ったので、プログラムを組んで見る事にする。

 Arduino の電源は、9Volt用のACアダプターを使用し、USBケーブルでパソコンと接続して実験を開始する。 電圧・電流測定ユニット、デジタル電圧計、また、コントローラや負荷回路も接続した状態を下の写真に示す。 なお、デスクトップパソコンは、 VAIO-VGC-LN50DB、Windows Vista、を使用している。

*******  送信テスト ************

 #define LEDG_PIN 9
 #define Button 5
 void setup()
 {
   pinMode(LEDG_PIN,OUTPUT);
   pinMode(Button,INPUT);
   Serial.begin(9600);
 }
 void loop()
 {
   int voltage1;
   int voltage2;
   int voltage3;
   int current1;
   int current2;
   int current3;
   int vol_pin = 1;
   int cur_pin = 2;
   int input_Button = HIGH;
   while (input_Button == HIGH ) {
     input_Button = digitalRead(Button);
     digitalWrite(LEDG_PIN, HIGH); 
   }
   voltage1 = analogRead(vol_pin);
   current1 = analogRead(cur_pin);
   voltage2 = analogRead(vol_pin);
   current2 = analogRead(cur_pin);
   voltage3 = analogRead(vol_pin);
   current3 = analogRead(cur_pin);
   String buf = String(voltage1) + ","
+ String(current1) + "," + String(voltage2)
+ "," + String(current2)+ ","
    + String(voltage3)+ "," + String(current3)
+ ",E";    Serial.println(buf);    digitalWrite(LEDG_PIN, LOW);    delay(1000);  }

 電圧・電流ユニットから電圧値と電流値を読み取り、パソコンに送信するまでの機能をチェックしてみる。 受信されたかどうかはArduinoのシリアルモニタで確認する。 while 命令で、ボタンが押されるまで待機させ、ボタンが押されると、電圧と電流のアナログ入力値をanalogRead によって読み取り、Serial.println によってシリアル通信を使ってパソコンにデータを送信する。

 一度送信するとしばらくLEDを消灯し、時間を於いて再びボタンの待機状態に戻る。

 シリアルモニタを見ていると、何やらデータを受け取っており、コントローラのダイヤルを変えると、データも変化しているのが確認出来た。 そこで、幾つかのデータを処理させることを想定して アナログ入力から電圧と電流を交互に3回呼び込み、コンマ区切りのデータに加工して、一度に送信するようにしました。

 そのスケッチを右に示す。

● 作動状態の確認

 何回かのテストの後、うまく作動するようになりましたが、データを観察していてデータが何か変なのです。 そこで、データをExcel に取り込みグラフ化してみました。 電流値もおなじ傾向でしたので電圧値だけを下に示す。

 

 実際の計測計で計測した値と比例している場合もありますが、それとはかけ離れた値を表示する場合が多くあります。

 

************  電圧・電流測定ユニットの製作 (2013/3/6) を再編集 ******** 

 

 使用している電源( KATO: Power Pack Standard S )が原因ではないかと推定し、およそ1秒毎にデータを送信するようにプログアラムを変更して観察した結果を下に示す。 データより周期が約4秒の波を打っているのが観察された。 この様な場合には脈動成分を取り除くためにコンデンサの容量を100μFまで増やしてみたがまだ充分ではなかった。

 そこで手持ちのコントローラをTOMIX の N401 に取り換え結果、右のグラフの様に全く安定したデータを示していた。 一番安価な製品がピッタリであるとは驚きの結果であった。

 モータの脈動対策として考えた方法が、足元の電源側の理由で問題となってしまったとは意外であった。 この実験結果より、N401と100μFの組合せで進める事にし、測定ユニットのコンデンサを100μFの電解コンデンサを並列に追加した。

 

■ 電圧値と電流値の較正

 N401と100μFの組合せで、電圧と電流をテスターで測定しながらパソコンにデータを送って較正を実施した。 その実験風景を下に示します。

 Arduino が送信した電圧と電流の指示値と、実際にテスターで読み取った値をグラフにした。 AD変換の範囲は0〜1023ですので、常用としてこの程度でピッタリと考えています。 また、データは直線に乗っていますので、グラフに示す近似式が、電圧と電流に換算する時の換算式になります。

************  電圧・電流測定ユニットの不思議な振動 (2013/3/8) を再編集 ******** 

■ 安定化電源の投入

   .

 その後、ネットオークションで中古の安定化電源を見つけたのでダメモトのつもりで入手した。 なんでもアマチュア無線の愛好家の方が使用していた物とのことであった。 古い機種ではあるが、KATOやTOMIXのコントローラよりもずっと安く入手することが出来た。

この古いタイプの装置は、厳つい外観であるが装置としての貫禄もあり、そしてずっしりと重くていかにも安定していると言った感じのする装置である。 そして、実際にこの物を使って見て、性能はバッチリでありすっかり信頼してしまい、色々な実験で愛用している。

 

************  安定化電源の使用 (2013/6/8) を再編集 ******** 

 

■ 傾斜角測定の較正作業

 角度検出ボリュームから出る電圧は、オペアンプでの増幅され、それをArduino がAD変換して出力されるので、実際の傾斜角に換算する必要があるので傾斜角を測定しながらデータを較正した。

 まず、この較正作業を実施するために、先回と同様に押しボタン入力部をブレッドボード上に作り、Arduino の空き端子に入力端子を設けた。

  *********** 傾斜角校正 ***********************


 #define LEDG_PIN 9
 #define BASE_PIN 6
 #define Button 5

 void setup()
 {
   pinMode(LEDG_PIN,OUTPUT);
   pinMode(BASE_PIN,INPUT);
   pinMode(Button,INPUT);
   Serial.begin(9600);
 }

 void loop()
 {
   int angle;
   int angle_pin = 0;
   int input_Button = HIGH;
   int can_button = HIGH;
   
   while (input_Button == HIGH ) {
     input_Button = digitalRead(Button);
     digitalWrite(LEDG_PIN, HIGH);
   }
     angle = analogRead(angle_pin);
     String buf = String(angle) + ",E";
   
   Serial.println(buf);
   digitalWrite(LEDG_PIN, LOW);
   delay(1000);

 }

◆ スケッチの作成

 ピン5に設定した押しボタンが押された時に、ゼロ番のアナログ入力を読み取り、パソコンに送信するスケッチを作成した。

 角度計測は、測定台の右側のリフト量測定点の高さを物差しで測り、傾斜台の回転中心を示す左のリフト量測定点との距離 900mm により、sinθを求めて較正値の基準とする。 物差しの読み取りは、0.5mm 単位までが限界である。

◆ 角度の較正結果

 測定時の状態を下に示す。 パソコンは左の机に設置しており、USB ケーブルで接続している。

  .

 測定結果を右のグラフに示す。 横軸には、AD変換された値とし、縦軸にはリフト量測定から計算されたsinθの値をグラフ化したものである。 リンクを使用しているものの、まっすぐな直線を示していた。 立ち上りは、ゼロ点にゲタを履かせているので予想どうりであるが、上限が約730と低くなっているのは予想外であった。 ここで頭打ちになっているのが判る。

 リンクの位置やオペアンプの増幅率を修正すると、AD変換の限界値まで広げる事も出来るが、sinθが約 0.15 即ち150パーミル近くまで測定出来ているので、このままでOK とする。 

 また、測定は角度を増加していく場合と減少して場合の往復で測定しているが、その差は見られなかった。 さらに、傾斜台の上の枠を持ち上げて、キャンセルスイッチの作動も確認し、その後の角度表示の再現性もバッチリであった。

  .

 次に、このデータをもとに、AD変換値(指示値)から sinθの換算式を求めることにする。 ここで、ゼロ点のズレを補正しておくことにする。 また、今後の測定時には、水平状態でこのゼロ点を求め、その値をもとにゼロ点補正をするようにする。

 近似直線とその換算式を示すグラフを左に示す。

 近似直線の直進性について、もうひとつ検証してみよう。 データ値と換算式の差を換算誤差として計算し、グラフ上に赤点でプロットしている。 全体的に少し波打っているが、その程度を中間地点で見てみると 1%以下である。 そしてバラツキ具合と同程度と判断される。

  .

 

 

 

 

 

◆追加実験

  オペアンプの頭打ちについて、ブレッドボードに同様な回路を構成して実験してみた。

 回路の電源は 5Volt のACアダプターを使用し、入力側の電圧可変は小型の10kΩのボリュームを使用する。 そして、入出力電圧はテスターを使用して測定した結果を右に示す。

 やはり、3.7Volt 近辺で頭打ちとなっていた。 それまではしっかりと直線性を保ち、限界となるとピタッと一直線である。 この特性はオペアンプの解説書でも説明されているが見落としていた。 この限界以上で使用するには、オペアンプの種類を変えるか、電源電圧をアップするしかないであろう。

 

************  傾斜角測定ユニットの製作 (2013/3/18) を再編集 ********