"/>

気になる、をやってみたら・・見える景色が変わる!ナーンテナ

Fun-Desire-Blog 

PexelsのAnna Tarazevichによる写真

電子工作

Arduinoと温湿度センサ(DHT11)。家庭の室温調査【SDカードへ保存】~部屋を効率よく暖め、冷やす!~

更新日:

IoTでありそうな、マイコンを使って温度を測定

以前から、実際、エアコンを入れた後の部屋の温度変化は何分で何度くらい上昇、下降する?とか

サーキュレーター有り無しでホンマに温度が均一化されるのか?という疑問あり。

今回は、それについて測定トライ!してみた。

構成は、Arduinoを使って温湿度センサーで測定した室温と湿度をSDカードへ記録するデータロガーを作る。

しかし、実際作ってみると、結構これがうまくいかない。うーむ・・。

温湿度センサーはシールドタイプを採用。ArduinoはArduino Nanoでデバイスを作成した。

この調査は、あまり厳密な記録や測定ではないので、画面をスクロールしながら、チルりながら、まったりしながらご覧頂けるとありがたい。

自分でも、やってみたい。自分の部屋の確認もしてみたいと思って頂ければ、尚嬉しい。

気温と湿度測定グラフ

こんな風に、

測定・記録したデータをグラフ化。エアコンの電源を入れて10分くらいで20℃まで2~3℃室温が上昇していることがわかる。

ピンポイントで自分の調べたい場所の室温と湿度を測定、SDカードに保存、グラフ化。そして、温度の変化を解析

実は,最初、ESP32というWiFiが使えるマイコンを使って作ろうとしたり、測定した温度をPythonでCSV化しようとしたがうまくいかなかった。そこで今回は、ちょっと面倒であるが、測定結果をSDカードへ保存し、パソコンのExcelでCSV化・グラフ化することにした。

これは、電池を使って何か所も同時に測定したい場合(例えば、同じ時間の室外と屋内の温度など)、スタンドアロンのデバイスが何個も必要になり、十分用途はある。

今回やること。 まずデバイス(データロガー)作成。

測定を記録するデバイスを作っていく。

Arduino、DHT11、SDカードの読み書きシールドを使って測定デバイスを作る。

配線図

Arduino Nano(以下Nano)とMicroSDカードモジュールは、NanoのICSP用ヘッダピンを利用してカードモジュールとSPI通信する。詳しくは、ArduinoでSDカードを操作する (7ujm.net) 「ICSP」の解説 - しなぷすのハード製作記 (synapse.kyoto) Arduino Nanoの仕様・機能 | Spicemanで説明があるので、参考にされるとよい。情報提供頂けた皆さんに感謝である。ありがとうございます。

書かれた内容の概略: Nano とMicroSDカードモジュールは SPI通信とういう方式で通信するが、Nano に接続する端子は、昔、USBより前に使われていたマイコンへ書き込むためのピン(ヘッダピン)を使つかい、そのピンで通信する。

配線図

接続する各モジュール

DHT11 温度・湿度センサーモジュール

このモジュールはDHT11のセンサーだけでなく、抵抗も専用基板に半田付けされ、いわば、シールドタイプ。接続端子も最小限のプラスマイナスOUTの3本になっているので、接続も分かりやすい。(チップ抵抗を測ると5kΩだった)

データーシートは秋月さんのものを参考にさせて頂いた。DHT11_20180119.pdf (akizukidenshi.com)

温度は-20℃から測定でき、精度は25℃の時、±2℃の記載がある。(最高測定温度が分からなかった)

温湿度センサDHT11をライブラリなしで使ってみた【Arduino】 - Qiita
このブログは、DHT11のセンサーについて、端子の説明や通信開始と応答信号やデータ信号など、秋月のデータシート(英語版)のポイントが書かれており、実際のオシロの画面も掲載され、詳しく書かれている。ライブラリなしで書かれたスケッチを実際に、スケッチを走らせてみても測定できた。

通信の仕組みは、Arduino側から通信の開始を宣言するLOW信号を送ると、DHT11側からLOWとHIGHが約80µs出されでそれが返答信号となる。計測データは、40ビット分。40回、50µsのLOW信号と0と1の信号が送信される。 0と1の信号 部分が測定データ。

詳しくは、ブログを参照。

また、データシートの詳しい見方をさらに詳しく解説されたブログもあったので、参考にされるとよい。

温湿度センサー(DHT11)の詳しい機能についてデータシートを見ながら調べた | そう備忘録 (souichi.club)

40ビットは8ビット×5種類。たくさん調べると、分からないことが書かれたブログに出会い、理解できることがある。

micro SD リーダー モジュール

SDカードリーダーが基板に取付られており、端子が6本出ているので、ハード的にはブレッドボードに挿せば使えるようになっている。接続端子は、MOSIMISOSCKCSGND VCCの6端子で、SPI通信する。

実際に繋いだデバイス

デバイス(接続状態)

測定状態

温度測定して、SDカードへ書き込むタイミング(動画では3秒間隔)でNano基板上の(Lの)LEDが光る。(D13ピンと接続されている)

温度測定状態 (SDカードへ書き込み)

センサ-から取得したデータをSDカードで保存するまでの3STEP

<STEP1>センサーで温度を測り、パソコンで表示。 :センサーから値を取得、PCのシリアルモニタで表示。

また、今回ライブラリを使用しており、ライブラリを持っていなければ、入手されるとよい。ライブラリの入手に関する参考ブログ :温湿度センサー(DHT系)の使い方 [Arduino] (petitmonte.com) (インストール先は、各自のパソコン環境によって変わると思う)

以下にスケッチを示す。DHT11の測定データを取得し、シリアル通信でPCのシリアルモニタに表示させるところまで。読取チェックする行があるが、センサとArduinoを繋ぐデジタル8番ピンに繋がるリード線を外すと、ERRORが表示される。(ERROR表示状態で、リード線を繋ぐと測定結果が表示される。)


#include <DHT.h>

#define DHT_MODEL DHT11        // 接続するセンサの型番を定義する(DHT11)
#define DHT_PIN 8              // 温湿度センサ-の測定データをデジタル8番ピンに入力するように定義する

 DHT dht(DHT_PIN, DHT_MODEL);  // センサーを初期化する

void setup() {
  Serial.begin(115200);
  Serial.println("DHT11");
  dht.begin();
}

void loop() {

  delay(5000);                 // 通信開始と応答信号のやりとり時間含めて最初に5秒間待つ


   float Temperature = dht.readTemperature();    // センサー値、温度を読み取る(℃)
   float Humidity = dht.readHumidity();          // センサー値、湿度を読み取る(%)

   if (isnan(Humidity) || isnan(Temperature)) {  // 読み取りをチェックする
     Serial.println("ERROR");
     return;
   }

// シリアルモニタに温度と湿度を表示させる
   Serial.print("温度: ");
   Serial.print(Temperature);
   Serial.print("(℃)");
   Serial.print(" , ");
 
   Serial.print("  湿度: "); 
   Serial.print(Humidity);  
   Serial.println("(%)");
   
}

<SETP2>プログラム(スケッチ)中に書いたテキストをSDカードへ書き込む。

今度は、SDカードリーダーのモジュールを使って、パソコンから数字や文字をSDカードへ書き込む。

配線図のところで記載したが、 NanoとMicroSDカードモジュールは、NanoのICSP用ヘッダピンを利用して接続。SPI通信する。

カードモジュールの端子でCS(Chip Select)があるが、これはマスターとスレーブで、通信相手を選択するための信号専用端子(CSはスレーブ側)。マスタ側から見ると、SS(Slave Select)が マスタの通信相手を選択するための信号線用端子にあたる。要するにマスタSSとスレーブCSを繋いで通信する

また、SSの指定端子は10番ピンの Arduinoが多い が、下のスケッチは端子指定した場合のものである。

※ 今回使用したArduino NanoもSSの指定端子は10番ピンであったが、Arduino UNOの互換機では、SSの指定が10番ピンでないものもあるので注意。その場合は、スケッチで指定することができる。

また、今回も、SDのライブラリを使うので、無ければインストールされるとよい。

#include <SD.h>

char*filename="SDWRT.TXT";
const int chipSelect = 5;     // CSの接続先ピン

void setup(){

     SD.begin(chipSelect);

     File file = SD.open(filename, FILE_WRITE);
      file.println(4649,DEC);   
      file.println(":It's a fine day!");
      file.close();
}

void loop(){

}

SDカードにフォーマットの種類があり、micro SDカードはFAT16かFAT32でフォーマットされている必要あり。 フォーマットに関して詳しく書かれたブログを紹介する。ArduinoでmicroSDカードを使う | SOAR130650

<STEP3>センサーで測った温度と湿度の値をSDカードに書き込む。

最後に、センサ-で測定した値をSDカードに保存できるスケッチを記載する。たくさんの方々のブログや情報を参考にさせて頂き作成することができた。自分の疑問解決用ではあるものの、Arduino Nanoでのデバイス作りが見当たらなかったので作成した。もし参考になれば、幸いである。

#include <DHT.h>
#include <SD.h>

char*filename="TMPSDWR.txt";
const int chipSelect = 5;     // CSの接続先ピンをデジタル5番ピンに入力するように定義する

#define DHT_MODEL DHT11       // 接続するセンサの型番を定義する(DHT11)
#define DHT_PIN 8             // 温湿度センサ-の測定データをDデジタル8番ピンに入力するように定義する

 DHT dht(DHT_PIN, DHT_MODEL);  // センサーの初期化する

void setup(){
  Serial.begin(9600);
  dht.begin();
  
}


void loop(){

  delay(60000);                                //長時間の温度測定を考えているので、1分毎にデータ取得する
  
  if(SD.begin(chipSelect)){
                                                 //ファイルを作成していなければ、空ファイルを作成する
      if(!SD.exists(filename)){
        File file = SD.open(filename, FILE_WRITE);
        if (file) file.close();
        digitalWrite(2,HIGH);                    //書き込み開始でLEDを点灯させる
      }
    File file = SD.open(filename, FILE_WRITE);
    if (file) {
    
   
   float Temperature = dht.readTemperature();    // センサー値、温度を読み取る(℃)
   float Humidity = dht.readHumidity();          // センサー値、湿度を読み取る(%)

   file.print(Temperature);
   file.print(" , ");
   file.println(Humidity);   
    
   file.close();
       
    }else{
                                                 //ファイルが開かない時にエラー処理する
    }
  }else{
                                                 //SDカードが開かない時にエラー処理する
  }

}

センサーの値は正確か?

各種、センサー比較されたブログ。Arduino温湿度測定ロガー・湿度センサーの比較 by ボクにもわかる地上デジタル (bokunimo.net) 自分自身では確認していないが、残念ながらDHT11の湿度の精度はあまりよい結果ではないようである。

データの整理方法(数値データ~グラフ作成まで)

SDカードに保存したデータは、

①手動でテキストデータで保存されたコンマ付きテキストをエクセルにコピペ。(データーロガーが1個ずつなら、シリアルモニタのデータをコピペでも可)

②エクセル内の「データの区切り位置」をクリックしてウインドウが開く。

③「コンマやタブなどの区切り文字によってフィールドに区切られたデータ」のラジオボタンを押し、「次へ

④「区切り文字」の「コンマ」にチェックを入れて、「次へ」、「完了」ボタンを押せば、セル内、コンマで区切られたひとつのデータがふたつのセルに配置される

⑤エクセルのグラフ作成機能で、温度と湿度を別のデータ、別の折れ線にすることが出来る。

エアコンの電源(暖房)を入れた時の室温変化

・エアコンの電源を入れてからどのくらいの時間で温まるか確認した。(設定温度 :21℃

・今回、エアコンだと足元が寒い感覚があったので、その確認も含めて、高さは床面テーブル高さ、室内空気の対流を考えて、サーキュレーター(グラフ内では、SC)の有無について温度測定した。測定は、データロガーが、まだ1個しかない関係から、測定時間が違うため、絶対値というより、傾き(変化)に注目したい。グラフの値は、2回以上測定した平均値である。

何分くらいで温まるか

・安定した温度(グラフで20.5℃くらい)になるまでの時間はだいたい、10分くらい。(テーブル高さ)

床面は20分経っても設定温度よりは、低い。(何回測っても低かった)

床面のサーキュレーター有り無し

・サーキュレーター無しの時、最初、室温が下がっているが、始めはエアコンの強い気流で、冷たい空気を押し動かしていることが原因ではないかと推測する。(未確認)

・室温上昇のグラフの角度(傾き)は同じぐらいであるが、安定した室温(グラフで19℃あたり)になるまでの時間は、サーキュレーター有りの方が、最初の室温低下が無い分、早くなっている。(早く暖まっている)

テーブル高さでのサーキュレーター有り無し

・テーブル高さくらいの位置では、サーキュレーター有りの方が、室温の上昇が早い。(グラフの傾きが急)

・また、安定した室温も、サーキュレーター有り無しで比較してサーキュレーター有りの方が高いようだ。サーキュレーターにより温度が均一化されると思っていたが、室温を上昇させる段階で、サーキュレーターで空気をかき回すと早く暖まり、全体的にも少し室温が高くなるということと思われる。(別途確認)

感想

・感覚的には、もっとサーキュレーター有り無しでデータに差が出て面白い結果になると想定していたが、それほど大きな差にはならなかった。次回、同時間に違う場所を測定して、もう少しはっきり確認したい。

・概略的なデータとはいえ、今までは何となくの感覚だけであったが、数値的に捉えられたので、別の時に参考値として流用したい。例えば、エアコンでだいたい10分程度で暖まるサーキュレーター有りの方が暖まる温度が少し高く、早く暖まる。(但し、暖め始める室温や、サーキュレーターの風量、角度、方向など厳密な測定でデータは変わると思う)今回は、そこまで測れていないが、ご容赦!

おまけ

禅の言葉で、冷暖自知(れいだんじち)という言葉がある。実際に自分で見たり、肌で感じたりしてみないと自分の感覚として分からない。また、それによって得た経験は財産になるという意味。

まさに、今回、冷暖を体験した。つづく。

-電子工作
-, , ,

Copyright© Fun-Desire-Blog  , 2024 All Rights Reserved Powered by STINGER.