Arduinoで温度センサーを扱う
今回はArduinoで温度センサーを扱うのに挑戦したいと思います。温度センサーとして使うのは「MCP9700E」です。このMCP9700Eは温度をアナログ出力してくれます。
しかし、今回は出力されたアナログ値の大小が分かればいいだけではなく、電圧をなるべく正確に求める必要があります。この点について、詳しく書いていきます。
ArduinoのA/D変換
Arduinoには、入力されたアナログ信号、つまりは電圧の変化をデジタル信号に変換するA/Dコンバーターが内蔵されています。この出力されるデジタル値は、0Vを最小、基準電圧を最大として10bit(210=1024段階)の数値として表現されます。
この基準電圧は、何も設定しなければ5.0Vになり、これが1024段階に分割されるので、分解能は5000÷1024=4.88mVということになります。しかし、これでは大雑把すぎて、もう少し正確な値を読み取りたいという時があります。そんな時には、この基準電圧を変更することで可能になります。以下はスケッチでanalogReference()に指定することが出来る内部基準電圧の一覧です。
analogReference() | 概要 | 分解能 |
---|---|---|
DEFAULT | 電源電圧が基準になる。5.0V | 4.88mV |
INTERNAL | 内部基準電圧が基準になる。1.1V | 1.07mV |
EXTERNAL | AREFピンに供給される電圧。0V以上5V以下 | – |
AREFピンは、SDAピンとGNDピンの間にあるピンです。ここに電圧をかけることで、基準電圧を変更できます。
MCP9700Eの特性
今回使っていくMCP9700Eは色々な特性があるので、ある程度は把握しておく必要があります。
- 誤差:±4.0 ℃ (0~70℃)
- 出力電圧:500 mV (0℃)
- 温度係数:10.0 mV/℃
以上の情報を利用して、電圧を求めていきます。ただし、このセンサーは電圧と温度が曲線的な関係なので、どうしても誤差が出てしまいます。この点を留意して次に進みましょう。
回路
今回は単純に、温度センサーに電圧を供給し、出力をA0で受け取るのみです。以下にその図を示します。
ただ、プルダウン抵抗は無いと大分出力が不安定になってしまうので、これは必須アイテムです。
スケッチ
前項で紹介した特性を用いて、「電圧 = 温度 ÷ 10.0 + 500」という関係式を導きます。また、デジタル値から基準電圧の変換式を「デジタル値 × 1100 ÷ 1024」という関係式も導きます。この式を使って、簡単にスケッチを書いていきます。以下がそのスケッチです。
float volt; float temp; void setup() { Serial.begin(9600); analogReference(INTERNAL); //基準電圧を1.1Vに } void loop() { volt = (float)analogRead(A0) * 1100 / 1024; //デジタル値を電圧に変換 temp = (volt - 500) / 10; //電圧を温度に変換 Serial.println(temp); delay(100); }
こんな感じです。基準電圧に関する記述はsetup()関数の中に記述します。
考察
指などで温めると、ちゃんと数値が上がることが分かります。(人によっては下がることも?)
投稿者プロフィール
最新の投稿
- 2018.09.01AMD動画エンコードでGPUを活用する
- 2018.03.26phpツイートIDからsnowflakeを用いて投稿時刻のミリ秒を算出
- 2018.02.18phpphpMyAdminのインストール方法(Ubuntu)
- 2018.01.07未分類新聞を折らずに郵送する方法
最近のコメント