반응형

【 아두이노 센서#26】 IR 적외선 센서 거리 LED 레벨바 만들기

 지난 시간 적외선(IR) 센서인 GP2Y0A41SK의 기본 사용법에 대해 알아 보았다. 이번 시간에는 거리에 따른 LED 레벨바를 만들어 보려 한다.  과거 LED Latch 회로를 다루어 보았는데 IR 센서와 연결하면 간단히 구현가능하다. 


▶ 선수 학습 :

1. (센서)#9 시프트 레지스터 이해하기 1 (Latch 회로이해1 강좌보기클릭  2(센서)#10 나이트라이더 만들어보기 (Latch 회로이해2)   강좌보기클릭  
3(센서)#25 IR적외선 센서 다루기     (IR 센서 기초)     강좌보기클릭  


▶ IR 센서 사양 및 동작 특성


▶ 실습 목표 :  

1. IR 센서의 작동 방식에 대해 이해하고 응용할 수 있다.

2. 센서로 부터 얻어 지는 아날로그 값을 디지털값 및 전압값으로 바꾸어 거리값으로 환산할 수 있다.

3. 얻어진 거리값을 시리얼 모니터와 LED로 표시할 수 있다. 

4. 시프트 레지스터 기능(74HC595) IC를 이용하여 거리에 따라 LED가 켜지도록 레벨바 형태를 구현 할 수 있다.


▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)



▶ 실습 절차  : 


1.    위 회로 연결도를 참고하여 부품들을 연결한다
2.    앞선 실습 자료를 참고하여 IR센서로 부터 측정되는 값을 확인 한다음, LED 레벨이 반응하기 원하는 수치값(거리)의 최소값과 최대값을 정한다.(maxVal값  , minVal 값)
3.    프로그램을 동작시켜보고 maxVal값과 minVal값을 조절해 본다.

4.   가까울 수록 LED레벨이 켜지는 것을 멀수록 LED레벨이 켜지도록 프로그램을 수정해본다. 

▶ 프로그램 코드 및 설명 : 

/* 적외선 센서 (IR sensor) LED 레벨바 응용 프로그램       */
/*  by RASIno , http://rasino.tistory.com  */

const int SER=8;   // 시프트 레지스터로 데이터를 입력하는 8번 핀 SER 상수 정의

const int LATCH=9;  //LATCH LATCH 상수 정의

const int CLK= 10;  //CLOCK CLK 상수 정의

const int DIST=0; //아날로그 입력 0번 핀에 연결된 IR 센서의 장애물 거리값

 //LED 거리값 패턴을 저장한 vals 배열 정의

int vals[9]={0,1,3,7,15,31,63,127,255};

int maxVal=600; //IR 센서의 장애물 거리 최대값

int minVal=260;   //IR 센서의 장애물 거리 최소값

//###  IR 센서의 최대, 최소값은 실제 측정해보고 원하는 값으로 수정 필요


void setup( ) {

  Serial.begin(9600); //  시리얼 통신 시작

  pinMode(SER, OUTPUT);

  pinMode(LATCH, OUTPUT);

  pinMode(CLK, OUTPUT);

}


void loop( ) {

  int distance=analogRead(DIST);  //IR 센서에서 장애물 거리값을 읽음

  Serial.println(distance);          // 시리얼 모니터로 IR값을 확인해 본다

  distance=map(distance, minVal, maxVal, 0, 8);

  distance=constrain(distance,0,8); //거리값 범위 조정

  digitalWrite(LATCH,LOW);  //LATCHLOW 입력

  shiftOut(SER, CLK, MSBFIRST, vals[distance]); //거리값에 맞는 데이터전송

  digitalWrite(LATCH, HIGH);  // 거리에 따라 LED가 켜지도록 High 입력함

  delay(10);     // 센서가 장애물을 감지하는 시간 간격 지정

}


▶ 실행영상 :  

(전체화면 보기로 보세요)


▶ 아두이노 파일(실습1. 다운) :

Latch_IR_Sensor.ino


반응형