YouTube
0:53 今回作るもの
1:01 使う材料の準備
1:19 回路図
2:10 回路を組む
2:22 プログラムの作成
3:41 ボードに書き込む
4:00 まとめ
使用したコード
動画内で使用したコードです。ご自由にご使用ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | //アナログ入力ピンの設定 const int analogPin = 0; //A0を使用 //定数の定義 const float B = 3950.0; //サーミスタのB定数 const float R0 = 10000.0; //サーミスタの25度での抵抗値(カタログ値) const float Rd = 10000.0; //検知抵抗の抵抗値 const float Tk = 273.15; //0度=273.15ケルビン void setup() { //シリアルモニタ用 Serial.begin(9600); } void loop() { //アナログ値を読む float readValue = analogRead(analogPin); //Rtを計算する float Rt = Rd * readValue / (1023 - readValue); //Tを計算する(単位はケルビン) float Tbar = 1/B * log(Rt/R0) + 1/(Tk + 25); float T = 1/Tbar; //ケルビンから度に変換 float Tdeg = T - Tk; //シリアルモニターに表示する Serial.println(Tdeg); //0.2秒待機 delay(200); } |
6.サーミスタ
- analog Read関数
- 四則演算
- データ型:float
- データモニターの使い方
ここではサーミスタを使って、analogRead関数、四則演算、floatというデータ型について学んでいきます。
サーミスタとアナログ入力について
サーミスタというのは温度センサの一つで、温度が変わると抵抗値が変わるという特性を持っています。
この特性を逆に利用することで、抵抗値の変化から温度を測定することができます。
と言っても抵抗値を直接測定することは難しいので、一般的には、以下のような回路を組んで電圧に変換して読むことが多いです。
検出抵抗Rdは一般的な抵抗で、Rdが温度によらず抵抗値が変わらないとすると、A点の電圧はRtの抵抗値に応じて変わることになります。
そして以下のような式を用いることで、最終的に温度に変換することができます。
B定数というのはサーミスタの特性を示す定数で、温度の変化に対してどの程度抵抗値が変化するかという傾きを示します。
多くの場合、サーミスタのデータシートに載っているのでその値を使います。
今回作るもの
これは今回作成した回路で、このように触ったりドライヤーで熱を上げてやると、温度が変化しているのが分かると思います。
使う材料の準備
今回使う材料は、Arduino Uno・ブレッドボード・オスオスのジャンパーワイヤ3本・サーミスタ・10kΩの抵抗です。
なおサーミスタは熱が上がると抵抗値が下がるNTCというタイプと、抵抗値が上がるPTCというタイプがあります。
回路図
以下の図は、今回作成する回路図になります。
Arduinoのアナログ入力端子は10bitのADコンバータを備えており、0〜5Vの範囲のアナログ的な電圧を、0〜1023というデジタルデータに変換することができます。
1メモリあたりの電圧を分解能といい、今回の場合は5Vを1024で分割するので、1メモリはだいたい5mVということになります。
アナログ入力端子は全部で6個あり、今回はA0端子を使用しています。
Rdが小さすぎかもしくは大きすぎた場合、A点の電圧がほとんど振れないことになってしまい、抵抗値を正確に計算することが難しくなってしまいます。
実際は測定したい温度領域によって微調整が必要なのですが、ひとまずは室温でのサーミスタの抵抗値と同等レベルの値を使っておけば良いと思います。
今回のサーミスタの場合は10kΩなので、Rdも10kΩを使用しています。
回路を組む
回路図にならってブレッドボード図を作成したのが以下の図になります。
プログラムの作成
それではコーディングを行っていきます。
Arduino IDEを起動して、「ファイル→新規ファイル」をクリックし、この画面にあるプログラムを入力してください。
5〜8行目は、抵抗値を計算するために使われる定数です。
今回は割り算などを使用して小数点が発生するため、小数点を扱えるfloatというデータ型を使用しています。
これは、Arduinoとパソコンがシリアル通信でデータのやり取りを行える機能で、リアルタイムで値を見ながら動作検証をすることができます。
setup関数内で、Serial.beginという関数を使うことでこの機能が使用可能になります。
loop関数では、analogRead関数でまずは電圧値を読み込んでいます。
次に、現状の抵抗値を求めます。
式の考え方としては、このように比率で考えると分かりやすいと思います。
Arduinoでは四則演算と呼ばれる一般的な計算や、logやルート等の少し複雑なものまで、色んな計算を行うことができます。
次に、ここに書いた式を使ってTを求めます。
なおこの時点での単位は、絶対温度を表すケルビンなので注意しましょう。
最後に摂氏に変換したら、Serial.printlnに値を投げて温度観測完了です。
ボードに書き込む
最後にファイルを保存し、ツールバーの「マイコンボードに書き込む」のボタンを押して書き込みます。
書き込みが完了したら、右上の「シリアルモニタ」ボタンを押してみましょう。
このように、値が0.2秒おきに更新されていると思います。
まずは、計算が間違っていないかを確認するために、室温を測定してだいたい感覚と合っているかを見てみてください。
まとめ
ということで今回は、このような内容を学んできました。
- analog Read関数
- 四則演算
- データ型:float
- データモニターの使い方
当サイトでは、最低限身につけるべき知識やツールの解説など、電子工作を 0 から体系的に学べる動画や記事を投稿しています。