車中泊用 自作クーラー ラジエーター式クーラーの作成 その10 温度制御、リレー制御編

さて、ラジエター式クーラーですが、実践で使えそうな見込みになってきました。

前回の記事↓

ということで、最終的に温度制御を行うことにしましょう。

夏場の車中泊に最適な温度は何度なのかは、これから探るとして、氷の消費を抑えるためにも最終的には、温度制御が大事だと思います。

電子工作が好きな方ならコピペで出来ますので、参考にしてくださいね。

どういったことを目指しているのか。

27℃を超えたら、ポンプとラジエターのファンを回して、27℃を下回ったら、ポンプもファンも止めたい。

(ここでは27℃としていますが、26~8℃位の間のどこかだと思います。)

これによって氷を長持ちさせたいと思います。

1.部品の準備

では、部品ですね。

1). ESP32 DevKitC

いわゆるマイコンです。こいつにプログラミングして制御します。

技適マークがあるものを選んでください。

2).5V 2チャンネル リレー モジュール

これで、ポンプとファンをON、OFFします。

3).温度センサー DHT11

これがないと温度が測れません。

で、こいつは温度と湿度を同時に測れます。

そして、紹介しているものは、抵抗が付いているものなので、回路が簡単になりますので、抵抗を買わないで済みますよ。

4).SDカードモジュール

温度と湿度をCSVファイルで記録します。

これに関しては、Micro SDカードでもいいですね。↓

五個セットですねこれ。けど安い。

5).ブレッドボード

配線を挿すためのものですね。これ、片側6列の物を買ってくださいね。

ESP32は片側5列のものだと配線がやりにくいのですよね。

6).ジャンプワイヤー

これが無いと、肝心の配線ができません。

7).コンセント オス

9).ケーブル コンセント用

赤黒で分かれている方が初心者の方は分かりやすいと思います。

10).端子台

途中、ケーブルをつなぐ場合に必要になります。

部品代は以上で、約5千円位だと思います。

細かい所だと、圧着端子、とそのペンチとニッパーは必要です。

工具も一応出して置きますか。

1).ニッパー 

ほんとはケーブルストリッパーが、いいのですがあんまり使わない人はニッパーで充分です。

ニッパーもホーザンとかがおススメですが。。

今回は安いやつで。

2).圧着工具

これも今回は安いのを出して置きます。

コンセント内での配線を安全に配線するためですね。

2.配線図

クリックすれば大きな図になります。

配線図、左側のリレーの先に9vバッテリーとLEDがありますが、9vバッテリーはポータブル電源で、LEDはポンプとファンを意味します。

リレーは指定の温度でON、OFFをしますので、例えば27℃以上になるとLEDが点く(自分の場合はポンプとファンが回る)ということです。

ポータブル電源とファンまで書ききれないもので、意味が分かればいいかなと思ってます。

で、右上のDHT11(温度センサー)で、温度を測り、右下のSDカードモジュールで温度と湿度を記録します。

DHT11、SDカードモジュール、リレーモジュールの配線図ですが、物によってピン配列の意味が違っていることがあるので、現物優先でお願いします。

現物の写真です。

上が現物の写真です。

現物は、コンセントのオスが、ポータブル電源の100vへ繋ぎます。

メス側は、リレーで制御されるので、ポンプとファンの電源を繋げばよい訳ですね。

3.プログラミング

実際には、arduino IDE上でプログラミングするわけですが、その環境まで準備するところは、ここでは書きませんので、ご自身でその辺りは頑張って見てください。

プログラミングだけは記載しておきます。

#include <FS.h>
#include <SD.h>
#include <SPI.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Ticker.h>
#define DHTPIN 16 // 温湿度センサーのピン番号
#define DHTTYPE DHT11 // 温湿度センサーの型番
#define RELAY 4

DHT dht(DHTPIN, DHTTYPE); // 温湿度センサの設定
Ticker ticker;

// SDカードに追記
void appendFile(fs::FS &fs, const char * path, String message){
  // 三番目の引数"message"はString型にするとポインタ渡しが出来なかったので値渡しにした
    Serial.printf("Appending to file: %s\n", path);

    File file = fs.open(path, FILE_APPEND);
    if(!file){
        Serial.println("Failed to open file for appending");
        return;
    }
    if(file.print(message)){
        Serial.println("Message appended");
    } else {
        Serial.println("Append failed");
    }
    file.close();
}

// 温湿度測定
void measure() {
  // 温湿度を測定してSDカードに保存
    String dataString = "";
    dataString += String(millis() / 1000); // 起動後の経過時間を秒に変換
    dataString += ",";
    float t = dht.readTemperature(); // 温度測定(℃)
    if(!isnan(t)){
      dataString += String(t);
    }else{
      dataString += " ";
    }
    dataString += ",";
    float h = dht.readHumidity(); // 湿度測定(%))
    if(!isnan(h)){
      dataString += String(h);
    }else{
      dataString += " ";
    }
    dataString += "\n";

    // ファイルにデータを追記する
    appendFile(SD, "/LOGGING.CSV", dataString);
    Serial.println(dataString);
}

void setup() {
  pinMode(RELAY, OUTPUT);
  Serial.begin(115200);
  while (!Serial) {
  }

  Serial.println("Initializing SD card...");

  // SD カード初期化
  if(!SD.begin()){
      Serial.println("Card Mount Failed");
      return;
  }
  Serial.println("card initialized.");
  
  dht.begin(); // 温湿度センサー開始
  
  ticker.attach_ms(60000, measure); // 60秒毎に”measure”関数を割り込みで呼び出す
}

void loop() {
    Serial.println(dht.readTemperature());
    // 温度が27.5℃を超えたらon、27.5℃を下回ったらoffする。
    if (dht.readTemperature() >= 27.5) {
        digitalWrite(RELAY ,HIGH);
        Serial.println("27.5℃ over");
      }
      else  {
        digitalWrite(RELAY ,LOW);
        Serial.println("27.5℃ under");
      }
    delay(10000); //10秒毎に見回り
}

このプログラミングで、SDカードに1分間毎にデータ保存され、27.5℃以上だったらポンプとファンがON、下回ったらOFFです。

これで、ほぼ車中泊用のクーラーが、自分の思ったような形になったかな。と思います。

参考にさせて頂いたサイト↓

正直、SDカードを利用するところのコードは参考にさせて頂いたサイトほぼそのままに近いです。

また、実践(車中泊)で使ってみますので、その時は報告します。

あと、関連記事は以下です。