#include <LiquidCrystal.h>
LiquidCrystal lcd(6,7,8,9,10,11); // comp relay =normalopen type
int eva_temp,fre_temp,ref_temp,volume,level,h1,h2,h3,l,ev,ft,last_ft=1,rt,sample1=0,sample2=0,sample3=0,time=0,show_all,t,s,leveltemp; // 実際のサーミスターとカップリング抵抗の位置と計算に気をつける、timeは強制霜取りボタンの長押し用
unsigned long curr_time,last_def,display_int,last_display,compon,compon1,compoff,comp_interval,temp_int,last_temp; //defrost interval time
const int ry_comp=4,ry_heater=5,disclose=12,def_switch=19; //relay,defrost led,discloseはメンテナンス用の表示目的
void setup(){
lcd.begin(16,2);
pinMode(ry_comp,OUTPUT);
pinMode(ry_heater,OUTPUT);
pinMode(disclose,OUTPUT); //表示切り替え用ピン
pinMode(def_switch,INPUT);
last_def=millis();
last_display=millis();
last_temp=millis();
compoff=millis();
}
void loop(){
while (millis()<=3000){
digitalWrite(ry_comp,LOW);
lcd.print(" >> test <<"); // display "brand name"
lcd.setCursor(0,1);
lcd.print(" INVERTER MODEL"); // display "model number"
}
while (millis()<=180000){
digitalWrite(ry_comp,LOW); //3 min delay start compressor after reset
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print("> 3 min safety <");
lcd.setCursor(0,1);
lcd.print(">delay starting<");
last_display=display_int;
}
}
sample3=digitalRead(def_switch); // 3sec push for defrost
if (sample3==LOW){
time++;
delay(1);
}else{
time=0;
}
if(time>3000){
time=0;
goto defrost;
}
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // low speed +7.5c
h2=level+102; // 2nd speed +8.5c
h3=level+138; // 3rd speed +11.5c
l=level-90; // differencial -7.5c to start with 1.5c
compon=millis();
if (h3<fre_temp&&(compon-compoff>180000)){ // h3以上の温度で尚且つ前回コンプレッサー停止後3分経過している。
digitalWrite(ry_comp,HIGH); // コンプレッサーが回るときはいつでもfan motorを回転させる為にry_compのリレーはON
t=87;
tone(13,t);
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // low speed +7.5c
h2=level+102; // 2nd speed +8.5c
h3=level+138; // 3rd speed +11.5c
l=level-90; // differencial -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h3");
lcd.setCursor(4,1);
lcd.print(h3);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
compon=millis();
if (h2<fre_temp&&fre_temp<=h3&&(compon-compoff>180000)){
digitalWrite(ry_comp,HIGH);
t=75;
tone(13,t); // top speed
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at +8.5c
h3=level+138; // 3rd speed at +11.5c
l=level-90; // -7.5 c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h2");
lcd.setCursor(4,1);
lcd.print(h2);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
compon=millis();
if (h1<fre_temp&&fre_temp<=h2&&(compon-compoff>180000)){
digitalWrite(ry_comp,HIGH);
t=66;
tone(13,t); // top speed
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h1");
lcd.setCursor(4,1);
lcd.print(h1);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
if (l<fre_temp&&fre_temp<=h1){
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("low < h1");
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
if (fre_temp<=l){ // ftがl以下になったらコンプレッサーとファンモーターを停止
digitalWrite(ry_comp,LOW);
t=0;
noTone(13);
compoff=millis();
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("low");
lcd.setCursor(4,1);
lcd.print(l);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
curr_time=millis();
if ((curr_time - last_def)>54000000&&eva_temp<629){ //15hours=1000x60x60x15&& -1c)
defrost:
digitalWrite(ry_comp,LOW); //fan motor off
noTone(13); // compressor stop signal
while (eva_temp<689){ // th4.844k + 10k = 689(1024-335) at 5c
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
show_all=digitalRead(disclose);
if(show_all==LOW){ // 全てを表示
lcd.clear();
lcd.print("FREEZER");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("HEAT UP");
lcd.setCursor(8,1);
lcd.print("R");
lcd.print(rt);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
delay(1000);
} else {
lcd.clear();
lcd.print(" - DEFROSTING -");
lcd.setCursor(0,1);
lcd.print("Do not open door");
delay(1000);
}
digitalWrite(ry_heater,HIGH); //heater on till defrost temp 5c
}
digitalWrite(ry_heater,LOW);
comp_interval=millis();
while (millis()-comp_interval<=300000){ //5 min
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
show_all=digitalRead(disclose);
if(show_all==LOW){ // 霜取り中の全てパラメーターを表示
lcd.clear();
lcd.print("FREEZER");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("INTERVL");
lcd.setCursor(8,1);
lcd.print("R");
lcd.print(rt);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
delay(1000);
} else {
lcd.clear();
lcd.print(" - DEFROSTING -");
lcd.setCursor(0,1);
lcd.print("Do not open door");
delay(1000);
}
digitalWrite(ry_comp,LOW); // fan motor off
noTone(13);
}
last_def=curr_time;
}
}
LiquidCrystal lcd(6,7,8,9,10,11); // comp relay =normalopen type
int eva_temp,fre_temp,ref_temp,volume,level,h1,h2,h3,l,ev,ft,last_ft=1,rt,sample1=0,sample2=0,sample3=0,time=0,show_all,t,s,leveltemp; // 実際のサーミスターとカップリング抵抗の位置と計算に気をつける、timeは強制霜取りボタンの長押し用
unsigned long curr_time,last_def,display_int,last_display,compon,compon1,compoff,comp_interval,temp_int,last_temp; //defrost interval time
const int ry_comp=4,ry_heater=5,disclose=12,def_switch=19; //relay,defrost led,discloseはメンテナンス用の表示目的
void setup(){
lcd.begin(16,2);
pinMode(ry_comp,OUTPUT);
pinMode(ry_heater,OUTPUT);
pinMode(disclose,OUTPUT); //表示切り替え用ピン
pinMode(def_switch,INPUT);
last_def=millis();
last_display=millis();
last_temp=millis();
compoff=millis();
}
void loop(){
while (millis()<=3000){
digitalWrite(ry_comp,LOW);
lcd.print(" >> test <<"); // display "brand name"
lcd.setCursor(0,1);
lcd.print(" INVERTER MODEL"); // display "model number"
}
while (millis()<=180000){
digitalWrite(ry_comp,LOW); //3 min delay start compressor after reset
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print("> 3 min safety <");
lcd.setCursor(0,1);
lcd.print(">delay starting<");
last_display=display_int;
}
}
sample3=digitalRead(def_switch); // 3sec push for defrost
if (sample3==LOW){
time++;
delay(1);
}else{
time=0;
}
if(time>3000){
time=0;
goto defrost;
}
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // low speed +7.5c
h2=level+102; // 2nd speed +8.5c
h3=level+138; // 3rd speed +11.5c
l=level-90; // differencial -7.5c to start with 1.5c
compon=millis();
if (h3<fre_temp&&(compon-compoff>180000)){ // h3以上の温度で尚且つ前回コンプレッサー停止後3分経過している。
digitalWrite(ry_comp,HIGH); // コンプレッサーが回るときはいつでもfan motorを回転させる為にry_compのリレーはON
t=87;
tone(13,t);
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // low speed +7.5c
h2=level+102; // 2nd speed +8.5c
h3=level+138; // 3rd speed +11.5c
l=level-90; // differencial -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h3");
lcd.setCursor(4,1);
lcd.print(h3);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
compon=millis();
if (h2<fre_temp&&fre_temp<=h3&&(compon-compoff>180000)){
digitalWrite(ry_comp,HIGH);
t=75;
tone(13,t); // top speed
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at +8.5c
h3=level+138; // 3rd speed at +11.5c
l=level-90; // -7.5 c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h2");
lcd.setCursor(4,1);
lcd.print(h2);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
compon=millis();
if (h1<fre_temp&&fre_temp<=h2&&(compon-compoff>180000)){
digitalWrite(ry_comp,HIGH);
t=66;
tone(13,t); // top speed
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("h1");
lcd.setCursor(4,1);
lcd.print(h1);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
if (l<fre_temp&&fre_temp<=h1){
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("low < h1");
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
if (fre_temp<=l){ // ftがl以下になったらコンプレッサーとファンモーターを停止
digitalWrite(ry_comp,LOW);
t=0;
noTone(13);
compoff=millis();
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
leveltemp=level/12-54;
h1=level+90; // +7.5c
h2=level+102; // 2nd speed at 8.5c
h3=level+138; // 3rd speed at 11.5c
l=level-90; // -7.5c to start with 1.5c
display_int=millis();
if((display_int-last_display)>1000){ // モニタイングの為 全てを表示 1秒毎 必要に応じて温度表示をパラメーターに変更
lcd.clear();
lcd.print(t);
lcd.print("Hz/FR");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("low");
lcd.setCursor(4,1);
lcd.print(l);
lcd.setCursor(9,1);
lcd.print(leveltemp);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
last_display=display_int;
}
}
curr_time=millis();
if ((curr_time - last_def)>54000000&&eva_temp<629){ //15hours=1000x60x60x15&& -1c)
defrost:
digitalWrite(ry_comp,LOW); //fan motor off
noTone(13); // compressor stop signal
while (eva_temp<689){ // th4.844k + 10k = 689(1024-335) at 5c
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
show_all=digitalRead(disclose);
if(show_all==LOW){ // 全てを表示
lcd.clear();
lcd.print("FREEZER");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("HEAT UP");
lcd.setCursor(8,1);
lcd.print("R");
lcd.print(rt);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
delay(1000);
} else {
lcd.clear();
lcd.print(" - DEFROSTING -");
lcd.setCursor(0,1);
lcd.print("Do not open door");
delay(1000);
}
digitalWrite(ry_heater,HIGH); //heater on till defrost temp 5c
}
digitalWrite(ry_heater,LOW);
comp_interval=millis();
while (millis()-comp_interval<=300000){ //5 min
eva_temp=analogRead(1); // 6k thermister + 10k
volume=analogRead(2); // 10k
fre_temp=analogRead(3); // 6k thermister + 10k
ref_temp=analogRead(4); // 6k thermister + 10k
ft=fre_temp/12-54; //-18c stanrad
rt=ref_temp/9-71; // 3c standard
level=volume/7+383; // -22c min max -10c
show_all=digitalRead(disclose);
if(show_all==LOW){ // 霜取り中の全てパラメーターを表示
lcd.clear();
lcd.print("FREEZER");
lcd.setCursor(8,0);
lcd.print(ft);
lcd.print("c");
lcd.setCursor(13,0);
lcd.print(eva_temp);
lcd.setCursor(0,1);
lcd.print("INTERVL");
lcd.setCursor(8,1);
lcd.print("R");
lcd.print(rt);
lcd.print("c");
lcd.setCursor(13,1);
lcd.print(level);
delay(1000);
} else {
lcd.clear();
lcd.print(" - DEFROSTING -");
lcd.setCursor(0,1);
lcd.print("Do not open door");
delay(1000);
}
digitalWrite(ry_comp,LOW); // fan motor off
noTone(13);
}
last_def=curr_time;
}
}