リスト1はArduinoで動作する温度測定プログラムです。MAX6675モジュールから温度の値を取得して、見やすく加工し、仮想シリアルポートでPCに10進数として送り出す内容になっています。
#include <SPI.h>
int temp;
void setup() {
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV4);
SPI.setDataMode(SPI_MODE0);
SPI.begin();
Serial.begin(9600);
}
void loop() {
delay(500);
digitalWrite(SS, LOW);
temp = SPI.transfer(0x00) << 8;
temp |= SPI.transfer(0x00);
digitalWrite(SS, HIGH);
Serial.println((temp >> 3) * 0.25);
}
setup()関数では、SPIの設定とSPIの動作を有効にします。その後仮想シリアルポートを同様に有効にします。loop()関数では0.5秒間隔で温度データを取得し、見やすく整形した後で仮想シリアルポートに数値データを送ります。
SPI.transferで8ビットの値を2回取得しています。最初に読み出したのが上位バイト、2回目が下位バイトです。tempに格納された16ビットのうち、温度データは上位12ビットなので下位に3ビット分シフトさせています。
それに分解能である0.25をかけて、セ氏の温度表示にしています。
図3は、熱電対センサーキットとArduinoによって実測した、薪ストーブに着火してから1分以内の温度変化のグラフです。
縦軸が温度で、横軸が時間です。時間の単位は0.5秒なので、グラフの左端から右端までの時間は24.5秒になります。着火前は24℃台だったので、24.5秒で5℃以上温度が上昇していることが分かります。
温度測定プログラムの設定に基づき0.5秒ごとに測定していますが、熱電対センサーを取り付けた金属製の金具自体がそれなりの熱容量を持っていると思いますので、約5秒ごとでも十分なのではないかと思っています。そのあたりは、運用しながら最適値を見つけられればと思っています。
本シリーズでは、この熱電対センサーを取り付けた薪ストーブをモデルケースとして、センサーが取得した値をさまざまな方法でなるべく遠くに届ける工夫を展開していきたいと思います。(次回に続く)
USBシリアル変換モジュールが必要なら、代わりにArduinoを使えばいいじゃない
忘年会に最適!? 使い捨てライターで離れた場所にあるLEDを点灯するガジェット
ロシア製ガイガーミューラー管の実力はいかに
加湿器トランスデューサの水中通信実験で「ロバチャン」が進化する【後編】Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク