Arduinoでローストビーフを作る(13)

PWMを復活しました。

【スケッチ】
・「Arduinoでローストビーフを作る(9)」のスケッチを、ほんの少し改良しています。
・温度設定機能を持たせました。Value =40にして、設定温度(Temp0)を60℃にしました。
・測定温度(ds18CV)が設定温度以内であればオン、超えたらオフ、にしました。
・他は以前と同じです。(Python 側は、変更ありません。)

// 温度設定機能を持たせました。
// Value は40にして、
// 設定温度(Temp0)を60度にしました。
// 測定温度(ds18CV)が設定温度以内であればオン
// 超えたらオフ、にしました。他は06.05版と同じです。
// 2024.06.28 by Kero

// AC100Vを加工してニクロム線ヒーターに通電し加熱します。
// ADT7410はやめて、DS16B20を1-Wire接続し、温度を測り、表示します。
// 2024.06.05 by Kero

// 最初の宣言です
#include <Wire.h>  //I2C通信のライブラリ(忘れていました。でもLCDは動いた?)

// 温度センサDS18B20の設定(以下のサイトからもらいました。感謝)
// https://github.com/matmunk/DS18B20?tab=readme-ov-file
#include <DS18B20.h>
DS18B20 ds18(2);  // センサの黄線はArduinoの端子2につなぎます
String ds18C;  // センサからの読込は文字列変数「ds18C」に入ります
float ds18CV = 0.0;  // その文字列を実数に変換して入れる変数です

// ディスプレイLCDの設定
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x27,16,2); 

// 変数割り当て
int LED = 3;   // LEDのアドレス
int SSR = 6;   // SSRのアドレス
int Value = 40;  // ヒーター電力の強さ(<255の整数)
float Duty = 0.0;  // Value / 255 * 100 (%) = Duty比の初期値
float Temp0 = 60.0; // 設定温度
 
void setup(void) {
  Serial.begin(9600);  // 通信速度セットアップ

  // DS18センサ用セットアップは不要です

  // LCDディスプレイ用セットアップ
  lcd.init();
  lcd.backlight();

  // ピンモードを「出力」に設定
  pinMode(LED,OUTPUT);
  pinMode(SSR,OUTPUT); 
}
 
void loop(){

  // DS18センサから読み込み(とにかくこう書くようです)
  while (ds18.selectNext()) {
    ds18C = ds18.getTempC();  // 文字列でds18Cに読み込み
    ds18CV = ds18C.toFloat();  // 文字列を実数に変換
    Serial.println(ds18C);  //シリアルモニタに文字列として出力
  }
  if(ds18CV <= Temp0){
  // LEDとSSRへValue値を出力
    analogWrite(LED, Value); 
    analogWrite(SSR,Value); 
  }else {
    analogWrite(LED, 0); 
    analogWrite(SSR, 0);  
  }

  // LCDへADT温度とDuty比の表示
  lcd.setCursor(0,1); 
  lcd.print("Duty = "); 
  lcd.setCursor(10,1); 
  Duty = (float)Value * 0.392 + 0.5;
  lcd.print((int)Duty);
  lcd.setCursor(15,1); 
  lcd.print('%'); 
  lcd.setCursor(0,0); 
  lcd.print("TempSD18= ");
  lcd.print(ds18C); 
  lcd.setCursor(15,0);
  lcd.print("C");

  delay(10000);  // 10秒休み
}

【実行】

図1  Duty比= 40 / 255 でPWM出力し、60℃を超えたらオフにしたときの温度変化

・今回の初期水温は29℃でした。
・Value=20では60℃に達するのに約30分かかりましたが、Value=40では17分で到達しました。
・60℃を超えたらオフなので、ジャスト60℃ではまだ通電しています。
・開始から17分後以降、だいたい60℃付近でオン・オフを繰り返しています。
・最高値は最初に60℃を超えた時の値で61.06℃でした。最低値はその直後の値で59.81℃でした。
・それからオン・オフを繰り返していると、だんだん最高値・最低値の幅が小さくなってきました。
・SSRは、20分を過ぎたらあまり熱くならなくなりました。約40℃くらいでしょうか。
・温度制御は、「60℃未満ならオン、60℃以上ならオフ」にした方が、より60℃に近くなりそうです。
・「58℃を3時間キープ」という当初の目的は、実用的にはこれで達成できたと言って良いでしょう。
・でも、何だかあっけないので、もっと凸凹を少なくするとか、PID制御を少し勉強してみます。
・ローストビーフは、200gくらいの肉塊で早速作ってみます。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です