熱電対センサーの測定値を安価な電線で伝送しアナログメーターに表示する注目デバイスで組み込み開発をアップグレード(34)(2/2 ページ)

» 2026年06月22日 06時00分 公開
[今岡通博MONOist]
前のページへ 1|2       

校正システム

 図4に、このVUメーターへの温度表示を校正するシステムの回路構成を示します。

図4 図4 校正システムの回路構成[クリックで拡大]

 実際には、メーターの校正だけでなく死活確認や動作確認なども行います。この校正システムを適用する前に、メーター単独で端子間が導通しているかなどの確認もしています。抵抗値が50kΩだったので、少なくともメーター内でコイルが断線しているなどの致命的な不具合はないと思います。

 VUメーターに校正システムをつなげてからフルスケールの調整を行います。可変抵抗のVR1は実際の熱電対センサーを代替しており、MAX6675に疑似的に起電圧を供給します。PCのシリアルモニターを見ながら、熱電対センサーの仕様上の最大値である1023(℃)になるようVR1を調整します。

 前回の測定インターバルは2秒でしたが、今回は可変抵抗の操作から測定の表示まで時間がかかり過ぎると調整に手間取るので0.5秒に変更しています。PCのシリアルモニターの値が1023になったところで、次はVR2を調整してVUメーターがフルスケールになるようにします。

 図5に、校正システムの実際の構成を示します。

図5 図5 校正システムの実際の構成[クリックで拡大]

 可変抵抗のノブが2つ並んでいますが、左側がVR1で右側がVR2です。

 ここからはこのVUメーターを温度計として使えるように目盛りを打ち直します。

 筆者は200℃ごとに目盛りを打ちました。例えば、200℃の目盛りは、VR1を調整してPCのシリアルモニターの値が200になった時のメーターの針の位置に印を付けます。400℃、600℃、800℃も同様です。

 図6に、VUメーターに目盛りを打ち直した状態を示します。

図6 図6 VUメーターに目盛りを打ち直した状態

 これで、かつてオーディオ機器として活躍していたVUメーターが、熱電対センサーの温度計として生まれ変わりました。

プログラム

 リスト1に、熱電対センサーで測定した値をArduinoを使ってVUメーターに温度として表示するためのプログラムを示します。

#include <SPI.h>
int temp; 
void setup() {
  SPI.setBitOrder(MSBFIRST);           
  SPI.setClockDivider(SPI_CLOCK_DIV4); 
  SPI.setDataMode(SPI_MODE0);         
  SPI.begin();                       
  Serial.begin(9600);              
}
 1:void loop() { 
 2: delay(500);             
 3: digitalWrite(SS, LOW);           
 4: temp = SPI.transfer(0x00) << 8;  
 5: temp |= SPI.transfer(0x00);      
 6:digitalWrite(SS, HIGH); 
 7: temp = temp>>5;         
 8: Serial.println(temp);
 9:  analogWrite(3, temp>>2);
10:}
リスト1 熱電対センサーで測定した値をVUメーターに温度として表示するためのプログラム

 宣言部分とsetup()関数内は、前回紹介した温度測定プログラムから変更していないので説明は割愛します。

 ここからはloop()関数内のコードを見ていきましょう。

 2行目のdelayに設定した0.5秒は、校正作業のためこの値にしています。校正が終了した後は2秒や薪ストーブの運用に応じて調整してみてください。

 3行目でSSをLOWにしてMAX6675とやりとりする準備をしています。4行目と5行目で2バイト取得します。最初に取得するのが上位バイトで、その後8ビット分MSB(最上位ビット)側にシフトし、2番目に読み込んだ下位バイトと併せて16ビット分の値とします。

 6行目のSSにHIGHを書き込むことによりMAX6675とのやりとりをいったん終了します。7行目で3ビット下位方向にシフトすることで温度データだけを取り出します。さらに2ビット下位方向にシフトすることにより整数部だけを取り出せます。整数にするのは、この後に出てくるanalogWriteの引数が整数型だからです。

 8行目で仮想シリアルポートを介してこの値をPCに送ります。9行目で温度の値を電圧に変換して3番ピンに出力します。この際、tempの値を下位方向に2ビットシフトしていますが、MAX6675の分解能が0.25℃なので、本来なら0.25を掛けるところです。しかし、マイコンにとって掛け算は負担が大きいので2ビット下位にシフトすることで代用しています。

おわりに

 当初は、デジタルマルチメーターを表示器にしようと思ったのですが、その場合電圧が表示されるだけなので温度への換算は人手でやらなければなりません。それに比べて、アナログメーターは目盛りを打ち直すだけでさまざまな用途に対応できます。読者の皆さんはどちらが便利だと思いますか?

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

特別協賛PR
スポンサーからのお知らせPR
Pickup ContentsPR
Special SitePR
あなたにおすすめの記事PR