K型熱電対 温度測定モジュール

K型熱電対の温度を表示・出力するモジュールです。
通信インターフェイスはUSB、RS-485(Modbus RTU、コマンド-レスポンス方式)、Grove(I2C)に対応しています。
電源はUSBバスパワー、Grove(3.3V、5V)、外部入力(DC9~27V)に対応しています。
現在温度だけでなく、平均温度、最大温度、最小温度も取得できます。
DINレール取付けとネジ取付けの両方に対応しています。
M3・M4の丸形・Y形圧着端子およびミニオメガコネクタ1の熱電対に対応しています。

白金測温抵抗体(Pt100)用の温度測定モジュールもございます。

使用例

各部の名称

※ジャンパーピンの色は画像と異なる場合があります。

内容物

販売

販売ページ(スイッチサイエンス)
※販売ページに表示されている在庫数のほかにも、追加の在庫を保有している場合がございます。大量注文や在庫に関する問い合わせはこちらまでご連絡ください。

使い方

  1. (ミニオメガコネクタを使用する場合)以下の画像のようにはんだ付けしてください。
    ※ミニオメガコネクタは秋月電子等で購入できます。

  2. 熱電対を接続する
    熱電対を以下の画像のように接続してください。

    端子台接続の場合 ミニオメガコネクタ接続の場合
  3. 電源に接続する
    以下のいずれかの方法で給電して下さい。

    • USB給電(5V)
    • Grove互換コネクタ(3.3V or 5V)
    • 電源入力用端子台(DC9~27V)

    ※複数系統から電源を供給しても問題ありません。

  4. 設定する
    基板上のボタンもしくはI2Cコマンドでセンシングと通信の設定を行ってください。

  5. データを取得する
    USB / RS-485 / I2Cで温度データを取得してください。
    ※USB接続の場合、こちらのページからブラウザ上で温度データのロギングを行うこともできます。

通信仕様

仕様

画面遷移図

設定項目の説明

* 工場出荷時の設定

取付方法

DINレール取付け

DINレールアダプタ(Phoenix Contact社 1201578)を画像のようにネジ止めしてください。
※DINレールアダプタ・ねじ等は付属しません。

ねじ取付け

スペーサ等を用いて所望の板等に固定してください。
※スペーサ・ねじ等は付属しません。

ファームウェアのアップデート

ファームウェア一覧

詳細を見る

必要なもの

  • 製品本体
  • USBケーブル
  • PC

必要なソフトウェア

本製品に搭載しているSTMicroelectronics社のマイコンへの書込み用ソフト"STM32CubeProg"が必要です。 下記のサイトからソフトウェアをダウンロードしインストールしてください。
https://www.st.com/ja/development-tools/stm32cubeprog.html
※本ソフトウェアをダウンロードするためにはmySTへの登録(無料)が必要です。

ファームウェアの書き換え手順

  1. こちらから最新版のファームウェアをダウンロードします。
  2. 製品にエンコーダやGroveケーブル等が接続されている場合、全て抜いてください。
  3. ブートローダーモードに移行します。CANCELボタンを押したまま、製品にUSBケーブルを挿して電源を供給してください。ディスプレイに何も表示されなければ成功です。ディスプレイに文字などが表示された場合、再度操作を行ってください。
  4. STM32CubeProgからファームウェアを書き込みます。こちらのページの手順に従いファームウェアを書き込んでください。
  5. REBOOTボタンを押してください。

資料

回路図

外形寸法

DXFファイル:dimensional_dxf.zip

3D CADデータ

STEPファイル:3d_step.zip
STEPファイル(ミニオメガコネクタ付):3d_omega_step.zip

プログラム例

M5stackのI2Cを用いたカウント値取得のプログラム例

配線図・サンプルコードを見る

#include <M5Core2.h>

#define I2C_DEV_ADDR	    0x16

#define NOWTEMP_REG_ADDR		0x01	// 0x01 - 0x04
#define AVETEMP_REG_ADDR		0x05	// 0x05 - 0x08
#define MAXTEMP_REG_ADDR		0x09	// 0x09 - 0x0C
#define MINTEMP_REG_ADDR		0x0D	// 0x0D - 0x10
#define STAT_REG_ADDR			0x11
#define VRST_REG_ADDR			0x12
#define AVRST_REG_ADDR			0x13
#define SCONF_REG_ADDR			0x14
#define CCONF_REG_ADDR			0x15
#define MODADDR_REG_ADDR		0x16
#define OFFSET_REG_ADDR			0x17	// 0x17 - 0x18
#define VMAJOR_REG_ADDR			0xFA
#define VMINOR_REG_ADDR			0xFB
#define VPATCH_REG_ADDR			0xFC
#define SYSRBT_REG_ADDR			0xFD
#define I2CADDR_REG_ADDR		0xFE
#define INIT_REG_ADDR			0xFF

void setup() {
  M5.begin(true, true, true, true);
  M5.Lcd.setTextSize(3);

  byte error;
  // Set sensing config
  // SCONF: Unit=Celsius
  uint8_t sconf = 0x00;
  Wire.beginTransmission(I2C_DEV_ADDR);
  Wire.write(SCONF_REG_ADDR);
  Wire.write(sconf);
  error = Wire.endTransmission();
  if (error){
    Serial.print("error=");Serial.println(error);
  }
  delay(2000);  // Wait until the config is written and the device reboots

  // Set Communication config
  // CCONF: RS485 baudrate=9600, RS485=Modbus, USB Auto Tx=10sec, USB Auto Tx=Disable
  uint8_t cconf = 0x02;
  Wire.beginTransmission(I2C_DEV_ADDR);
  Wire.write(CCONF_REG_ADDR);
  Wire.write(cconf);
  error = Wire.endTransmission();
  if (error){
    Serial.print("error=");Serial.println(error);
  }
  delay(2000);
}

void loop() {
  union _32bit_u
  {
    uint8_t uint8_data[4];
    int32_t int32_data;
  } temp_values[4];
  float temperatures[4];
  const char *str_prefix[4] = {"Now: ", "Ave: ", "Max: ", "Min: "};

  M5.Lcd.setCursor(0, 0);

  Wire.beginTransmission(I2C_DEV_ADDR);
  Wire.write(NOWTEMP_REG_ADDR);
  Wire.endTransmission(false);
  Wire.requestFrom(I2C_DEV_ADDR, 4 * 4);
  for(int i = 0; i < 4; i++) {
    for(int j = 0; j < 4; j++) {
      temp_values[i].uint8_data[j] = Wire.read();
    }
    temperatures[i] = (float)(temp_values[i].int32_data) * 0.01f;

    char strBuf[12];
    sprintf(strBuf, "%s%6.2f", str_prefix[i], temperatures[i]);
    M5.Lcd.println(strBuf);
  }
  delay(2000);
}

USB接続で温度をロギングするプログラム例

配線図・サンプルコードを見る

こちらのページからブラウザ上で温度データのロギングを行うこともできます。



ダウンロード

サンプルコード(.NET 6.0)

using System;
using System.IO.Ports;  // https://www.nuget.org/packages/System.IO.Ports

public class k_thermocouple_usb_logger
{
    static SerialPort? _serialPort;
    static bool _continue;
    static string _portName = "";

    public static int Main(string[] args)
    {
        StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
        Console.WriteLine("Obtain temperatures from Type-K Thermocouple Thermometer via USB and save them to CSV.\n(The USB auto tx mode must be enabled.)\n");
        Console.WriteLine("Available ports:");
        foreach (string s in SerialPort.GetPortNames())
            Console.WriteLine("\t{0}", s);
        _portName = InputPortName();
        _serialPort = new SerialPort(_portName, 921600, Parity.None, 8, StopBits.One);
        if(_serialPort.IsOpen) {
            Console.WriteLine("Error: {0} is already open.", _portName);
            return 1;
        }
        _serialPort.ReadTimeout = _serialPort.WriteTimeout = 300;
        _serialPort.Open();

        Thread loggingThread = new Thread(LoggingThread);
        _continue = true;
        loggingThread.Start();
        Console.WriteLine("\nStart logging. Type QUIT to exit.");
        while (_continue)
        {
            string message = Console.ReadLine()!;
            if (stringComparer.Equals("quit", message)) {
                _continue = false;
            }
        }
        loggingThread.Join();
        _serialPort.Close();
        return 0;
    }

    public static void LoggingThread()
    {
        while (_continue)
        {
            try
            {
                string message = _serialPort!.ReadLine();
                string text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "," + message;
                Console.WriteLine(text);
                File.AppendAllText("./temperature_log_" + _portName + ".csv", text + '\n');
            }
            catch (TimeoutException) { }
        }
    }

    public static string InputPortName()
    {
        string portName;
        string[] ports = SerialPort.GetPortNames();
        string defaultPortName = ports.Length >= 1 ? ports[0] : "COM1";
        Console.Write("Enter COM port value (Default: {0}): ", defaultPortName);
        portName = Console.ReadLine()!;
        if (portName == "" || !(portName.ToLower()).StartsWith("com")) {
            portName = defaultPortName;
        }
        return portName;
    }
}


  1. ミニオメガコネクタは付属しません。別途ご用意いただき、はんだ付けしていただく必要があります。 ↩︎

  2. 市販の端子台式のK型熱電対で主に使用されるM3、M4の圧着端子に対応しています。 ↩︎

  3. 使用している熱電対の使用可能温度範囲に制限されます。 ↩︎

  4. 測定可能範囲は冷接点温度(≒室温)が0℃の場合であり、室温によってオフセットされます。例えば室温が20℃のとき、測定可能範囲は-180℃~1370℃となります。 ↩︎

  5. 熱電対自体の精度は含みません。 ↩︎

  6. 値がリセットされるとディスプレイ上の該当数値部分が点滅します。 ↩︎

  7. ストップビット設定はファームウェアv1.1以降で対応しています。ファームウェアv1.0では1bit固定です。 ↩︎

  8. 基板上の「RS-485終端抵抗有効化ジャンパ」によって終端抵抗を使用するかどうか選択できます。 ↩︎

  9. 基本的にPCとUSBで接続すると自動的にUSBドライバがインストールされますが、自動的にUSBドライバがインストールされない場合はこちらのページ下部のCH341SER.EXEをインストールして下さい。 ↩︎