안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
지난 시간에는 온도 센서(TMP35)를 이용해 눈에 보이지 않는 온도를 숫자로 읽어내는 방법을 배웠죠? 오늘은 여기서 한 걸음 더 나아가, 우리 생활에 실질적인 도움을 줄 수 있는 멋진 장치를 만들어 볼 거예요. 바로 '스마트 온도 알리미' 입니다!
겨울철 수도관이 꽁꽁 얼어 터지거나(동파), 비닐하우스의 소중한 농작물이 냉해를 입는 것을 방지하기 위해 "온도가 0도 밑으로 떨어지면 사이렌을 울려주는" 똑똑한 경보 시스템을 함께 만들어 봅시다!
Slide 1: 03. 스마트 온도 알리미 만들기
이번 프로젝트의 목표는 명확해요. 바로 온도 센서를 활용해 특정 조건(영하)이 되면 경고 신호를 보내는 '스마트 온도 알리미'를 만드는 것이죠. 아두이노의 세계에 오신 것을 환영합니다! 이제 단순한 측정기를 넘어, 상황을 판단하고 행동하는 장치를 만들어보는 거예요.
Slide 2: 스마트 온도 알리미 회로 구성하기
가장 먼저 하드웨어를 준비하고 연결해야겠죠?
✅ 준비물
- 아두이노 UNO
- 온도 센서 (TMP35)
- 피에조 부저 (Piezo Buzzer)
- 브레드보드 및 점퍼선
지난 시간에 만들었던 온도 센서 회로는 그대로 유지해주세요. 우리는 여기에 '경고음'을 내줄 피에조 부저만 하나 더 추가할 거예요.
✅ 피에조 부저 추가하기
회로도를 보면 아주 간단해요.
- 브레드보드의 비어있는 공간에 피에조 부저를 꽂아주세요.
- 부저의 윗면을 잘 보면
(+)표시가 있어요. 이 (+) 쪽 다리를 아두이노의 디지털 11번 핀에 연결합니다. - 반대쪽 (-) 다리는 GND(접지)에 연결해주세요.
이것으로 회로 구성은 끝입니다! 정말 간단하죠? 이제 이 부저가 0도 이하의 위험 상황을 감지했을 때 힘차게 사이렌을 울려줄 거예요.
Slide 3: 스마트 온도 알리미 코드 (1) - 기본 설정과 온도 측정
이제 아두이노에게 '감시 임무'를 부여할 코드를 작성해 봅시다. 코드는 크게 세 부분으로 나눌 수 있는데, 첫 번째는 기본 설정과 온도 측정 파트예요.
| 01 | int buzzerPin = 11; |
| 02 | int sensorPin = A0; |
| 03 | |
| 04 | void setup() { |
| 05 | Serial.begin(9600); |
| 06 | } |
| 07 | |
| 08 | void loop() { |
| 09 | // 1. 온도 측정 및 변환 (이전 시간 복습) |
| 10 | int sensorValue = analogRead(sensorPin); |
| 11 | float voltage = sensorValue * (5.0 / 1023.0); |
| 12 | float temperature = (voltage - 0.5) * 100.0; |
| 13 | |
| 14 | Serial.println(temperature); // 현재 온도 출력 |
| 15 | ... |
🔹 변수 설정 (1~2줄)
int buzzerPin = 11;: 부저가 연결된 핀 번호를buzzerPin이라는 이름으로 저장해요.int sensorPin = A0;: 온도 센서가 연결된 아날로그 0번 핀을sensorPin으로 저장합니다.
🔹 온도 측정 및 변환 (10~14줄)
이 부분은 지난 시간에 배운 내용 복습이에요!
analogRead(sensorPin): A0핀에서 온도 센서의 아날로그 값을 읽어와요. (0~1023 사이의 값)voltage = ...: 읽어온 값을 전압(0~5V)으로 변환해요.temperature = ...: 변환된 전압을 우리가 사용하는 섭씨온도(°C)로 다시 변환합니다.Serial.println(temperature): 현재 측정된 온도를 시리얼 모니터에 출력해서 우리가 눈으로 확인할 수 있게 해줘요.
Slide 4: 스마트 온도 알리미 코드 (2) - 위험 감지 및 사이렌 (상승음)
이제 이 프로젝트의 핵심 로직이에요. 온도를 감시하다가 위험 상황일 때 사이렌을 울리는 부분이죠.
| 15 | // 2. 영하인지 감시하기 |
| 16 | if (temperature < 0) { |
| 17 | // 0도 미만이면 사이렌 소리 발사! (위잉~ 위잉~) |
| 18 | |
| 19 | // 소리가 점점 높아짐 (500Hz -> 1000Hz) |
| 20 | for (int i = 500; i <= 1000; i += 5) { |
| 21 | tone(buzzerPin, i); |
| 22 | delay(5); |
| 23 | } |
| 24 | ... |
🔹 영하인지 감시하기 (16줄)
if (temperature < 0): "만약(if) 온도가 0보다 작다면" 이라는 조건을 검사해요. 이 조건이 참(true)일 때만{ }안의 코드가 실행됩니다. 즉, 영하로 떨어졌을 때만 사이렌이 울리게 되는 거죠.
🔹 사이렌 소리 만들기 - 상승음 (20~23줄)
사이렌은 보통 "위잉~" 하고 소리가 높아졌다가 "위잉~" 하고 낮아지는 패턴을 반복하죠? 그중 첫 번째, 소리가 높아지는 부분을 for 반복문으로 만들었어요.
for (int i = 500; i <= 1000; i += 5):i라는 변수를 500에서 시작해서 1000이 될 때까지 5씩 계속 증가시키라는 뜻이에요.tone(buzzerPin, i):tone()함수는 특정 핀에서 특정 주파수(소리의 높낮이)의 소리를 내게 하는 함수예요. 여기서i값이 500, 505, 510... 1000으로 계속 변하니까, 부저의 소리도 점점 높아지게 됩니다. "위이이잉~" 하는 상승음 효과가 만들어지는 거죠!delay(5): 소리가 너무 빨리 변하지 않도록 아주 잠깐(0.005초) 멈춰주는 역할을 해요.
Slide 5: 스마트 온도 알리미 코드 (3) - 사이렌 완성 및 테스트
상승음이 있으면 하강음도 있어야겠죠? 사이렌을 완성하고, 안전할 땐 조용히 하도록 만드는 코드입니다.
| 24 | // 소리가 점점 낮아짐 (1000Hz -> 500Hz) |
| 25 | for (int i = 1000; i >= 500; i -= 5) { |
| 26 | tone(buzzerPin, i); |
| 27 | delay(5); |
| 28 | } |
| 29 | } |
| 30 | else { |
| 31 | // 0도 이상이면 조용히 하기 |
| 32 | noTone(buzzerPin); |
| 33 | } |
| 34 | } |
🔹 사이렌 소리 완성하기 - 하강음 (25~28줄)
for (int i = 1000; i >= 500; i -= 5): 이번엔 반대예요.i를 1000에서 시작해서 500이 될 때까지 5씩 감소시켜요.tone(buzzerPin, i):i값이 1000, 995, 990... 500으로 줄어드니 소리가 점점 낮아지겠죠? 이렇게 사이렌의 뒷부분 소리가 완성됩니다.
🔹 안전할 땐 조용히 (30~33줄)
else:if (temperature < 0)조건이 거짓일 때, 즉 온도가 0도 이상일 때 실행되는 부분이에요.noTone(buzzerPin): 부저에서 나던 소리를 완전히 끕니다. 안전하니까 조용히 있는 거죠.
🔹 동작 테스트
코드를 모두 업로드했다면 시리얼 모니터를 열어 현재 온도를 확인해보세요. 아마 실내 온도라 0도보다 높아서 조용할 거예요. 이제 차가운 얼음을 온도 센서에 가져다 대보세요! 온도가 0.00 밑으로 떨어지는 순간, "위잉~ 위잉~" 하는 긴급 사이렌 소리가 울릴 거예요. 다시 얼음을 떼고 손으로 센서를 따뜻하게 감싸주면 소리가 멈출 겁니다.
💡 틴커캐드(Tinkercad) 팁!
실제 얼음이 없다면 틴커캐드 시뮬레이션을 활용해보세요. 시뮬레이션 시작 후 온도 센서를 클릭하면 온도 조절 슬라이더가 나타납니다. 슬라이더를 왼쪽 끝(영하)으로 옮기면 부저에서 소리가 나는 것을 확인할 수 있어요.
어떠셨나요? 오늘은 단순히 센서 값을 읽는 것을 넘어, if 조건문으로 상황을 판단하고 for 반복문과 tone() 함수로 역동적인 사이렌 소리까지 만들어봤어요. 이제 여러분은 겨울철 동파나 농작물 냉해를 막아주는 든든한 스마트 알리미를 갖게 되었습니다!
여기서 만족하지 말고 응용해보는 건 어떨까요? 예를 들어 if (temperature < 0) 부분을 if (temperature > 30)으로 바꾸면 폭염 경보기가 될 수도 있고, 냉장고 안에 넣어두고 if (temperature > 10)으로 설정하면 냉장고 문이 열렸을 때 알려주는 알리미가 될 수도 있겠죠?
여러분만의 아이디어로 더 멋진 장치를 만들어보세요! 다음 시간에 더 재미있는 프로젝트로 돌아오겠습니다. 궁금한 점은 언제든 댓글로 남겨주세요! 😊
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] **-** 페이지에 수록된 내용입니다.
댓글 없음:
댓글 쓰기