kuroの覚え書き

96の個人的覚え書き

温度制御リレー



先日の温度警報装置に引き続き温度管理ものの製作。

温室の管理をしているのだけれどなかなか思ったような温度にならないのが悩みの種。

温度を調節出来る機構は大型のエアコン(ただし、冷房と暖房は自動切り替えにならない)と換気扇。

夏場はまあ問題ない。基本的に温室内部を外気と同程度に保てばいいので換気扇、冷房をフルで動かしておけばよい。

問題は冬場。基本的に晴天の日中は何もしないと40℃を越えてしまうので換気扇を回して冷やす。暖房は入れていてもほとんど働いていない。

(しかし止めてしまうと夜間に自動で入ってくれないので電源はいった状態で連続運転しなければならない。)

夜間は外気温が低下するため暖房を入れていても換気扇を動かしていては温度が下がりすぎる。なので換気扇をタイマーで止めて暖房をいれて対処する。

さて、困ったのが天気の悪い日の日中。雨だと暖房を入れていても28℃を下回るくらいまでしかあがらず、その結果水温低下を招いてしまう。

ということで換気扇を温度制御でオンオフできるようにしてみようとおもう。

前の温度警報装置のプログラムを簡略化して、温度設定固定としてLCDなども無くしてしまう。

最初シリアルから設定値をEEPROMに送り込んでやろうと思ったけどイマイチうまくいかないのでとりあえず完全固定式とする。

まあROM書き換えればいいかと。いちおう動作確認用にシリアル出力のみ残しておく。


//#include <LiquidCrystal.h>
int ledPin0 = 12; //LED signal
int alertPin = 13; //alert signal
int analogPin0 = 0; //LM35DZ input
//int analogPin1 = 1; //Low limit input
//int analogPin2 = 2; //High limit input

int val = 0; //input data from LM35DZ
//int val1 = 0; //input data from Low limit dial
//int val2 = 0; //input data from High limit dial
int summary; // summary of input data
int i;
double t_value; //temperature value
int t_1;
int t_2;
// LiquidCrystal display with:
// rs on pin 2
// rw on pin 3
// enable on pin 4
// d4, d5, d6, d7 on pins 5, 6, 7, 8
//LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8);

void setup()
{
pinMode(ledPin0, OUTPUT);
pinMode(alertPin, OUTPUT);
Serial.begin(9600);
// lcd.clear();
}

void loop()
{

// val1 = analogRead(analogPin1); // Low limit ??????????????
// val2 = analogRead(analogPin2); // High limit ??????????????
summary = 0;
for(i=0;i<50;i++)
{
val = analogRead(analogPin0); //read data from analog0 pin
summary = summary + val;
delay(40);
}

t_value = (double)(summary)/50.0*4.9/1024.0*100.0-4;
t_1 = (int)(t_value);
t_2 = (int)((t_value - (double)t_1) * 100.0);

// if (val1/20 > t_value)
// {
// digitalWrite(alertPin, HIGH); // sets the alert on
// digitalWrite(ledPin0, LOW); // sets the LED on
// }
// else
// {
if (t_value > 30)
{
digitalWrite(alertPin, HIGH); // sets the alert on
digitalWrite(ledPin0, LOW); // sets the LED on
}
else
{
digitalWrite(alertPin, LOW); // sets the alert off
digitalWrite(ledPin0, HIGH); // sets the LED on
}
// }
// DispLCD();
WriteSerial();

}

//void DispLCD()
//{
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("Now Temp = ");
// lcd.print(t_1);
// lcd.print(".");
// lcd.print(t_2);

// lcd.setCursor(0,1);
// lcd.print("Lo:");
// lcd.print(val1/20);

// lcd.setCursor(9,1);
// lcd.print("Hi:");
// lcd.print(val2/20);
//}


void WriteSerial()
{
Serial.print(t_1);
Serial.print(".");
Serial.println(t_2);
}

手元にあったパーツをかき集めてテキトーに作成(w

f:id:k-kuro:20091128230813j:image


心臓部。電源は携帯電話の充電器流用。ArduinoにはATMEGA88Pを使ってみた。

f:id:k-kuro:20091128230832j:image


温度が30度以上になるとこのSSRが作動してACがONになる。一応放熱のためにアルミ版でカバーをつけてみたがちょっと熱容量が足りないかもしれない。

f:id:k-kuro:20091128230917j:image