最終更新日:2022年2月1日
STM32miniShieldをベースにしています。
安価な温度センサであるサーミスタをSTM32F103の12bit深度ADCで温度取得してみました。単純な事なのですが、実際にやってみないといけませんね。
購入したのは ZHONG GUO ZHI LENG 社の空調機用温度センサです。NTCサーミスタ10KΩタイプです。
汎用品で2pinコネクタでの端末処理がなされ、銅管で封印されたモデルです.コネクタさえあればエアコンの温度センサ交換部品として使用出来ます。
一般にサーミスタは温度係数Bが提供され、NTCタイプであれば、負勾配で-50℃くらいから100℃くらいまで計測可能です。B値が知りたいのですが、メーカのURLが判りません。一応一般的な値で計測して値が取れることは確認出来ると思います。
JSTのXHタイプ互換品のコネクタのようです。
STM32duinoソースコード(Sketch)は以下の通りです。アナログ入力ポートはPB0を使っています。
.ino
/* * 2022/2/3 T.Wanibe NTCThermistor_04 * NTCサーミスタでの温度計測をSTM32MINIShieldEvaluationに接続して使用する場合のExampleを作っておこうと思いました * パラメータを変数として登録しレタッチしやすいようにします。 * NTCThermistor_01,02 は期待通りの結果にならず新たなコードを見つけてレタッチした。 * NTCThermistor_03 は温度値まで求めていなかったのでもう一度レタッチ * SPDX-FileCopyrightText: 2011 Limor Fried/ladyada for Adafruit Industries * SPDX-License-Identifier: MIT * Adafruit LearningSystemのサーミスタの簡単なテストプログラム * https://learn.adafruit.com/thermistor/using-a-thermistor by Limor Fried, Adafruit Industries * MITライセンス-帰属を維持し、Adafruitから部品を購入することを検討してください * 「その他」の抵抗の値 * サーミスタに関するAdafruitラーニングシステムガイドのサーミスタの例3 * 使用しているサーミスタの定数が明確で無いため結果はそれらしき値としかいえない * 最大131072バイトのフラッシュメモリのうち、スケッチが37072バイト(28%)を使っています。 * 最大20480バイトのRAMのうち、グローバル変数が4440バイト(21%)を使っていて、ローカル変数で16040バイト使うことができます。 */ #define THERMISTORPIN PB0 //接続するアナログピン #define THERMISTORNOMINAL 10000 //25℃での抵抗値 #define TEMPERATURENOMINAL 25 //温度 公称抵抗の場合(ほとんどの場合25°C) #define NUMSAMPLES 5 //取得するサンプルの数と平均、より多くの時間がかかりますが、より「スムーズ」です #define BCOEFFICIENT 3950 //サーミスタのベータ係数(通常は3000?4000) #define SERIESRESISTOR 5100 //PullUpの抵抗の値 #define AbsoluteKelvin 273.15 int samples[NUMSAMPLES]; char buffer[128]; //------------- void setup(void) { Serial.begin(115200); //analogReference(EXTERNAL); } //------------- void loop(void) { uint8_t i; float average; //わずかな遅延で、N個のサンプルを続けて取得します for (i=0; i< NUMSAMPLES; i++) { samples[i] = analogRead(THERMISTORPIN); delay(10); } //すべてのサンプルを平均化する average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples[i]; } average /= NUMSAMPLES; sprintf(buffer,"平均電圧値:%.1f [digit]\n",average); Serial.print(buffer); //値を抵抗値に変換します average = 4095.0 / average - 1; average = SERIESRESISTOR / average; sprintf(buffer,"平均抵抗値:%.1f [Ω]\n",average); Serial.print(buffer); float steinhart = average / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + AbsoluteKelvin); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= AbsoluteKelvin; // convert absolute temp to C sprintf(buffer,"温度値:%.2f [℃]\n",steinhart); Serial.print(buffer); delay(1000); }
免責事項
本ソフトウエアは、あなたに対して何も保証しません。本ソフトウエアの関係者(他の利用者も含む)は、あなたに対して一切責任を負いません。
あなたが、本ソフトウエアを利用(コンパイル後の再利用など全てを含む)する場合は、自己責任で行う必要があります。本ソフトウエアの著作権はToolsBoxに帰属します。
本ソフトウエアをご利用の結果生じた損害について、ToolsBoxは一切責任を負いません。
ToolsBoxはコンテンツとして提供する全ての文章、画像等について、内容の合法性・正確性・安全性等、において最善の注意をし、作成していますが、保証するものではありません。
ToolsBoxはリンクをしている外部サイトについては、何ら保証しません。
ToolsBoxは事前の予告無く、本ソフトウエアの開発・提供を中止する可能性があります。
商標・登録商標
Microsoft、Windows、WindowsNTは米国Microsoft Corporationの米国およびその他の国における登録商標です。
Windows Vista、Windows XPは、米国Microsoft Corporation.の商品名称です。
LabVIEW、National Instruments、NI、ni.comはNational Instrumentsの登録商標です。
I2Cは、NXP Semiconductors社の登録商標です。
その他の企業名ならびに製品名は、それぞれの会社の商標もしくは登録商標です。
すべての商標および登録商標は、それぞれの所有者に帰属します。