아두이노 서보모터 MG995 제어
아두이노 같은 임베디드 시스템에서 우리가 원하는 대로 어떤 장치를 작동시켜 보는 재미가 쏠쏠해서 요즘 이 녀석을 자주 갖고 놀게 되는데요. 오늘은 아두이노 서보모터 MG995 제어하는 과정을 정리해보려고 합니다. 다양한 모터의 종류 중에서 서보모터는 내가 원하는 만큼만 회전을 시켜서 작동 시킬 수 있는 형태이고 우리 생활에서도 쉽게 찾아볼 수 있는데 일례로 움직이는 CCTV를 들 수 있겠네요.
상황을 그려볼까요? 야심한 밤에 벽이나 천장에 붙어 있는 방범용 CCTV 카메라가 혼자 조용히 상하좌우로 움직이다가 어떤 물체나 사람이 포착이 되면 그곳을 주시하면서 움직임을 멈추고 그 대상을 녹화한다고 생각을 해보세요. 당연히 그 움직임이나 멈춤은 모터가 담당을 할 테고 그냥 무조건 회전만 하는 일반 모터로는 그런 시스템을 만들기 힘들겠죠? 그렇듯 어떤 상황이나 조건에 따라서 회전의 여부와 각도를 조절할 수 있는 모터가 서보모터이고 그 종류도 다양하지만 오늘은 사진에 보이는 MG995라는 녀석을 내가 원하는 대로 회전시켜보는 예제를 만들면서 이 녀석을 익혀볼까 합니다.
▲ 사진에서 확인할 수 있듯이 이번 예제에서 사용할 녀석은 두 개의 서보모터가 연결되어 그 위에 카메라가 올라가 있으며 모터들은 각각 상하와 좌우의 움직임을 담당하고 있습니다. (이렇게 카메라가 달린 녀석을 제어해보기 위해서 앞에서 CCTV 관련 상황을 그려봤던 겁니다.^^)
▲ 서보모터를 제어하기 위한 준비는 아주 간단한데요. 아두이노와 몇 개의 점퍼선만 있으면 될 거 같고요. 오늘은 두 개의 모터 중 위쪽에 위치해서 상하 방향을 담당하는 녀석만 움직여보면서 기본 개념을 정리한 뒤에 다음 글에서 두 개를 동시에 움직이거나 상황에 따라서 멈추는 등의 제어를 해보기로 할게요.
그러기 위해서 먼저 아두이노와 위쪽에 붙어 있는 서보모터를 연결하겠습니다.
▲ 그렇게 연결하려고 보니 점퍼선이 세 개군요. 세 개 중에서 두 개는 VCC와 GND입니다. 그리고 나머지 하나가 디지털 신호를 보내는 케이블인데 가운데가 VCC이고요. 사진에서는 확인이 안되지만 자세히 보면 양쪽 선 중에 알파벳이나 화살표(▼) 같은 게 그려져 있는 쪽이 있거든요. 그쪽이 아두이노의 디지털 핀과 연결하는 곳이니 참고해서 연결을 해보겠습니다.
▲ 각각의 선을 VCC, GND, D2 번에 연결을 했고요. 다음으로 아두이노 스케치 프로그램에서 이 녀석을 제어할 소스 코드를 작성할 텐데요. 오늘은 연결한 서보모터가 위쪽부터 아래쪽으로 반복해서 계속 움직이도록 코딩을 해서 아래 영상처럼 마치 인사하는 것 같은 움직임을 만들어보겠습니다.
▲ 사실은 이 녀석을 제어해보려고 생각하고 가장 먼저 아래쪽에 있는 서보모터를 0도(왼쪽)부터 오른쪽(180도)으로 계속 반복해서 움직여보려고 했는데.... ㅠ.ㅠ 아래쪽의 서보모터 상태가 별로 좋지가 않아서 차후에 교체 후 그 과정은 정리해야 할거 같아서 오늘은 위쪽 거를 움직여 보기로 했네요.^^;
여하튼 코딩을 해보죠.
▲ 프로그램 언어의 기본 개념만 알고 있어도 어렵지 않은 코드이죠? ① 먼저 아두이노에서 서보모터를 제어하기 위해서는 Servo.h 헤더 파일이 있어야 해서 include 해줬고요. ② Servo의 객체를 생성했고... 각도 값을 저장할 int형 변수 a를 90으로 초기화해주고 있습니다. ③ 그리고 모터를 연결한 D2 번 핀의 번호를 인수로 전달하는 Serovo의 함수 attach()를 호출해서 D2에 서보가 열결 되어 있다고 설정을 한 후 초기 각도 값으로 a를 전달해서 90도 각도에서 시작을 하게 했네요. (90도면 똑바로 서 있는 상태입니다.)
④ 계속 반복되는 loop() 함수에서는 for 문을 이용해서 모터의 각도를 60도에서 180도 사이에서 계속 왔다 갔다 하도록 했는데요. 0도부터 하지 않은 이유는 예제에서 카메라가 달린 부분이 뒤쪽으로 완전히 넘어갔을 때가 0도이고 앞으로 완전히 숙였을 때가 180도인데 브라켓과 카메라 때문에 완전히 뒤로 넘어갈 수 없는 상황이라서 적당한 각도인 60까지만 설정을 한 상태입니다.
▲ 이렇게 앞쪽으로 완전히 숙였을 때가 180도거든요.
▲ 그런데 뒤쪽으로는 브라켓 때문에 이 정도 각도밖에 움직이지 못하기 때문에 60도로 설정을 한 겁니다. 만약 아래쪽의 것을 움직였다면 0도부터 180도까지 설정하면 좌우 맨 끝까지 반복하면서 계속 움직이게 되겠죠? 이 과정은 서보모터를 교체한 후 다음 글에서 정리해볼게요.
그때는 상, 하, 좌, 우 모두 동시에 움직이는 예제를 만들어보기로 하고 이번 글에서는 이 정도 기본 개념만 정리하고 마무리하겠습니다. 수고하셨어요.