MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Arduinoの基礎 - 温度センサのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Arduinoの基礎 - 温度センサ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == ここでは、温度センサとして人気のあるTMP36とNTCサーミスタ(MF52-103)の使用方法を記載する。<br> <br><br> == TMP36の使用方法 == ===== TMP36の概要 ===== TMP36は、アナログ出力温度測定ICである。<br> サーミスタと違い、TMP36において、出力電圧が測定範囲(-40℃〜125℃)では10[mV/℃]とほぼ線形になる。<br> <br> 温度T[℃]は、次式で得られる。<br> <math>T[^\circ\mbox{C}] = 100 \times V_{out}[V] - 50</math> … (1)<br> <br> 正確な計算式はデータシートを参照する。<br> TMP36のデータシートには次のような記載がある。<br> [[ファイル:Arduino TMP36 1.png|フレームなし|中央]] <br> すなわち、TMP36では、1[℃]ごとに電圧が10[mV]上がり、オフセットが0.5[V]なので、Vout[V]は次式となる。<br> <math>V_{out} = 0.01[V/^\circ\mbox{C}] \times T[^\circ\mbox{C}] + 0.5[V]</math> … (2)<br> この(2)式を整理すると、上の(1)式になる。<br> <br> 入力電圧Vsは、2.7[V]〜5.5[V]である。<br> <br> TMP36の接続は下図の通りである。<br> 下図の出力ピンであるVoutを、Arduinoで測定する。<br> また、パスコンは0.1[μF]のセラミックコンデンサを使用して、TMP36のVsに近い場所に配置する。<br> [[ファイル:Arduino TMP36 2.png|フレームなし|中央]] <br> ===== サンプルコード ===== Arduinoを使用してTMP36の出力を読む場合、アナログ入力値を読むことでできる。[[Arduinoの基礎#Arduino.E3.81.A7.E9.9B.BB.E5.9C.A7.E3.82.92.E6.B8.AC.E5.AE.9A.E3.81.99.E3.82.8B.28.E3.82.A2.E3.83.8A.E3.83.AD.E3.82.B0.E5.85.A5.E5.8A.9B.E3.82.92.E8.AA.AD.E3.81.BF.E5.8F.96.E3.82.8B.29|"Arduinoで電圧を測定する(アナログ入力を読み取る)"]]を参照すること。<br> <code>analogRead()</code>関数の戻り値は、直ちに電圧が得られるわけではなく、0[V]から5[V](または、0[V]から3.3[V])が、0から1023の値となることに注意すること。<br> <br> また、SC1602のI2Cアダプタを使用する方法については、[[Arduinoの基礎_-_SC1602#SC1602_I2C.E3.82.A2.E3.83.80.E3.83.97.E3.82.BF.E3.82.92.E5.88.A9.E7.94.A8.E3.81.99.E3.82.8B|"SC1602 I2Cアダプタを利用する"]]を参照すること。<br> <br> <code>analogRead()</code>関数でTMP36からの電圧を取得して、SC1602に表示するサンプルコードは以下の通りである。<br> <source lang="c++"> #include <LiquidCrystal_I2C.h> const int PIN_TMP36 = 1; const int LCD_LEN = 16; LiquidCrystal_I2C lcd(0x27,16,2); void setup() { // LCD初期化 lcd.init(); lcd.clear(); lcd.backlight(); } void loop() { // TMP36から電圧を取得して温度へ換算 float a = (float) analogRead( PIN_TMP36 ); float v = a * 5.0 / 1023.0; float t = v * 100 - 50; // 温度の表示 char degree_symbol = (char) 223; String s = String(t, 1) + degree_symbol + 'C'; int pos = ( LCD_LEN - s.length() ) / 2; lcd.clear(); lcd.setCursor(pos, 0); lcd.print(s); // 3秒待つ delay(3000); } </source> <br><br> == NTCサーミスタ == ===== NTCサーミスタの概要 ===== このセクションでは、NTCサーミスタを用いて、温度を測定する方法について記載する。<br> <br> 温度を測るアナログICとしては、上記セクションで説明したTMP36もあるが、サーミスタはより安価である。<br> このセクションで使用するNTCサーミスタは、MF52-103である。<br> <br> サーミスタ(thermistor)の名前は、"thermal"(熱)と"resistor"(抵抗器)から由来で、温度変化によって抵抗値が変化する抵抗器のことである。<br> サーミスタの種類により、変化する温度で抵抗値はいくら変化する(または、抵抗値がいくら変化すれば温度はいくら変化する)という計算ができる。<br> <br> サーミスタには大きく分けて、NTCタイプとPTCタイプの2種類ある。<br> NTCは温度の上昇と共に抵抗値が下がるタイプで、PTCはその逆で温度が上昇すると抵抗値も上昇するタイプである。<br> 一般的に、サーミスタと言えば、NTCタイプのサーミスタのことを指す。<br> <br> また、10[kΩ]のNTCサーミスタと言う場合、25[℃]の時に抵抗値が10[kΩ]であることを意味する。<br> <br> ===== 温度の取得 ===== NTCサーミスタでは、次式で温度が取得できる。<br> ここで、R0、T0は、それぞれ25[℃]での抵抗値[Ω]と温度[K]である。<br> <math>R = R_{0} e^{B(\frac{1}{T} - \frac{1}{T_{0}})}</math> … (1)<br> <br> 例えば、10[kΩ]のサーミスタを使用すると、R0は10[kΩ]、T0は298.15[K](=25[℃])である。<br> 摂氏温度からケルビンに換算する場合は、273.15を加算する。<br> BはサーミスタのB値と呼ばれる定数で、サーミスタの種類ごとに異なる。<u>Bまたはβとして、データシートに記載されている。</u><br> なお、MF52-103のB値は、3950である。<br> <br> 上記の(1)式をTについて解き、抵抗値Rの関数にすると次式(2)となる。<br> Tはケルビンで得られるので、摂氏への換算は273.15を減算する。<br> <math>\frac{1}{T} = \frac{1}{B} \ln (\frac{R}{R_{0}}) + \frac{1}{T_{0}}</math> … (2)<br> <br> ===== 抵抗値の取得 ===== Arduinoを使用してサーミスタの抵抗値を取得する場合、抵抗値を直接測定することはできないが、電圧を測定して抵抗値に変換することでできる。<br> そこで、次のような分圧回路を構成して、Voutを測定する。<br> [[ファイル:Arduino TMP36 3.png|フレームなし|中央]] <br> ここで、Rはサーミスタの抵抗値、R1は分圧測定のために導入した抵抗である。<br> 例えば、10[kΩ]のサーミスタに対して、R1は10[kΩ]程度とする。<br> すると、出力電圧Voutの分圧式は次式(3)となり、この式をRについて解くと(4)式となる。<br> <math>V_{out} = \frac{R_{1}}{R+ R_{1}} V_{in}</math> … (3)<br> <math>R = (\frac{V_{in}}{V_{out}} - 1)R_{1}</math> … (4)<br> <br> なお、この分圧回路で設定したR1をバランス抵抗という。<br> <br><br> __FORCETOC__ [[カテゴリ:Arduino]]
Arduinoの基礎 - 温度センサ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse