페이지

2026년 1월 5일 월요일

3.5.3. 사람 감지 센서등 만들기

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

지난 시간에는 PIR 센서를 이용해서 움직임을 감지하고, 그 결과를 시리얼 모니터에서 0 또는 1로 확인하는 방법을 배웠어요. 눈에 보이지 않는 신호를 숫자로 확인하는 것도 신기했지만, 여기서 멈추면 조금 아쉽겠죠?

오늘은 지난 시간에 배운 내용을 한 단계 더 발전시켜 볼 거예요. 감지된 신호를 이용해 실제로 불을 '짠!' 하고 켜는, 우리 집 현관에서 흔히 볼 수 있는 '사람 감지 센서등'을 직접 만들어 보겠습니다. 아두이노와 함께라면 이런 멋진 장치도 정말 쉽게 만들 수 있답니다. 그럼, 지금 바로 시작해 볼까요?

Slide 1: 사람 감지 센서등 만들기

이번 프로젝트의 목표는 명확해요. 바로 '사람 감지 센서등 만들기'입니다. 3장 '센서로 세상 느끼기'에서 다루는 PIR 센서를 응용해서, 실생활에 바로 적용할 수 있는 유용한 아이템을 만들어 볼 거예요. 단순한 신호 확인을 넘어, 실제 동작으로 이어지는 과정을 통해 피지컬 컴퓨팅의 진짜 재미를 느끼실 수 있을 겁니다!

Slide 2: 사람 감지 센서등 회로 구성하기

가장 먼저 하드웨어를 준비하고 연결해야겠죠?

준비물

  • 아두이노 UNO
  • PIR 센서 (HC-SR501)
  • LED
  • 저항 (220Ω)
  • 작은 브레드보드
  • 점퍼 와이어

회로 연결 방법

회로 구성은 정말 간단해요. 지난 시간에 만들었던 PIR 센서 회로는 그대로 두고, LED 하나만 추가하면 끝이랍니다.

  1. PIR 센서 연결 (복습): VCC는 5V, OUT은 11번 핀, GND는 GND에 연결된 상태를 유지해 주세요.
  2. LED 추가 연결:
    • LED의 긴 다리(+)는 아두이노의 디지털 13번 핀에 연결해 주세요. 13번 핀에서 '켜라!'는 신호를 보낼 거예요.
    • LED의 짧은 다리(-)**는 바로 GND로 가지 않고, 220Ω 저항을 거쳐서 브레드보드의 GND 라인에 연결해 주세요. 저항은 LED에 과전류가 흘러 망가지는 것을 막아주는 중요한 보호 장치랍니다!

슬라이드의 회로도를 참고해서 차근차근 연결하면 전혀 어렵지 않을 거예요.

Slide 3: 사람 감지 센서등 코드 (1) - 기본 설정

하드웨어 연결이 끝났으니, 이제 아두이노에게 어떤 일을 해야 할지 알려줄 '소스 코드'를 작성할 차례예요. 먼저, 아두이노가 처음 켜질 때 딱 한 번 실행되는 setup() 함수부터 살펴볼게요.

CODE 3.1 | 기본 설정 코드
01void setup() {
02 pinMode(11, INPUT); // 11번 핀(PIR 센서)을 입력 모드로 설정
03 pinMode(13, OUTPUT); // 13번 핀(LED)을 출력 모드로 설정
04 Serial.begin(9600); // 컴퓨터와 통신 시작
05}
  • pinMode(11, INPUT);: 11번 핀에 연결된 PIR 센서로부터 움직임 감지 신호(0 또는 1)를 '받아들이겠다'는 의미로 입력(INPUT) 모드로 설정해요. 아두이노의 '귀' 역할을 하는 셈이죠.
  • pinMode(13, OUTPUT);: 13번 핀에 연결된 LED에게 전기를 보내 불을 켜거나 끄는 신호를 '내보내겠다'는 의미로 출력(OUTPUT) 모드로 설정해요. 이번엔 아두이노의 '입' 역할이네요!
  • Serial.begin(9600);: 이전처럼 센서 값이 잘 들어오는지 컴퓨터 화면(시리얼 모니터)으로 확인하기 위해 통신을 시작하는 코드예요.

이제 아두이노는 11번 핀으로 신호를 듣고, 13번 핀으로 명령을 내릴 준비를 마쳤습니다!

Slide 4: 사람 감지 센서등 코드 (2) - 핵심 로직

이제 아두이노가 계속 반복해서 수행할 동작, 즉 loop() 함수를 작성해 봅시다. 여기가 바로 우리 센서등의 핵심 동작 원리가 담긴 부분이에요.

CODE 4.1 | 핵심 로직 코드
01void loop() {
02 int sensorValue = digitalRead(11); // 센서 값(0 또는 1) 읽기
03 Serial.println(sensorValue); // 값 확인용 출력
04
05 if (sensorValue == HIGH) { // 만약 움직임이 감지되면(1이면)
06 digitalWrite(13, HIGH); // 13번 LED 켜기
07 }
08 else { // 움직임이 없다면(0이면)
09 digitalWrite(13, LOW); // 13번 LED 끄기
10 }
11}

코드를 한 줄씩 해석해 볼까요?

  • int sensorValue = digitalRead(11);: 11번 핀(PIR 센서)에서 들어오는 신호를 읽어서 sensorValue라는 변수에 저장해요. 움직임이 있으면 1(HIGH), 없으면 0(LOW)이 저장되겠죠.
  • if (sensorValue == HIGH): "만약 sensorValue 값이 HIGH(1)와 같다면?" 이라고 조건을 물어보는 거예요. 즉, 움직임이 감지되었는지를 판단하는 부분이죠.
  • digitalWrite(13, HIGH);: 위 if 조건이 참일 경우, 즉 움직임이 감지되었을 때 실행돼요. 13번 핀에 전기를 공급해서 LED를 환하게 켭니다.
  • else: if 조건이 참이 아닐 경우, 즉 움직임이 없을 때를 의미해요.
  • digitalWrite(13, LOW);: 움직임이 없으니 13번 핀의 전기 공급을 끊어서 LED를 끕니다.

이것이 바로 현관 센서등의 동작 원리랍니다! '디지털 입력(PIR 센서) 값에 따라 디지털 출력(LED)을 제어'하는, if-else 구조를 이용한 아주 간단하면서도 강력한 제어 방식이에요.

최종 코드

CODE 4.2 | 사람 감지 센서등 전체 코드
01// 사람 감지 센서등 전체 코드
02
03void setup() {
04 pinMode(11, INPUT); // 11번 핀(PIR 센서)을 입력 모드로 설정
05 pinMode(13, OUTPUT); // 13번 핀(LED)을 출력 모드로 설정
06 Serial.begin(9600); // 컴퓨터와 통신 시작
07}
08
09void loop() {
10 // 11번 핀에서 센서 값을 읽어와 변수에 저장
11 int sensorValue = digitalRead(11);
12
13 // 시리얼 모니터에 현재 센서 값 출력 (동작 확인용)
14 Serial.println(sensorValue);
15
16 // 만약 움직임이 감지되었다면,
17 if (sensorValue == HIGH) {
18 digitalWrite(13, HIGH); // 13번 핀에 연결된 LED를 켠다
19 }
20 // 그렇지 않고 움직임이 없다면,
21 else {
22 digitalWrite(13, LOW); // 13번 핀에 연결된 LED를 끈다
23 }
24}

결과 확인

이제 이 코드를 아두이노에 업로드해 보세요. 처음에는 LED가 꺼져 있다가, PIR 센서 앞에서 손을 흔들거나 몸을 움직이면 '반짝!' 하고 LED가 켜지는 것을 확인할 수 있을 거예요. 움직임을 멈추고 가만히 있으면 잠시 후 LED는 다시 스르륵 꺼집니다. 정말 신기하죠?

어떠셨나요? 오늘은 PIR 센서로 들어온 입력 신호를 바탕으로 LED를 켜고 끄는, 아주 실용적인 '사람 감지 센서등'을 만들어 보았습니다. if-else 라는 간단한 조건문 하나로 아두이노가 스스로 상황을 '판단'하고 '제어'하게 만들 수 있었어요.

이 원리를 조금만 더 응용하면 어두울 때만 센서가 작동하게 하거나, 사람이 감지되면 불이 켜지는 대신 경고음이 울리게 하는 등 훨씬 더 재미있고 다양한 프로젝트를 만들 수 있답니다.

오늘 배운 내용을 바탕으로 여러분만의 멋진 아이디어를 더해보는 건 어떨까요? 다음 시간에는 더욱 흥미로운 주제로 다시 찾아오겠습니다. 모두 즐거운 코딩 하세요! 😊

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

댓글 없음:

댓글 쓰기