Arduino Servo Motor 두개 동시에 제어해보자.
지난 글에서 서보모터를 다뤄보면서 Arduino Servo Motor의 작동원리를 알아봤는데요. 그때 글에서는 두 개 중 아래쪽 서보모터의 상태가 좋지 못해서 위쪽 것만 움직여 봤잖아요? 이번 글에서는 브라킷으로 연결된 두 개의 servo motor를 동시에 제어하는 예제를 만들어볼까 합니다.
▲ 이 녀석을 사용할 건데... 그때 그 아래쪽 모터 상태가 안 좋던 녀석은 아니고요. 다른 놈인데 두 개 모두 정상 작동하니까 이번에는 아래쪽 모터는 왼쪽과 오른쪽으로 무한 반복하고 동시에 위쪽 녀석도 지난 글처럼 앞뒤로 적당하게 움직이면서 마치 주변을 두리번거리면서 감시하고 있는듯한 느낌의 카메라를 만들어 보려고 합니다.
▲ 먼저 앞글에서 했던 것처럼 arduino와 이 두 개의 servo motor를 연결하겠습니다.
▲ 이번에는 두 개를 제어해야 하기 때문에 부득이하게 빵 판을 이용했고요. 전원을 전원을 인가하는 데만 사용했습니다. 그리고 D8과 D9에 각각의 모터를 연결했는데요. 코딩을 통해서 아래 영상처럼 상하좌우로 무한 반복 움직이는 예제를 만들어보려고 합니다.
▲ 이렇게 각각의 servo motor에 따로 각도 값을 전달해서 움직이도록 해볼 텐데요. 처음에는 스레드를 이용해서 두 개를 따로 제어를 해보려고 했는데 arduino는 서보모터 관련 스레드를 지원하지 않는 거 같더군요.ㅠㅠ 물론 제가 초보라서 구현을 못 찾고 있는 건지 모르겠지만 한참을 헤매다가 결국은 그냥 프로그램 제어문으로 움직이도록 만들어봤습니다.<
초보가 상황에 따라서 만들어본 거라서 if 문이 엄청 쓰였네요. ㅎㅎ 고수님들이 보시면 한심한 코드겠지만... 아직 배우고 있는 단계이니 이해 부탁드리고요.^^
▲ 일단 servo motor를 사용하기 위해서 Servo 라이브러리를 추가한 후 좌우와 상하로 움직일 두 개의 객체를 생성했습니다. X가 좌우이고 Y가 상하가 되겠죠? 그리고 각도를 저장할 변수 x, y를 초기화했으며 초기 설정 구간에서는 모터들을 연결한 디지털 핀을 설정한 후 처음 모터의 위치를 좌우를 담당하는 아래쪽 녀석은 가장 왼쪽(0)으로... 상하를 담당하는 녀석은 60도로 설정을 했습니다. 지난 글에서도 언급했듯이 브라켓 때문에 뒤쪽으로 완전히 넘어가지 못하기 때문에 적당한 위치를 설정했고요.
이제 계속 반복되는 내용을 작성할 건데 좌우는 0도부터 180도 사이에서 계속 왕복을 하고 위쪽 거는 60도에서 120도 사이에서만 움직이도록 했습니다. 위쪽 녀석이 너무 많이 내려오니까 조금 현실성이 떨어지더라고요. ㅎㅎ
▲ 이 부분은 아래쪽 모터가 오른쪽으로 이동할 때 실행되는 내용인데 y 값도 함께 변화를 줘서 위아래로 움직이도록 했습니다. 역시 초보라서 if 문이 많이 들어갔네요. ㅎㅎ
▲ 다음은 왼쪽으로 움직일 때 실행되는 내용입니다. 이때도 역시 y 값을 반대로 변화를 줘서 동시에 실행되도록 해봤습니다. 코드가 많이 허접하죠?ㅎ 여하튼 이렇게 두 개의 서보모터를 동시에 움직이도록 해봤는데 이것들의 속도는 delay() 값을 변화시켜서 제어할 수 있을 것입니다.
처음 이 예제를 구상할 때 항상 상하좌우로 움직이면서 주변을 관찰하고 있는 카메라를 생각했는데 많이 엉성하긴 하지만 일단 초보가 머리 속에 그렸던 대로 두 개의 모터가 동시에 움직이는 건 만들었으니 오늘은 여기서 만족하고 다음 글에서는 좀 더 업그레이드를 시켜보기로 하고 마무리하겠습니다. 많이 부족한 글 읽어주셔서 감사합니다. ^^