#10/12 아두이노 로봇 HowTo

2022. 11. 4. 00:31IT

적외선 거리 측정 모듈 (HS-IRSM)

적외선 거리 측정 모듈은 다음과 같이 생겼다. 핀의 연결은 하나의 데이터 라인을 아두이노와 연결을 하고 전원을 각각 연결한다.

 

 

 

LED가 두 개가 있어 한쪽에서 적외선을 내 보내고 한쪽에서는 받는다. 지금까지 썼었던 초음파 센서는 음파임에도 우리가 들을 수 없었고 적외선은 우리가 볼 수 있는 가시광선 영역에서 벗어나기 때문에 볼 수 없다. 하지만 적외선의 경우에는 디지털 카메라로 볼 수가 있다. 다음의 사진은 모듈을 로봇의 전면 하단부에 장착을 하고 전원을 준 상태로 사진을 찍은 것이다. 투명했던 LED 한쪽에서 빛이 나옴을 볼 수 있다. 이렇게 적외선을 사용하는 경우에는 카메라로 적외선이 나오는지 여부는 확인을 할 수 있다. 적외선을 많이 사용하는 것이 리모콘이므로 TV 리모콘의 앞 부분을 핸드폰의 카메라로 보면 적외선이 나옴을 확인 할 수 있다.

 

 

코드는 다음과 같다. 코드 내에 설명을 넣어놨기 때문에 별다른 설명이 없어도 이해가 될 것으로 생각된다. 입력은 7번 핀으로 받고 핀은 센서로 부터 값을 받아 읽는 것이기 때문에 input 모드로 설정을 했다. digitalRead 함수로 값을 읽어 0 또는 1을 출력한다.

 


// 적외선 장애물 감지 센서는 디지털 7번 핀으로 설정합니다.
int infrared = 7;

void setup(){
	// 적외선 장애물 감지 센서 핀을 INPUT으로 설정합니다.
	pinMode(infrared, INPUT);
}

void loop(){
	// 적외선 감지 센서 부터 센서값을 읽습니다.
	// 감지되면 0, 감지되지 않으면 1이 나옵니다.	
	int state = digitalRead(infrared);

	// 측정된 센서값을 시리얼 모니터에 출력합니다.
	Serial.print("Infrared = ");
	Serial.println(state);
}

앞의 사진과 같이 로봇의 하단에 센서를 장착을 했기 때문에 로봇이 낮은 부분에서 물체가 감지되면 0을 출력할 것이고 0을 받으면 로봇 앞에 장애물이 있는 것이므로 회피하여 주행하도록 변경을 해 주면 되겠다. 앞과 같이 코딩을 하고 센서의 근처로 장애불을 가져가면서 어느 거리에서 값이 0으로 바뀌어 장애물을 감지하는지 확인을 한다. 거리를 확인하고 센서에 있는 가변저항을 돌려가며 적당한 거리에서 물체가 감지되도록 설정을 한다.

적당한 거리에 물체를 두고 가변저항을 돌려가며 센싱이 되는지 시리얼 창을 통해 보면서 거리를 확정합니다.

 

 

시리얼 창이 없이도 물체가 감지되었는지를 확인하는 방법이 있다. 모듈에 있는 빨간색 LED가 더 밝게 빛나면 물체가 감지된 것이다.


void loop(){
	// 적외선 감지 센서 부터 센서값을 읽습니다.
	// 감지되면 0, 감지되지 않으면 1이 나옵니다.
	int state = digitalRead(infrared);
	if(state == 0)
	{
		Robot_Back();
		delay(200);
		Robot_180Turn();
		return;
	}

	// 기존 코드
    .
}

거리 지정이 완료되고 난 후에 코드는 앞과 같이 바뀌었다. 코드를 보면 물체가 감지되면 로봇을 200미리 세컨드 만큼 후진을 한 뒤에 180도 회전을 하도록 했다. 그리고 loop 함수를 return을 통해 종료했다.

그러면 다음번에 loop 함수가 동작을 할 때에는 전면의 물체를 초음파 센서를 이용해 확인을 하고 상황에 따라 로봇이 자율 주행을 계속하게 된다.

반응형

'IT' 카테고리의 다른 글

#12/12 아두이노 로봇 HowTo  (1) 2022.11.04
#11/12 아두이노 로봇 HowTo  (2) 2022.11.04
#9/12 아두이노 로봇 HowTo  (0) 2022.11.04
#8/12 아두이노 로봇 HowTo  (0) 2022.11.04
#7/12 아두이노 로봇 HowTo  (0) 2022.11.04