테크 지식
[커뮤니티] 아두이노 기초 - 서보모터 제어
아두이노 기초 서보모터 제어
아두이노를 사용하다보면 서보모터를 사용하는 경우도 많고, 사용하는 방법 역시 정말 간단하고 쉽다. 한 번 서보모터 사용방법에 대해서 알아보자
아두이노에서 일반적으로 사용하는 모터 정리
▶ DC모터· 주변에서 흔히 쓰는 모터, 입력 전류 방향으로 회전 방향 제어가 가능하다.· 상대적으로 고회전에 유리하다.· 회전 움직임을 사용하는 RC카, 쿼드콥터 등 사용할 수 있는 범위가 매우 다양하다.· 단 회전수 방향등을 제어하기 위해서는 별도의 드라이버 모듈이 필요로 하다.▶ 서보모터· 보통 0~180 사이를 움직이며, 해당 회전 범위 안에서 위치를 사용자가 설정가능하다.· 동작 범위가 제한적이지만 정확한 위치 제어가 가능하다.· RC카 핸들, 로봇의 관절 등 회전 각도 제어가 필요한 곳에 광범위하게 사용된다.▶ 스태핑모터· 회전 방향과 속도 뿐만 아니라 회전각을 정밀 제어 할 수 있다.· DC모터와 서보모터의 장점을 합친 모터이지만 다소 제어가 위의 두 모터에 비해 복잡하다.· 보통 스태핑모터 드라이버 모듈 또는 모터쉴드를 통해서 제어한다.· 3D프린터에 많이 사용되고 있으며, 상대적으로 고회전이 필요하지 않으면서 정밀 제어 필요한 곳에 사용된다.▶ 서보모터와 스태핑모터 조금 더 알기
회로도
PWR(5V) : 적색GND(0V) : 흑색 또는 갈색SIG : 황색서보모터가 약하거나 제대로 동작하지 않는다면 아두이노의 보드 출력보다 더 많은 전류를 요구하는 것이다. 이 경우 외부전원으로 파워를 별도 공급해주어야 한다.서보모터는 PWM으로 제어하며 아두이노에서의 PWM 출력이 가능한 포트는 우노 기준으로 3/5/6/9/10/11 이다. 이외의 아두이노 제품에서는 핀포트 옆에 ~ 표시를 확인하면 된다.* ~ 표시가 잇을 경우 PWM 출력 가능
서보모터 좌/우로 반복하기
#include <Servo.h> // 서보 제어 함수 불러오기 Servo myservo; // 서보 함수 클래스 지정 int pos = 0; // 위치 좌표 값 void setup() { myservo.attach(6); // 6번 핀에 연결된 서보 연결 } void loop() { for(pos = 0; pos <= 180; pos++) { myservo.write(pos); // 서보 값 입력 delay(15); } for(pos = 180; pos>=0; pos--) { myservo.write(pos); // 서보 값 입력 delay(15); } }
시리얼 통신으로 입력받은 값의 좌표로 모터 위치 변경하기
#include <Servo.h> // 서보 제어 함수 불러오기 Servo myservo; // 서보 함수 클래스 지정 int pos = 0; // 위치 좌표 값 void setup() { Serial.begin(9600); myservo.attach(6); // 6번 핀에 연결된 서보 연결 } void loop() { while(Serial.available()) { // 시리얼 값 입력이 있으면 pos = Serial.read(); // pos에 입력 값 저장 myservo.write(pos); // 서보 값 입력 delay(15); } }
단 이 코드로 제어시 서보모터의 동작범위인 0~180 사이의 값으로 시리얼 모니터에 입력해야 된다.
생각보다 아두이노에서의 서보모터 제어는 간단하지 않은가? 아두이노가 오픈하드웨어 프로젝트이고 많은 자료들이 오픈되어있다보니 그 만큼 손 쉽게 할 수 있도록 라이브러리가 많이 제공되어있어서 누구나 쉽게 제어 할 수 있다. 이를 바탕으로 다양한 것을 만들어보길 바란다.
소스코드에는 정답이 없다. 다양한 생각이 있듯 다양한 방법이 있고, 이 예제는 그 중 하나일 뿐이다.