페이지

2025년 12월 27일 토요일

3.2.3. 자동 가로등 만들기

안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊

지난 시간에는 빛 센서(조도 센서)를 이용해서 주변의 밝기를 숫자로 측정하는 방법을 알아봤어요. 단순히 값을 읽는 것만으로도 신기했지만, 오늘은 한 단계 더 나아가 볼 거예요. 바로 그 값을 '이용'해서 아두이노가 스스로 판단하고 행동하게 만드는 거죠!

마치 밤이 되면 저절로 켜지는 똑똑한 가로등처럼, 우리도 '어두워지면 불이 켜지는' 자동 가로등을 직접 만들어 보겠습니다. 아두이노 프로젝트의 진정한 재미가 시작되는 순간이니, 다들 잘 따라와 주세요!

Slide 1: 03. 자동 가로등 만들기

오늘의 프로젝트 주제는 바로 '자동 가로등 만들기' 입니다. 이번 실습은 '3장 센서로 세상 느끼기''2절 빛 센서' 파트의 하이라이트라고 할 수 있어요.

이전까지는 센서로 주변 환경의 정보를 '입력'받는 연습을 했다면, 이제는 그 입력값을 바탕으로 아두이노가 '판단'하고 LED를 켜고 끄는 '출력'까지 제어하게 됩니다. 프로그래밍의 핵심 3요소인 입력-판단-출력을 모두 경험해 볼 수 있는 아주 중요한 예제랍니다. 그럼, 힘차게 시작해 볼까요?

Slide 2: 자동 가로등 회로 구성

가장 먼저 하드웨어를 준비하고 회로를 만들어야겠죠?

✅ 준비물

  • 아두이노 우노 보드
  • 작은 브레드보드
  • 빛 센서(조도 센서)
  • LED (1개)
  • 저항 (10kΩ 1개, 220Ω 1개)

✅ 회로 구성 방법

이번 회로 구성은 정말 간단해요. 왜냐하면 지난 시간에 만들었던 빛 감지 회로는 그대로 유지하고, 여기에 '가로등' 역할을 할 LED 하나만 추가하면 되기 때문이에요.

  1. 기존 회로 유지: 아날로그 0번(A0) 핀에 연결된 빛 센서 회로는 그대로 둡니다.
  2. LED 추가 연결:
    • 브레드보드의 비어있는 공간에 LED를 꽂아주세요. LED는 다리 길이가 다른 것, 모두 기억하시죠?
    • 긴 다리(+): 아두이노가 신호를 보내 불을 켤 수 있도록 디지털 13번 핀에 연결합니다.
    • 짧은 다리(-_: 전기가 빠져나가는 길을 만들어 줘야 해요. 220Ω 저항을 거쳐서 GND 핀에 연결해 주세요. 저항을 꼭 연결해야 LED가 타지 않고 안전하게 작동한답니다!

슬라이드 오른쪽의 회로도를 참고해서 차근차근 연결해 보세요. 빛 센서 회로와 LED 회로, 두 개의 독립적인 회로가 아두이노 보드에 함께 연결된 모습이 될 거예요.

Slide 3: 자동 가로등 제어 코드 (1)

회로 구성이 끝났다면, 이제 아두이노에 똑똑한 영혼을 불어넣어 줄 코드를 살펴볼 차례예요. 코드는 크게 setup() 부분과 loop() 부분으로 나뉘죠. 먼저 초기 설정과 센서 값을 읽는 부분부터 볼게요.

CODE 3.1 | 초기 설정 및 센서 값 읽기
01void setup() {
02 Serial.begin(9600); // 컴퓨터와 통신 시작
03 pinMode(13, OUTPUT); // 13번 핀(LED)을 출력 모드로 설정
04}
05
06void 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)

이제 이 프로젝트의 핵심! 아두이노가 스스로 '판단'하게 만드는 조건문 코드입니다.

CODE 3.2 | 조건문으로 LED 제어하기
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)

✅ 동작 과정 요약

  1. 빛 센서가 주변 밝기를 계속 측정합니다.
  2. 측정한 값이 300 미만이면 (어두우면) → 아두이노가 13번 핀에 HIGH 신호를 보내 LED를 켭니다.
  3. 측정한 값이 300 이상이면 (밝으면) → 아두이노가 13번 핀에 LOW 신호를 보내 LED를 끕니다.
  4. 이 과정이 loop() 함수 안에서 0.1초마다 빠르게 반복됩니다.

결과적으로 아두이노가 스스로 주변 환경을 감지하고, 정해진 조건에 따라 행동하는 멋진 자동 가로등이 완성되는 것이죠!

어떠셨나요? 오늘은 단순히 센서 값을 읽는 것을 넘어, 그 값을 이용해 아두이노가 스스로 판단하고 행동하게 만드는 프로젝트를 진행해 봤습니다. if-else 조건문이라는 아주 강력한 도구를 통해 이제 여러분의 아두이노는 한층 더 '스마트'해졌어요!

코드를 업로드한 뒤, 시리얼 모니터를 켜고 빛 센서를 손으로 가려보세요. 센서 값이 뚝 떨어지면서 LED에 '반짝' 불이 들어오는 순간, 정말 짜릿한 성취감을 느끼실 수 있을 거예요.

오늘 배운 입력-판단-출력의 구조는 앞으로 만들게 될 거의 모든 프로젝트의 기본 뼈대가 됩니다. 이 구조를 잘 기억해 두시고, 기준값을 바꿔보는 등 다양하게 응용하며 즐겨보시길 바랍니다. 다음 시간에도 더 재미있는 프로젝트로 돌아올게요! 수고 많으셨습니다. 😄

이 포스팅의 내용은 교재 [주니어 공학교실 아두이노의 기초] - 페이지에 수록된 내용입니다.

댓글 없음:

댓글 쓰기