임베디드/아두이노
[아두이노] 40. 병아리 부화기 및 육추기 겸용 만들기 (8) 전구 HEAT 소스 코드
copynull
2024. 5. 29. 14:50
온도 유지에 필요한 전구 또는 히터 등의 컨트롤에 필요한 소스코드를 알아보도록 하겠습니다.
전구를 사용해도 되고, 스페이스히터 같은 종류를 사용해도 무방합니다. 아니면 실리콘 열선으로 만드셔도 됩니다. 쉽게 말하면 전기장판에 깔려있는 열선 같은겁니다. 실리콘 열선 같은 경우 저항치를 측정해서 약 30 ~ 40W 정도로 만들면 됩니다. 종류만 다르지 어차피 온도에 따른 온 오프 제어이므로 사용 소스 코드는 같습니다.
아래는 소스코드 입니다.
Incubator_main.ino
...
#define LIGHT 9 // 전등 (220v 릴레이)
#define FAN 11 // Fan
long mode = 0; // 0 = 부화기, 1 = 육추기 모드
...
void setup()
{
...
pinMode(FAN, OUTPUT); // 팬
pinMode(LIGHT, OUTPUT); // 전구
...
}
void loop()
{
...
if(millis()-beforeTime>=1000)
{
...
// 온도 습도 읽기
GetTempHumi();
// 온도 체크 및 전구 온 오프
CheckLight();
...
}
...
}
_light.ino
// 온도 체크 및 전구 온 오프
void CheckLight()
{
if(mode == 0) // 부화기모드
{
if(day >=0 && day <= 20) // (37.5도 +- 0.5)
{
if(NTC <= 37) // 온도가 37도 미만이면 히터를 켜고
{
digitalWrite(LIGHT, HIGH); // 히터 켜기
digitalWrite(FAN, HIGH); // 히터 온도를 내부 전체에 고르게 퍼지게 하기 위함
}
else if(NTC >= 38) // 38도가 넘으면 히터를 끕니다.
{
digitalWrite(LIGHT, LOW); // 히터 끔
digitalWrite(FAN, LOW); // 팬 끔
}
}
else // 아무것도 하지 않음
{
digitalWrite(LIGHT, LOW);
digitalWrite(FAN, LOW);
}
}
else // 육추기 모드
{
if(day >=0 && day <= 2) // 1주 3일까지 (36도)
{
if(NTC <= 35.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 36.5)
{
digitalWrite(LIGHT, LOW);
}
}
else if(day > 2 && day <= 6) // 1주 4~7일 (33도)
{
if(NTC <= 32.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 33.5)
{
digitalWrite(LIGHT, LOW);
}
}
else if(day > 6 && day <= 13) // 2주 (30도)
{
if(NTC <= 29.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 30.5)
{
digitalWrite(LIGHT, LOW);
}
}
else if(day > 13 && day <= 20) // 3주 (28도)
{
if(NTC <= 27.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 28.5)
{
digitalWrite(LIGHT, LOW);
}
}
else if(day > 20 && day <= 27) // 4주 (26도)
{
if(NTC <= 25.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 26.5)
{
digitalWrite(LIGHT, LOW);
}
}
else if(day > 27 && day <= 34) // 5주 (23도)
{
if(NTC <= 22.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 23.5)
{
digitalWrite(LIGHT, LOW);
}
}
else // 5주 이상 (21도)
{
if(NTC <= 20.5)
{
digitalWrite(LIGHT, HIGH);
}
else if(NTC >= 21.5)
{
digitalWrite(LIGHT, LOW);
}
}
}
}