아두이노 우노 R4 - 조이스틱 - 서보 모터
이 가이드에서는 Arduino UNO R4와 조이스틱을 사용하여 두 개의 서보 모터 또는 팬 틸트 키트를 제어하는 방법을 배울 것입니다.
조이스틱에는 포텐셔미터라고 불리는 두 개의 제어 장치가 있으며, 서로 직각을 이루는 X축과 Y축으로 알려져 있습니다. 이 포텐셔미터는 조이스틱의 VRX 및 VRY 핀에서 나오는 신호, 즉 X값 및 Y값을 생성합니다. 우리는 이 신호를 사용하여 두 개의 서보 모터를 제어합니다: X값은 서보 모터 #1을, Y값은 서보 모터 #2를 움직입니다. 팬틸트 키트와 함께 사용할 때, 두 서보 모터는 함께 작동하여 3차원으로 이동합니다.
애플리케이션을 사용할 수 있는 두 가지 예가 있습니다:
- 사용 사례 1: 조이스틱의 움직임에 따라 서보 모터가 회전합니다:
- 서보 모터의 움직임 각도는 조이스틱의 수평(X) 및 수직(Y) 움직임과 일치합니다.
- 조이스틱을 놓으면 조이스틱과 서보 모터가 시작 위치로 돌아갑니다.
- 사용 사례 2: 다른 방향으로 조이스틱으로 서보 모터를 제어합니다:
- 조이스틱을 왼쪽으로 밀면 서보 모터 #1이 시계 방향으로 회전합니다.
- 조이스틱을 오른쪽으로 밀면 서보 모터 #1이 반시계 방향으로 회전합니다.
- 조이스틱을 위로 밀면 서보 모터 #2가 시계 방향으로 회전합니다.
- 조이스틱을 아래로 밀면 서보 모터 #2가 반시계 방향으로 회전합니다.
- 조이스틱을 놓아도 서보 모터는 리셋되지 않습니다.
- 조이스틱 버튼을 누르면 서보 모터가 중앙으로 리셋됩니다.
- Arduino Uno R4 WiFi/Minima를 처음 사용한다면 Arduino IDE에서 Arduino Uno R4 WiFi/Minima 환경 설정에 대한 튜토리얼을 참조하세요.
- 제공된 다이어그램에 따라 Arduino Uno R4를 서보 모터와 조이스틱에 연결하세요.
- USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결하세요.
- 컴퓨터에서 Arduino IDE를 실행하세요.
- 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택하세요.
- 제공된 코드를 복사하여 Arduino IDE에서 여세요.
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Uno R4에 전송하세요.
- 시리얼 모니터를 엽니다.
- 조이스틱을 어느 방향으로든 움직입니다.
- 서보 모터의 회전을 관찰합니다.
- 시리얼 모니터에서 결과를 확인합니다.
- Arduino IDE의 왼쪽에 있는 Libraries 아이콘으로 이동하세요.
- 검색 상자에 ezButton을 입력하고, ArduinoGetStarted.com의 버튼 라이브러리를 찾으세요.
- Install 버튼을 눌러 ezButton 라이브러리를 추가하세요.
- 제공된 코드를 복사하여 Arduino IDE에서 엽니다.
- Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 전송합니다.
- 시리얼 모니터를 엽니다.
- 조이스틱을 아무 방향으로 이동합니다.
- 서보 모터의 회전을 관찰합니다.
- 시리얼 라디오에서 결과를 확인합니다.
Hardware Preparation
1 | × | Arduino UNO R4 WiFi | Amazon | |
1 | × | Arduino UNO R4 Minima (Alternatively) | Amazon | |
1 | × | USB Cable Type-C | 쿠팡 | Amazon | |
1 | × | Joystick | 쿠팡 | Amazon | |
2 | × | Servo Motor | 쿠팡 | Amazon | |
2 | × | (Optional) Pan-tilt kit with servo motor | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino UNO R4 | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino UNO R4 | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino UNO R4 | Amazon | |
1 | × | (Recommended) Power Splitter For Arduino UNO R4 | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
조이스틱 및 서보 모터에 관하여
조이스틱 및 서보 모터의 핀아웃, 기능, 프로그래밍 등 세부 사항에 익숙하지 않다면, 아래 튜토리얼을 참조하여 더 알아보세요.
Wiring Diagram
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 UNO R4 코드
아두이노 UNO R4 코드 - 서보 모터는 조이스틱의 엄지 움직임에 따라 회전합니다.
/*
* 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick-servo-motor
*/
#include <Servo.h>
#define VRX_PIN A0 // The Arduino UNO R4 pin connected to VRX pin
#define VRY_PIN A1 // The Arduino UNO R4 pin connected to VRY pin
#define SERVO_X_PIN 9 // The Arduino UNO R4 pin connected to Servo motor 1
#define SERVO_Y_PIN 10 // The Arduino UNO R4 pin connected to Servo motor 2
Servo xServo; // create servo object to control a servo 1
Servo yServo; // create servo object to control a servo 2
void setup() {
Serial.begin(9600) ;
xServo.attach(SERVO_X_PIN);
yServo.attach(SERVO_Y_PIN);
}
void loop() {
// read analog X and Y analog values
int xValue = analogRead(VRX_PIN);
int yValue = analogRead(VRY_PIN);
int xAngle = map(xValue, 0, 1023, 0, 180); // scale it to the servo's angle (0 to 180)
int yAngle = map(yValue, 0, 1023, 0, 180); // scale it to the servo's angle (0 to 180)
xServo.write(xAngle); // rotate servo motor 1
yServo.write(yAngle); // rotate servo motor 2
// print data to Serial Monitor on Arduino IDE
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("°");
}
Detailed Instructions
다음 지침을 단계별로 따르세요:
COM6
Coming soon
Autoscroll
Clear output
9600 baud
Newline
Arduino UNO R4 코드 - 조이스틱을 사용하여 서보 모터 제어
/*
* 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick-servo-motor
*/
#include <Servo.h>
#include <ezButton.h>
#define VRX_PIN A0 // The Arduino UNO R4 pin connected to VRX pin
#define VRY_PIN A1 // The Arduino UNO R4 pin connected to VRY pin
#define SW_PIN A5 // The Arduino UNO R4 pin connected to SW pin
#define SERVO_X_PIN 9 // The Arduino UNO R4 pin connected to Servo motor 1
#define SERVO_Y_PIN 10 // The Arduino UNO R4 pin connected to Servo motor 2
#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 // 100ms
ezButton button(SW_PIN);
Servo xServo; // create servo object to control a servo 1
Servo yServo; // create servo object to control a servo 2
int xValue = 0 ; // To store value of the X axis
int yValue = 0 ; // To store value of the Y axis
int xAngle = 90; // the center position of servo #1
int yAngle = 90; // the center position of servo #2
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); // set debounce time to 50 milliseconds
}
void loop() {
button.loop(); // MUST call the loop() function first
if (millis() - lastUpdateTime > UPDATE_INTERVAL) {
lastUpdateTime = millis() ;
// read analog X and Y analog values
xValue = analogRead(VRX_PIN);
yValue = analogRead(VRY_PIN);
// converts the analog value to commands
// reset commands
command = COMMAND_NO;
// check left/right commands
if (xValue < LEFT_THRESHOLD)
command = command | COMMAND_LEFT;
else if (xValue > RIGHT_THRESHOLD)
command = command | COMMAND_RIGHT;
// check up/down commands
if (yValue < UP_THRESHOLD)
command = command | COMMAND_UP;
else if (yValue > DOWN_THRESHOLD)
command = command | COMMAND_DOWN;
// NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS
// print command to serial and process command
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; // the center position of servo #1
yAngle = 90; // the center position of servo #2
}
xServo.write(xAngle); // rotate servo motor 1
yServo.write(yAngle); // rotate servo motor 2
// print data to Serial Monitor on Arduino IDE
Serial.print("Servo Motor's Angle: ");
Serial.print(xAngle);
Serial.print("°, ");
Serial.print(xAngle);
Serial.println("°");
}
Detailed Instructions
COM6
Autoscroll
Clear output
9600 baud
Newline
코드 설명
소스 코드 내의 주석에서 제공된 설명을 확인하세요!
Video Tutorial
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.