Notice
Recent Posts
Recent Comments
Link
승코딩당당당
[아두이노] 아두이노 온도 변화에 따른 모터·LED 제어 본문
이번 실습에서는 아두이노 UNO와 Easy Module Shield, Arduino Motor Shield를 이용해
온도 변화에 따라 모터와 LED가 동작하는 제어 시스템을 구현해보았다.
실제 온도 센서 대신,
Easy Module Shield에 장착된 가변 저항을 사용하여 온도가 변화하는 상황을 가상으로 구현하였다.
(실제 온습도 센서를 사용하면, 테스트가 매우 힘들기 때문이다.. 냉장고에 넣었다 뺐다...)



사용한 하드웨어 구성
- Arduino UNO
- Easy Module Shield
- Arduino Motor Shield
- DC 모터
- RGB LED (Easy Module Shield 내장)
- 12V 전원 어댑터
동작 원리
- 가변 저항 값 범위: 0 ~ 1023
- 저항 값이 클수록 고온, 작을수록 저온을 의미
이를 기준으로 온도를 세 단계로 구분하였다.
- 저온 (LOW)
- 중간 (MID)
- 고온 (HIGH)
온도에 따른 제어 동작
⭐ 저온
- 히터 가동을 가정 → 모터 회전
- LED 색상: 빨간색 (RED)
⭐ 중간
- 적정 온도 상태 → 모터 정지
- LED 색상: 초록색 (GREEN)
⭐ 고온
- 쿨링 가동을 가정 → 모터 회전
- LED 색상: 파란색 (BLUE)
코드
#define MOTOR_DIR_PIN 6
#define MOTOR_PWM_PIN 3
#define MOTOR_BRK_PIN 7
#define CW LOW
#define CCW HIGH
#define BRAKE_ON HIGH
#define BRAKE_OFF LOW
#define LED_R_PIN 9
#define LED_G_PIN 10
#define LED_B_PIN 11
#define Pot1 A0
void setup() {
Serial.begin(9600);
pinMode(MOTOR_DIR_PIN, OUTPUT);
pinMode(MOTOR_PWM_PIN, OUTPUT);
pinMode(MOTOR_BRK_PIN, OUTPUT);
pinMode(LED_R_PIN, OUTPUT);
pinMode(LED_G_PIN, OUTPUT);
pinMode(LED_B_PIN, OUTPUT);
digitalWrite(MOTOR_BRK_PIN, BRAKE_ON);
analogWrite(MOTOR_PWM_PIN, 0);
analogWrite(LED_R_PIN, 0);
analogWrite(LED_G_PIN, 0);
analogWrite(LED_B_PIN, 0);
}
void loop() {
int adc_val = analogRead(Pot1); // 0 ~ 1023
Serial.println(adc_val);
// 저온
if (adc_val <= 30) {
digitalWrite(MOTOR_DIR_PIN, CW);
digitalWrite(MOTOR_BRK_PIN, BRAKE_OFF);
analogWrite(MOTOR_PWM_PIN, 200);
analogWrite(LED_R_PIN, 255);
analogWrite(LED_G_PIN, 0);
analogWrite(LED_B_PIN, 0);
Serial.println("LOW TEMP : RED LED, MOTOR CW");
}
// 중간
else if (adc_val > 30 && adc_val <= 900) {
digitalWrite(MOTOR_BRK_PIN, BRAKE_ON);
analogWrite(MOTOR_PWM_PIN, 0);
analogWrite(LED_R_PIN, 0);
analogWrite(LED_G_PIN, 255);
analogWrite(LED_B_PIN, 0);
Serial.println("MID TEMP : GREEN LED, MOTOR STOP");
}
// 고온
else {
digitalWrite(MOTOR_DIR_PIN, CCW);
digitalWrite(MOTOR_BRK_PIN, BRAKE_OFF);
analogWrite(MOTOR_PWM_PIN, 200);
analogWrite(LED_R_PIN, 0);
analogWrite(LED_G_PIN, 0);
analogWrite(LED_B_PIN, 255);
Serial.println("HIGH TEMP : BLUE LED, MOTOR CCW");
}
delay(200);
}
코드 동작 설명 요약
- analogRead(Pot1)
→ 가변 저항 값(0~1023)을 읽어 온도 값으로 사용 - if / else if / else
→ 온도 구간(저온 / 중간 / 고온)에 따라 동작 분기 - analogWrite(MOTOR_PWM_PIN, 200)
→ 모터 속도 제어(PWM) - RGB LED 핀 제어
→ 온도 상태를 색상으로 시각화
'개발 > 임베디드' 카테고리의 다른 글
| [미래자동차응용] 전기자동차 배터리 및 배터리관리시스템 (0) | 2026.02.02 |
|---|---|
| [미래자동차응용] 자율주행 자동차 개요 (0) | 2026.02.02 |
| [A-SPICE] 설계·구현·검증 및 테스팅과 형상 관리 (0) | 2026.01.29 |
| [A-SPICE] V-Model과 요구사항 공학 (0) | 2026.01.29 |
| [A-SPICE] 안전 요구사항과 해저드 분석 (0) | 2026.01.29 |