아두이노 나노 조이스틱 서보 모터

이 튜토리얼은 아두이노 나노와 조이스틱을 사용하여 두 개의 서보 모터나 팬-틸트 키트를 제어하는 방법을 안내합니다.

조이스틱은 서로 수직인 두 개의 가변저항기( X-축과 Y-축으로 알려져 있음)가 장착되어 있습니다. 이 가변저항기들은 VRX 및 VRY 핀에서 아날로그 값을(X-값과 Y-값) 출력합니다. 우리는 이 아날로그 값을 사용하여 두 개의 서보 모터를 독립적으로 제어할 것입니다: X-값으로 서보 #1을 제어하고 Y-값으로 서보 #2를 제어합니다. 팬-틸트 키트를 사용할 때, 두 서보 모터의 움직임은 3-D 동작을 만듭니다.

두 가지 애플리케이션 사용 사례가 있습니다:

사례 1: 조이스틱의 엄지 동작에 따라 서보 모터가 회전합니다:

사례 2: 조이스틱을 사용하여 서보 모터를 조작합니다 (위/아래/왼쪽/오른쪽 명령)

튜토리얼은 두 시나리오 모두에 대한 코드를 제공합니다.

준비물

1×아두이노 나노 쿠팡 | 아마존
1×USB A to Mini-B USB 케이블 쿠팡 | 아마존
1×조이스틱 (Joystick) 쿠팡 | 아마존
2×서보 모터 쿠팡 | 아마존
2×(추천) 서보 모터가 포함된 팬 틸트 키트 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 아두이노 나노용 스크루 터미널 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노용 브레이크아웃 확장 보드 쿠팡 | 아마존
1×(추천) 아두이노 나노용 전원 분배기 쿠팡 | 아마존
공개: 이 포스팅 에 제공된 일부 링크는 아마존 제휴 링크입니다. 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

조이스틱과 서보 모터에 대하여

조이스틱 및 서보 모터(핀 배치, 기능, 프로그래밍 등 포함)에 익숙하지 않다면 다음 튜토리얼이 도움이 될 수 있습니다:

선연결

아두이노 나노 조이스틱 서보 모터 연결 배선도

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

Arduino Nano와 기타 부품에 전원을 공급하는 가장 효과적인 방법은 다음 링크를 참조하세요: 아두이노 나노 전원 공급 방법.

외부 전원의 GND를 Arduino Nano의 GND에 연결하는 것을 잊지 마십시오.

아두이노 나노 코드

아두이노 나노 코드 - 조이스틱의 엄지 움직임에 따라 서보 모터가 회전합니다

/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-joystick-servo-motor */ #include <Servo.h> #define VRX_PIN A6 // VRX 핀에 연결된 아두이노 나노 핀 #define VRY_PIN A7 // VRY 핀에 연결된 아두이노 나노 핀 #define SERVO_X_PIN 6 // 서보 모터 1에 연결된 아두이노 나노 핀 #define SERVO_Y_PIN 11 // 서보 모터 2에 연결된 아두이노 나노 핀 Servo servo_X; // 서보 1을 제어하기 위한 서보 객체 생성 Servo servo_Y; // 서보 2를 제어하기 위한 서보 객체 생성 void setup() { Serial.begin(9600) ; servo_X.attach(SERVO_X_PIN); servo_Y.attach(SERVO_Y_PIN); } void loop() { // X 및 Y 아날로그 값을 읽습니다 int value_X = analogRead(VRX_PIN); int value_Y = analogRead(VRY_PIN); int xAngle = map(value_X, 0, 1023, 0, 180); // 서보의 각도(0 ~ 180도)로 조절합니다 int yAngle = map(value_Y, 0, 1023, 0, 180); // 서보의 각도(0 ~ 180도)로 조절합니다 servo_X.write(xAngle); // 서보 모터 1 회전 servo_Y.write(yAngle); // 서보 모터 2 회전 // 아두이노 IDE의 시리얼 모니터로 데이터 출력 Serial.print("조이스틱: "); Serial.print(value_X); Serial.print(", "); Serial.print(value_Y); Serial.print(" => 서보 모터: "); Serial.print(xAngle); Serial.print("°, "); Serial.print(yAngle); Serial.println("°"); }

사용 방법

  • USB 케이블을 아두이노 나노와 PC에 연결하세요.
  • 아두이노 IDE를 실행하고, 올바른 보드와 포트를 선택하세요.
  • 코드를 복사해서 아두이노 IDE에서 열세요.
  • 아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노 나노에 전송하세요.
아두이노 코딩
  • 시리얼 모니터를 엽니다
  • 조이스틱을 특정 방향으로 밀어주세요
  • 서보 모터의 회전을 확인하세요
  • 시리얼 모니터에서 결과를 확인하세요
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Coming soon
Ln 11, Col 1
Arduino Nano on COM15
2

아두이노 나노 코드 - 조이스틱을 사용하여 서보 모터 명령하기

/* * 이 아두이노 나노 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano/arduino-nano-joystick-servo-motor */ #include <Servo.h> #include <ezButton.h> #define VRX_PIN A6 // Arduino Nano 보드의 VRX 핀에 연결된 핀 #define VRY_PIN A7 // Arduino Nano 보드의 VRY 핀에 연결된 핀 #define SW_PIN 2 // Arduino Nano 보드의 SW 핀에 연결된 핀 #define SERVO_X_PIN 6 // 서보 모터 1에 연결된 Arduino Nano 보드의 핀 #define SERVO_Y_PIN 11 // 서보 모터 2에 연결된 Arduino Nano 보드의 핀 #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 servo_X; // 서보 1을 제어하기 위한 서보 객체 생성 Servo servo_Y; // 서보 2를 제어하기 위한 서보 객체 생성 int value_X = 0 ; // X축 값 저장 변수 int value_Y = 0 ; // Y축 값 저장 변수 int xAngle = 90; // 서보 #1의 중심 위치 int yAngle = 90; // 서보 #2의 중심 위치 int command = COMMAND_NO; unsigned long lastUpdateTime = 0; void setup() { Serial.begin(9600) ; servo_X.attach(SERVO_X_PIN); servo_Y.attach(SERVO_Y_PIN); button.setDebounceTime(50); // 디바운스 시간을 50밀리초로 설정 } void loop() { button.loop(); // loop() 함수를 먼저 호출해야 함 if (millis() - lastUpdateTime > UPDATE_INTERVAL) { lastUpdateTime = millis() ; // 아날로그 X와 Y값 읽기 value_X = analogRead(VRX_PIN); value_Y = analogRead(VRY_PIN); // 아날로그 값을 명령어로 변환 // 명령어 초기화 command = COMMAND_NO; // 왼쪽/오른쪽 명령어 확인 if (value_X < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (value_X > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // 위/아래 명령어 확인 if (value_Y < UP_THRESHOLD) command = command | COMMAND_UP; else if (value_Y > 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; // 서보 #1의 중심 위치 yAngle = 90; // 서보 #2의 중심 위치 } servo_X.write(xAngle); // 서보 모터 1 회전 servo_Y.write(yAngle); // 서보 모터 2 회전 // 아두이노 IDE의 시리얼 모니터에 데이터 출력 Serial.print("Servo Motor's Angle: "); Serial.print(xAngle); Serial.print("°, "); Serial.print(xAngle); Serial.println("°"); }

사용 방법

  • Arduino IDE의 왼쪽 바에서 Libraries 아이콘을 클릭하세요.
  • “ezButton”을 검색하고 ArduinoGetStarted.com에서 버튼 라이브러리를 찾으세요.
  • EzButton 라이브러리를 설치하려면 Install 버튼을 누르세요.
아두이노 나노 버튼 라이브러리
  • 코드를 복사하고 Arduino IDE로 열어주세요.
  • IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Nano로 전송하세요.
  • 시리얼 모니터를 엽니다.
  • 조이스틱을 특정 방향으로 움직입니다.
  • 서보 모터의 회전을 확인하세요.
  • 시리얼 모니터에서 결과를 확인하세요.
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano on COM15
2

코드 설명

소스 코드의 주석에 포함된 줄별 설명을 확인하세요!

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.