A PHP Error was encountered

Severity: Notice

Message: Undefined index: HTTP_ACCEPT_LANGUAGE

Filename: core/KF_Controller.php

Line Number: 155

적외선 인체감지 센서 모듈

부품설명

자주 사용하는 부품들의 사용법에 대하여 알아봅니다.

적외선 인체감지 센서 모듈

2014-08-05 15:16:54

개요

적외선 인체감지 센서 모듈을 사용해 봅시다.

적외선 감지 센서는 CCTV쪽에서 많이 쓰인다.
건물 천장에서 흔히 볼 수 있는 달려있는 적외선 열감지기에도 이런 센서모듈이 사용되고



 
센서과 돔모양이 비슷한 모양의 열선감지기도 실생활에서 많이 쓰인다.
아두이노 적외선 인체 감지센서 사용법을 알아보고 이런 감지기를 한번 만들어보자.



 

 

필요한 사전지식

Serial Communication

 

부품 목록

 

 

NO 부품명 수량 상세정보
1 아두이노  1  오렌지 보드
2 적외선 인체감지 센서  1  
3 케이블    
부품명
아두이노 
적외선 인체감지 센서
케이블
부품사진





적외선 인체 감지 센서

 

  • 유효 감지 거리 : 7m
  • 감지 각도 : 120도
  • 작동 전압 : 5V - 20V
  • PCB Dimension : 32mm*24mm

 

하드웨어 making

브레드 보드

 

전자 회로도

 

 

소프트웨어 coding

 

// 적외선 센서 핀번호 선언
int motion = 2; 
// 13번 고정 LED 핀번호 선언
int light = 13; 

void setup() {
	// 적외선센서의 핀을 INPUT모드로 선언
  	pinMode(motion,INPUT); 
  	// 13번LED센서의 핀을 OUTPUT모드로 선언
  	pinMode(light, OUTPUT); 
	// 시리얼 통신 속도 설정
  	Serial.begin(9600);
}

void loop() {
	// 13번 LED off
	digitalWrite(light,LOW); 
	
	delay(1000);
	
	// 적외선 인체감지 센서에서 값을 읽는다
	int sensor = digitalRead(motion); 
	// 센서값을 시리얼 모니터에 출력
	Serial.println(sensor); 
	
	// 센서값이 HIGH(1)일 경우 13번 LED를 한번 깜빡인다
	if (sensor == HIGH) { 
		digitalWrite(light, HIGH); 
		delay(500);
		digitalWrite(light,LOW);
		delay(500);
	}
}

 

 

 

 

소스코드 설명 

 

loop위에서는 핀번호의 선언과 setup()에서는 각각의 핀에 대한 Mode를 설정한다. 13번핀에서는 LED를 출력하기에 OUTPUT모드로 설정하고 적외선 센서가 연결된 2번핀에서는 센서값을 읽어야 하기 때문에 INPUT모드로 설정한다. 통신 속도는 기본9600으로 설정해준다.
 

void loop() {
  digitalWrite(light,LOW); // 13번 LED off
  
  delay(1000);
  
  int sensor = digitalRead(motion); //적외선 인체감지 센서에서 값을 읽는다
  Serial.println(sensor); //센서값을 시리얼 모니터에 출력
  
  if(sensor == HIGH) { //센서값이 HIGH(1)일 경우 13번 LED를 한번 깜빡인다
    digitalWrite(light, HIGH); 
    delay(500);
    digitalWrite(light,LOW);
    delay(500);
  }
}


loop에서는 센서값에 따라 13번 LED를 깜빡이게 되는데 센서값을 읽어 1이 출력될 경우에는 if문을 통해 13번 LED를 한번 깜빡이게 되고 센서값이 0일 경우에는 if문을 무시한채 loop문을 반복하게 된다. 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

아두이노, 적외선 센서, 초급

김원석 2015-05-14 00:32:57

안녕하세요. 글 잘읽었습니다 ㅎㅎ
다름이 아니라 제가 지금 공학설계과목 시간에 만들고 있는것이 딱 이 글에 나와있는 것인데요
제가 만들 것은 led가 브레드보드에 여러개(10개 가량) 연결되어있는 것이라
코드를 어떻게 사용해야 할지 막막해서요... 여러개일 경우 코드를 어떻게 쓰면 좋을까요?
물론 적외선센서가 10개 모두를 깜빡이도록 값이 설정되도록요..
답변 부탁드립니다.

김원석 2015-05-14 00:37:32

그리고 추가로 한번 인식될 때 15초 가량 led가 켜져있는 것으로 세팅하려는데
어떤 코드를 사용해야하는지 알려주시면 감사하겠습니다ㅎㅎ

수박쨈 2015-05-15 11:08:06

@김원석 LED를 어떻게 연결하느냐에 따라 방법은 달라집니다.
LED하나를 각각 아두이노 핀에 연결하는 경우에는(예를 들어 디지털 2번부터 10번까지 연결했을 경우)
for(int i = 2; i<=10; i++) {
digitalWrite(i, HIGH);
}
이런식으로 나타 낼 수 있고

아두이노 핀 하나에 여러개의 LED를 연결하는 경우에는 그 핀에 HIGH값을 넣어주면 됩니다. digital(핀번호, HIGH)

수박쨈 2015-05-15 11:12:24

LED를 15초간 켜져 있게 하려면 제일 간단한 방법은 delay(15000)을 주어서 15초간 HIGH상태를 유지하다가
LOW로 바꾸는 방법이 있습니다. 코드로 구현한다면

digitalWrite(LED핀번호, HIGH);
delay(15000);
digitalWrite(LED핀번호, LOW);

위와 같은 방법으로 구성이 가능합니다. 위와 같은 방법의 단점은 딜레이를 15초를 줌으로써 delay(15000)에서 코드는 15초간 멈춰있게 됩니다. 그렇기 때문에 LED가 켜져 있는 동안에는 센서에서는 아무런 감지를 할 수 없습니다.

아니면 타이머 인터럽트를 사용하여 인식될 경우에는 인터럽트 함수를 호출하여 LED를 15초간 켤 수 있습니다. 인터럽트함수의 경우에는 mstimer2.h를 보시면 될 듯 합니다.
인터럽트 함수는 delay(15000)과는 다르게 동시에 돌아갈 수 있기 때문에 delay()보다는 유연한 프로그래밍이 가능합니다. 링크 아래에 걸어드립니다.

http://kocoafab.cc/tutorial/view/460

김원석 2015-05-17 21:30:08

답변감사합니다!!
다른게 궁금해서 다시 여쭙습니다 ㅜㅜ
제가 지금 조도센서를 이용해서 어두울때 켜지고 밝을 때 켜지는 led를 만들었는데
코드 소스가
#define LED11 11
#define LED10 10
#define LED9 9
#define LED8 8
#define LED7 7
#define LED6 6
#define LED5 5
#define LED4 4
#define LED3 3
#define LED2 2
int val = 0;


void setup() {

pinMode(LED11, OUTPUT); pinMode(LED10, OUTPUT);
pinMode(LED9, OUTPUT); pinMode(LED8, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED6, OUTPUT);
pinMode(LED5, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED2, OUTPUT);



}

void loop() {

val = analogRead(0);

analogWrite(LED10, val/9); analogWrite(LED11, val/9);
analogWrite(LED9, val/9); analogWrite(LED8, val/4); analogWrite(LED7, val/4); analogWrite(LED6, val/9);
analogWrite(LED5, val/9); analogWrite(LED4, val/4); analogWrite(LED3, val/9); analogWrite(LED2, val/4);

delay(10);
}
이렇게 됩니다.
이상태에서 적외선센서를 사용해서 어두울 때 적외선센서가 사람을 인지하고 불이 켜지도록 만들려면
코드를 어떤식으로 바꿔야하나요?? if가 어디쯤에 들어가야하는지도 모르겠고 코드를 보시면 각각의 led를 하나씩 다 지정을 해주었는데 이 방법말고 어떤식하는게 좋을까요??
적외선센서가 배송이 안와서 시도를 못해보고 있는데 코드를 어떻게 사용하면 좋을지 알려주시면 정말 감사하겠습니다.

수박쨈 2015-05-18 19:31:47

변수 val이 조도센서의 값을 나타낸다면 그 아래쪽에 if문이 위치해야 겠죠
if(val <= 조도센서의 값) {
int IR = digitalRead(2);
if(IR == 1) {
LED모든 불 ON
}
}
위와 같은 방법으로 작성하시면 될 듯 합니다.

수박쨈 2015-05-18 19:34:25

코드를 하나하나 다 알려줄 수는 없는 점은 양해 부탁드립니다.

다만 알고리즘 자체는 설명해 드릴 수 있습니다.

조건문을 통해 조도센서의 값이 일정값 미만일 경우(어두울 경우) -> 적외선 인체 감지 센서로 값을 측정 -> 측정한 값이 사람을 측정한 값이 나올 경우 -> LED의 모든값을 digitalWrite(핀번호, HIGH)로 변경하여 LED를 켠다

위와 같은 방법으로 코드를 수정해 나가시면 됩니다. 가장 기초적인 방법인 만큼 어려운 부분이 아니니 쉽게 이해할 수 있을거라 생각합니다.

수박쨈 2015-05-18 19:35:32

그리고 코드를
for(int i = 2; i <=11; i++) {
 pinMode(i, OUTPUT)
}

이렇게 for문을 통해 묶어서 사용하시면 코드가 더 간결해지지 않을까 생각합니다^^;

김원석 2015-05-28 21:13:49

다시 물어서 죄송합니다.. 다름이 아니라 도서관에서 책을 빌려서 코드를 사용하려고 해봤는데 잘안되서 질문드립니다 ㅜㅜ 적외선센서가 인식을 하고 불이 켜져야 하는데 지금 만들어진것이 어두울때 조도센서가 인식이 되어 불이 10초간 켜지는 것까지 만들어졌습니다. 코드는 아래와 같습니다.
int val=0,i=0,timer=0;

float f;

//

void setup(){

for(i=2;i<=11;i++)pinMode(i, OUTPUT);

}

//

void loop(){

val=analogRead(0);

f=(float)val*5.0/1023.0; // 전압으로 변경


if(f>2.5){

for(i=2;i<=11;i++)digitalWrite(i,HIGH);
delay(10000);
}

else{

for(i=2;i<=11;i++)digitalWrite(i,LOW);

}

}

물어볼 것이 적외선센서가 인식을 하고 불빛이 켜지는 것으로 만들어야 하는데 (물론 어두울 때 조도센서가 인식을 하면) 코드의 시작을 어떻게 넣어햐할지 감이 안와서 질문드립니다. if를 사용해야 하는데 지금 조도센서는 아날로그로 들어가있고 적외선센서는 디지털로 들어가 있습니다.. int로 적외선센서를 잡는 부분부터 막히네요;; int로 센서잡고 void setup에서 pinmode input을 잡아준다고 해도 void loop에서 if라든가 어떻게 사용해야 할지 모르겠습니다 하나하나는 아니라도 어떤 코드로 시작하면 좋을지라도 부탁드립니다 ㅠㅠ 적외선센서 구매 링크는 http://www.daduino.co.kr/product/detail.html?product_no=197&cate_no=66&display_group=1 이곳입니다. 혹시 참고가 될지 몰라 링크겁니다..