wiki:MAX6675

Version 6 (modified by sgk, 12 years ago) ( diff )

--

MAX6675 SPI接続K型熱電対温度計

K型熱電対を使用した温度計モジュール。SPIでつなぎます。 校正不要。0℃~1023℃、0.25℃刻み。 ライターの火の温度とか測れちゃいます!

Arduinoなら、そのままデジタル8番~13番の位置に差し込めば動きます。

熱電対は比較的熱容量が小さいので、温度変化の検出が早いです。 常温程度の温度をモニタしていても、案外面白いです。

特徴

概要:

  • K型熱電対(ミニチュアコネクタ使用)
  • SPI接続(読み出しのみ)

いい点:

  • 校正不要
  • 0℃~1023℃の広範囲を測定
  • Arduinoなら、いきなり差し込んで動く。

悪い点:

  • 0.25℃刻みなのがちょっと粗い。
  • 0℃以下を測定できない。

用途

  • ハンダごてのコテ先温度計
  • なんちゃってリフロー
  • 恒温槽
  • 各種実験

キット販売検討中

キットとして販売することを検討中です。 チップ部品が2個あるのがもしかしたら問題。 SOICは1.27mmピッチだからなんとかなるでしょう。 1005のチップコンデンサは、人によってはキツイかもしれません。 虫眼鏡、ピンセット、細いコテ先、細いハンダ、フラックスが必須です。 逆に、熱電対レセプタクルのハンダ付けには、太いコテ先が必須。

内容物:

  • ボード
  • Maxim MAX6675(SOIC 8ピン)
  • チップコンデンサ(1005サイズ)
  • K型熱電対専用レセプタクル基板直付け用(ミニチュア)
  • ピンヘッダ6ピン
  • K型熱電対(安物なので高温だと被覆が燃えます)
  • K型熱電対専用プラグ(ミニチュア、黄色)

3,000円くらいかなあ。MAX6675が高いんです。

回路図とパターン図は、そのうち掲載します。 オープンソースだなんてほどのことはありません。

差し上げます(完成品)

ハンダ付け済みの完成品を2個用意しました。抽選で差し上げます。 こんなマニアックな物、欲しい人いるでしょうか。 もしも、欲しい方がいらっしゃいましたら、以下の内容をメールでお送りください。 当選した方には、こちらからご連絡差し上げ、お送り先のご住所などをおたずねします。

MAX6675ボードがすごく欲しい!

ハンドル名:(何かてきとうにお名前を決めてください)
使い途:(もらったら何に使うか書いてください)
キットの価格を評価してください(××、×、△、○、○○の5段階)
 1,000円:
 1,500円:
 2,000円:
 2,500円:
 3,000円:
 3,500円:
 4,000円:
 4,500円:
 5,000円:

1,000円は、間違いなく無理なんですけど、いちおう。

もしかしたら、ハンドル名と使い途を公表させていただくかもしれません。 なるべく、面白いand/or有意義な使い途の方に差し上げたいと思います。 メールの宛先は、「sales@」の後にこのドメイン名。 メールの件名は、「MAX6675」にしてください。

締め切りは2009年3月25日(ぐらい)でお願いします。

MAX6675.pde

#include "SPI.h"

#define VCC  8
#define GND  9
#define SLAVE  10

void
setup()
{
#ifdef GND
  pinMode(GND, OUTPUT);
  digitalWrite(GND, LOW); 
#endif
#ifdef VCC
  pinMode(VCC, OUTPUT);
  digitalWrite(VCC, HIGH);
#endif

  Serial.begin(9600);
  SPI_Master.begin(SLAVE);
}

void
loop()
{
  int value;

  delay(500);
  SPI_Master.enable(SLAVE);
  value = SPI_Master.read() << 8;
  value |= SPI_Master.read();
  SPI_Master.disable();
  
  if ((value & 0x0004) != 0)
    Serial.println("Error");
  else
    Serial.println((value >> 3) * 0.25);
}

SPI.cpp

#include "SPI.h"

boolean SPI_Master_Class::initialized_ = false;
int SPI_Master_Class::enabled_ = -1;

void
SPI_Master_Class::begin(int slaveselecter) {
  if (!initialized_) {
    initialized_ = true;
    enabled_ = -1;
    pinMode(SS, OUTPUT);  // Must be set as OUTPUT before SPE is asserted.
    pinMode(MOSI, OUTPUT);
    pinMode(MISO, INPUT);
    digitalWrite(MISO, HIGH);  // Pull-up
    pinMode(SCK, OUTPUT);
    SPCR = (1<<SPE)|(1<<MSTR);  // SPE: SPI Enable; MSTR: Master
    byte garbage;
    garbage = SPSR;
    garbage = SPDR;
  }

  if (slaveselecter != SS)
    pinMode(slaveselecter, OUTPUT);
  digitalWrite(slaveselecter, HIGH);  // Disable
}

void
SPI_Master_Class::enable(int slaveselecter) {
  disable();
  digitalWrite(slaveselecter, LOW);
  enabled_ = slaveselecter;
}

void
SPI_Master_Class::disable() {
  if (enabled_ >= 0) {
    digitalWrite(enabled_, HIGH);
    enabled_ = -1;
  }
}

byte
SPI_Master_Class::write_and_read(byte data) const {
  SPDR = data;
  while (!(SPSR & (1<<SPIF)))
    ;
  return SPDR;
}

void
SPI_Master_Class::write(byte data) const {
  write_and_read(data);
}

byte
SPI_Master_Class::read() const {
  return write_and_read(0x00);
}

SPI_Master_Class SPI_Master;

SPI.h

#ifndef __SPI_H__
#define __SPI_H__

#include "WProgram.h"

class SPI_Master_Class {
public:
  static void begin(int slaveselecter);
  void enable(int slaveselecter);
  void disable();
  byte write_and_read(byte data) const;
  void write(byte data) const;
  byte read() const;

private:
  static boolean initialized_;
  static const int SS = 10;
  static const int MOSI = 11;
  static const int MISO = 12;
  static const int SCK = 13;
  static int enabled_;
};

extern SPI_Master_Class SPI_Master;

#endif //__SPI_H__

Attachments (3)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.