아두이노 조이스틱 서보 모터
이 튜토리얼에서는 아두이노와 조이스틱을 사용하여 두 개의 서보 모터 또는 서보가 장착된 팬-틸트 키트를 제어하는 방법을 배울 것입니다.
조이스틱에는 서로 직각으로 배치된 두 개의 내장된 가변 저항기( X축과 Y축이라고 함)가 있습니다. 이 가변 저항기들은 VRX와 VRY 핀에 아날로그 값을( X값과 Y값이라고 함) 출력합니다. 우리는 이 아날로그 값을 사용하여 두 개의 서보 모터를 독립적으로 제어할 것입니다: X값은 서보 #1을 제어하고 Y값은 서보 #2를 제어합니다. 팬-틸트 키트의 경우, 두 서보 모터의 움직임은 3-D 움직임을 만듭니다.
두 가지 애플리케이션 사용 사례가 있습니다:
사례 1: 조이스틱의 엄지 움직임에 따라 서보 모터가 회전합니다:
사례 2: 조이스틱을 사용하여 서보 모터에 명령합니다(위/아래/좌/우 명령)
조이스틱의 엄지를 왼쪽으로 밀면 서보 모터 #1을 시계 방향으로 단계별로 움직입니다
조이스틱의 엄지를 오른쪽으로 밀면 서보 모터 #1을 반시계 방향으로 단계별로 움직입니다
조이스틱의 엄지를 위로 밀면 서보 모터 #2를 시계 방향으로 단계별로 움직입니다
조이스틱의 엄지를 아래로 밀면 서보 모터 #2를 반시계 방향으로 단계별로 움직입니다
조이스틱의 엄지를 놓으면 ⇒ 서보 모터는 중심 위치로 돌아가지 않습니다
조이스틱을 누르면(버튼을 누름), 서보 모터가 중심 위치로 돌아갑니다
다음 파트에서 두 가지 사용 사례에 대한 코드를 탐색할 것입니다.
1 | × | 아두이노 우노 R3 | 쿠팡 | 아마존 | |
1 | × | USB 2.0 케이블 타입 A/B | 쿠팡 | 아마존 | |
1 | × | 조이스틱 (Joystick) | 쿠팡 | 아마존 | |
2 | × | 서보 모터 | 쿠팡 | 아마존 | |
2 | × | (Optional) 서보 모터가 포함된 팬 틸트 키트 | 아마존 | |
1 | × | 점퍼케이블 | 아마존 | |
1 | × | (추천) 아두이노 우노용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
1 | × | (추천) 아두이노 우노용 브레드보드 쉴드 | 쿠팡 | 아마존 | |
1 | × | (추천) 아두이노 우노용 케이스 | 쿠팡 | 아마존 | |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
조이스틱과 서보 모터(핀아웃, 작동 방식, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 그들에 대해 알아보세요:
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
#include <Servo.h>
#define VRX_PIN A0
#define VRY_PIN A1
#define SERVO_X_PIN 2
#define SERVO_Y_PIN 3
Servo xServo;
Servo yServo;
void setup() {
Serial.begin(9600) ;
xServo.attach(SERVO_X_PIN);
yServo.attach(SERVO_Y_PIN);
}
void loop() {
int xValue = analogRead(VRX_PIN);
int yValue = analogRead(VRY_PIN);
int xAngle = map(xValue, 0, 1023, 0, 180);
int yAngle = map(yValue, 0, 1023, 0, 180);
xServo.write(xAngle);
yServo.write(yAngle);
Serial.print("Joystick: ");
Serial.print(xValue);
Serial.print(", ");
Serial.print(yValue);
Serial.print(" => Servo Motor: ");
Serial.print(xAngle);
Serial.print("°, ");
Serial.print(yAngle);
Serial.println("°");
}
아두이노를 USB 케이블을 통해 PC에 연결하세요
아두이노 IDE를 열고, 올바른 보드와 포트를 선택하세요
위의 코드를 복사하고 아두이노 IDE로 열어주세요
아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드하세요
시리얼 모니터 열기
조이스틱을 어떤 방향으로 밀기
서보 모터의 회전을 확인하기
시리얼 모니터에서 결과 보기
#include <Servo.h>
#include <ezButton.h>
#define VRX_PIN A0
#define VRY_PIN A1
#define SW_PIN 2
#define SERVO_X_PIN 2
#define SERVO_Y_PIN 3
#define COMMAND_NO 0x00
#define COMMAND_LEFT 0x01
#define COMMAND_RIGHT 0x02
#define COMMAND_UP 0x04
#define COMMAND_DOWN 0x08
#define LEFT_THRESHOLD 400
#define RIGHT_THRESHOLD 800
#define UP_THRESHOLD 400
#define DOWN_THRESHOLD 800
#define UPDATE_INTERVAL 100
ezButton button(SW_PIN);
Servo xServo;
Servo yServo;
int xValue = 0 ;
int yValue = 0 ;
int xAngle = 90;
int yAngle = 90;
int command = COMMAND_NO;
unsigned long lastUpdateTime = 0;
void setup() {
Serial.begin(9600) ;
xServo.attach(SERVO_X_PIN);
yServo.attach(SERVO_Y_PIN);
button.setDebounceTime(50);
}
void loop() {
button.loop();
if (millis() - lastUpdateTime > UPDATE_INTERVAL) {
lastUpdateTime = millis() ;
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
command = COMMAND_NO;
if (xValue < LEFT_THRESHOLD)
command = command | COMMAND_LEFT;
else if (xValue > RIGHT_THRESHOLD)
command = command | COMMAND_RIGHT;
if (yValue < UP_THRESHOLD)
command = command | COMMAND_UP;
else if (yValue > DOWN_THRESHOLD)
command = command | COMMAND_DOWN;
if (command & COMMAND_LEFT) {
Serial.println("COMMAND LEFT");
xAngle--;
}
if (command & COMMAND_RIGHT) {
Serial.println("COMMAND RIGHT");
xAngle++;
}
if (command & COMMAND_UP) {
Serial.println("COMMAND UP");
yAngle--;
}
if (command & COMMAND_DOWN) {
Serial.println("COMMAND DOWN");
yAngle++;
}
}
if (button.isPressed()) {
Serial.println("The button is pressed");
xAngle = 90;
yAngle = 90;
}
xServo.write(xAngle);
yServo.write(yAngle);
Serial.print("Servo Motor's Angle: ");
Serial.print(xAngle);
Serial.print("°, ");
Serial.print(xAngle);
Serial.println("°");
}
아두이노 IDE 왼쪽 바의 Libraries 아이콘으로 이동하세요.
“ezButton”을 검색한 다음, ArduinoGetStarted.com에서 제공하는 버튼 라이브러리를 찾으세요.
EzButton 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
소스 코드의 주석 라인에서 줄별 설명을 읽어보세요!
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.