Arduino 入門
Lesson 70
【熱電対を用いた温度センサモジュール】
こにんちは、管理人のomoroyaです。
センサーの使い方の基本を学習する入門編。
前回も書きましたが・・・
そろそろ、手持ちのセンサがなくなりつつある今日この頃。
本Lessonの電子部品も、部品庫の奥から引っ張り出してきました!
MAX6675が実装された、温度センサモジュール。
温度測定にはK熱電対を使用します。
世の中には、まだまだ色々なセンサーがあります。
これからも、色々なセンサーで遊んでいきます。
※そろそろ部品庫のセンサがない・・・
本記事はLesson 70 【熱電対を用いた温度センサモジュール】です。
熱電対は異なる材料の2本の金属線を接続して、ふたつの接点に温度差を与えることで電圧差がうまれることを利用したものです。
その電圧差をセンサで測定することで温度が測定できるというもの。
本Lessonの「温度センサモジュール」はMaxim Integrated社がリリースしているMAX6675を使用しています。
本Lessonで使用している「温度センサモジュール」は以下が同等品。
※K熱電対付属
※prime対応品
※出荷元:Amazon
付属の熱電対は、金属で覆われているタイプのため熱電対の接点がむき出しのものを別途購入したほうが使い勝手は良いかもしれません。
Arduino入門編の解説にて使用しているArduinoは互換品です。
互換品とは言え、Arduinoはオープンソースであり複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
正規品(Arduino UNO R3)の本体単品がほしい方はこちらとなります。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
はじめに
本Lessonで使用する「温度センサモジュール」は「MAX6675」が実装されたモジュール。
データシートはすぐに見つけることができます。
付属の熱電対は「Kタイプ」。
熱電対にはKタイプ、Jタイプなどがあります。
違いは使用している金属の種類と測定温度範囲。
Lesson 70 目標
本Lessonの目標は以下です。
2.熱電対を用いた温度センサモジュールを動かすスケッチを描く
3.温度センサモジュールからデータを取得する
いつものように、遊ぶことが重要です。
「温度センサモジュール(MAX6675)」ですが、SPI通信にて制御します。
MAX6675のデータシートを参照することで制御方法はわかります。
本Lessonでは、Arduino標準ライブラリである「SPI.h」を使用します。
SPI通信って何?という方は下記で解説しています。
本Lessonを始める前に読んでおくと取り組みやすいと思います。
準備
ではLessonの準備に取り掛かりましょう。
電子部品は「熱電対」と「温度センサモジュール(MAX6675)」のみ。
必要なもの
- USB接続用のPC(IDE統合環境がインストールされたPC)
→管理人が勝手に比較したBTOメーカーを紹介しています。 - UNO R3(以下UNO)、おすすめUNO互換品(ELEGOO)
- PCとUNOを接続するUSBケーブル
- ブレッドボード安価(大)、ブレッドボード安価(中)
※おすすめブレッドボード(大)、おすすめブレッドボード(中) - M-M Jumper wire(UNOと部品をつなぐための配線)
- M-F Jumper wire(UNOと部品をつなぐための配線)
- M-F M-M F-F セット Jumper wire(UNOと部品をつなぐための配線)
※ブレッドボードはセンサとUNOを直接つなぐ場合不要です。
※ジャンパワイヤーは「M-M」「M-F」を必要に応じて使い分けてください。
Jumper wire、抵抗は今後も頻繁に利用します。
Jumper wireはできれば、「オス-メス オス-オス メス –メス」の3種類を揃えておくことをお勧めします。
短めが使いやすい場合も。
抵抗も単品で揃えるよりはセットをおすすめします。
抵抗、LEDなどを個別でセット品を購入しても、そんなに使わない!
という方は、「電子工作基本部品セット」が使い勝手が良い。
使用部品説明
「熱電対」、「温度センサモジュール(MAX6675)」について説明していきます。
温度センサモジュール「MAX6675」 実物写真
下の写真が「温度センサモジュール」の実物写真です。
本Lessonで使用するものは、「MAX6675」が実装されたモジュール。
■温度センサモジュール(MAX6675)実物写真
信号ピン(左側から):GND、VCC、SCK、CS、SOとなっています。
ArduinoのSPI通信を利用する場合、Arduinoと温度センサの対応ピンは以下となります。
Arduino | 温度センサモジュール(MAX6675) |
---|---|
GND | GND |
5V | VCC |
10番ピン(SS) | CS |
12番ピン(MISO) | SO |
13番ピン(SCK) | SCK |
■付属のK熱電対
接点部分が金属で覆われているタイプです。
接点部分がむき出しのものを別途用意した方が使い勝手は良いかもしれません。
■K熱電対と温度センサモジュール(MAX6675)の接続状態
温度センサモジュール「MAX6675」 回路図
「温度センサモジュール(MAX6675)」の回路図(ブロックダイアグラム)を示します。
回路に興味がないかたは必ず読み飛ばしてください。
■MAX6675 ブロックダイアグラム
省略:データシートに記載されていますので省略します。
電位差をADコンバータにて出力している回路となっています。
K熱電対について
熱電対については、色々なサイトで解説されていますので省略します。
熱電対(ねつでんつい、英: thermocouple)は、2種類の金属線の先端同士を接触させて回路を作り、接合点に発生する熱起電力を通じて温度差を測定する温度計。あるいは、その2種類の金属線のことを指す。
温度センサモジュール「MAX6675」 仕様
遊び、学習で使う分には気にする特性はとくにありません。
ただしSPI通信にて動作させるためにはある程度データシートを読んで理解する必要があります。
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
回路図がこちら。
こちらがブレッドボード図。
MAX6675が実装されているモジュールのFritzingの図がなかったため、MAX6675そのものになりますが信号端子を読みかえれば結線は同じです。
※モジュールには容量が実装されていますが、下記図では省略。
回路図は「fritzing」を利用しています。
「fritzing」の使い方は下記を参照してください。
接続
下図に示すように、用意した部品を使用して接続しましょう。
電子部品は「K熱電対」「温度センサモジュール(MAX6675)」のみ。
使用するポートは
- SPI用ピン:10(SS)、12(MISO)、13(SCLK)
- 5V、GND
穴に挿入しづらいときは、ラジオペンチなどを使用してください。
今回はブレッドボードを使わずにM-Fワイヤで接続。
コードの書き込み
接続が終わったら、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:転送するバイト 戻り値:受信したバイト |
サンプルコード
仕様からクロック周波数、分解能がわかっていますので設定します。
// 分周期1/4指定 16MHz/4=4MHz(MAX6675仕様:Max 4.3MHz)
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!
シリアルモニタを開いて読みだしたデータをみてみましょう。
■シリアルモニタの結果
210℃前後でしょうか。。。
測定できています!
半田ごてのつまみちは200℃に対して・・・
約210℃とつまみ調整がほぼあっていることに驚き!
結構しかkりしてたんだな、この半田ごて・・・
ついでに、熱電対のOpenも確認。
端子の片方を外すとopen errが表示されopen check機能が働いていることがわかります。
※ちなみに、端子を外すまえは室温
これは、熱電対が断線していればわかるということです。
本Lessonで使用した「温度センサモジュール」は安価ですが学習、遊びには十分。
温度制御に向いている電子部品です。
かなりの高温まで測定できますので色々と使いどころを考えてみるのが面白いかなと思います。
まとめ
本Lessonは、以下を目標としました。
2.熱電対を用いた温度センサモジュールを動かすスケッチを描く
3.温度センサモジュールからデータを取得する
「温度センサモジュール(MAX6675搭載)」は手軽に広い範囲の温度を測定することができます。
温度制御にはもってこいの電子部品です。
いろんなものを温度制御して遊びましょう。
Lesson 70 【熱電対を用いた温度センサモジュール】 はここまで。
疑問点、質問などありましたら気軽にコメントください。
次回、Lesson 71は【照度センサモジュール】です。
最後に
疑問点、質問などありましたら気軽にコメントください。
この電子部品の解説をしてほしい!などなどなんでもOKです。
リンク切れ、間違いなどあればコメントいただけると助かります。
Arduino入門編、番外編、お役立ち情報などなどサイトマップで記事一覧をぜひご確認ください。
Arduino入門編、Arduino入門編2で使用しているUNOはAmazonにて購入可能です。
Arduino入門編では互換品を使用。
Arduinoはオープンソース。
複製して販売するのもライセンス的に問題なし。
そのため互換品の品質も悪くなく、それでいて値段は安いです。
正規品本体の値段程度で豊富な部品が多数ついています。
学習用、遊び用、お試し用には安価な互換品がおすすめです。
ELEGOO UNO キット レベルアップ チュートリアル付 uno mega2560 r3 nanoと互換 Arduino用
上記のものでも十分に多数の部品が入っていますが、最初からもっと多数の部品が入っているこちらもお勧めです。
Arduino入門編2では「Arduino UNO R4 Minima」「Arduino UNO R4 WIFI」にて遊ぶため今のところは正規品を使用。(まだ互換品が・・・ほぼない)
Amazonでお得に買う方法
Amazonでお得に購入するならAmazon Mastercard、Amazonギフト券がおすすめです。
時期により異なりますが、様々なキャンペーンを実施しています。
\Amazonギフト券/
Amazonギフトカード キャンペーン
\Amazon Mastercard お申込み/
Amazon Mastercard 申し込み
いずれの場合もプライム会員である方がお得!!
\Amazon Prime 30日間の無料会員を試す/
無料会員登録
コメント
すみませんビットの後ろのじゅうごこんまさんのことです。なぜか数字と記号が消えてしまうのでひらがなで入力させてもらいました。
コメントありがとうございます。
bitはコンピュータの世界で扱う単位です。
コンピュータは0,1でしか物事を表すことができませんので
0または1が1個で1bit、2個並んでいたら2bitです。
質問の回答になっていますでしょうか?
初歩的な質問だったらすみません。
bitとはどういう意味でしょうか。
bitのです