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秒休み
}
【実行】
・今回の初期水温は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くらいの肉塊で早速作ってみます。