\ AmazonにてArduino UNO R4 発売中!! /

Arduino 入門 Lesson 70 【熱電対を用いた温度センサモジュール】

arduino-lesson70-00 Arduino入門編
記事に広告(アフィリエイト広告)が含まれています。
スポンサーリンク
子供と一緒に始める マイコンプログラム
Arduino 入門
Lesson 70
【熱電対を用いた温度センサモジュール】

こにんちは、管理人のomoroyaです。

センサーの使い方の基本を学習する入門編。

前回も書きましたが・・・

そろそろ、手持ちのセンサがなくなりつつある今日この頃。

本Lessonの電子部品も、部品庫の奥から引っ張り出してきました!

MAX6675が実装された、温度センサモジュール。

温度測定にはK熱電対を使用します。

 

世の中には、まだまだ色々なセンサーがあります。

これからも、色々なセンサーで遊んでいきます。
※そろそろ部品庫のセンサがない・・・

本記事はLesson 70 【熱電対を用いた温度センサモジュール】です。

 

熱電対は異なる材料の2本の金属線を接続して、ふたつの接点に温度差を与えることで電圧差がうまれることを利用したものです。

その電圧差をセンサで測定することで温度が測定できるというもの。

本Lessonの「温度センサモジュール」はMaxim Integrated社がリリースしているMAX6675を使用しています。

補足
MAX6675は旧タイプのICのようです。
MAX31855が後継タイプとなるようです。
新たに購入を検討しているかたはMAX31855が実装されたものが良いと考えます。
使い方は方は、ほぼかわりません。

本Lessonで使用している「温度センサモジュール」は以下が同等品。
K熱電対付属

※prime対応品
※出荷元:Amazon

付属の熱電対は、金属で覆われているタイプのため熱電対の接点がむき出しのものを別途購入したほうが使い勝手は良いかもしれません。

 

Arduino入門編の解説にて使用しているArduinoは互換品です。

互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

正規品の本体単品がほしい方はこちらとなります。

 

スポンサーリンク

はじめに

本Lessonで使用する「温度センサモジュール」は「MAX6675」が実装されたモジュール。

データシートはすぐに見つけることができます。

 

付属の熱電対は「Kタイプ」。

熱電対にはKタイプ、Jタイプなどがあります。

違いは使用している金属の種類と測定温度範囲。

 

Lesson 70 目標

本Lessonの目標は以下です。

1.熱電対と温度センサモジュールの使い方を学習する
2.熱電対を用いた温度センサモジュールを動かすスケッチを描く
3.温度センサモジュールからデータを取得する

いつものように、遊ぶことが重要です。

 

温度センサモジュール(MAX6675)」ですが、SPI通信にて制御します。

MAX6675のデータシートを参照することで制御方法はわかります。

 

本Lessonでは、Arduino標準ライブラリである「SPI.h」を使用します。

SPI通信って何?という方は下記で解説しています。

本Lessonを始める前に読んでおくと取り組みやすいと思います。

 

準備

ではLessonの準備に取り掛かりましょう。

電子部品は「熱電対」と温度センサモジュール(MAX6675)のみ。

 

必要なもの

※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。

 

Jumper wire、抵抗は今後も頻繁に利用します。

Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。

短めが使いやすい場合も。

 

抵抗も単品で揃えるよりはセットをおすすめします。

 

抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!

という方は、「電子工作基本部品セット」が使い勝手が良い。

 

使用部品説明

熱電対」、「温度センサモジュール(MAX6675)について説明していきます。

 

温度センサモジュール「MAX6675」 実物写真

下の写真が温度センサモジュールの実物写真です。

本Lessonで使用するものは、MAX6675が実装されたモジュール。

 

温度センサモジュール(MAX6675)実物写真

信号ピン(左側から):GNDVCC、SCK、CS、SOとなっています。

ArduinoのSPI通信を利用する場合、Arduinoと温度センサの対応ピンは以下となります。

Arduino 温度センサモジュール(MAX6675)
GND GND
5V VCC
10番ピン(SS) CS
12番ピン(MISO) SO
13番ピン(SCK) SCK

arduino-lesson70-01

 

■付属のK熱電対

接点部分が金属で覆われているタイプです。

接点部分がむき出しのものを別途用意した方が使い勝手は良いかもしれません。

arduino-lesson70-02

 

■K熱電対と温度センサモジュール(MAX6675)の接続状態

arduino-lesson70-03

 

温度センサモジュール「MAX6675」 回路図

温度センサモジュール(MAX6675)の回路図(ブロックダイアグラム)を示します。

回路に興味がないかたは必ず読み飛ばしてください。

■MAX6675 ブロックダイアグラム

省略:データシートに記載されていますので省略します。

電位差をADコンバータにて出力している回路となっています。

 

K熱電対について

熱電対については、色々なサイトで解説されていますので省略します。

Wikipedia 熱電対

熱電対(ねつでんつい、英: thermocouple)は、2種類の金属線の先端同士を接触させて回路を作り、接合点に発生する熱起電力を通じて温度差を測定する温度計。あるいは、その2種類の金属線のことを指す。

温度センサモジュール「MAX6675」 仕様

遊び、学習で使う分には気にする特性はとくにありません。

ただしSPI通信にて動作させるためにはある程度データシートを読んで理解する必要があります。

■Pin仕様(MAX6675)arduino-lesson70-04

Pin Name Function
1 GND Ground
2 T- K熱電対の-側(GNDに接続)
3 T+ K熱電対の+側
4 VCC Arduino使用の場合:5V
5 SCK Serial Clock
6 /CS Chip Select(LowでEnable)
7 SO Serial Data Output
8 N.C. No Connection

 

■仕様抜粋(MAX6675 動作電圧・電流・温度)

項目 仕様
供給電圧 3.0V ~ 5.5V
供給電流 1.5mA(MAX) 0,7mA(Typ)
動作温度 -20℃ ~ 85℃

 

■SPI通信、温度換算に必要な値をデータシートから抜粋

データシートから分解能は0.25℃クロック周波数は4.3MHz以下ということを読み取ります。

項目 仕様
Resolution 0.25℃
Serial Clock Frequency 4.3MHz(MAX)

 

■MAX6675から出力されるデータについて

データシートから出力されるビットの意味を理解しておきます。

Bit DUMMY
BIT
12 bit
読み出す温度データ
熱電対
Open   Check
DEVICE
ID
STATE
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 M
S
B
L
S
B
0:normal
1:open
0 Tree-state

 

必要なことは以上でしょうか。

SPI通信は、「SPI.h」を使用することでArduino側で勝手にやってくれますので気にする必要はありませんが、興味のあるかたはデータシートを確認ください。

 

本Lessonは遊び、学習を想定しています。

Arduinoの仕様範囲内で使用していれば問題になることもありません。

遊び、学習以外での使用用途をお考えの場合はデータシートを必ず確認しましょう。

 

実践 回路作成とコード作成

最初に回路図を確認してください。

次に、回路図に合わせて部品を接続します。

最後にコードを書いて、「K熱電対」を接続して温度センサモジュール(MAX6675)を動かしていきましょう。

 

Arduinoのピン配置を確認したい方は番外編02を参照してください。

 

回路図

Arduinoの使用ピンは以下。

  • SPI用ピン:10(SS)、12(MISO)、13(SCLK)
  • 5V、GND

 

回路図がこちら。

arduino-lesson70-05

 

こちらがブレッドボード図。

MAX6675が実装されているモジュールのFritzingの図がなかったため、MAX6675そのものになりますが信号端子を読みかえれば結線は同じです。
※モジュールには容量が実装されていますが、下記図では省略。

arduino-lesson70-06

 

回路図は「fritzing」を利用しています。

「fritzing」の使い方は下記を参照してください。

 

接続

下図に示すように、用意した部品を使用して接続しましょう。

電子部品は「K熱電対温度センサモジュール(MAX6675)のみ。

 

使用するポートは

  • SPI用ピン:10(SS)、12(MISO)、13(SCLK)
  • 5V、GND

穴に挿入しづらいときは、ラジオペンチなどを使用してください。

今回はブレッドボードを使わずにM-Fワイヤで接続。

arduino-lesson70-07

 

コードの書き込み

接続が終わったら、USBケーブルを使用してUNOにプログラムを書き込んで行きましょう。

コードを書き終えたら、いつでも利用できるように「ファイル」⇒「名前を付けて保存」で保存しておきましょう。

 

コマンド説明

本Lessonでは、特に新しいコマンドはありません。

復習を兼ねてSPIのコマンドを列挙しておきます。

SPI通信は下記で解説していますので興味のある方は下記を参照ください。

コマンド 内容
SPI.begin() SPIライブラリの初期化処理。および有効化。
SCLK,MOSI,SSの各ピンは出力に設定される。
初期値は下記に設定される。
SCLK、MOSI:Low
SS:High
戻り値:なし
SPI.end() SPI通信を無効にする。
各ピンの設定は変更されない。
戻り値:なし
SPI.setBitOrder(order) データを送信するビットの順序を設定する。パラメータ
order:LSBFIRSTまたはMSBFIRST
下位ビット、上位ビットのどちらから送信するかを指定できる。戻り値:なし
SPI.setClockDivider(divider) SPIクロック分周器を設定する。
分周値:2,4,8,16,32,64,128
デフォルト:4パラーメータ
divider:
SPI_CLOCK_DIV2
SPI_CLOCK_DIV4
SPI_CLOCK_DIV8
SPI_CLOCK_DIV16
SPI_CLOCK_DIV32
SPI_CLOCK_DIV64
SPI_CLOCK_DIV128
戻り値:なし
SPI.setDataMode(mode) SPIの転送モードの設定。
データを取得するタイミングを指定する。クロック極性:
アイドル状態時のクロックがHighかLowか。
位相極性:
データ取得タイミングがクロックの立上がりか、立下りか。パラメータ
mode:
SPI_MODE0:アイドル時Low、立上がりエッジ
SPI_MODE1:アイドル時Low、立下がりエッジ
SPI_MODE2:アイドル時High、立上がりエッジ
SPI_MODE3:アイドル時High、立下がりエッジ
戻り値:なし
SPI.transfer(value) データの送受信をする。
SPIパスでの1バイト転送。
送信、受信の両方で使用。パラメータ
value:転送するバイト
戻り値:受信したバイト

 

サンプルコード

仕様からクロック周波数分解能がわかっていますので設定します。

■4.2MHz以下にする必要があるため4分周して4MHzに設定SPI.setClockDivider(SPI_CLOCK_DIV4);
// 分周期1/4指定 16MHz/4=4MHz(MAX6675仕様:Max 4.3MHz)
■分解能が0.25℃とわかっていますので、取得結果を0.25倍
Serial.print((value >> 3) * 0.25);
//bit<15:3>のみ表示、MAX6675仕様(分解能 0.25℃)
//Lesson 70 熱電対を用いた温度センサモジュール(MAX6675)
//MAX6675 ICが実装されたモジュールを使用して熱電対で温度を測定
//https://omoroya.com/

//SPI通信用の予約語 SS(10),MOSI(11),MISO(12),SCK(13)
#include <SPI.h>
int value; // MAX6675からのデータ格納変数

void setup() {
  //SPI通信の初期設定
  SPI.setBitOrder(MSBFIRST);           // 上位ビットから送信
  SPI.setClockDivider(SPI_CLOCK_DIV4); // 分周期1/4指定 16MHz/4=4MHz(MAX6675仕様:Max 4.3MHz)
  SPI.setDataMode(SPI_MODE0);          // アイドル時Low、立上がりエッジでデータ取得
  SPI.begin();                         // SPI通信の初期化、有効化
  Serial.begin(9600);                  // シリアル通信のデータ転送レートを9600bpsで指定
}

void loop() { 
  
  //温度データ読み出し
  delay(500);                       // MAX6675仕様(Conversion Time > 220ms)
  digitalWrite(SS, LOW);            // 制御デバイス選択(Enable)
  value = SPI.transfer(0x00) << 8;  // 上位ビット8bit読み出し後8bit左にシフト
  value |= SPI.transfer(0x00);      // 下位ビット8bit読み出し後上位ビットとOR
  digitalWrite(SS, HIGH);           // 制御デバイス選択(Disable)

  //熱電対のopen check(bit<2> = 1ならopen)
  if ((value & 0x0004) != 0){
    Serial.println("Open Error");
    
  //読み出した温度の表示 bit<14:3>が温度数値格納bit bit<15>=0(dummy bit)
  } else {
    //Serial.print((value >> 3), BIN); //bit<15:3>のみ2進表示
    //Serial.print(", ");
    Serial.print((value >> 3) * 0.25); //bit<15:3>のみ表示、MAX6675仕様(分解能 0.25℃)
    Serial.println(" degC");
  } 
  
}

 

動作確認

では、さっそく動作を確認していきます。

半田ごての温度を測ることにします。

半田ごてのつまみ設定は200℃。

安い、半田ごてのため・・・

つまみの設定精度がどの程度なのか気になっていた管理人。

これで半田ごての温度が測れる!

 

さっそくスイッチON!

arduino-lesson70-10

 

シリアルモニタを開いて読みだしたデータをみてみましょう。

■シリアルモニタの結果

210℃前後でしょうか。。。

測定できています!

半田ごてのつまみちは200℃に対して・・・

約210℃とつまみ調整がほぼあっていることに驚き!

結構しかkりしてたんだな、この半田ごて・・・

arduino-lesson70-08

 

ついでに、熱電対のOpenも確認。

端子の片方を外すとopen errが表示されopen check機能が働いていることがわかります。
※ちなみに、端子を外すまえは室温

これは、熱電対が断線していればわかるということです。

arduino-lesson70-09

 

本Lessonで使用した「温度センサモジュール」は安価ですが学習、遊びには十分。

温度制御に向いている電子部品です。

かなりの高温まで測定できますので色々と使いどころを考えてみるのが面白いかなと思います。

 

まとめ

本Lessonは、以下を目標としました。

1.熱電対と温度センサモジュールの使い方を学習する
2.熱電対を用いた温度センサモジュールを動かすスケッチを描く
3.温度センサモジュールからデータを取得する

 

温度センサモジュール(MAX6675搭載)は手軽に広い範囲の温度を測定することができます。

温度制御にはもってこいの電子部品です。

いろんなものを温度制御して遊びましょう。

 

Lesson 70 【熱電対を用いた温度センサモジュール】 はここまで。

疑問点、質問などありましたら気軽にコメントください。

 

次回、Lesson 71は【照度センサモジュール】です。

Arduino 入門 Lesson 71 【照度センサモジュール】
センサーの使い方の基本を学習する入門編。本Lessonの電子部品も、部品庫の奥から引っ張り出してきました!BH1750が実装された照度センサモジュール。短いスケッチで精度よく広範囲の照度を測定することが可能です。照度によって何かをさせたい!…

 

最後に

疑問点、質問などありましたら気軽にコメントください。

この電子部品の解説をしてほしい!などなどなんでもOKです。

リンク切れ、間違いなどあればコメントいただけると助かります。

 

Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。

 

Arduino入門編で使用しているUNOはAmazonにて購入可能です。

互換品とは言え、Arduinoはオープンソース。

複製して販売するのもライセンス的に問題なし。

 

そのため互換品の品質も悪くなく、それでいて値段は安いです。

正規品本体の値段程度で豊富な部品が多数ついています。

 

学習用、遊び用、お試し用には安価な互換品がおすすめです。

 

 

上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。

 

Amazonでお得に買う方法

Amazonでお得に購入するなら、Amazonギフト券がおすすめです。

現金でチャージするたびに、チャージ額に応じたポイントが付与されます。

最大2.5%!!!(Amazonプライム会員ならさらにお得)

チャージ額(一回分) 一般 プライム会員
5,000円~19,999円 0.5% 1.0%
2,0000円~39,999円 1.0% 1.5%
40,000円~89,999円 1.5% 2.0%
90,000円~ 2.0% 2.5%

さらに、初回チャージで1000ポイントもらえるキャンペーンも実施中!

\Amazonギフト券 1000ポイントキャンペーン/
Amazonチャージ 初回購入で1000ポイントキャンペーン

 

補足情報
コンビニ・ATM・ネットバンクが対象
購入は1円単位で可能

コメント

  1. ひつじ より:

    すみませんビットの後ろのじゅうごこんまさんのことです。なぜか数字と記号が消えてしまうのでひらがなで入力させてもらいました。

    • omoroya omoroya より:

      コメントありがとうございます。
      bitはコンピュータの世界で扱う単位です。
      コンピュータは0,1でしか物事を表すことができませんので
      0または1が1個で1bit、2個並んでいたら2bitです。
      質問の回答になっていますでしょうか?

  2. ひつじ より:

    初歩的な質問だったらすみません。
    bitとはどういう意味でしょうか。

タイトルとURLをコピーしました