000000 ランダム
 HOME | DIARY | PROFILE 【お気に入りブログ登録】 【ログイン】

CPUを作ろう ~計算機教材とマイコンと電子工作~

Arduinoで温度計測

秋月さんから買った温度センサをつないでA/Dで値を読んだらふらつくので,
積算してみたらふらつきが少なくなったけど精度がでないので内部基準電圧に設定して,
温度に換算したら値が5-6度高くでて,式が間違ってるのかな?
単にオフセット的な処理でいいならいいけど...もうちょっと考えてみないと.

DSC03129.JPG

DSC03130.JPG

-追記-
割り算が1024じゃなくて1023でした.でもまだ違う.

-追記2-
内部基準電圧がばらついているらしい.1.1V->1Vになると約1割ちがう.これが原因かな?

-追記3-
OPAMPを積んでセンサ出力をA/Dのレンジに合わせるより,お金をかけても都合のよい特性のセンサを使う選択もある.

というわけでここまでのスケッチ↓

// 温度センサテストプログラム (LM61BIZ)
// by 葉山清輝(熊本高専) 2010.4.23
// 使用センサ:
// LM61BIZ(秋月より購入),10mV/度,0度で出力600mVをだし他の温度は比例で出力変化

void setup()
{
// initialize the serial communications:
Serial.begin(9600); // シリアルポート初期化
analogReference(INTERNAL); // 内部基準電圧を使用,多分1.1V.センサの出力が大きい時はデフォルト5Vで.
}

void loop()
{
int i; // 測定繰り返しのためのカウンタ
long sens=0; // センサのアナログ入力値,10ビットなので分解能 4.9mV
float temp; // 温度計さんのための実数変数

for (i=0;i<10;i++){
sens+=analogRead(1); // 10回積算する.積算して平均化しないと値がふらつく.
delay(10); // 連続測定しないようにAD変換もタイミングをずらすために少し待つ
}
// temp=((float)sens/10*1.1/1023-0.6)/0.01; // 積算回数で割る,ADの分解能をかける,
// センサの0度の出力を引く,センサの感度でわるという計算を有効桁が落ちないようにまとめた計算式が次の式
temp=((float)sens*11/1023-60); // 温度の計算.オフセットは-60の部分で補正,感度のずれは11のところを補正

Serial.println(temp); // シリアルポートに温度を出力
delay(500); // 温度変化は早くないので,適当に時間をあける
}



Copyright (c) 1997-2018 Rakuten, Inc. All Rights Reserved.