아두이노 나노 ESP32 - 조이스틱 - 서보 모터 | Arduino Nano ESP32 - Joystick - Servo Motor

이 튜토리얼에서는 조이스틱을 사용하여 두 개의 서보 모터 또는 서보가 있는 팬-틸트 키트를 제어하는 방법을 배우기 위해 아두이노 나노 ESP32를 사용하는 방법을 배울 예정입니다.

조이스틱에는 서로 직각을 이루는 두 개의 내장된 전위차계(가로축과 세로축으로 불림)가 있습니다. 이 전위차계들은 VRX 및 VRY 핀에서 아날로그 값을(가로값과 세로값으로 불림) 출력합니다. 우리는 이 아날로그 값을 사용하여 두 개의 서보 모터를 독립적으로 제어할 것입니다: 가로값은 서보 #1을 제어하고 세로값은 서보 #2를 제어합니다. 팬-틸트 키트의 경우, 두 서보 모터의 움직임이 3차원 움직임을 만들어냅니다.

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

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

사용 사례 2: 조이스틱을 사용하여 서보 모터 제어하기 (위/아래/왼쪽/오른쪽 명령)

우리는 다음 파트에서 두 가지 사용 사례에 대한 코드를 탐색할 것입니다.

준비물

1×Arduino Nano ESP32 Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×Joystick 쿠팡 | Amazon
2×Servo Motor 쿠팡 | Amazon
2×(Optional) Pan-tilt kit with servo motor Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

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

조이스틱과 서보 모터(핀 배치, 작동 방식, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:

선연결

Arduino Nano ESP32 Joystick Servo Motor Wiring Diagram

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

아두이노 나노 ESP32 코드

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

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

사용 방법

Arduino Nano ESP32를 시작하는 방법은 다음과 같습니다:

  • 아두이노 나노 ESP32가 처음이라면, 아두이노 IDE에서 아두이노 나노 ESP32 환경 설정 방법에 대한 튜토리얼을 참조하세요 [BASE_URL/tutorials/arduino-nano-esp32/arduino-nano-esp32-software-installation].
  • 제공된 다이어그램에 따라 구성 요소를 연결하세요.
  • USB 케이블을 사용하여 아두이노 나노 ESP32 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 아두이노 IDE를 실행하세요.
  • Arduino Nano ESP32 보드와 해당 COM 포트를 선택하세요.
  • 아두이노 IDE의 왼쪽 바에서 Libraries 아이콘을 클릭하세요.
  • 검색 상자에 ServoESP32를 입력한 다음, Jaroslav Paral이 제작한 서보 라이브러리를 찾으세요. 버전 1.1.1과 1.1.0 모두 버그가 있음을 유의해 주시기 바랍니다. 다른 버전을 선택해 주세요.
  • 아두이노 나노 ESP32용 서보 모터 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino Nano ESP32 servo motor library
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino Nano ESP32에 코드를 업로드하세요
Arduino IDE Upload Code
  • 시리얼 모니터 열기
  • 조이스틱을 어떤 방향으로 밀기
  • 서보 모터의 회전을 보기
  • 시리얼 모니터에 결과 보기
COM6
Send
Coming soon
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아두이노 나노 ESP32 코드 - 조이스틱을 사용하여 서보 모터를 제어하세요

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick-servo-motor */ #include <Servo.h> #include <ezButton.h> #define VRX_PIN A7 #define VRY_PIN A6 #define SW_PIN D2 #define SERVO_X_PIN D6 #define SERVO_Y_PIN D11 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 #define LEFT_THRESHOLD 1000 #define RIGHT_THRESHOLD 3000 #define UP_THRESHOLD 1000 #define DOWN_THRESHOLD 3000 #define UPDATE_INTERVAL 100 // 100밀리초 ezButton button(SW_PIN); Servo xServo; // 서보 제어를 위한 서보 객체 생성 1 Servo yServo; // 서보 제어를 위한 서보 객체 생성 2 int valueX = 0 ; // X축 값을 저장하기 위함 int valueY = 0 ; // Y축 값을 저장하기 위함 int xAngle = 90; // 서보 #1의 중심 위치 int yAngle = 90; // 서보 #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); // 디바운스 시간을 50밀리초로 설정 } void loop() { button.loop(); // 반드시 loop() 함수를 먼저 호출해야 함 if (millis() - lastUpdateTime > UPDATE_INTERVAL) { lastUpdateTime = millis() ; // X와 Y 아날로그 값 읽기 valueX = analogRead(VRX_PIN); valueY = analogRead(VRY_PIN); // 아날로그 값을 명령어로 변환 // 명령어 초기화 command = COMMAND_NO; // 좌/우 명령어 체크 if (valueX < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (valueX > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // 상/하 명령어 체크 if (valueY < UP_THRESHOLD) command = command | COMMAND_UP; else if (valueY > 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의 중심 위치 } xServo.write(xAngle); // 서보 모터 1 회전 yServo.write(yAngle); // 서보 모터 2 회전 // 아두이노 IDE의 시리얼 모니터에 데이터 출력 Serial.print("Servo Motor's Angle: "); Serial.print(xAngle); Serial.print("°, "); Serial.print(xAngle); Serial.println("°"); }

사용 방법

  • Arduino IDE의 왼쪽 탐색 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
  • “ezButton”을 검색한 다음, ArduinoGetStarted.com에 의한 버튼 라이브러리를 찾습니다.
  • EzButton 라이브러리를 설치하려면 Install 버튼을 클릭합니다.
Arduino Nano ESP32 button library
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Nano ESP32에 업로드
  • 시리얼 모니터 열기
  • 조이스틱을 어떤 방향으로 밀기
  • 서보 모터의 회전을 보기
  • 시리얼 모니터에서 결과 보기
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

코드 설명

소스 코드의 주석 줄에 있는 줄별 설명을 읽으세요!

동영상

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

관련 튜토리얼

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!