댓글 쓰기 권한이 없습니다. 로그인 하시겠습니까?
Pi
2017.07.11 16:01
아두이노 (Arduino)로 서보모터 (SG90) 제어
조회 수 13210 댓글 0
출처 : http://blog.naver.com/makist2015/220404917459
Micro Servo Motor SG90
Micro Servo SG90
서보모터는 로봇의 방향제어, 관절제어 등에 많이 사용 됩니다. 방향 제어가 가능한 자동차를 만들거나, 로봇팔 등을 만든다면 꼭 사용해야하는 부품이라고 생각할 수 있습니다.
서보모터는 '연속회전 서보모터'와 '표준 서보모터'가 있습니다. 표준서보모터는 회전범위가 0~180도로 제한 되어 있고, 연속회전 서보모터는 360도 무한회전이 가능한 모터 입니다. 실습에 사용된 서보모터는 표준서보모터로 회전각이 0~180도로 제한되어 있습니다.(SG90은 5도 ~ 175도 이내 사용을 권장합니다.)
SG90을 분해 하면, 모터의 힘을 높여주기 위한 감속기어와, 모터의 회전각도를 판단하기위한 가변저항이 들어 있습니다. 즉, 저항값으로 모터의 기준점이 현재 어느 각도에 위치해 있는지를 알 수 있습니다.
서보모터(SG90)은 세개의 선이 나와 있는데, - 노란색 = 제어신호 - 빨간색 = Vcc - 갈색(또는 검정색) = GND 를 연결됩니다.
마이크로 서보모터 SG90은 3.5V ~ 7.2V의 전압을 사용합니다. 회전(동작) 속도는 4.8V의 전압에서 무부하시 0.12초에 60도를 회전합니다. 토크는 18kg/cm 입니다. (가격대비 높은 성능을 자랑하는 제품으로 많이 사용되는 제품 입니다.) ※마이크로 서보모터: 서보모터 중 크기가 작은 소형 모터를 마이크로 서보모터라고 부릅니다.
SG90에 대한 조금더 자세한 내용은 데이터시트를 찾아보기실 권장 합니다.
서보모터 SG90에 대해서는 어느정도 알아보았구요~ 서보모터 제어를 위한 Servo 라이브러리에 대해서 알아보겠습니다.
Servo 라이브러리
아두이노 IDE에는 서보모터 제어를 위한 Servo 라이브러리가 기본으로 들어 있습니다. 아두이노 우노에서 Sevo 라이브러리는 최대 12개까지의 서보모터를 제어 할 수 있습니다. 아두이노 메가는 최대 48개의 서보모터를 사용할 수 있습니다.
주의 할 점은 아두이노 우노에서 Servo 라이브러리를 사용하면 디지털 9번, 10번 핀에 PWM 출력"analogWrite()"을 사용 할 수 없습니다. 아두이노 메가에서는 서보모터 12개까지는 PWM을 사용 할 수 있으나, 그 이상의 모터 사용시에는 11번, 12번 핀의 PWM출력을 사용 할 수 없습니다. 만약 해당 핀의 PWM을 사용하기 위해서는 detach() 함수를 사용해서 서보모터 연결을 해제해야 합니다. (가능하면 다른 핀 사용을 권장 합니다~^^)
Servo 라이브러리에서 제공하는 함수는 다음과 같습니다.
- attach(pin, min, max) : 서보모터 초기화(서보모터를 연결 할 때 사용합니다.) - pin : 데이타가 입력되는 핀번호 - min : 0도를 가르키는 펄스 폭(default = 544마이크로초) - max : 180도를 가르키는 펄스 폭(default = 2400마이크로초)
- write(value) : 서보모터의 각도를 제어(연속서보모터의 경우는 속도 0=정방향 최고속, 180=역방향 최고속, 90=정지) - read() : 서보모터의 현재각도를 읽어들입니다.(0~180) - attached() : 서보모터가 연결 되어 있는지를 판단할 때 사용(연결=true, 연결이 안되어 있으면 false) - detach() : 서보모터의 연결을 해제합니다. (해제하면 9번,10번핀에 analogWrite 함수를 사용 할 수 있습니다.)
Servo 라이브러리도 대충~ 읽어봤다면, 아두이노에 서보모터 SG90을 연결 해 봅니다.
아두이노 연결 회로
SG90 아두이노 연결
SG90의 선을 아두이노와 연결합니다. - 노란색 = digital 5pin - 빨간색 = 5V - 갈색(또는 검정색) = GND
PC와 USB로 아두이노를 연결하고 스케치를 아래와 같이 작성 합니다.
아두이노 스케치
위에서 설명한 Servo 라이브러리는 스케치 가장 윗 부분(1번줄)에서와 같이 #include <Servo.h> 명령을 이용해서 호출 할 수 있습니다.
2번줄 Servo servo; 는 서보모터를 컨트롤 하기위한 명령어를 지정해 주는 것이라고 생각하면 쉽습니다. 그냥 Servo로 사용해서 제어 시 오류가 납니다.
작성을 완료 했으면 디버깅(확인) 후 업로드 합니다.
제어하기
업로드가 완료되면 시리얼 모니터를 엽니다.
스케치가 업로드 되면 가장먼저 서보모터가 setup() 함수에 'servo.write(90)'에 의해서 중심을 찾습니다. 중심을 찾으면, SG90구입 시 동봉된 십자모형의 연결부품을 아래 사진처럼 서보모터에 연결 합니다.
(입력된 각도에 따라서 얼만큼 움직이는지 확인하기가 좋습니다.^^)
그리고, 시리얼모니터 입력폼에 0도를 입력 후 엔터를 쳐 보세요. 서보모터가 0도로 회전합니다. 시리얼모니터 입력폼에 180도를 입력 후 엔터를 쳐 보세요. 서보모터가 180도로 회전합니다.
벨런싱하기
만약 서보모터가 0도에서 드드득하면서 진동을 한다면, 'int min_value = 544' 값을 조금씩 높여줍니다. 만약 서보모터가 180도에서 드드득하면서 진동을 한다면, 'int max_value = 2400' 값을 조금씩 낮춰줍니다.
Dreamy의 코드 스크랩내가 모으고 내가 보는
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5