Arduino トラブル関連 DUEメモ YUNメモ

 

作成日:2013年12月14日
最終更新日: 2013年12月15日

こて先温度計を作る

秋月で売ってる白金抵抗素子。これを使ってみたくて半田ごての温度計を作ってみました。
目的が先ではなく、部品を使ってみたいという事が先のパターン。でも、あると便利。

概要

使用した白金温度センサーは、秋月で売ってた350円のものです。パッケージが小さいのでこて先の温度をレスポンスよく計るのには良いかと思います。これをオペアンプを使ってR-V変換を行い、その出力をArduinoで測定、液晶ディスプレイに表示するようにします。

回路

この白金温度センサーは標準電流が1mA、0度での抵抗値が100Ωです。ここに1mAの定電流を流すためにごく普通のオペアンプによる反転増幅器を使い、フィードバック抵抗の部分にこの温度センサーを入れるようにしました。
オペアンプの電源電圧は5Vを使用しています。温度センサー部の基準電圧としては電源電圧の半分くらいがちょうどいいですが、簡単に(手持ちの部品で)作れるという事で3.3Vにしました。3.3V出力のレギュレーターでこの電圧を作ってます。
オペアンプは、これも手持ちで、そしてフルスイングできるという事もありNJM7072を使いました。1段目で抵抗-電圧変換を行い。100Ωあたり0.1V変化する電圧を得ます。2段目で使いやすい電圧になるようオフセットとゲインを調整しています。
2段目の出力から先は何も書いてないですが、普通のArduino(というかATMega328)のアナログ入力端子に接続するだけです。今回はA3端子に接続しています。

製作

今回はArduinoのシールドとして作成しました。基板は秋月で発売されているArduino用の万能基板を使いました。UNO等、標準のArduinoであれば3.3V電源を取り出す事もできますが、3.3V出力の無いArduino互換機でも動くよう、あえてシールド内で5Vから3.3Vを作っています。
ディスプレイはI2C接続のLCDモジュール(8×2文字)を使いましたが、まぁ、なんでもいいでしょう。
センサーはコネクタを経由して子基板にマウントし、固定抵抗と変える事で簡単に校正できるようにしました。端子は2pで充分ですが6pを使い、小基板にセンサーと固定抵抗2個(100Ωと300Ω)をマウントしています。こうすればコネクタをずらして差し込む事で、センサーを固定抵抗と簡単に入れ替えることができます。
なお、抵抗はすべて誤差1%のものを使いました。

スケッチ

スケッチは非常に簡単。まずA3端子よりアナログ値を読み出し、それを抵抗値に変換します。アナログ値として、今回は100Ωの時に100、300Ωの時に900が読み出されるという事を想定し、読み出した値からリニアに変換します。
それによって求められた抵抗値を温度に変換します。そんなに精度が求められるわけではないのでリニアに変換すれば大丈夫だと思いますが、せっかくなのできちんと求めてます。0度以上の時の抵抗値Rtは、
Rt = R0 × (1 + aT + bT^2)
R0 = 100[Ω]
a = 3.9083E-3
b = -5.775E-7
との事なので、この式を変換して抵抗値Rtから温度Tを求めています。二次方程式の解の公式というものを久しぶりに使いました。

あとは求められた温度をLCDディスプレイに表示するだけです。
今回はLCDディスプレイに秋月で売ってるI2Cのものを使用しました。そのライブラリとしてオレ工房さんのものを利用させて頂きました。

Sketch
#include <ST7032.h>
#include <Wire.h>

ST7032 lcd;

void setup() {
  Serial.begin(57600);
  
  lcd.begin(8,2);
  lcd.setContrast(25);  
}

// 100,300ΩでのAD変換値
#define R100 100
#define R300 900

void procTemperture(){
  int d;
  float r,t;
  char buff[10];
  
  // AD変換値の読み出し
  d = analogRead(A3);
  // 読み出した値をLCDに表示
  sprintf(buff,"%4d ",d);
  lcd.setCursor(2,0);
  lcd.print(buff);
  
  // AD変換の値を抵抗値に変換
  r = ((float)d - R100) / (R300 - R100) * 200 + 100 ;
  // debug用
  dtostrf(r,5,1,buff);
  Serial.print(buff);
  Serial.print(' ');
  // 抵抗値から温度に変換
  t = (0.39083 - sqrt(0.17585-2.31e-4*r))/1.155e-4;
  // debug用
  dtostrf(t,5,1,buff);
  Serial.println(buff);
  // 温度をLCDに表示
  lcd.setCursor(1,1);
  lcd.print(buff);
  lcd.print((char)0xdf);
  lcd.print('c');
}


void loop() {
  procTemperture();
  delay(300);
}

調整

まずはセンサーに流れる電流の調整。1段目のオペアンプの+入力端子が、基準電圧(+3.3V)よりも0.1V低くなるようR4を調整します。これによってR1の両端の電圧は0.1Vになるので1mAが流れ、これと同じだけの電流がセンサーに流れます。
次に2段目のオペンプのオフセットとゲインを調整します。センサーを100Ωの固定抵抗と入れ替えた時にAD変換の値が100に、300Ωの固定抵抗と入れ替えた時に900になるよう、R5とR6を繰り返し調整します。
調整が終わったらセンサーに付け替えます。ほぼ気温の値が表示されるはずです。




home | Elec top

inserted by FC2 system