目次
本記事で使用するもの
以下のリンクのスターターキットを購入した場合、上記で述べた使用するものは、PC以外すべて入手することができます。
Arduinoをまだ購入していないという方やArduinoで動かすことができるたくさんのパーツが欲しいという方は、購入を検討してみてください。
サーミスタの説明
サーミスタは、温度に応じて、電気抵抗が大きく変化する部品です。
上記で紹介したスターターキットの中には以下の写真のようなサーミスタが入っています。
サーミスタには、温度が上がると緩やかに電気抵抗が低くなる「NTCサーミスタ」、温度が上がると急激に電気抵抗が低くなる「CTRサーミスタ」、温度が上がると急激に電気抵抗が高くなる「PTCサーミスタ」の3種類があります。
よく温度の測定に使用されるのは「NTCサーミスタ」であり、今回の記事では、上記で紹介したスターターキットの中に入っている「NTCサーミスタ」を使用します。
サーミスタの電気抵抗の変化を測定することができれば、サーミスタの温度がどのように変化しているか分かるのですが、「Arduino」に電気抵抗の変化を直接読み取るような機能はありません。
よって、以下のような抵抗器との直列回路を作成して、電圧を読み取り、サーミスタの温度を測定するといった使われ方が良く行われています。
読み取った電圧のデータから、温度を計算することも可能なのですが、それを行うには数学と物理の知識が必要であり、基礎からすべて説明しようとすると、記事がかなり長くなってしまうので、後日別の記事で説明をしたいと思います。
サーミスタを試す
まずは、上記で説明した回路を用いて、以下の画像のように、サーミスタの温度に応じた数値をシリアルモニタに表示させる方法について説明したいと思います。
空のスケッチを書き込む
回路を作成する前に、空のスケッチ(「ファイル」タブの「New Sketch」をクリックしたときに出てくる何の処理も書かれていないスケッチ)を書き込みます。
そうすることにより、前に書き込んだスケッチが、新しく作成しようとしている回路に影響を及ぼすことを防げます。
新しい回路を作成するときは、いつもこの作業をやっておくと、安全に回路を作成することができます。
回路を作成する
以下のような回路を作成してください。
ここで、使用する抵抗器は、ひとまず、10[kΩ]程度のものを使用します。
また、抵抗器とサーミスタを繋げる順番は、上記の通り、抵抗器を5V側、サーミスタをGND側に繋げます。
抵抗器とサーミスタを繋げる順番を変えても、サーミスタの温度の変化を読み取ることはできますが、これから説明するものと動作が異なってしまうので注意してください。
スケッチを書き込む
回路の作成が終わりましたら、以下のようなスケッチを書き込んでください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//サーミスタの温度によって変化する値(A0ピンで読み取る値) int thermistor_value=0; void setup() { //A0ピンを入力ピンとして設定する(デフォルト設定なので省略しても良い) pinMode(A0,INPUT); //シリアル通信の初期処理を行う Serial.begin(9600); } void loop() { //アナログピンA0の値を読み取る(0~1023) thermistor_value=analogRead(A0); //読み取った値を表示 Serial.println(thermistor_value); //0.5秒待機 delay(500); } |
スケッチの書き込みが終わりましたら、シリアルモニタを開き、入力部分の右に表示されている設定が「9600baud」、自動スクロールが「ON」になっているのを確認して、手でサーミスタに触ってみたり、保冷剤など冷たい物などを近づけたりしてみてください。
スケッチと回路が正しければ、シリアルモニタに表示されている値が、サーミスタに近づけている物の温度に応じて変化していくのが確認できます。
スケッチの解説
スケッチの内容としては、A0ピンに繋いだ部分の電圧を「analogRead()」で読み取り、シリアルモニタに表示させるということを行っています。
ここで、「analogRead()」が良く分からないという方は、以下のリンク先の記事で説明していますので、是非、ご覧になってください。
A0ピンに繋いだ部分の電圧は、オームの法則と直列回路の性質を利用することで、計算を行うことができます。
まず、直列回路の性質とオームの法則より、回路に流れる電流は以下のように計算ができます。
そして、サーミスタに加わっている電圧はオームの法則より、以下のように計算することができます。
上記の式だけ見ても、RThと読み取っている部分の電圧V2の関係のイメージが分かりづらいと思いますが、この求めた式をグラフにすると、以下のようになり、サーミスタの電気抵抗RThが大きいほど、読み取る電圧V2は高くなることが分かります。
上記で説明したように、サーミスタは、温度が高いと、電気抵抗RThが低くなり、温度が低いと、電気抵抗RThが高くなります。
よって、サーミスタの温度が高いと、読み取る電圧は低くなるので、値は小さくなり、サーミスタの温度が低いと電圧は高くなるので、値が大きくなるという現象が起こります。
今回、サーミスタに繋げている抵抗器は10[kΩ]のものを使用しましたが、抵抗器の電気抵抗R1の高さによって、RThが変化したときの電圧の変化の仕方が異なります。
1[kΩ]、5[kΩ]、10[kΩ]、100[kΩ]の抵抗器を使用したときの、RThとV2の関係は以下のようになります。
サーミスタの電気抵抗RThが大きいほど、読み取る電圧V2は高くなるというのは共通ですが、抵抗器の電気抵抗R1が低い方が、電圧の変化が急になっているのが分かると思います。
よって、お手持ちのサーミスタで、値の変化があまり見られなくて、困っているという方は、抵抗器の電気抵抗を調整してみると、問題を解決することができるかもしれません。
ただし、抵抗器の電気抵抗を低くしすぎると、電流が大きくなり、消費電力が大きくなったり、熱を発するようになってしまったりと、別の問題が生じてしまうので、1[kΩ]を下回らないくらいで調整することをお勧めします。
特にサーミスタ自身が熱を大量に発してしまうとその分温度に誤差が生じてしまうので、しっかりと温度を測定する場合は、抵抗器の選定もしっかりとする必要があります。
サーミスタでLEDを制御する
次は、以下の動画のように、サーミスタの温度に応じて、LEDの点灯を制御する方法について説明したいと思います。
ここでは、サーミスタの温度が低いとき(保冷剤など冷たい物を近づけたとき)にLEDを点灯させる方法を説明します。
その際に、サーミスタの温度が低いときの値を利用しますので、保冷剤など冷たい物を近づけた状態のときの値をメモしておいてください。
回路を作成する
以下のような回路を作成してください。
ここで、LEDに繋げる抵抗器の電気抵抗の高さは、LEDの順電圧と順電流から計算で求めます。
サーミスタに繋げる抵抗器は先程のままです。
以下に、LEDに対して、直列に繋げる抵抗器の電気抵抗の高さを計算するツールを用意しましたので、ご活用ください。
回路で使用する抵抗器は、上記のツールで求めた電気抵抗よりも少し高い電気抵抗のものを使用します。
上記のツールが行っている電気抵抗の計算方法については、以下のリンク先の記事で説明していますので、気になる方はご覧になってください。
ここで、電気抵抗の計算が行えない場合は、電気抵抗が高いもの(大体1[kΩ])から順番に接続していき、ちょうど良い明るさになるものを探していきます。
その際、電気抵抗を低いものにすれば、その分点灯が明るくなるのですが、電気抵抗が低すぎるもの(大体100[Ω]を下回るくらい)の場合、LEDの寿命を縮めてしまったり、破壊してしまったりすることがあるので注意してください。
今回、私は220[Ω]の抵抗器を使用しています。
スケッチを書き込む
回路の作成が終わりましたら、以下のようなスケッチを書き込んでください。
ここで、5行目にある「thermistor_value_threshold」の値は、先程メモをした、サーミスタに保冷剤(冷たいもの)を近づけたときの値より少し小さい値に変更してください。
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 31 32 33 34 35 36 |
//サーミスタの温度によって変化する値(A0ピンで読み取る値) int thermistor_value=0; //A0ピンで読み取った値がここで設定した値を超えたらLEDを点灯させる(値は各自調整) int thermistor_value_threshold=600; void setup() { //A0ピンを入力ピンとして設定する(デフォルト設定なので省略しても良い) pinMode(A0,INPUT); //LEDに繋いだピン(2番ピン)を出力ピンとして設定する pinMode(2,OUTPUT); //シリアル通信の初期処理を行う Serial.begin(9600); } void loop() { //アナログピンA0の値を読み取る(0~1023) thermistor_value=analogRead(A0); //読み取った値を表示 Serial.println(thermistor_value); //読み取った値がthermistor_value_thresholdを超えたときLEDを点灯させる if(thermistor_value>thermistor_value_threshold){ digitalWrite(2,HIGH); }else{ digitalWrite(2,LOW); } //0.5秒待機 delay(500); } |
上手くいけば、先程の動画のように、サーミスタの温度が低いときにLEDが点灯するのが、確認できます。
サーミスタの温度を低くしているのに、LEDが点灯しない場合は、シリアルモニタを確認してみてください。
ここで、サーミスタの温度が低いときに読み取っている値が、5行目にある「thermistor_value_threshold」の値を超えていない場合は、「thermistor_value_threshold」の値を温度が低いときに読み取っている値よりも小さくなるように変更してください。
読み取っている値が、「thermistor_value_threshold」の値よりも大きいのに、LEDが点灯しない場合は、回路やスケッチが間違っていると思われるので確認をしてみてください。
スケッチの解説
今回のスケッチは、先程のスケッチと同じように、A0ピンに繋いだ部分の電圧を「analogRead()」で読み取ることにより、サーミスタの温度の変化を確認しています。
「analogRead()」で読み取った値をシリアルモニタに表示させるのも先程のスケッチと同様です。
しかし、今回のスケッチは読み取った値により、条件を分岐させて、LEDを点灯させるか、消灯させるかを制御しています。
ここで、5行目にある「thermistor_value_threshold」の値を、小さくするとより暖かいときに、大きくするとより冷たいときにLEDが点灯するようになります。
LEDが点灯する光の強さ(明るさ)の条件を変えたい場合は、シリアルモニタを確認しながら、「thermistor_value_threshold」の値を調節してみてください。
今回は、サーミスタがある基準より冷たくなったら、LEDを点灯するように制御しましたが、if文の条件を「thermistor_value<thermistor_value_threshold」のように変更すれば、ある基準より暖かくなったら、LEDを点灯させるといったことも可能になります。
終わりに
サーミスタの使い方について、ご理解いただけたでしょうか。
前回の記事から続けて、ご覧になっている方はお気付きかもしれませんが、今回行ったことは、前回記事で行ったフォトレジスタで光の強さを測定する方法とほとんど同じ内容となっています。
だいぶ前の記事で説明したポテンショメータもそうですが、アナログ入力ピンを利用すれば、間接的に電気抵抗の変化を認識することができるため、環境に応じて電気抵抗が変化するようなセンサに対して、今回の知識は利用できるかもしれません。
次回の記事では複雑な計算なしで、温度と湿度を測定できる「温湿度センサ(DHT11)」という部品の使い方について説明したいと思います。
本記事はここまでです。ご清覧ありがとうございました。
広告
楽天モーションウィジェットとGoogleアドセンス広告です。
気になる商品がございましたら、チェックをしてみてください。