Version 6 (modified by 12 years ago) ( diff ) | ,
---|
MAX6675 K型熱電対温度センサのスケッチ
どんなスケッチ(ソフトウェア)で使うのかを説明します。
すでにモジュールが完成していて、Arduino Duemilanoveのデジタル8番~13番の位置に差し込んであるものとします。
手っ取り早い方法
このページの添付ファイル「MAX6675.zip」をダウンロードして、展開します。 展開してできたフォルダを、Arduinoのスケッチブックのフォルダに移動します。 スケッチブックのフォルダは、ウィンドウズでは標準は「マイドキュメント」(XPの場合)または「ドキュメント」(Vistaの場合)の中にある、「Arduino」というフォルダです。
Arduino統合環境を起動して、「ファイル」メニューの「スケッチブック」から「MAX6675」を探して開いてください。
あとは、普通にArduinoに書き込んで実行します。 「シリアルモニタ」を有効にすると、定期的に温度が表示されます。 「-1000.00」と表示された場合は、熱電対がきちんとつながっていません。 また、モジュールが壊れている場合も同様の表示になります。
スケッチの先頭に、以下の定義があります。
#define VCC 8 #define GND 9 #define SLAVE 10
モジュールをデジタルの8番~13番に直結しない場合は、これらの定義を変更してください。
VCCおよびGNDの定義は、デジタルの8番および9番からモジュールに電源供給を行うためです。 こんなずるをしないで、ちゃんと電源に接続する場合は、この2行を削除してください。
SLAVEの定義は、SPIで言うところのスレーブセレクトにデジタルの何番を使うかを決めています。
2011/12/17 追記
Arduino IDE付属のSPIライブラリ対応版をMAX6675_10.zipとしてアップロードしました。
Arduino 1.0で動作を確認していますが、Arduino 0021あたり以降でも使えると思います。
ですので、拡張子は「.pde」にしてあります。
手っ取り早くない方法
慣れている方なら、こっちの方が手っ取り早いかもしれません。
- 適当な名前でスケッチを新規作成します。
- 下記の「MAX6675.pde」のソースをコピーして、先ほど作成したスケッチのウィンドウに貼り付けます。
- ウィンドウの上部右端の「→」のアイコンをクリックするとメニューが現れます。
- このメニューから「新規タブ」をクリック。
- 画面下部でファイル名を聞かれます。「SPI.cpp」と入力します。
- 現れたタブに、下記の「SPI.cpp」の内容をコピーペーストします。
- 同様に「SPI.h」のタブを作り、「SPI.h」の内容を貼り付けます。
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__
MAX6675_10.pde (Arduino 1.0付属SPIライブラリ対応版)
#include "SPI.h" #define VCC 8 #define GND 9 #define SLAVE 10 byte enabled = 255; void SPI_disable() { if (enabled != 255) { digitalWrite(enabled, HIGH); enabled = 255; } } void SPI_enable(byte slaveselecter) { SPI_disable(); digitalWrite(slaveselecter, LOW); enabled = slaveselecter; } byte SPI_read(){ return SPI.transfer(0x00); } void setup() { #ifdef GND pinMode(GND, OUTPUT); digitalWrite(GND, LOW); #endif #ifdef VCC pinMode(VCC, OUTPUT); digitalWrite(VCC, HIGH); #endif pinMode(SLAVE, OUTPUT); digitalWrite(SLAVE, HIGH); Serial.begin(9600); // SPI_Master.begin(SLAVE); SPI.begin(); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV4); SPI.setDataMode(SPI_MODE0); } void loop() { int value; delay(500); SPI_enable(SLAVE); // SPI_Master.enable(SLAVE); value = SPI_read() << 8; // value = SPI_Master.read() << 8; value |= SPI_read(); // value |= SPI_Master.read(); SPI_disable(); // SPI_Master.disable(); if ((value & 0x0004) != 0){ Serial.println("Error"); } else { Serial.println((value >> 3) * 0.25); } }
Attachments (4)
- MAX6675.zip (1.3 KB ) - added by 14 years ago.
- MAX6675_10.zip (640 bytes ) - added by 12 years ago.
- MAX6675_10_01.zip (559 bytes ) - added by 11 years ago.
- MAX6675_10_02.zip (559 bytes ) - added by 10 years ago.
Download all attachments as: .zip