라즈베리 파이용 DIY 적외선 모션 센서 만들기 – 단계별 가이드
소개
2015년 7월 콜로라도 주립대학에서 고교 인턴십을 하며 라즈베리 파이용 단거리 적외선 근접 센서를 설계했습니다. 이 센서는 라인 팔로잉 로봇, 모션 활성화 카메라 등에 전원을 공급할 수 있습니다.
아래는 구성요소부터 코드까지 신뢰성 높고 저렴한 적외선 모션 감지기를 만드는 완전한 가이드입니다.
준비물
- 라즈베리 파이 (GPIO 탑재 모든 모델)
- 단면 천공 프로토타이핑 보드 (모든 크기)
- 브레드보드 1개 (프로토타이핑용)
- 코팅 점퍼 와이어 (빨강, 검정, 노랑)
- IR LED 이미터 1개
- IR LED 수신기 (포토트랜지스터) 1개
- 표준 LED 1개 (모든 색상) – 시각적 표시용
- 파이 5V GPIO 핀에서 5V 전원 공급
- LM358N9013 듀얼 연산 증폭기 1개
- 1kΩ 트리머 포텐셔미터 1개
- 저항: 39Ω, 1kΩ, 10kΩ, 6.8kΩ, 3.5kΩ
- 선택 사항: 전기 테이프, 헤더 핀 3개, 암-암 점퍼 케이블, 와이어 스트리퍼, 커터, 납땜 인두, 납
1단계 – 브레드보드에서 프로토타입
아래 링크된 회로도를 따라 파이의 5V GPIO 핀으로 회로에 전원을 공급합니다. LM358 출력은 저항 분배기를 통해 3.3V로 낮춰 파이의 GPIO 입력 한계 내에 유지합니다.
배선 후 암-암 점퍼 케이블로 브레드보드를 파이에 연결합니다. LED가 켜지지 않으면 포텐셔미터를 오른쪽으로 돌려 LED가 켜질 때까지 조정합니다. 전원 투입 직후 켜지면 왼쪽으로 돌려 LED가 꺼지게 한 후 다시 살짝 오른쪽으로 돌려 LED가 켜지는 지점에서 멈춥니다.
2단계 – 천공 보드로 이전
프로토타입이 작동하면 구성품을 천공 보드에 납땜합니다. 전원용으로 명확한 '+'와 '-' 측면을 유지합니다. 각 부품을 제자리에 납땜하고 필요한 연결에 점퍼 와이어를 사용합니다. 접지, 출력, 전원을 헤더 핀에 연결합니다. 여분 와이어를 정리하고 멀티미터로 테스트해 연속성을 확인합니다.
선택 사항: IR LED를 전기 테이프로 감싸 빔을 좁히고 유효 범위를 연장합니다.
3단계 – 파이 프로그래밍
다음 C 프로그램(WiringPi 필요)을 사용해 모션 감지 시 파이 카메라를 트리거합니다. 파일 이름과 지연 시간을 입력받아 사진을 촬영합니다.
#include <stdio.h>
#include <string.h>
#include <wiringPi.h>
#define SEN 0
#define MAXSIZE 50
#define A "Y"
#define B "O"
int main() {
wiringPiSetup();
pinMode(SEN, INPUT);
char answer1[MAXSIZE];
char answer2[MAXSIZE];
char name[MAXSIZE] = B;
char firstprefix[MAXSIZE] = "raspistill -hf -t ";
char secondprefix[MAXSIZE] = "xdg-open ";
printf("\nDo you want to name your picture first? (Enter Y/N and press ENTER): ");
scanf("%s", answer1);
if(strcmp(answer1, A) == 0){
printf("What do you want to call your video?: ");
scanf("%s", name);
strcat(name, ".jpg");
}
printf("How long do you wish the camera to wait before taking a picture? (Enter time in milliseconds and press ENTER): ");
scanf("%s", answer2);
strcat(firstprefix, answer2);
strcat(firstprefix, " -o ");
if(digitalRead(SEN) == LOW)
printf("\nCAMERA OFF\nError: Please check wiring OR move away from sensor.\n");
else {
printf("\nCAMERA ON\n1. To take picture, stand in front of camcorder.\n2. Your picture will be taken after the specified time.\n3. To view image, enter the command provided.\n\n");
for(;;){
if(digitalRead(SEN) == LOW){
system(strcat(firstprefix, name));
break;
}
}
}
strcat(secondprefix, name);
printf("Type *%s* and press ENTER to view your picture!\n", secondprefix);
return(0);
}
자세한 내용은 원본 프로젝트 페이지 참조: 라즈베리 파이용 DIY 적외선 모션 센서 시스템