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

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

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

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

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

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

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

준비물

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

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

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

선연결

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

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

아두이노 나노 ESP32 코드

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

/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick-servo-motor */ #include <ESP32Servo.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 아이콘을 클릭하세요.
  • 검색 상자에 ESP32Servo를 입력한 다음, Kevin Harrington,John K. Bennett.
  • 아두이노 나노 ESP32용 서보 모터 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
아두이노 나노 ESP32 서보 모터 라이브러리
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 Arduino Nano ESP32에 코드를 업로드하세요
아두이노 코딩
  • 시리얼 모니터 열기
  • 조이스틱을 어떤 방향으로 밀기
  • 서보 모터의 회전을 보기
  • 시리얼 모니터에 결과 보기
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Coming soon
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

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

/* * 이 아두이노 나노 esp32 코드는 newbiely.kr 에서 개발되었습니다 * 이 아두이노 나노 esp32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-joystick-servo-motor */ #include <ESP32Servo.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 버튼을 클릭합니다.
아두이노 나노 ESP32 버튼 라이브러리
  • 위의 코드를 복사하고 Arduino IDE로 열기
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino Nano ESP32에 업로드
  • 시리얼 모니터 열기
  • 조이스틱을 어떤 방향으로 밀기
  • 서보 모터의 회전을 보기
  • 시리얼 모니터에서 결과 보기
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

코드 설명

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

동영상

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