프로젝트 07: 🌬️ 인공지능 자동 온도조절 선풍기
더우면 빨리 돌고 시원하면 멈추는, 온도를 스스로 판단하는 선풍기를 만들어 봅시다.
1. 프로젝트 원리: 온도와 속도의 상관관계
이 선풍기는 온도 센서(TMP36 또는 DHT11)를 통해 현재 온도를 실시간으로 감시합니다. 아두이노는 읽어온 온도가 설정값(예: 28도)보다 높으면 DC 모터에 전류를 보내 선풍기를 돌립니다. 이때 온도가 높을수록 PWM 신호의 듀티 사이클을 높여 팬을 더 빨리 돌리게 됩니다.
▲ 인공지능 선풍기 시스템 흐름: 감지(Input) -> 판단(Process) -> 동작(Output)
📦 준비물
아두이노 우노 x 1
온도 센서 (TMP36) x 1
DC 모터 x 1
NPN 트랜지스터 (2N2222) x 1
다이오드 (1N4004) x 1
점퍼 와이어 & 브레드보드
2. 핵심 지식: 트랜지스터(Transistor)의 역할
아두이노의 디지털 핀에서 나오는 전류는 약 40mA로 매우 약합니다. 하지만 DC 모터는 돌기 위해 훨씬 많은 전류(약 200mA 이상)가 필요하죠.
이때 트랜지스터를 사용합니다. 트랜지스터는 아두이노의 약한 신호를 받아 외부 전원의 큰 전류를 모터로 흘려보내는 전자식 스위치 역할을 합니다.
⚠️ 다이오드를 잊지 마세요!
모터가 멈출 때 역기전력(반대로 흐르는 전기)이 발생해 아두이노를 고장 낼 수 있습니다. 이를 방지하기 위해 모터와 나란히 다이오드를 연결하여 한 방향으로만 전기가 흐르게 보호해야 합니다.
3. 상세 회로 결선도 (Wiring Diagram)
온도 센서는 A0에, 트랜지스터의 베이스(Base)는 PWM 출력이 가능한 9번 핀에 연결합니다.
▲ 선풍기 결선도: 트랜지스터가 모터의 전원을 통제하는 관문 역할을 합니다.
4. 코드 작성하기
TMP36 센서의 전압값을 섭씨 온도로 변환한 뒤, map() 함수를 사용해 모터 속도로 변환합니다.
int tempPin = A0; // 온도 센서 핀
int motorPin = 9; // 모터 제어 핀 (PWM)
void setup() {
pinMode(motorPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 1. 온도 센서 값 읽기
int rawValue = analogRead(tempPin);
// 2. 전압을 섭씨 온도로 변환 (TMP36 기준 공식)
float voltage = rawValue * 5.0 / 1024.0;
float tempC = (voltage - 0.5) * 100.0;
Serial.print("현재 온도: "); Serial.print(tempC); Serial.println(" C");
// 3. 온도에 따른 모터 속도 결정
int motorSpeed = 0;
if (tempC > 25) { // 25도보다 높을 때만 작동
// 25도~35도를 속도 100~255로 매칭
motorSpeed = map(tempC, 25, 35, 100, 255);
motorSpeed = constrain(motorSpeed, 100, 255);
} else {
motorSpeed = 0; // 시원하면 정지
}
analogWrite(motorPin, motorSpeed);
delay(500);
}
5. 🎯 심화 챌린지: LCD 화면 추가
컴퓨터를 켜지 않고도 현재 온도와 선풍기 세기(%)를 확인할 수 있도록 **I2C LCD 모듈**을 추가해 보세요. 실제 가전제품처럼 정보가 표시되는 훨씬 완성도 높은 프로젝트가 됩니다!