#4/12 아두이노 로봇 HowTo

2022. 11. 4. 00:28IT

함수를 만들어보자

앞에서 loop안에 로봇을 전진시키는 코드 네 줄을 넣어서 동작을 시켰다. 그런데 로봇은 전진 뿐만 아니라 후진, 좌회전, 우회전, 멈춤이 추가로 필요할 것이다. 그런데 그 때마다 4줄씩 코드를 넣어야 한다. 그리고 digitalWrite 함수에 HIGH 또는 LOW를 넣어야 하는데 나중에 코드를 보면 이해하기가 어렵다. D1과 D2에 HIGH를 넣어야 멈춤이고 HIGH, LOW를 넣으면 전진이라는 것을 외우고 있지 않은 이상 코드를 이해하기 쉽지 않다. 그래서 각각 전진, 후진, 멈춤, 좌회전, 우회전의 함수를 만들어 해당 함수를 호출하고자 한다.

 

 

디지털 포트 번호를 선언한 다음에 함수 다섯개를 선언을 했다. 이것은 이러한 함수가 있다고 선언을 해 주는 것이며 뒤에서 함수의 동작에 대해서 각각 구현을 해야 한다. 각각의 구현된 내용을 보면 다음과 같다.


/*
* 로봇을 정지킨다
*/
void Robot_Stop(){
	Serial.println("로봇 멈춤");
	digitalWrite(LeftWheel_D1, HIGH);
	digitalWrite(LeftWheel_D2, HIGH);
	digitalWrite(RightWheel_D3, HIGH);
	digitalWrite(RightWheel_D4, HIGH);
}

/*
* 로봇이 앞으로 간다
*/
void Robot_Go(){
	Serial.println("로봇 전진");
	digitalWrite(LeftWheel_D1, HIGH);
	digitalWrite(LeftWheel_D2, LOW);
	digitalWrite(RightWheel_D3, HIGH);
	digitalWrite(RightWheel_D4, LOW);
}

/*
* 로봇을 오른쪽으로 회전시킨다
*/
void Robot_RightTurn(){
	Serial.println("로봇 우회전");
	digitalWrite(LeftWheel_D1, HIGH);
	digitalWrite(LeftWheel_D2, HIGH);
	digitalWrite(RightWheel_D3, HIGH);
	digitalWrite(RightWheel_D4, LOW);
}

/*
* 로봇을 왼쪽으로 회전시킨다
*/
void Robot_LeftTurn(){
	Serial.println("로봇 좌회전");
	digitalWrite(LeftWheel_D1, HIGH);
	digitalWrite(LeftWheel_D2, LOW);
	digitalWrite(RightWheel_D3, HIGH);
	digitalWrite(RightWheel_D4, HIGH);
}

/*
* 로봇을 뒤로 움직인다
*/
void Robot_Back(){
	Serial.println("로봇 후진");
	digitalWrite(LeftWheel_D1, LOW);
	digitalWrite(LeftWheel_D2, HIGH);
	digitalWrite(RightWheel_D3, LOW);
	digitalWrite(RightWheel_D4, HIGH);
}

로봇의 움직임에 대해서 digitalWrite 함수를 써서 선언을 해 줬다. 이 함수들을 통해서 loop 함수 내에서 다양한 동작에 대한 코딩을 할 때에 쉽게 호출을 할 수 있다. 왜냐하면 Robot_RightTurn을 호출하는 것이 다음의 코드를 매번 호출하는 것 보다 쉽기 때문이다.


digitalWrite(LeftWheel_D1, HIGH);
digitalWrite(LeftWheel_D2, HIGH);
digitalWrite(RightWheel_D3, HIGH);
digitalWrite(RightWheel_D4, LOW);

그런데 여기서 우리가 보지 못하던 Serial_println 이라는 함수가 보인다. 이것은 디버깅을 하기 위한 용도로 아두이노의 시리얼 모니터를 통해서 각각의 함수 호출이 되고 있는지를 확인하는 용도로 사용하기 위함이다. 이 시리얼 출력 함수를 사용하기 위해서는 시리얼을 초기화 해 줘야 하는데 이는 setup 함수 내에 다음과 같이 초기화를 시키고 있으며 시리얼 모니터 하단에서 보드레이트를 동일하게 맞춰줘야지만 메시지를 볼 수 있다.

 

 

그리고 각각의 로봇 움직임에 대한 함수를 만들었기 때문에 setup 함수와 loop 함수는 다음과 같이 변경을 할 수 있다.

 

 

우선 setup 함수에서 로봇을 멈춤으로 초기화 하던 네 줄의 코딩이 한줄로 간소화 되었다. 그리고 loop 함수에서는 전진하고 1초 쉬고, 우회전하고 1초 쉬고, 좌회전하고 1초 쉬고, 후진하고 1초 쉬고, 로봇을 멈추고 1초 쉬는 동작을 호출하여 모터의 동작을 모니터링 할 수 있도록 변경되었다.

아두이노와 PC를 연결하고 시리얼 모니터를 열어 하단의 포트와 보드레이트를 설정을 하고 IDE에서 업로드를 선택을 해서 바이너리를 아두이노로 보낸다.

그리고 USB 케이블을 연결해 둔 상태에서 전원을 넣어보면 다음과 같이 시리얼 모니터에 메시지가 출력되는 것을 볼 수 있다.

전원을 연결하지 않으면 모터는 동작하지 않는 상태에서 시리얼 모니터에 메시지가 뿌려지는데 이유는 PC의 USB 포트를 통해서 아두이노로 전달되는 전원이 부족하기 때문이다.

 

 


 

 

반응형

'IT' 카테고리의 다른 글

#6/12 아두이노 로봇 HowTo  (0) 2022.11.04
#5/12 아두이노 로봇 HowTo  (0) 2022.11.04
#3/12 아두이노 로봇 HowTo  (0) 2022.11.04
#2/12 아두이노 로봇 HowTo  (0) 2022.11.04
#1/12 아두이노 로봇 HowTo  (0) 2022.11.04