중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

엔트리- 적외선 센서(원거리형)

2016-01-06 08:47:33

개요

<적외선의 범위> 출처: http://www.itechone.co.kr/product/pde-E.asp

 

 

적외선은 가시광선이 빨,주,노,초,파,남,보로 프리즘을 통해 나타날 때, 빨강색 바깥쪽에 나타난다고 해서 적외선이라고 부르게 되었습니다. 태양이나 물체가 내는 복사열의 대부분은 이 적외선으로 이루어져있으므로 적외선을 열선이라고 합니다.

적외선의 파장범위는 가시광선의 장파장 끝의 0.76∼0.8㎛를 하단으로 하고, 상단은 1mm정도까지입니다.

 

 

이러한 적외선을 바탕으로 적외선 센서를 사용해 볼까요? 

적외선 센서는 광선을 사용하므로 대상 물체에 초점이 만들어지고, 초점과의 각도를 계산해 물체와의 거리를 환산합니다. 

광선의 속도는 너무 빠르기 때문에 짧은 거리에서 반사되는 진행 시간을 측정하는 것이 매우 어렵습니다. 이런 이유로 광선을 이용한 거리측정은 광선을 송신하고 수신하는 두 개의 눈이  초점을 가지는 조건에서 초점과의 각도를 측정하여 삼각형 기하학으로 계산합니다. 이를 “광삼각법”이라고 합니다.

 

.

<광삼각법> 출처: http://www.ei.co.kr/content/view.asp?idx=15375

 

 

적외선 센서의 동작 원리를 알아 볼까요?.

 

 

<디지털 상태와 아날로그 상태일때의 거리에 따른 전압값의 변화> 출처 - Sharp Datasheet

 

 10cm부근에서 최대의 전압값을 갖다가 거리가 멀어질수록 다시 전압이 감소하는 형태를 띄고 있습니다.

 

 적외선 거리 센서는 적외선을 방출하는 Light emitter부분과 쏘아 올린 적외선이 다시 되돌아올 때 그 빛을 다시 감지하는 Light ditector부분으로 구성되어 있습니다.

적외선 거리센서로 주로 사용하는것은 2가지가 있는데, GP2Y0A21YK(외곽이 둥근 적외선 센서)와 GP2Y0A02YK0F (외곽이 네모난 적외선 센서)를 이용하면 됩니다.

 


<GP2Y0A21YK(외곽이 둥근 적외선 센서)와 회로 연결도>

 

데이터 시트에는 10cm~80cm까지의 거리 측정이 가능하다고 나와있지만 주변 환경에 따른 변수가 많기 때문에 사용해본 결과, 최대 거리보다는 약간 적게 측정이 됩니다. 실질적으로 신뢰가 가능한 거리는 10cm부터 30-40cm까지 거리정도만 신뢰가 가능합니다.

 

<GP2Y0A02YK0F (외곽이 네모난 적외선 센서)와 회로 연결도>

 

 더 먼거리 측정을 하려면, GP2Y0A02YK0F (외곽이 네모난 적외선 센서)를 이용하면 됩니다. 데이터시트 상 측정 범위가 20cm에서 150cm입니다. 더 먼거리를 측정할 수 있겠죠?
 

 

적외선센서는  활용한 기술들이 많이 이용되었지만,  “장거리에서 사용하기 어렵다” 는 단점 때문에 사용되는 용도가 매우 제한적 이였습니다.

이 단점을 역이용하여 장점으로 만든 상품이 바로 적외선 감지센서 분야입니다.

자동차 후방 센서에서 보듯이 전파를 발생하여 물체와 가까워졌을 때 반사파를 인식해 거리를 간접적으로 인식할 수 있는 이 기술은 또 새로운 상품의 아이디어가 되었습니다.

몇 해 전부터 엄청난 인기를 끌고있는 자동 바닥 청소로봇이 바로 그것입니다.

배터리가 떨어지면 혼자 알아서 충전하고 다른 물건과 부딪힘 없이 깨끗하게 마루를 청소해주는 로봇은 가전제품의 새로운 장을 열었다고 합니다.

 

 

 

 

<청소 로봇> 출처:www.irobot.com

 

 

 

 

 

 

미리 보기

적외선 센서를 오렌지 보드에 연결한 모습입니다.

 

 

 

적외선센서에 물체(브레드보드)가 10cm 이내가 되자 오렌지 보드의 led가 켜지는 것을 볼 수 있습니다.

 

 

 

적외선 센서로 부터 물체(브레드 보드)가 멀어지자 불빛이 꺼지는 것을 볼 수 있습니다.

 

 

 

부품목록

 

NO 부품명 수량 상세설명
1 아두이노 1 오렌지 보드
2 적외선 센서(원거리 형) 1 Sharp사 GP2Y0D21YK0F
3 3선 커넥터 1  

 

부품명 아두이노 적외선 센서(원거리 형) 3선 커넥터
부품 사진

 

 

 

 

 

하드웨어 making

 

브레드보드

 

 

 

 

전자 회로도

 

 

 

 

 

엔트리 코딩

 

복잡한 엔트리 코드

엔트리 코드는 이와 같습니다.

위의 ( 21.61 / (volt-0.1696) ) * 1000 이라는 복잡한 값은

적외선 센서로부터 측정 거리값을 읽어 온 후, cm 로 환산하기 위한 식입니다.

그러나 식이 너무 복잡하지 않나요? 그래서 엔트리에서도 변수를 사용해 보겠습니다.

 

 

변수 사용 방법

엔트리의 속성-변수-변수추가를 누르면 아래와 같이 변수이름을 넣어 줄 수 있습니다.

 

<엔트리 변수 추가>

 

순서대로 data, volt, distance를 추가해주면 아래 그림과 같이 화면이 나옵니다.

 

<앤트리 변수 추가_완료>

그림과 같이 변수가 3개 추가된 것을 볼 수 있고, 왼쪽상단에 변수 3개가 추가가 된것을 볼 수 있습니다.

 

<왼쪽상단 변수 추가>

 

엔트리의 블록-자료를 보시면, 변수 data의 값이 생긴것을 볼 수 있습니다. 

 

<블록-자료에 추가된 변수>

변수를 추가했으니, 식을 잘 정리해 주어야죠?

  int data = analogRead(pinNum); //적외선 거리 센서로 부터 측정값을 읽어온다
  int volt = map(data, 0, 1023, 0, 5000); //측정한 volt값을 0에서 5000사이의 값으로 변환
  distance = (21.61/(volt-0.1696))*1000; //측정값을 통해 거리를 계산

라는 코드를 바탕으로  변수를 작성하면, 아래 사진과 같이 엔트리 블럭이 작성됩니다.

 

과정에서 주의해야 할것이있는데, 바로 소괄호 입니다.

(21.61/(volt-0.1696)) * 1000 이라는 식은,

뺄셈을 먼저한 후, 나누기, 그다음 곱하기를 해주어야 되는데요.

이를 나타낼 수 있는게 하는 방법은 바로 뺄셈 블록을 먼저 쓰는 것입니다.

 

뺄셈 블록을 만든후, 앞 부분에 volt를 끌어 넣으면 됩니다.

여기서 살짝 Tip을 드리자면,

그냥 막무가내로 volt 값을 넣으려고 하면, 값이 넣어지지 않을 수 있습니다.

<Tip>

그러므로 살짝 아래에서 위쪽으로 올리면 그림과 같이 하얀색 선이 생기는것을 볼 수 있습니다.

하얀색 선이 생긴 부분에 값을 넣어주면 됩니다.

 

그 다음은 나눗셈 부분이죠?

 

나눗셈 블록을 생성한 후, 값을 변경해 줍니다.

그리고 나눌 것을 뒷부분에 넣어주면 됩니다.

 

그다음은 곱하기 부분이니,

마찬가지로 생성해 준후,

앞부분에 이전에 했던 블록을 넣어주면 됩니다. 

 

그러면, 쨔자잔!

드디어 distance 변수값이 완성되었어요.

 

그럼 완성된 변수들로 값을 넣어 주면,

변수 설정이 완료 되었습니다.

 

전체적인 엔트리 코드를 볼까요? 

 

 

변수를 이용해 깔끔하게 작성된 엔트리 코드

 

 

결과는 10cm 이내가 될 경우,  오렌지보드 13번의 내장 LED가 켜지는 코드입니다. 

그 외의 경우에는, 오렌지보드 13번의 내장 LED는 꺼집니다.

 

int pinNum = A0; //아날로그 0번핀 사용
int distance = 0; //거리값 변수 생성
int ledPin=13;

void setup() {
  Serial.begin(9600); //시리얼 통신 초기화
  pinMode (pinNum, INPUT); //A0번핀을 INPUT으로 설정
  pinMode(ledPin,OUTPUT);  //ledPin OUTPUT으로 설정
}
 
void loop() {
  int data = analogRead(pinNum); //적외선 거리 센서로 부터 측정값을 읽어온다
  int volt = map(data, 0, 1023, 0, 5000); //측정한 volt값을 0에서 5000사이의 값으로 변환
  distance = (21.61/(volt-0.1696))*1000; //측정값을 통해 거리를 계산
  Serial.println(distance); //거리 출력
  
  //거리가 10cm 이내이면 불이 켜지고
  if(distance<10){      
  digitalWrite(ledPin,HIGH);
  }
  
  //거리가 10cm보다 크면 불이 꺼집니다
  else {
  digitalWrite(ledPin,LOW);
  }
  delay(500); //지연시간을 500ms로 설정
  }

<적외선 센서 사용 아두이노 스케치>

kocoafabeditor

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

원거리 적외선 센서, 아두이노, 오렌지보드