mbedでリニア温度センサーを使う
MTM06で@shintamainjpさんよりStarBord Orange購入記念のMPC9700(アナログ温度センサー)をいただきました。mbedのADCを使ってセンサーの読み取りと温度の表示を行うサンプルプログラムを作って、本家のmbed.orgのNotebookにポストしたのですが、自分のブログにも概要を記載します。
温度センサーの読み取り
MCP9700等のアナログ温度センサーは、温度に比例して出力電圧が変化します(温度係数と呼びます)。そのため、出力電圧を測定することによって、温度を得ることができます。MPC9700の場合、1℃毎に10mV出力が変化します。また、0℃で500mVの出力があるため、出力電圧は以下の式で表せます:
Vout(出力電圧) = Tc(温度係数) x Ta(温度) + V0(0℃の出力)
そのため、温度は以下の式で計算が可能です:
Ta = (Vout - V0) / Tc = (Vout - 500) / 10
上記の式を使用して数秒単位で温度を測定すると、測定値に結構なばらつきが出てしまいました(1℃の単位で表示がふらついて、うっとうしい状態になります)。そのため、10回サンプル(測定)を行った平均値を示すようにしてあります。この対策を行うと、温度表示のばたつきはかなり軽減されるのですが、小数点まで表示すると0.1℃の単位は若干ばたつきます。
センサーの出力電圧をテスターで直接計ると、ばたつきは1mVの単位しかなくADCの読み取り値に比べて安定しています。そのため、測定値のばらつきはセンサー入力の処理にも問題がありそうです。センサーの出力が20℃で700mVと低めのため、OPアンプを入れて出力を2倍程度に増幅してやればADCの分解能を生かせるようになり、ばたつきが軽減できるかも。あとノイズ対策も必要か。
サンプルプログラム
センサーの読み取りは、あまり意味がないですが、mbedのオブジェクト風に書いてみました。コード全体は、mbed.orgを参照して下さい。センサーオブジェクトを使ったサンプルを以下に示します。
#include "mbed.h" #include "TextLCD.h" #include "LinearTempSensor.h" TextLCD lcd(p24, p26, p27, p28, p29, p30, TextLCD::LCD16x2); // RS, E, DB4, DB5, DB6, DB7 LinearTempSensor sensor(p20); // With default parameters //LinearTempSensor sensor(p20, 5, LinearTempSensor::MCP9700); // With option parameters int main() { float Vout, Tav, To; lcd.cls(); lcd.printf("TEMP:"); while(true) { Vout = sensor.Sense(); // Sample data (read sensor) Tav = sensor.GetAverageTemp(); // Calculate average temperature from N samples To = sensor.GetLatestTemp(); // Calculate temperature from the latest sample lcd.locate(5, 0); lcd.printf("%4.1f", Tav); printf("Vout:%f Tav:%f To:%f\n\r", Vout, Tav, To); // Debug print wait(2.0); } }
6行目で、AnalogInとしてp20を使用する、LinearTempSensorオブジェクトのインスタンスを起こしています。
18行目でセンサー出力をサンプリングし、19行目でN回サンプル(defaultは10回)から得られる平均温度を取得しています。
StarBoard Orangeを使ってセンサーを動作させた写真を以下に示します。
« mbedでDMAの実験 | トップページ | XBeeを使ってみる »
「mbed」カテゴリの記事
- mbed TY51822r3でmbed OSを使う(2016.04.16)
- mbed OSでLチカ(2015.11.22)
- 各種mbedのベンチマークテスト(2014.08.31)
- iPhoneからmbedをBluetooth LE (BTLE)で制御する(2013.02.11)
- Debug printf用の可変長引数マクロ(2011.04.29)
この記事へのコメントは終了しました。
コメント