아두이노 우노 R4 - 조이스틱

이 가이드에서는 Arduino UNO R4와 함께 조이스틱을 사용하는 방법을 배웁니다. 우리는 다음을 다룰 것입니다:

아두이노 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
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
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

조이스틱에 대하여

게임 컨트롤러, 장난감 컨트롤러 또는 굴착기 컨트롤러와 같은 대형 기계에서 사용되는 조이스틱을 본 적이 있을 것입니다.

조이스틱에는 정사각형 배열로 배치된 두 개의 포텐셔미터와 하나의 푸시 버튼이 있습니다. 다음과 같은 출력을 제공합니다:

  • 수평 위치(X-좌표)에 대한 아날로그 값(0에서 1023)
  • 수직 위치(Y-좌표)에 대한 아날로그 값(0에서 1023)
  • 버튼의 디지털 상태(HIGH 또는 LOW)

두 개의 아날로그 값을 결합하면 2차원 좌표가 형성됩니다. 조이스틱이 움직이지 않을 때 이 좌표들은 중심에 위치합니다. 테스트 코드를 실행하여 이러한 좌표의 실제 방향을 쉽게 파악할 수 있으며, 이는 다음 섹션에서 다룰 예정입니다.

일부 애플리케이션은 세 가지 출력 모두를 사용할 수 있는 반면, 다른 애플리케이션은 일부만 사용할 수 있습니다.

핀아웃

조이스틱은 다섯 개의 핀을 사용합니다.

  • GND 핀: GND(0V)에 연결
  • VCC 핀: VCC(5V)에 연결
  • VRX 핀: 가로 위치(X좌표)에 대한 아날로그 값을 제공합니다.
  • VRY 핀: 세로 위치(Y좌표)에 대한 아날로그 값을 제공합니다.
  • SW 핀: 조이스틱의 푸시버튼에서 나옵니다. 일반적으로 열려 있습니다. 풀업 저항기를 사용하면 누르지 않았을 때 이 핀이 HIGH가 되고, 눌렀을 때 LOW가 됩니다.
조이스틱 핀아웃

작동 방식

  • 좌/우 움직임
    • 조이스틱을 좌우로 움직이면 VRX 핀의 전기 신호(전압)가 변경됩니다.
    • 왼쪽으로 움직이면 전압이 0볼트로 낮아집니다.
    • 오른쪽으로 움직이면 전압이 5볼트로 증가합니다.
    • 아두이노는 이 전압을 읽고 0에서 1023 사이의 숫자로 변환합니다. 따라서 0V는 0에 해당하고, 5V는 1023에 해당합니다.
  • 위/아래 움직임:
    • 마찬가지로, 조이스틱을 위아래로 움직이면 VRY 핀의 전압이 변경됩니다.
    • 위로 움직이면 전압이 0볼트로 낮아집니다.
    • 아래로 움직이면 전압이 5볼트로 증가합니다.
    • 아두이노는 이 전압도 읽고 VRX 핀과 마찬가지로 0에서 1023 사이의 숫자로 변환합니다.
  • 결합된 움직임:
    • 조이스틱을 어떤 방향으로 움직이든지(단순히 좌/우 또는 위/아래뿐만 아니라) 각 축에 따라 VRX 및 VRY 핀의 전압이 변경됩니다.
  • 조이스틱 누르기:
    • 조이스틱을 아래로 누르면(버튼을 누르는 것과 같이) 조이스틱 내부의 내장 버튼이 작동됩니다.
    • SW 핀에 풀업 저항을 연결하면 눌렀을 때 이 핀의 전압이 5V에서 0V로 변경됩니다.
    • 아두이노는 이 변화를 디지털 신호로 인식하며, 누르지 않았을 때는 HIGH (5V), 눌렀을 때는 LOW (0V)로 표시됩니다.

    요약하면, 조이스틱을 움직이면 VRX 및 VRY의 전압이 변경되며, 이는 Arduino가 0과 1023 사이의 숫자로 읽습니다. 조이스틱을 누르면 SW 핀의 전압이 변경되며, 이는 Arduino가 HIGH 또는 LOW로 읽습니다.

Wiring Diagram

Arduino UNO R4 조이스틱 배선도

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

조이스틱 프로그래밍 방법

조이스틱은 두 개의 구성 요소로 이루어져 있습니다: 아날로그 부분(X 및 Y 축)과 디지털 부분(푸시 버튼).

  • X축 및 Y축의 값을 읽으려면 아날로그 입력 핀에서 analogRead() 함수를 사용하면 됩니다.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • 디지털 부품 중 푸시버튼 부분: 그냥 버튼입니다. 쉽고 효과적인 방법은 ezButton 라이브러리를 사용하는 것입니다. 이 라이브러리는 버튼의 안정성을 관리하고 버튼을 안정적으로 유지하기 위한 내부 시스템도 활성화합니다. Arduino UNO R4 - 버튼 튜토리얼에서 더 많은 정보를 배울 수 있습니다. 이 튜토리얼의 다음 부분에서는 코드 사용 방법을 보여드리겠습니다.

아날로그 핀에서 값을 얻은 후에는 그 값을 관리하기 쉬운 값으로 변경해야 할 수도 있습니다. 다음 섹션에서는 이에 대한 예제 코드를 제공합니다.

아두이노 UNO R4 코드

다음은 Arduino UNO R4의 예제 코드입니다:

  • 예제 코드: 조이스틱에서 아날로그 값을 가져오기
  • 예제 코드: 아날로그 값을 가져오고 조이스틱의 버튼 상태 확인
  • 예제 코드: 아날로그 값을 명령으로 변경: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • 예제 코드: 아날로그 값을 각도로 변환하여 두 개의 서보 모터 제어 (팬-틸트 카메라처럼)

조이스틱에서 아날로그 값을 읽습니다.

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

Detailed Instructions

다음 지침을 단계별로 따르십시오:

  • 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에 업로드하십시오.
  • 조이스틱의 엄지스틱을 끝까지 밀고, 원형으로(시계 방향 또는 반시계 방향) 돌리십시오.
  • 시리얼 모니터에서 결과를 확인하십시오.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 조이스틱을 돌릴 때, 시리얼 모니터를 주시하세요. X 값이 0이면 이 위치를 왼쪽으로 기억하고, 반대는 오른쪽입니다. Y 값이 0이면 이 위치를 위쪽으로 기억하고, 반대는 아래쪽입니다.

아날로그 값을 읽고 조이스틱에서 버튼 상태를 읽습니다.

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // To store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

Detailed Instructions

  • Arduino IDE의 왼쪽에 있는 Libraries 아이콘으로 이동하십시오.
  • “ezButton”을 찾아 ArduinoGetStarted.com에서 제공하는 버튼 라이브러리를 찾으십시오.
  • EzButton 라이브러리를 추가하려면 Install 버튼을 누르십시오.
아두이노 UNO R4 버튼 라이브러리
  • 코드를 복사하여 Arduino IDE에서 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드합니다.
  • 조이스틱 엄지패드를 왼쪽, 오른쪽, 위쪽 또는 아래쪽으로 이동합니다.
  • 조이스틱의 상단을 누릅니다.
  • 시리얼 모니터에서 결과를 확인합니다.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

아날로그 값을 이동 명령(왼쪽/오른쪽/위/아래)으로 변환합니다.

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int xValue = 0 ; // To store value of the X axis int yValue = 0 ; // To store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // 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"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Detailed Instructions

  • 위의 코드를 복사하여 Arduino IDE로 엽니다.
  • Arduino IDE에서 Upload 버튼을 클릭하여 코드를 Arduino UNO R4에 업로드합니다.
  • 조이스틱 엄지손가락을 왼쪽, 오른쪽, 위, 아래 또는 다른 방향으로 움직입니다.
  • 시리얼 모니터에서 결과를 확인합니다.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

때때로 명령이 전혀 없거나 하나의 명령, 또는 동시에 두 개의 명령이 있을 수 있습니다(예: 위와 왼쪽 함께).

아날로그 값을 각도로 변환하여 두 개의 서보 모터를 제어합니다.

Arduino UNO R4 - 조이스틱으로 서보 모터 제어 튜토리얼에서 정보를 찾을 수 있습니다.

Video Tutorial

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, 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!