아두이노 기초 강좌 8 – 모션감지센서

아두이노 기초 강좌는 아두이노를 처음 접하시는 전자분야 비 전공자를 위한 강좌입니다. 이해를 위해서는 간단한 프로그래밍 지식이 필요할 수 있습니다. 프로그래밍이 처음이라면 [아두이노 프로그래밍 기초] 강좌를 먼저 읽으시길 권해 드립니다.

=============================================================

이전 강좌까지 아두이노를 사용하기 위한 가장 기본적인 내용들을 다루었습니다. 이제 슬슬 센서들을 아두이노에 달아서 활용성을 점점 높여보도록 하겠습니다. 사용하기 쉽고 활용도가 높은 센서부터 다루겠습니다.

제일 먼저 살펴볼 예제는 단 하나의 디지털 핀만으로 활용할 수 있는 센서입니다.

1. 적외선 모션 감지 센서

Pyro-electric IR 모션센서는 우리가 주변에서 쉽게 볼 수 있는 센서입니다. 아파트 현관, 복도 현관에 사람이 지나가면 자동으로 등이 들어오죠? 이게 IR(InfraRed, 적외선) 을 이용한 모션감지 센서입니다. 이 센서 앞에 사람이 지나가면 적외선의 변화가 생길 것이고 이걸로 사람이 지나갔다는 것을 감지하는 겁니다. 모션센서라고 했지만 복잡한 몸의 동작을 감지하는 것이 아니라 사람이 지나갔다.. 정도만을 감지합니다.

2. 연결 방법

복잡한 처리는 센서 자체에서 모두 해결해주므로 이 센서와 아두이노는 3개의 선만 연결하면 됩니다. 그 중 2개는 +, – 전원선이므로 실제 데이터를 받는 선은 하나 뿐입니다.

proximity_pirardbb

노란색 선이 모션 감지 결과를 받는 데이터 선입니다. 아두이노 디지털 2번 핀으로 연결되었습니다. 이제 코드에서 이걸 어떻게 처리하는지 한번 보겠습니다.

3. 소스코드

/*
 * PIR sensor tester
 */
 
int ledPin = 13;                // choose the pin for the LED
int inputPin = 2;               // choose the input pin (for PIR sensor)
int val = 0;                    // variable for reading the pin status
 
void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
}
 
void loop(){
  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
  }
}


우리가 주의 깊게 봐야 할 코드는
“모션 감지 결과가 들어오는 2번 핀을 어떻게 사용하는가” 입니다.

이 예제에서는 모션 감지 결과를 아두이노에 내장된 LED로 표시해줍니다. 아두이노에 내장된 LED는 13번 핀으로 제어할 수 있음을 기억하실겁니다.(!!)

int ledPin = 13;                // choose the pin for the LED

그리고 모션 센서에서 신호를 받기 위해 2번 디지털 핀을 사용합니다.

int inputPin = 2;               // choose the input pin (for PIR sensor)

이 핀들을 setup() 함수에서 초기화를 해줘야겠죠. 13번 핀은 OUTPUT (LED로 전원 출력)모드로, 2번 핀은 INPUT (결과값 받기) 모드로.

void setup() {
  pinMode(ledPin, OUTPUT); // declare LED as output
  pinMode(inputPin, INPUT); // declare sensor as input
}


이제 센서, LED 사용을 위한 준비는 끝입니다. loop() 함수를 반복하면서 2번 핀으로 들어오는 신호를 계속 체크해서 LED로 결과를 출력해주면 됩니다.

2번 핀으로 읽은 digital 값이 HIGH 이면 모션이 감지된 상태이고, LOW 이면 모션이 감지되지 않은 상태입니다. 이 결과 값은 모션 센서가 알아서 처리해서 보내줍니다. 우리는 HIGH, LOW 상태를 판별해서 LED를 on/off 시키기만 하면 됩니다.

digitalRead() 함수를 이용해서 2번핀의 신호를 읽고, 모션이 감지될 때 digitalWrite() 함수를 이용해서 13번 핀에 HIGH 를 주면 5V 전원이 흘러서 LED가 켜지겠죠.

  val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
  } else {
    digitalWrite(ledPin, LOW); // turn LED OFF
  }


완성입니다. 전구가 아니라 작은 LED를 on/off 시켰지만.. 실제 생활 곳곳에 사용하는 모션 감지 조명을 만든겁니다!!

모션 감지 센서에 대한 보다 자세한 내용은 아래 링크를 참고하세요.

https://www.hardcopyworld.com/?p=461

===============================================================

이 문서는 작성자의 동의없이 개인적인 목적 외의 상업적인 목적으로 활용되어서는 안됩니다.

이 문서의 일부 혹은 전체를 수정, 삭제, 재배포 하여서는 안됩니다.

작성자 : GodsTale (godstale@hotmail.com)  

You may also like...