?>

Hard Copy World

HCW

Arduino beginner

Home > Learning >

Arduino beginner

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

페이지 정보

작성자 하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일14-10-20 17:02 조회22,158회 댓글2건

본문

 

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

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

 

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

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

 

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 시켰지만.. 실제 생활 곳곳에 사용하는 모션 감지 조명을 만든겁니다!!

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

http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_sensor&wr_id=9

 

 

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

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

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

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


하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

모든 전통이 한 때는 오해를 면치 못했다. 마찬가지로 모든 아이디어는 한 때는 비웃음을 면치 못했다. -홀브룩 잭슨 ::::: 느닷없이 떠오르는 생각이 가장 귀중한 것이며, 보관해야할 가치가 있는 것이다. -베이컨 ::::: 미리 숙고하면 힘든 일도 그저 실행에 옮기는 순간 쉬워진다. - 로버트 M. 피어식

추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

델제노님의 댓글

델제노 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

전역변수 ' int val = 0; "은 왜 선언한건지 이해가 가질 않네요ㅠㅠ
loop에서 val = digitalRead(input); 이렇게 선언하면 0에다가 디지털핀 '2'의 값을 넣는 건가요?
그냥 ' int val = digitalRead(input); 이렇게 선언하면 안되는 지 궁금합니다.

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

val 변수는 전역으로 선언 안해도 상관 없습니다. int val=0; 은 0으로 초기화 한다는 의미이고 val = digitalRead(input); 은 디지털 핀에서 읽은 HIGH/LOW 값을 val 변수에 저장한다는 뜻입니다.

말씀하신 것처럼 int val = digitalRead(input); 이렇게 사용하시면 됩니다.
전역으로 선언할 때는 이전 loop() 실행할 때 입력받은 값이 무엇인지 확인하는 용도인데, 이 예제에서는 그렇게 사용하지 않으니 무시하셔도 됩니다.