2016年08月22日 | 公開。 |
2020年03月04日 | AdafruitのMAX31855がBus IOライブラリに依存する様になったことを追記。 |
秋月電子でも購入できる、Adafruit社のThermocouple Amplifier MAX31855 breakout board(熱電対アンプMAX31855ブレークアウト基板)を使って、Arduinoで温度を測定する方法を説明します。
ホットプレートでリフローをする際に使う温度制御装置に、スイッチサイエンスのK型熱電対温度センサモジュールキット(SPI接続)MAX6675使用を使用していたのですが、新しい温度制御装置を設計するにあたって、温度センサモジュールを変更する事にしました。ICメーカー(Maxim社)が、この温度センサモジュールに使われているMAX6675という熱電対コンバータICを「新規設計用に推奨しない」と明言しているのが主な理由です。MAX6675が市場から消えるのも間近だと思われます。
Thermocouple Amplifier MAX31855 breakout boardは同じMaxim社の新しいIC(MAX31855)を使用しており、今後も安定して入手できる事が期待できます。この基板は秋月電子でもMAX31855使用K型熱電対アンプモジュールという商品名で販売されており、国内でも簡単に入手できます。この記事を書いている時点(2016年8月)での価格は1,620円です。
スイッチサイエンスからもK型熱電対温度センサモジュールキット(SPI接続)MAX31855使用 5V版という、MAX31855を使った温度センサモジュールが発売されているのですが、3,024円と、秋月電子の商品の方が割安で、在庫も秋月電子の方が豊富そうです。
注:スイッチサイエンスの温度センサモジュールキットは、熱電対が付属しており、熱電対の接続にも熱電対専用のコネクタを使用しているので、価格の比較の際には、これらの点も考慮する必要があります。
そこで、Adafruitのブレークアウト基板を秋月電子で購入し、動作試験してみました。
写真1に、秋月電子で購入したThermocouple Amplifier MAX31855 breakout board(MAX31855使用K型熱電対アンプモジュール)の写真を示します。このブレークアウト基板にK型の熱電対とArduinoを接続すると、温度が0.25℃の分解能で読み取れます。
ブレークアウト基板自体の温度測定範囲は-200℃から+1,350℃と非常に広範囲です。しかしながら、使用する熱電対により、実際に測定できる温度の範囲がさらに制限される事があるため、注意が必要です。
3.3V~5Vの電源電圧とロジックレベルに対応しているため、3.3VのArduinoでも5VのArduinoでも利用する事ができます。マイコンとのインターフェースは、SPIです。
この製品は、Arduino以外のマイコンでも使用する事ができますが、Adafruitが公開しているライブラリはArduino用の物です。PICやmbedなど、他のマイコンで利用する際は、自力でソフト開発をする必要があります。(とはいっても、MAX31855のデータシートが理解できれば、それほど難しくはありません)
写真1から分かるように、秋月電子で販売している基板には珍しく、日本語の説明書が入っていません。よって、利用方法については、Adafruitの英文の商品ページを読む必要があります。
この製品は、ブレークアウト基板本体と、6ピンのピンヘッダと、熱電対を接続するためのターミナルブロックからなります。(写真2参照) ピンヘッダやターミナルブロックは基板に半田付けされていませんので、自分で半田付けする必要があります。また、熱電対は付属していませんので、別に購入する必要があります。
Adafruitのサイトで説明を読んでいると、このブレークアウト基板にはV1とV2の2つのバージョンがあるようです。V1の場合はノイズ低減用の0.01μFのコンデンサを外付けする必要があるようなのですが、今回秋月電子で購入した基板は、V2基板の様で、コンデンサは基板上に実装されていました。(写真2、写真3参照)
裏面に仕様や注意事項が簡潔にまとめられています。"v2"と書いてある事から、V2基板だと分かり、ます。
入力電圧やロジックレベルは、"3-5V"と表記されています。商品ページには"3.3 to 5v"との説明があるので、3.3V以上で使う方が無難です。
このブレークアウト基板には3.3VのLDOが載っており、3.3V、最大100mAの出力が取れるのですが、この出力を使うと、LDOの発熱が温度測定の精度に悪影響しかねないので、使わない方が無難です。
秋月電子やAdafruitの商品ページには、ブレークアウト基板の回路図が載っていません。回路図を見ると、仕様には書かれていない細かい情報が分かるので、必ずチェックする様にしているのですが、公開されていないのが残念です。
ブレークアウト基板を使用する前に、ピンヘッダとターミナルブロックを半田付けする必要があります。
付属の6ピンのピンヘッダはピンが細めで、基板の裏側に取り付ければ、ブレッドボードに差し込んで使用できるようになっています。しかし、ブレッドボードでこの基板を利用する予定はなく、後に組み立てる予定の回路の実装上の都合から、L字型のピンヘッダを、基板の表側に取り付ける事にしました。
ピンヘッダとターミナルブロックを半田付けした基板の写真を写真4に示します。片方がオスでもう片方がメスのブレッドボード用ジャンパ線を使えば、Arduinoに接続する事ができます。
Thermocouple Amplifier MAX31855 breakout boardには熱電対自体は付属しませんので、別に購入する必要があります。この時、必ずK型の熱電対を購入してください。熱電対には、その素材により色々なタイプがあり、K型、E型、J型、T型などと、アルファベットで区別されています。間違った型の熱電対をブレークアウト基板に接続して温度測定を行うと、正しい測定結果が得られません。
秋月電子では、先端部分で素線がむき出しのタイプと、素線がステンレス管で保護されたタイプ(写真5)の2種類のK型熱電対を取り扱っています。ブレークアウト基板と同時に購入するなら、目的に応じて、これらのいずれかの熱電対を購入すればいいでしょう。ステンレス管タイプの熱電対は使用温度範囲が-200℃から+600℃と、素線がむき出しのタイプ(-200℃~+1,250℃)よりも狭くなっていますので、購入時にはこの事を考慮する必要があります。
今回私は、以前妙楽堂で買っておいた熱電対(写真6)を使う事にしました。この熱電対はノーブランド品ですが、190円と、秋月電子の熱電対(むき出しタイプ:400円、ステンレス管タイプ:700円)より安価です。
秋月電子で販売している熱電対を使うにせよ、妙楽堂で販売している熱電対を使うにせよ、熱電対専用のコネクタ(写真7)が付いており、ブレークアウト基板のターミナルブロックにはつなげる事ができません。そこで、このコネクタを取らなければなりません。
この写真では見にくいですが、黄色いカバーの電極の根本付近の部分に、極性を表す+と-の記号が刻んであります。上の細い方の電極が+で、下の太い方の電極がマイナスです。
写真7のコネクタの右側の2つのねじをドライバで外し、カバーを取り外すと、写真8の様に、コネクタ内部で、熱電対の素線が電極にねじ止めされている様子が分かります。
さらに電極のねじを緩めると、熱電対の素線が外れます。
なお、写真7や写真8では見にくいですが、黄色いカバーに、どちらの電極が+側かが記されています。電極から素線を外すときに、どちらの素線が+側かが分かるように印を付けておくといいでしょう。私は、写真9の様にタグシールで極性の印をつけました。タグシールを貼るために、熱電対全体の被覆をハサミで切って少し短くし、2本の素線に個別に付いている細い被覆の上からタグシールを貼りました。
なお、熱電対の極性が分からなくなっても、それほど心配する必要はありません。ブレークアウト基板に間違った極性で熱電対を接続すると、熱電対の温度測定部(先端)の温度が上がるほど、測定した温度が低下する様になります。熱電対の先端を指でつまんで温めてみて、測定した温度が下がるようなら、極性を間違って接続したと判断できます。
写真9の状態になると、ブレークアウト基板のターミナルブロックに接続できる様になります。素線同士がショートしないように長さを調節したうえで、 ターミナルブロックに挿入し、精密ドライバでねじ止めしてください。この際、ブレークアウト基板の極性表示と、熱電対の極性表示が一致する様に接続してく ださい。(写真10参照)
ライブラリのインストール法については、まず追記の方をお読みください。
Arduinoでこのブレークアウト基板を使用するには、Arduino IDEに、Adafruitが公開しているMAX31855用のライブラリをインストールする必要があります。ライブラリは、GitHubのこちらのページで公開されています。
ライブラリをダウンロードするには、Clone or downloadと書いたボタンをクリックし、その時開くポップアップウィンドウで、Download ZIPのボタンをクリックします。(図1参照)
ファイルがダウンロードできたらArduino IDEを起動します。今回はArduino IDE 1.6.11を使用しました。
スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール...メニューを選択し(図2参照)、開いたウィンドウでダウンロードしたZIPファイルを選択し、開くボタンをクリックします。(図3参照) そうすると、Arduino IDEのウィンドウ下部に「ライブラリが追加されました。『ライブラリをインクルード』メニューを確認してください。」というメッセージが出ます。(図4参照) これでライブラリのインストールは完了です。
注:Arduino IDEのバージョンにより、メニュー構成やメッセージが少し違う事がありますので、ご注意ください。
インストールができたことを確認するには、スケッチ→ライブラリをインクルードメニューの下に、Adafruit MAX31855 libraryの選択肢が出てくるのを確認してください。(図5参照)
読者からの問い合わせがきっかけで分かったのですが、Adafruitが発表しているMAX31855のライブラリの最新版(Version 1.1.1)は、Bus IOという、別のライブラリに依存しています。そのため、MAX31855のライブラリだけをArduino IDEにインストールしても、スケッチのコンパイルが通りません。(図6参照)
この図は、後ほど紹介するserialthermocoupleスケッチのコンパイル中に出たエラーメッセージをキャプチャーした物です。Adafruit_SPIDevice.hがないというエラーが出ています。Adafruit MAX31855 libraryに付属するスケッチの例なのに、Adafruit MAX31855 library単独ではコンパイルできません。また、他にBus IOライブラリが必要だというコメントも、サンプルスケッチ中のコメントなどに書いてありません。
この問題を解決するには、古いバージョンのMAX31855ライブラリをインストールする方法と、MAX31855ライブラリと一緒にBUS IOライブラリをインストールする方法の2種類の方法があります。以下に、それぞれの方法を説明します。
参考:追記部分の説明は、Arduino IDE 1.8.9を用いて行います。
この方法は、インストールするライブラリが一つでいいのでお手軽です。最新のライブラリの機能が必要なく、Adafruitのブレークアウト基板が使う機会がそれほど多くない人にお薦めします。
先ほどは、GitHubからライブラリをダウンロードしてインストールする場合について説明しましたが、現在では、Arduino IDEのライブラリマネージャからAdafruit MAX31855ライブラリがインストールできる様になっているので、そちらを使います。
まずライブラリマネージャを開きます。開くには図7に示す様に、ツール→ライブラリを管理…メニューを選択してライブラリマネージャを起動します。
ライブラリマネージャが起動したら、図8に示す様に、右上の検索窓にmax31855と入力してAdafruit MAX31855 libraryを検索し、バージョンを選択するプルダウンメニューでバージョン1.0.0を選択します。その後、インストールボタンをクリックすると、Adafruit MAX31855 library 1.0.0がインストールされます。
この図は、Adafruit MAX31855 library 1.1.1が既にインストールされている状態で画面をキャプチャした物なので、バージョン1.1.1 INSTALLEDの表示が出ていますが、まだこのライブラリをインストールしていない人の場合は、この表示が出ません。
この方法は、Adafruitのブレークアウト基板をよく使う人にお薦めです。SPIやI2CインターフェースのAdafruit製ブレークアウト基板のライブラリは、Bus IOライブラリに依存している物が多いので、この機会にBus IOライブラリもインストールしておくといいでしょう。ただし、ブレークアウト基板のライブラリとBus IOライブラリのバージョンの組み合わせには、自分で注意を払う必要があります。
まずMAX31855用のライブラリをインストールします。
図7に示す様に、ツール→ライブラリを管理…メニューを選択し、ライブラリマネージャを起動します。その後、図9に示す様に、右上の検索窓にmax31855と入力してAdafruit MAX31855 libraryを検索し、バージョンを選択するプルダウンメニューで最新のバージョンを選択します。次にインストールボタンをクリックすると、Adafruit MAX31855 libraryがインストールされます。
原稿を書いている時点での最新バージョンである1.1.1をインストールしています。この図は、バージョン1.0.0をインストールした状態で撮ったスクリーンショットなので、バージョン1.0.0 INSTALLEDの表示が出ていますが、まだこのライブラリをインストールしていない人の場合は、この表示が出ません。
次に、Bus IOライブラリをインストールします。
ライブラリマネージャの検索窓でbusioと入力して、Adafruit BusIOを検索します。そして、Adafruit MAX31855 libraryの時と同じ要領で最新バージョンをインストールします。(図10参照)
AdafruitのMAX31855用ライブラリは、ソフトウェアSPIによりデータのやり取りを行います。(Arduino UnoとArduino Megaのみ、ハードウェアSPIにも対応しています) そのため、Arduinoの任意のピンにMAX31855の信号線を割り当てる事ができます。
Adafruitのライブラリに付属するサンプルスケッチは、デフォルトでMAX31855のDOをArduinoの3番ピンに、CSを4番ピンに、CLKを5番ピンに接続する設定になっていますので、今回はそれに従う事にします。
電源線なども含めて、ブレークアウト基板とArduinoの結線をまとめると、表1の様になります。
ブレークアウト基板の端子 | Arduinoの端子 |
---|---|
Vin | 5V(5V動作のArduinoの場合)、 3.3V(3.3V動作のArduinoの場合) |
3Vo | 接続せず |
GND | GND |
DO | 3 |
CS | 4 |
CLK | 5 |
結線には、一方にオス、もう一方にメスのヘッダが付いたブレッドボード用のジャンパ線(写真11)を利用します。
今回、ブレークアウト基板の動作試験をするにあたって、Arduino Unoを使用しました。Arduino Unoとブレークアウト基板を結線した様子を写真12に示します。今回は、ブレッドボードは使わずに、L字型ピンヘッダとジャンパ線を接続し、ブレークアウト基板はどこにも固定されていない状態で動作試験を行います。基板の裏面が金属に触れてショートする事がないように、金属くずやねじなどがない机の上で作業する事が重要です。
それでは、実際に熱電対で温度を測定してみます。
写真12の様にArduinoとブレークアウト基板、熱電対が接続できたら、ArduinoとパソコンをUSBケーブルで接続します。
温度を読み取るスケッチは、AdafruitのMAX31855ライブラリに、サンプルスケッチが付属しますので、それを利用する事にします。
Arduino IDEを起動し、ファイル→スケッチの例→Adafruit MAX31855 library→serialthermocoupleメニューを選択し、サンプルスケッチを開きます。(図11参照) このスケッチは、MAX31855のIC内部の温度と熱電対の温度を読み取り、シリアル出力に9600bpsで出力するものです。
注:Arduino IDE 1.6.11以外では、メニュー構成が異なる事があります。
Arduinoにスケッチを書き込み、シリアルモニタを起動すると、図12に示す様に、1秒間隔でICの内部温度と熱電対で測定した温度を測定した結果が、画面に表示されます。
"Internal Temp ="と表示されるのがIC内部の温度で、"C ="と表示されるのが熱電対で測定した温度です。温度は摂氏(℃)で表示され、また、分解能は0.25℃です。温度測定の分解能自体は0.25℃ありますが、K型熱電対はそれほど高精度な温度センサではありません。常温付近で2℃程度(高温ならさらに多く)の測定誤差は発生する可能性があります。
なお、MAX31855と熱電対を使った温度測定では、MAX31855に内蔵されている温度計でIC内部の温度(≒周辺の気温)を測定し、また熱電対の発生する熱起電力から、IC内部の温度と熱電対の測定部の温度の差を測定します。それらの和が、熱電対の測定部の温度として表示される仕組みになっています。
仮に熱電対の代わりに、ただの導線をブレークアウト基板のターミナルブロックに接続してショートした場合、熱起電力が0になりますので、測定値としてはIC内部の温度、すなわち、ほぼ周辺の気温が表示される事になります。
そのため、図7の様な実験をして、"C="の部分に気温とほぼ同じ数値が表示されても、正しい測定ができている証拠には全くなりません。
正しく熱電対の温度を測定しているかどうかは、熱電対の先端の、温度測定部を指でつまんで温めてみてください。測定して得られる温度が上昇するなら、精度はともかく、きちんと熱電対で測定した温度を表示している事が確かめられます。
なお前述の様に、熱電対の接続時に極性を間違えると、熱電対を温めると逆に、測定して得られる温度が低下します。そのためこの試験をすると、熱電対の極性の確認にもなります。