SPI制御の熱電対温度モジュール(MAX31855)(2)

今回はサンプル・スケッチを使用して実際にK型熱電対温度センサモジュールを動かします。温度を約1秒周期で読み出してそれをシリアルで送信し、PC側で読み出せるようにします。

●マイコン接続例

下図にArduino互換機と温度測定モジュールの接続例を示します。今回は筆者が製作したArduino互換機を使用していますが、他社製互換機でも何でも使用可能です。

SPI通信にArduino標準のSPIライブラリを利用するために図のような接続にしました。SPIをソフトウェアで制御する場合は任意のディジタル・ポートに接続できます。

この温度モジュールはリード・オンリなので、MOSIの接続は不要です。 ここでは他にSPIデバイスをつながないため、Arduinoと1対1で接続できますが、複数の温度モジュールを並列接続する場合や、温度モジュールとほかのSPIデバイスを並列接続する場合は、そのままMISO信号を直結できないため注意してください。複数使用については後述します。

drw2-1_circuit

※筆者が製作したArduino互換機はUSB/電源部とAVR部が分離できますが、図では便宜的に#282 Arduino互換機P1(AVR部)だけ書いてあります。電源供給(USBバスパワードで可)とシリアル通信が必要なので、実際は#283 Arduino互換機P2(USB/電源部)を実装する必要があります。詳細は筆者WEBサイトや書籍などごらんください。

●サンプル・スケッチ

温度を読み出してシリアルで送信するサンプルを用意してあります。一部抜粋で説明します。コードの詳細は”ReadTemp.ino”を参照してください。

温度モジュールはSPIのモード1(正論理クロックの立ち下がりエッジでサンプリング)で作動するため、あらかじめ設定しておく必要があります。

SPI.setClockDivider(SPI_CLOCK_DIV4);    // SPIクロック分周比
SPI.setBitOrder(MSBFIRST);              // 送信ビット順番
SPI.setDataMode(SPI_MODE1);             // SPIデータモード切替

次にSPIデータを2バイト受信する処理を示します。SPI_CS_ON、SPI_CS_OFFはSS信号を”L”また”H”にするマクロ、spiDat[]は受信したSPIデータを順番に格納する配列変数です。受信にもtransfer()関数を使います。

SPI_CS_ON;                        // /SS='L'
for(i = 0; i < 2; i++) {       // 2バイトだけ受信
  spiDat[i] = SPI.transfer(0);    // ダミーデータ送信(1バイト受信)
}
SPI_CS_OFF;                       // /SS='H'

ここでgetTemp()という関数で摂氏温度の文字列を得、それをシリアルで送信します。valは16ビットの変数、strBufは変換文字列を格納する配列変数です。

val = ((word)spiDat[0] << 8) | (word)spiDat[1];
getTemp(val, strBuf);      // 温度値の文字列を生成
Serial.println(strBuf);    // シリアル送信

この記事は2013年1~2月頃にCQ出版のブログへ掲載したものを少し修正したものです。
参考文献

コメントは受け付けていません。