안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
지난 시간에는 빛 센서(조도 센서)를 이용해서 주변의 밝기를 숫자로 측정하는 방법을 알아봤어요. 단순히 값을 읽는 것만으로도 신기했지만, 오늘은 한 단계 더 나아가 볼 거예요. 바로 그 값을 '이용'해서 아두이노가 스스로 판단하고 행동하게 만드는 거죠!
마치 밤이 되면 저절로 켜지는 똑똑한 가로등처럼, 우리도 '어두워지면 불이 켜지는' 자동 가로등을 직접 만들어 보겠습니다. 아두이노 프로젝트의 진정한 재미가 시작되는 순간이니, 다들 잘 따라와 주세요!
Slide 1: 03. 자동 가로등 만들기
오늘의 프로젝트 주제는 바로 '자동 가로등 만들기' 입니다. 이번 실습은 '3장 센서로 세상 느끼기'의 '2절 빛 센서' 파트의 하이라이트라고 할 수 있어요.
이전까지는 센서로 주변 환경의 정보를 '입력'받는 연습을 했다면, 이제는 그 입력값을 바탕으로 아두이노가 '판단'하고 LED를 켜고 끄는 '출력'까지 제어하게 됩니다. 프로그래밍의 핵심 3요소인 입력-판단-출력을 모두 경험해 볼 수 있는 아주 중요한 예제랍니다. 그럼, 힘차게 시작해 볼까요?
Slide 2: 자동 가로등 회로 구성
가장 먼저 하드웨어를 준비하고 회로를 만들어야겠죠?
✅ 준비물
- 아두이노 우노 보드
- 작은 브레드보드
- 빛 센서(조도 센서)
- LED (1개)
- 저항 (10kΩ 1개, 220Ω 1개)
✅ 회로 구성 방법
이번 회로 구성은 정말 간단해요. 왜냐하면 지난 시간에 만들었던 빛 감지 회로는 그대로 유지하고, 여기에 '가로등' 역할을 할 LED 하나만 추가하면 되기 때문이에요.
- 기존 회로 유지: 아날로그 0번(A0) 핀에 연결된 빛 센서 회로는 그대로 둡니다.
- LED 추가 연결:
- 브레드보드의 비어있는 공간에 LED를 꽂아주세요. LED는 다리 길이가 다른 것, 모두 기억하시죠?
- 긴 다리(+): 아두이노가 신호를 보내 불을 켤 수 있도록 디지털 13번 핀에 연결합니다.
- 짧은 다리(-_: 전기가 빠져나가는 길을 만들어 줘야 해요. 220Ω 저항을 거쳐서 GND 핀에 연결해 주세요. 저항을 꼭 연결해야 LED가 타지 않고 안전하게 작동한답니다!
슬라이드 오른쪽의 회로도를 참고해서 차근차근 연결해 보세요. 빛 센서 회로와 LED 회로, 두 개의 독립적인 회로가 아두이노 보드에 함께 연결된 모습이 될 거예요.
Slide 3: 자동 가로등 제어 코드 (1)
회로 구성이 끝났다면, 이제 아두이노에 똑똑한 영혼을 불어넣어 줄 코드를 살펴볼 차례예요. 코드는 크게 setup() 부분과 loop() 부분으로 나뉘죠. 먼저 초기 설정과 센서 값을 읽는 부분부터 볼게요.
| 01 | void setup() { |
| 02 | Serial.begin(9600); // 컴퓨터와 통신 시작 |
| 03 | pinMode(13, OUTPUT); // 13번 핀(LED)을 출력 모드로 설정 |
| 04 | } |
| 05 | |
| 06 | void loop() { |
| 07 | int sensorValue = analogRead(A0); // 빛 센서 값 읽어오기 |
| 08 | Serial.println(sensorValue); // 현재 밝기 확인용 출력 |
| 09 | |
| 10 | // ... (판단 부분은 다음 슬라이드에서!) |
| 11 | } |
✅ 핀 모드 설정 (setup 함수)
Serial.begin(9600);: 이전과 동일하게, 빛 센서 값이 어떻게 변하는지 눈으로 확인하기 위해 시리얼 통신을 시작합니다.pinMode(13, OUTPUT);: 가장 중요한 추가 코드예요! LED를 연결한 13번 핀을 출력(OUTPUT) 모드로 설정하는 명령어입니다. 아두이노가 13번 핀으로 전기를 내보내서 LED를 제어하겠다는 의미죠.
✅ 센서 값 읽기 (loop 함수)
int sensorValue = analogRead(A0);: 아날로그 0번 핀에 연결된 빛 센서의 값을 읽어서sensorValue라는 변수에 저장해요.Serial.println(sensorValue);: 방금 읽어온 센서 값을 시리얼 모니터 창에 출력해 줍니다. 이 코드가 있으면 지금 주변이 얼마나 밝은지, 혹은 어두운지 숫자로 바로바로 확인할 수 있어서 디버깅에 아주 유용해요.
Slide 4: 자동 가로등 제어 코드 (2)
이제 이 프로젝트의 핵심! 아두이노가 스스로 '판단'하게 만드는 조건문 코드입니다.
| 01 | // ... (loop 함수의 앞부분) |
| 02 | |
| 03 | if (sensorValue < 300) { // 만약 센서 값이 300보다 작다면 (어두우면) |
| 04 | digitalWrite(13, HIGH); // 13번 LED 켜기 |
| 05 | } |
| 06 | else { // 그렇지 않다면 (밝으면) |
| 07 | digitalWrite(13, LOW); // 13번 LED 끄기 |
| 08 | } |
| 09 | |
| 10 | delay(100); // 0.1초 잠깐 쉬기 |
| 11 | } |
✅ 조건 판단 (if ~ else 문)
바로 이 부분이 아두이노에게 "판단 능력"을 심어주는 코드예요.
if (sensorValue < 300): "만약(if) 변수sensorValue의 값이 300보다 작다면" 이라는 조건을 검사해요. 빛 센서는 어두울수록 값이 작아지므로, 이 조건은 "만약 주변이 어두워지면"이라는 뜻이 됩니다.digitalWrite(13, HIGH);: 위if문의 조건이 참(true)일 때, 즉 어두울 때 실행되는 코드입니다. 13번 핀에 HIGH 신호(5V 전기)를 보내 LED를 켭니다.else: "그렇지 않다면" 이라는 뜻이에요. 즉,sensorValue값이 300보다 작지 않다면(크거나 같다면), 다시 말해 주변이 밝을 때를 의미하죠.digitalWrite(13, LOW);:else문에 해당될 때, 즉 밝을 때 실행되는 코드입니다. 13번 핀에 LOW 신호(0V 전기)를 보내 LED를 끕니다.
✅ 기준값 설정
여기서 300이라는 숫자는 '어둠'을 판단하는 기준값이에요. 이 값은 절대적인 게 아니에요. 사용하는 빛 센서나 주변 조명 환경에 따라 달라질 수 있어요. 코드를 업로드하고 시리얼 모니터로 평소 밝을 때와 손으로 가렸을 때의 값 범위를 확인한 뒤, 이 기준값을 적절하게 조절해 보세요. 직접 값을 바꿔보면서 내 환경에 딱 맞는 자동 가로등을 만드는 재미를 느껴보시길 바라요!
Slide 5: 자동 가로등 동작 원리
자, 이제 모든 조각이 맞춰졌어요. 우리만의 스마트 가로등이 어떻게 동작하는지 전체적인 원리를 정리해 볼까요?
✅ 프로그래밍 3요소
이번 프로젝트는 프로그래밍의 핵심 3요소가 완벽하게 들어맞는 아주 좋은 예제예요.
- 입력: 빛 센서가 주변 밝기를 감지해 아날로그 값으로 아두이노에 전달해요. (
analogRead) - 판단: 아두이노는 입력받은 센서 값이 정해진 기준(300)보다 작은지 큰지 비교 판단해요. (
if ~ else) - 출력: 판단 결과에 따라 LED를 켜거나 끄는 신호를 내보내요. (
digitalWrite)
✅ 동작 과정 요약
- 빛 센서가 주변 밝기를 계속 측정합니다.
- 측정한 값이 300 미만이면 (어두우면) → 아두이노가 13번 핀에 HIGH 신호를 보내 LED를 켭니다.
- 측정한 값이 300 이상이면 (밝으면) → 아두이노가 13번 핀에 LOW 신호를 보내 LED를 끕니다.
- 이 과정이
loop()함수 안에서 0.1초마다 빠르게 반복됩니다.
결과적으로 아두이노가 스스로 주변 환경을 감지하고, 정해진 조건에 따라 행동하는 멋진 자동 가로등이 완성되는 것이죠!
어떠셨나요? 오늘은 단순히 센서 값을 읽는 것을 넘어, 그 값을 이용해 아두이노가 스스로 판단하고 행동하게 만드는 프로젝트를 진행해 봤습니다. if-else 조건문이라는 아주 강력한 도구를 통해 이제 여러분의 아두이노는 한층 더 '스마트'해졌어요!
코드를 업로드한 뒤, 시리얼 모니터를 켜고 빛 센서를 손으로 가려보세요. 센서 값이 뚝 떨어지면서 LED에 '반짝' 불이 들어오는 순간, 정말 짜릿한 성취감을 느끼실 수 있을 거예요.
오늘 배운 입력-판단-출력의 구조는 앞으로 만들게 될 거의 모든 프로젝트의 기본 뼈대가 됩니다. 이 구조를 잘 기억해 두시고, 기준값을 바꿔보는 등 다양하게 응용하며 즐겨보시길 바랍니다. 다음 시간에도 더 재미있는 프로젝트로 돌아올게요! 수고 많으셨습니다. 😄
이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] - 페이지에 수록된 내용입니다.
댓글 없음:
댓글 쓰기