아!두이노, 라즈베리, 코딩 노가다
지능형 온도 경고 시스템 #5 (아두이노 우노 R4 러닝 키트) 본문
반응형
본 리뷰는 IC뱅크에서 제품을 무상 제공받아 작성된 체험 리뷰 입니다. 스폰서 배너 삽입 및 표시 광고법 문구 포함이 됩니다.
본 포스팅은 제품을 무상 제공받아 작성된 체험단 리뷰입니다.
아두이노 우노 R4러닝 키트 https://vo.la/ITrP1f3
아두이노 우노 R4 러닝 키트 : 신제품 > NEW 코딩교육몰
아두이노 기본 실습과 IoT 프로젝트 실습에 효율적인 키트입니다.아두이노 UNO R4 WiFi 메인보드를 사용하고 26개의 전자 모듈을 하나의 PCB에 통합하였습니다. - 130000원 국내 최대 전자부품 전문 쇼
www.icbanq.com

이전 코드에서 컨트롤 함수만 삽입 했다. 중간에 어려운 상황이 발생 했다.
{
// ====== 상태 판단 ======
if (temp < TEMP_NORMAL_MAX)
{ // 28℃ 미만
normalState(); // 정상 상태
fancontrol(false);
}
else if (temp < TEMP_HIGH_MAX)
{ // 28℃ 이상 32℃ 미만
warningState(); // 고온 주의 상태
fancontrol(false);
fancontrol(true);
}
else
{ // 32℃ 이상
alarmState(true); // 고온 경보 상태
}
}
코드의 문제점은 중간 고온 주의 상태에서 발생 한다 팬을 꺼야 할지, 팬을 작동해야 할지 고민 스럽다.
작동 한다고 하면 32도 부근에서 온도가 왔다 갔다하면 채터링이 발생한다.
만약 작동하지 않는 다고 하면 28도 부근에서 온도가 왔다 갔다 하면 채터링이 발생 한다.
좀 곤란한 상황이 발생 한다.
그래서 아래의 수정된 코드를 보자.
{
// ====== 팬 제어 판단 ======
// 32℃ 이상이면 ON, 28℃ 이하로 내려가면 OFF, 그 사이에서는 직전 상태 유지
bool fanonoff = control(TEMP_NORMAL_MAX, TEMP_HIGH_MAX, temp); // 하한 28, 상한 32
// ====== 상태 판단 ======
if (temp < TEMP_NORMAL_MAX)
{ // 28℃ 미만
normalState(); // 정상 상태
}
else if (temp < TEMP_HIGH_MAX)
{ // 28℃ 이상 32℃ 미만
warningState(); // 고온 주의 상태
}
else
{ // 32℃ 이상
alarmState(); // 고온 경보 상태
}
fancontrol(fanonoff); // 팬 작동 또는 정지
}
return ;
}
/*
데드밴드(히스테리시스) 제어 함수 - 냉각 팬용
_1st : 하한값 (이 값 이하로 내려가면 OFF)
_2st : 상한값 (이 값 이상이면 ON 시작)
value : 현재 입력값 (예: 현재 온도)
반환값 : 출력 상태 (true = ON, false = OFF)
동작 예 (_1st = 28, _2st = 32)
온도 상승 중 30℃ → OFF 유지
32℃ 이상 도달 → ON
온도 하강 중 30℃ → ON 유지 (직전 상태 기억)
28℃ 이하 → OFF
*/
bool control(double _1st, double _2st, double value)
{
bool case1; // 현재 값이 상한값 이상인가? (켜기 조건)
bool case2; // 현재 값이 하한값 초과인가? (유지 조건)
static bool case3 = false; // ON 조건 (static: 함수가 끝나도 값이 유지됨)
static bool case4 = false; // 최종 출력 (static: 직전 출력 상태를 기억함)
case1 = value >= _2st ? true:false; // 상한값 이상이면 true
case2 = value > _1st ? true:false; // 하한값 초과이면 true
// ON 조건: 상한값 이상으로 올라왔거나, 이미 ON 상태였으면 true
// (case4에는 아직 "직전" 출력값이 들어 있음 → 자기유지 역할)
case3 = case1 || case4;
// 최종 출력: ON 조건을 만족하면서 하한값보다 높을 때만 ON
// 하한값 이하로 내려가면 case2가 false가 되어 강제로 OFF
case4 = case2 && case3;
return case4;
}'아두이노 > 센서' 카테고리의 다른 글
| 지능형 온도 경고 시스템 #7 (아두이노 우노 R4 러닝 키트) (0) | 2026.10.02 |
|---|---|
| 지능형 온도 경고 시스템 #6 (아두이노 우노 R4 러닝 키트) (0) | 2026.10.02 |
| 지능형 온도 경고 시스템 #4 (아두이노 우노 R4 러닝 키트) (0) | 2026.10.01 |
| 지능형 온도 경고 시스템 #3 (아두이노 우노 R4 러닝 키트) (0) | 2026.10.01 |
| 지능형 온도 경고 시스템 #2 (아두이노 우노 R4 러닝 키트) (0) | 2026.10.01 |
