티스토리 뷰

SHARP GP2Y0A21YK0F



아두이노를 통해 거리를 측정하는 방법에는 여러 센서를 이용할 수 있다. 그중에서 저렴하면서도 쉽게 구할 수 있는 거리센서에는 초음파 센서와 적외선 센서가 있다. 적외선 센서는 아두이노 보드와 적외선 센서만 있다면 쉽게 거리측정을 할 수 있지만 정확한 측정을 하기 위해서는 정확한 코딩이 필요하다. 


int analogPin = 0;


 void setup(){


     Serial.begin(9600);


 }


 void loop(){


     int val;


     int volt = analogRead(analogPin);


     val = (6762/(volt-9))-4;  // 읽어들인 아날로그 전압값을 거리로 변환해주는 부분


     Serial.println(val);


     delay(100);


 }


위 소스는 일반적으로 쉽게 구할 수 있는 적외선 센서의 프로그래밍 소스이다. 적외선 센서가 일정한 거리에 있는 물체로부터 반사된 값을 거리로 읽어들이는데에 있어서 전압으로 출력하기 때문에 그 전압값을 거리로 변환하여 출력해주는 코딩이 필요하다. 하지만 위 소스는 전압에 대한 거리를 직선적으로 근사화하였기 때문에 거리에 따른 실제 출력전압과 상당한 오차가 발생하게 된다. 따라서 정확한 거리측정이 힘들어진다. 


float Vcc = 5.0;

float dig_v1;

float dist1;


 void setup()

 {


     Serial.begin(9600);


 }


 void loop()

 {

     dig_v1 = Vcc * analogRead(A0)/1023;

     dist1 = 3.6473*(1/pow(dig_v1,3)) - 9.6037*(1/pow(dig_v1,2)) + 36.39*(1/dig_v1) - 4.1143; // 실험을 통해 얻은 거리별 측정 전압의 방정식

     Serial.println(dist1);  // dist1값을 출력

    

     delay(500);


 }


그렇기 때문에 보다 정확한 거리측정을 위해 위의 소스를 사용하는 것이 좋다. 위 소스는 10cm부터 80cm까지 각 거리에 따라 출력되는 전압을 바탕으로 거리를 출력할 수 있는 다항식을 만들어 얻은 소스이다.


소스에 대한 설명은 다음과 같다. 먼저, 적외선 센서에 공급되는 전압이 5V이므로 Vcc를 5로 선언해준다. 아두이노는 읽어들인 값을 1024개의 값으로 나누어 표현하게 된다. 그렇기 때문에 읽어들인 값을 1023으로 나누게 되고 이 값에 5를 곱하게 된다면 적외선센서로부터 출력되는 전압값이 된다. 그리고 이 읽어들인 전압값을 dist1이라는 방정식을 통해 거리를 출력하게 된다. 


센서마다 오차가 있을 수 있으므로 보다 정확한 측정을 위해서는 실제 측정을 통해 방정식의 조정이 필요할 것으로 보인다. 특히, 흔히 쓰는 SHARP의 GP2Y0A21YK0F가 아니라 더 먼 거리를 측정할 수 있는 GP2Y0A02YK0F, GP2Y0A710K0F를 사용하게 된다면 위 소스와는 다른 방정식을 실제 실험을 통해 얻어야 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함