테크 지식
[커뮤니티] 아두이노 응용 - 조이스틱을 이용, 서보모터 위치/속도 제어하기
아두이노 응용 조이스틱을 이용, 서보모터 위치/속도 제어하기
이번에는 약간 응용기로 조이스틱을 통해서 서보모터의 위치제어와 속도제어를 해보도록하자. 만약 조이스틱이 없다면 2개의 가변저항을 통해서 따라 해볼 수 있다. 그리고 아두이노에서 흔히 사용되는 일반적인 서보모터의 속도제어라고하면 "그게 가능해?" 하고 의문이 들겠지만, VarSpeedServo 란 라이브러리를 이용하면 서보모터 동작에 약간의 지연시간이 생기면서 속도 제어가 가능해진다.
라이브러리 설치
서보모터의 속도조절을 위해서는 VarSpeedServo 란 라이브러리가 필요로 한다. 아래의 링크에서 우측의 Download ZIP을 눌러서 다운로드 받은 후, 압축을 풀어 "C:\Program Files\arduino\libraries" 경로에 폴더 채로 집어넣어 라이브러리 항목에 추가하자
회로도
회로도
실물 사진을 찍어놓은 것이 없어서 이번엔 회로도만 있다. 위를 참고해서 배선하자
조이스틱을 이용해서 서보모터 위치/속도 제어하기
조건 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); // 서보 위치&속도 제어 }
생각외로 라이브러리가 정말 재미있는 것도 많이 있다. 아두이노에서 흔히 쓰는 서보모터를 속도 제어 하는 것에 대해서 누가 생각했겠는가? 한 번 시간이 된다면 아두이노의 다양한 라이브러리를 찾아보길 바란다.
소스코드는 정답이 없다. 다양한 생각이 있듯 다양한 방법이 있으며, 이는 그 중 하나다.