취소

커뮤니티

가이드

서포트

전체

아두이노 응용 조이스틱을 이용, 서보모터 위치/속도 제어하기

이번에는 약간 응용기로 조이스틱을 통해서 서보모터의 위치제어와 속도제어를 해보도록하자. 만약 조이스틱이 없다면 2개의 가변저항을 통해서 따라 해볼 수 있다. 그리고 아두이노에서 흔히 사용되는 일반적인 서보모터의 속도제어라고하면 "그게 가능해?" 하고 의문이 들겠지만, VarSpeedServo 란 라이브러리를 이용하면 서보모터 동작에 약간의 지연시간이 생기면서 속도 제어가 가능해진다.

라이브러리 설치

서보모터의 속도조절을 위해서는 VarSpeedServo 란 라이브러리가 필요로 한다. 아래의 링크에서 우측의 Download ZIP을 눌러서 다운로드 받은 후, 압축을 풀어 "C:\Program Files\arduino\libraries" 경로에 폴더 채로 집어넣어 라이브러리 항목에 추가하자

netlabtoolkit/VarSpeedServo VarSpeedServo - Arduino library for servos that extends the standard servo.h library with the ability to set speed, and wait for position to complete github.com 자세히보기

회로도

회로도

실물 사진을 찍어놓은 것이 없어서 이번엔 회로도만 있다. 위를 참고해서 배선하자

조이스틱을 이용해서 서보모터 위치/속도 제어하기

조건 1 > A0/A1 (A4/A5) 에 연결된 조이스틱에 입력된 값 수신 받는다.조건 2 > 수신 받은 값을 토대로 서보모터의 위치값, 속도값으로 맞추어서 변환한다.조건 3 > 상/하로 조이스틱을 움직 일 경우 서보모터의 속도를 조절한다.조건 4 > 좌/우로 조이스틱을 움직 일 경우 서보모터의 위치를 조절한다.

#include <VarSpeedServo.h>    VarSpeedServo myservo;   int Servo_deg;      // 서보 위치 int Servo_speed;    // 서보 속도   void setup() {   Serial.begin(9600);         // 시리얼 통신 설정   myservo.attach(6);           // 서보 PIN 설정   myservo.write(90,255,true);  // 서보 위치 초기화 }   void loop() {   Servo_deg = analogRead(0);      // 조이스틱 좌우 값 읽어 위치에 저장   Servo_speed = analogRead(1);    // 조이스틱 상하 값 읽어 속도에 저장      Servo_deg = map(Servo_deg, 0, 1023, 0, 180);      // 좌우 최대&최소에 맞추어 변경   Servo_speed = map(Servo_speed, 0, 1023, 0, 255);  // 상하 최대&최소에 맞추어 변경     //시리얼로 위치와 속도 값 출력   Serial.print("deg : ");   Serial.print(Servo_deg);   Serial.print("\t speed : ");   Serial.println(Servo_speed);     myservo.write(Servo_deg, Servo_speed, true);    // 서보 위치&속도 제어 }

생각외로 라이브러리가 정말 재미있는 것도 많이 있다. 아두이노에서 흔히 쓰는 서보모터를 속도 제어 하는 것에 대해서 누가 생각했겠는가? 한 번 시간이 된다면 아두이노의 다양한 라이브러리를 찾아보길 바란다.

소스코드는 정답이 없다. 다양한 생각이 있듯 다양한 방법이 있으며, 이는 그 중 하나다.