카테고리 없음

프로세싱 서보모터 제어

abc0123 2017. 9. 29. 14:08
반응형

 

지난 글에서는 Processing으로 LED제어하는 예제를 만들어봤는데 이제 물리적인 움직임을 제어해보기 위해서 서보모터를 이용해보도록 하자. 프로세싱 서보모터 제어를 위해서는 특별한 재료는 필요치 않고 다음과 같이 아두이노와 서보모터만 있으면 된다.

 

아두이노

 

▲ 서보모터를 디지털 8번 핀과 5V, GND에 각각 연결한 후 프로세싱에서 소스 코드를 작성해볼 텐데 혹시 아두이노와 서보모터에 대해서 좀 더 알고 싶은 사람들은 아래 글을 참고하면 될 것이다.

 

서보모터

 

▲ 이 블로그에 기록했던 내용인데 서보모터의 기본 코드와 가변저항을 이용한 코드 등을 확인할 수 있을 것이다. 이제 Processing을 실행해서 다음과 같이 소스 코드를 작성하자.

 

 

프로세싱

 

▲ 먼저 아두이노와 통신하고 라이브러리를 사용하기 위해서 processing.serial.*;과 cc.arduino.*;를 import 하고 있으며 Arduino의 객체 ard를 생성했다. 그리고 모터에 디지털 신호를 보낼 8번 핀을 servo 변수에 저장하고 모터의 각도 값을 담기 위해서 aaa 변수를 선언했으며 변하는 각도의 값을 윈도우 창에 숫자로 표시하기 위해서 좌표 x와 y의 값을 저장할 변수도 선언을 했다.

 

▲ setup() 함수에서는 윈도우의 사이즈를 가로, 세로 300으로 설정하고 각도 값을 표시할 text의 크기와 위치 등의 속성값을 설정하고 있다. 그리고 그 위치는 가로는 중앙, 세로는 2/3지점으로 하고 있는 모습이고 아두이노와 통신을 하며 pinMoad()에서 서보모터가 연결되어 있는 8번 핀을 통해서 모터를 연결하고 있는 모습이다.

 

draw

 

▲ draw() 함수에서는 IF문을 이용해서 키보드의 키가 위(▲), 아래(▼) 버튼이 눌렸을 때만 각도의 값을 조정하도록 하고 있으며 constrain() 함수를 이용해서 그 최대값을 160, 최소값을 0도 하고 있다.

 

▲ 그리고 image() 함수를 호출하는데 이건 바로 아래쪽에서 만들 함수이며 윈도우 창에 각도값의 변화에 따라서 선을 그려줄 함수이다. 이 부분은 바로 아래에서 확인해보기로 하고 아두이노의 servoWrite() 함수에 모터와 각도 값을 전달해서 5/1000초마다 값을 증가시켜서 움직이도록 하고 있다.

 

 

다음으로 아래 그림과 값이 변할 때마다 라인이 그 값에 맞게 움직이도록 하는 image() 함수의 소스 코르를 작성해보자.

 

각도

 

▲ 개인적으로 완벽하게 이해가 되는 건 아니지만 복잡한 수학공식까지 되새기면서 이걸 학습하는 데는 시간이 필요할 거 같아서 이번 글에서는 '이렇구나..' 정도만 이해하면서 정리하고 넘어가기로 한다. 위 그림이 어떻게 움직이는지는 아래쪽 영상에서 확인해볼 수 있는데 이것을 그리기 위한 소스 코드는 다음과 같다.

 

함수

 

▲ draw()에서 호출됐던 그림을 그리는 함수인데 sin, cos, PI 등 어렸을 때 수학시간을 떠올리게 하는 것들이 너무 많다. ㅎㅎ 그래도 대충 이해는 되는데 여하튼 이런 함수를 이용해서 앞에서 살펴봤던 그림을 그렸던 것이다.

 

이제 프로세싱을 실행해서 키보드의 UP, DOWN 버튼을 눌러서 윈도우 창의 값이 어떻게 변하는지와 실제로 서보모터가 똑같이 움직이는지 확인을 해보자.

 

 

▲ 혼자만 있는 공간이 아니다 보니 잡음이 조금 들리기는 한데...ㅎㅎ 여기서 중요한 건 내가 키보드의 위, 아래 버튼을 누르면 그 값이 변하며 윈도우 창에 표시된 각도와 똑같은 값으로 서보모터가 움직인다는 것이다.

 

이렇게 해서 프로세싱으로 서보모터를 제어해봤는데 유용하게 사용될 소스 코드 일듯 하니 보관해 놓기로 하고 서보모터를 활용할 수 것들을 계속 만들어봐야겠다.

반응형