안녕하세요! 여러분의 AI-IT 멘토, '파이컴'입니다. 😊
오늘은 우리 주변에서 흔히 볼 수 있는 자동 현관등이나 침입 경보기의 비밀, 바로 PIR 센서에 대해 배워볼 거예요. 사람이 지나가면 어떻게 딱 알고 불이 켜지는 걸까요? 그 원리를 아두이노로 직접 구현해보면서 '디지털 입력'이라는 아주 중요한 개념도 함께 정복해 보겠습니다.
이번 시간을 통해 센서가 보내는 신호를 읽는 새로운 방법을 배우게 될 테니, 모두 집중해주세요! 자, 그럼 시작해볼까요?
Slide 1: PIR 센서 회로 구성하기 (시작)
오늘의 주제는 '3장 센서로 세상 느끼기' 중에서도 '5절 PIR 센서'입니다. 그중에서도 첫 번째 단계인 'PIR 센서 회로 구성하기'부터 차근차근 진행해 볼게요. 이론으로만 알던 센서를 직접 내 손으로 연결하고 코딩해서 움직임을 감지하는 장치를 만들어 볼 거예요. 생각만 해도 정말 설레지 않나요?
Slide 2: PIR 센서 회로 구성하기
본격적으로 회로를 만들어 볼 시간이에요. 슬라이드 이미지를 보면 아시겠지만, 생각보다 정말 간단해서 초보자분들도 금방 따라 하실 수 있답니다.
챙겨야 할 준비물
- 아두이노 UNO
- PIR 센서
- 작은 브레드보드
- 점퍼선 3개 (회로 연결을 위해 필요해요!)
세상 간단한 회로 연결 방법
PIR 센서는 핀이 3개뿐이라 연결이 아주 간단해요. 점퍼선 3개만 꽂으면 하드웨어 준비는 끝이랍니다!
가장 중요한 점! 센서의 핀이 튀어나온 쪽을 잘 보면 VCC, GND, SIG(또는 OUT)라고 작은 글씨가 쓰여 있어요. 이 글씨를 꼭 확인하고 정확한 위치에 연결해야 해요.
- VCC ➡️ 아두이노 5V
VCC는 센서에 전원을 공급하는 핀이에요. 아두이노의 5V 핀에 연결해주세요.
- GND ➡️ 아두이노 GND
GND는 접지(Ground) 핀입니다. 아두이노의 GND 핀에 연결합니다.
- SIG (또는 OUT) ➡️ 아두이노 11번 핀
SIG(Signal)는 센서가 감지한 신호를 아두이노에게 보내주는 역할을 해요. 우리는 아두이노의 디지털 11번 핀에 연결할게요.
어때요, 정말 간단하죠? 이제 하드웨어는 완성됐으니 코드를 작성하러 가볼까요?
Slide 3: 움직임 감지 코드 분석하기
자, 이제 아두이노가 PIR 센서의 신호를 알아들을 수 있도록 코드를 작성해 줄 차례입니다. 이번 코드는 이전에 다뤘던 센서들과 아주 결정적인 차이점이 있어요.
아날로그와는 다르다! 디지털 입력의 특징
기억나시나요? 빛 센서나 수분 센서는 "얼마나 밝은지", "얼마나 촉촉한지"를 0부터 1023까지의 세밀한 숫자로 알려줬어요. 이걸 우리는 analogRead() 함수를 써서 읽었죠. 이런 걸 '아날로그 입력'이라고 해요.
하지만 PIR 센서는 달라요. 이 친구는 딱 두 가지만 말할 수 있거든요.
- "움직임이 있다!" (1, HIGH)
- "움직임이 없다!" (0, LOW)
이렇게 딱 두 가지 상태(0 또는 1)로만 신호를 주는 것을 '디지털 입력'이라고 부릅니다. 그래서 우리는 analogRead() 대신 digitalRead() 라는 새로운 함수를 사용하게 될 거예요.
움직임 감지 전체 코드
| 01 | |
| 02 | |
| 03 | void setup() { |
| 04 | pinMode(11, INPUT); |
| 05 | Serial.begin(9600); |
| 06 | } |
| 07 | |
| 08 | void loop() { |
| 09 | int sensorValue = digitalRead(11); |
| 10 | Serial.println(sensorValue); |
| 11 | delay(1000); |
| 12 | } |
코드 핵심 요약 (한 줄씩 파헤치기)
pinMode(11, INPUT);
- 아주 중요한 부분이에요! 디지털 핀을 사용할 때는 아두이노에게 이 핀을 '신호를 읽는 용도(INPUT)'로 쓸 건지, '신호를 내보내는 용도(OUTPUT)'로 쓸 건지 미리 알려줘야 해요. 우리는 센서 값을 읽을 거니까
INPUT으로 설정했어요.
int sensorValue = digitalRead(11);
- 오늘의 주인공,
digitalRead() 함수가 등장했어요! 이 함수는 11번 핀의 상태를 읽어서 전기가 들어오고 있으면 1(HIGH), 안 들어오고 있으면 0(LOW)을 반환해 줍니다. 그리고 그 값을 sensorValue라는 변수에 저장하는 거죠.
Serial.println(sensorValue);
- 방금 읽은
sensorValue 값(0 또는 1)을 컴퓨터 화면(시리얼 모니터)에 출력해 주는 코드예요.
delay(1000);
- 1000밀리초, 즉 1초에 한 번씩 센서 값을 측정하도록 잠시 쉬어가는 시간이에요.
실행 결과 확인하기
코드를 아두이노에 업로드한 뒤, 시리얼 모니터를 켜보세요! 아무도 움직이지 않고 가만히 있으면 0이 계속 출력될 거예요. 그러다 센서 앞에서 손을 흔들거나 몸을 움직여 보세요. 그 순간, 숫자가 1로 바뀌는 것을 확인할 수 있을 거예요!
💡 틴커캐드(Tinkercad) 사용자 꿀팁!
시뮬레이션을 시작한 후, PIR 센서를 클릭하면 감지 영역이 나타나요. 그 안에 있는 초록색 점을 마우스로 드래그해서 움직이면 움직임이 감지된 것으로 인식된답니다.
오늘은 PIR 센서를 이용해 움직임을 감지하는 방법을 배웠어요. 특히 아날로그 입력과 다른 '디지털 입력'의 개념과 digitalRead() 함수의 사용법을 익혔죠.
단순히 0과 1만 읽는 것 같지만, 이 간단한 원리로 현관등, 침입 경보기 등 우리 생활 속 다양한 자동화 장치를 만들 수 있답니다. 정말 멋지지 않나요? 오늘 배운 내용을 바탕으로 '움직임이 감지되면 LED 켜기' 같은 응용 프로젝트에 도전해보는 것도 좋은 공부가 될 거예요!
궁금한 점이 있다면 언제든 댓글로 질문해주세요. 그럼 다음 포스팅에서 더 재미있는 주제로 만나요! 😊
댓글 없음:
댓글 쓰기