サーミスタとArduinoで温度計を構成します。
目次:
今回の目的
ELEGOOのチュートリアル「Thermometer」をチュートリアル通りに動かします。
※チュートリアルの文章(PDF日本語版含む)もスケッチもELEGOOのサイトから無料でダウンロードできました。
サーミスタ
今回新たに使う素子はサーミスタです。Arduinoとの組み合わせで「温度計」を実現します。
サーミスタの黒い表面に刻印等はありません。抵抗器と並べると小さく、リードも細めであることがわかります。
チュートリアルに同梱のデータシートによればMF52D-103
サーミスタは温度変化に対して大きく抵抗が変化する素子で、「THERMally sensitive resISTOR」(THERMISTOR)から来た単語だとか。
温度に対する抵抗変化の正負で、NTC(Negative Temperature Coefficient 負の温度係数)、PTC(Positive Temperature Coefficient 正の温度係数)とに分かれます。
今回のような温度検知には温度変化に対する抵抗変化が緩やかで近似しやすいということでNTCが多用され、ある温度を超えると急激に抵抗値が上昇するPTCはヒューズ的な用途が多いそうです。
器材接続
前回の「LCDモジュール」のブレッドボードにサーミスタと10kΩ抵抗とを追加しました。
↓↓↓前回↓↓↓
LCDモジュールをArduinoで動かす①チュートリアル通りに動かす-sozoro-Lab.
VCC(5V)-GND間にサーミスタと10kΩ抵抗を直列に繋ぎ、サーミスタと抵抗の間をArduinoのA0に繋ぎます。温度上昇によりVCC(5V)側に繋がれているサーミスタの抵抗値が下がれば、サーミスタと10kΩ抵抗との分圧によるA0入力電圧が上がります。
温度表示はLCDディスプレイに表示するので、USBの接続はバッテリー等、電源供給さえできれば問題ありません。
スケッチ
オリジナルのものを少し変えました。
標準ライブラリ「LiquidCrystal」を読み込むあたりは前回同様です。A0の電圧を読み取り、それを温度[℃]まで変換してLCDモジュールに表示させます。
#include<LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12); // LiquidCrystal型の変数「lcd」を定義
void setup() {
lcd.begin(16,2); // LCDの表示行列数設定
}
void loop() { // 以下延々と繰り返す
int tempR = analogRead(0); // 変数tempRに電圧読取値(0~1023)代入
double tempK = log(10000.0 * (1024.0 / tempR - 1));
tempK = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * tempK * tempK))* tempK); // [K]に変換
float tempC = tempK - 273.15; // [K]を[℃]に変換
lcd.setCursor(0,0); // 表示位置指定
lcd.print("Temp C ");
lcd.setCursor(6,0); // 表示位置指定
lcd.print(tempC); // 変数tempCを表示
delay(500); // 待ち時間
}
動作
表示されました。測定ばらつきが大きく、数℃の範囲でふらつきつつ表示されますが、部屋に置いてある温度計とも大体一致します。
所感
モジュール(DHT11)を使った温度測定は以前にやりましたが、今回はあえてサーミスタを使い、Arduinoのスケッチ上で変換、LCDに温度表示させました。
↓↓↓DHT11による温度(湿度)測定↓↓↓
温度湿度センサーをArduinoで動かす①チュートリアル通りに動かす-sozoro-Lab.
DHT11の時はスケッチ読解を諦めましたが、今回のサーミスタは処理内容を追うことができますし、仕組みもわかりやすくはありました。もう一度挑戦するなら今度はDHT11の出力をLCDに表示するのも良いかもしれません。
0 件のコメント:
コメントを投稿