카테고리 없음

arduino 서보모터 가변저항으로 제어

abc0123 2017. 9. 16. 22:17
반응형

 

이번 글에서는 arduino의 서보모터를 가변저항으로 제어하는 과정을 정리해보려고 한다. 전기를 운동 에너지로 바꿔주는 모터의 종류에는 여러 가지가 있는데 대표적으로 똑같은 속도로 360도 회전하는 일반 DC 모터는 누구나 알고 있는 것으로 쉽게 접할 수 있는 모터이고 서보모터는 내가 원하는 속도로 원하는 각도만 회전시킬 수 있는 모터를 말하며 다음과 같이 생겼다.

 

CD와 서보모터

 

▲ 일반 DC 모터(왼쪽)와 서보모터(오른쪽)인데 사진에서 확인할 수 있듯이 그 안에 기어가 장착되어 있어서 속도와 회전 각도를 내 마음대로 조절할 수 있는 녀석이다. 이 녀석을 이용해서 먼저 아래 영상과 같이 특정한 각도만 일정한 속도로 반복 회전하는 예제를 만들어보면서 기본 코드를 이해하고 그 다음으로 가변저항을 이용해서 내가 조절하는 저항값(아날로그 신호)에 따라서 반응하는 예제도 만들어보자.

 

 

 

▲ 이렇게 내가 원하는 각도만 반복해서 회전시킬 수 있는 게 이 녀석의 특징인데 이해하기 쉽게 로봇의 다리나 손가락 등 관절의 움직임을 생각하면 될 것이다. 그것들을 모두 이것으로 만든다고 하니 나도 언젠가...ㅎㅎ

 

여하튼 빵판도 없이 전류 공급만으로 모터를 회전시켰기 때문에 회로도까지는 필요 없겠지만 음극(-)과 양극(+) 그리고 디지털 핀을 연결해서 소스 코드를 작성한 후 아두이노 보드에 업로드하는 과정까지 일단 정리해보자.

 

전류공급

 

▲ 서보모터는 세 개의 케이블이 있는데 가운데가 (+)이고 양쪽이 음극(-)과 디지털 신호를 입력받는 케이블이다. 디지털 신호를 입력받는 케이블에는 화살표(▼)가 표시되어 있으니 참고해서 연결하면 된다. 나는 녹색 선과 주황색 선을 이용해서 각각의 전류를 흘러보냈고...

 

7번핀

 

▲ 디지털 7번 핀을 통해서 회전 속도와 각도 등의 데이터를 보내기 위해서 연결을 했다. 이제 스케치 프로그램에서 소스 코드를 작성해보자.

 

라이브러리 추가

 

▲ 이 서보모터를 제어하기 위한 프로그램을 작성할 때는 아두이노에서 제공하는 Servo 클래스를 사용해야 하는데 그러기 위해서는 위와 같이 라이브러리에서 Servo를 추가해야 한다.

 

 

서보모터 프로그램

 

▲ Servo 라이브러리를 가져오자 #include <Servo.h>가 추가됐다. 그리고 그 클래스의 함수들을 이용하기 위해서 servo 객체를 만들고 있으며 각도를 조절할 int형 변수 a를 선언하고 0으로 초기화했다.

 

setup() 함수에서는 servo 객체를 이용해서 attach() 함수에 접근한 후 모터에 연결된 디지털 핀 7번 값을 첨부해서 초기화해주고 있으며 계속해서 반복되는 loop()에서는 for 반복문을 이용해서 0부터 90도까지 0.01초 단위로 1도씩 각도가 상승하면서 회전을 하도록 하고 있다. 만약 여기서 delay() 값에 숫자를 더 높여주면 그 속도가 줄어들며 숫자를 낮게 전달하면 모터의 속도는 빨라진다.

 

일단 이렇게 내가 입력한 프로그램에 의해서 일정한 속도와 각도를 회전하는 예제를 작성해봤는데 다음은 정해진 값이 아닌 그때그때 변하는 가변저항에 의해서 모터가 회전하는 예제를 작성해보자.

 

볼륨버튼

 

▲ 이제 가변 저항이 등장하는데 이건 예전 TV나 라디오 등의 볼륨 조절할 때 돌리던 녀석이라고 생각하면 되고 위 사진에서 확인할 수 있듯이 세 개의 핀이 있는데 가운데가 아날로그 신호를 출력하는 핀이고 양쪽이 전류를 흘려보내는 것이다. 빵판에 회로를 만들어보자.

 

회로

 

▲ 전체적인 회로의 구조는 위와 같은데 가변저항 가운데 노란 선이 아날로그 신호를 아두이노 보드로 보내는 역할을 하고 있는 걸 사진을 통해서 확인할 수 있으며 서보모터는 앞에서 정리한 대로 전원을 공급하고 디지털 신호를 보내고 있다.

 

 

서보모터 제어

 

▲ 서보모터 제어는 여전히 7번 디지털 핀에서 담당하고 있으며....

 

아날로그 데이터

 

가변저항의 아날로그 값은 A5에서 입력받고 있는 모습이다. 이제 가변저항의 값을 받아들여 디지털 신호로 매핑을 한 후 모터를 움직이도록 하는 프로그램을 작성해보자.

 

매핑 함수

 

▲ 다른 내용은 앞에서 정리했으니 넘어가기로 하고 loop() 함수에서 아날로그 신호를 입력받아서 디지털 신호로 매핑하는 map() 함수만 살펴보자. 이 함수는 analogRead()로 받아들인(나는 A5에 핀을 연결한 후 핀 번호를 지정한 모습이다.) 0~1023 사이의 아날로그 값을 0~90 사이의 디지털 값으로 바꿔주는 역할을 하는데 이때의 90은 내가 임의대로 모터의 최대 회전 각도를 지정한 것이다. 이제 파일을 아두이노 보드에 올린 후 가변저항을 돌려서 결과를 확인해보자.

 

 

▲ 결과에서 확인할 수 있듯이 내가 돌리는 가변저항의 속도 및 각도와 정확히 일치하게 서보모터도 회전하는 것을 확인할 수 있다.

 

이렇게 해서 arduino의 서보모터 활용 예제들을 간단하게 작성해봤는데 내가 입력한 값대로 물리적인 움직임이 일어나니 점점 재미있어진다. 그리고 이 녀석을 잘 활용하면 우리 생활에 밀접하고 유용한 것들을 다양하게 만들 수 있을 거라는 상상을 하며 머릿속에 그것들을 하나씩 그려본다.

반응형