라즈베리 파이 피코 조이스틱

이 가이드에서는 Raspberry Pi Pico와 함께 조이스틱을 사용하는 방법을 배웁니다. 자세하게는, 우리는 다음을 알아봅니다:

라즈베리 파이 피코와 조이스틱

준비물

1×라즈베리 파이 피코 W 아마존
1×라즈베리 파이 피코 (또는) 아마존
1×마이크로 USB 케이블 아마존
1×조이스틱 (Joystick) 쿠팡 | 아마존
1×점퍼케이블 쿠팡 | 아마존
1×(추천) 라즈베리 파이 피코용 스크루 터미널 확장 보드 아마존
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

조이스틱 소개

여러분은 게임, 장난감, 혹은 굴삭기 같은 대형 기계를 제어하는 데 사용되는 조이스틱을 본 적이 있을지도 모릅니다.

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

  • 수평(좌우) 위치에 대해 0부터 1023까지의 범위
  • 수직(상하) 위치에 대해 0부터 1023까지의 범위
  • 버튼의 상태, ON (HIGH) 또는 OFF (LOW)

두 개의 아날로그 값을 혼합하면 2차원 좌표가 생성됩니다. 이 좌표는 조이스틱이 움직이지 않을 때 중앙에 위치합니다. 다음 섹션에서 다룰 테스트 코드를 사용하면 좌표의 실제 방향을 알아낼 수 있습니다.

일부 응용 프로그램은 세 가지 출력 모두를 사용할 수 있는 반면, 다른 응용 프로그램은 몇 가지만 사용할 수 있습니다.

핀아웃

조이스틱에는 다섯 개의 핀이 있습니다.

  • GND 핀: GND (0V)에 연결
  • VCC 핀: Raspberry Pico의 VCC (3.3V)에 연결
  • VRX 핀: 수평 위치 (X 좌표)의 아날로그 값을 제공하므로, 이 핀을 Raspberry Pico의 ADC 핀에 연결
  • VRY 핀: 수직 위치 (Y 좌표)의 아날로그 값을 제공하므로, 이 핀을 Raspberry Pico의 ADC 핀에 연결
  • SW 핀: 조이스틱의 푸시 버튼에 연결됩니다. 기본적으로 열려 있으며, 버튼이 눌리지 않았을 때 HIGH, 눌렸을 때 LOW로 유지하도록 풀업 저항을 사용합니다.
조이스틱 핀아웃

작동 원리

  • 왼쪽/오른쪽 움직임:
    • 조이스틱을 왼쪽 또는 오른쪽으로 이동하면 VRX 핀의 전기 신호(전압)가 변합니다.
    • 왼쪽으로 이동하면 전압이 0V로 감소합니다.
    • 오른쪽으로 이동하면 전압이 3.3V로 증가합니다.
    • Raspberry Pi Pico는 이 전압을 측정하여 0부터 1023까지의 숫자로 변환합니다. 따라서 0V는 0, 5V는 1023입니다.
  • 위/아래 움직임:
    • 조이스틱을 위나 아래로 이동하면 VRY 핀의 전압이 변경됩니다.
    • 위로 이동하면 전압이 0V로 감소합니다.
    • 아래로 이동하면 전압이 3.3V로 증가합니다.
    • Raspberry Pi Pico도 이 전압을 읽어 VRX 핀 때와 마찬가지로 0부터 1023까지의 숫자로 변환합니다.
  • 결합된 움직임:
    • 조이스틱을 어떤 방향으로 움직이든 각 축을 따라 위치에 따라 VRX와 VRY 핀의 전압이 모두 변경됩니다.
  • 조이스틱 누름:
    • 조이스틱을 누르면 내부 버튼이 활성화됩니다.
    • SW 핀에 풀업 저항을 연결하면 버튼이 눌렸을 때 이 핀의 전압이 5V에서 0V로 떨어집니다.
    • Raspberry Pi Pico는 이를 디지털 신호로 감지하여, 눌리지 않았을 때는 HIGH(5V), 눌렸을 때는 LOW(0V)로 표시합니다.

    조이스틱을 움직이면 VRX와 VRY의 전압이 조절됩니다. 라즈베리 파이 파이코는 이러한 변화를 0부터 1023까지의 숫자로 읽습니다. 조이스틱을 누르면 SW 핀의 전압이 변경되며, 라즈베리 파이 파이코는 이를 HIGH 또는 LOW로 감지합니다.

선연결

라즈베리 파이 피코 조이스틱 배선 다이어그램

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

조이스틱 프로그래밍 방법

다행히도, DIYables는 Raspberry Pi Pico와 함께 조이스틱을 사용하는 과정을 크게 단순화하는 조이스틱 라이브러리를 개발했습니다.

라즈베리 파이 피코 코드 - 조이스틱 상태 읽기

아래의 MicroPython 스크립트는 다음과 같이 작동합니다:

  • 조이스틱의 아날로그 값을 읽는다.
  • 조이스틱 버튼이 눌렸는지 또는 해제되었는지 확인한다.
  • 조이스틱 버튼의 누름 횟수를 읽는다.
/* * 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다 * 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-joystick */ from DIYables_MicroPython_Joystick import Joystick import time # Initialize the joystick with the corresponding pins for X, Y, and button joystick = Joystick(pin_x=26, pin_y=27, pin_button=22) # Configure the debounce time if necessary (default is 50ms) joystick.set_debounce_time(100) # debounce time set to 100 milliseconds while True: joystick.loop() # Must be called frequently to process button debouncing # Read the analog values from the X and Y axes x_value = joystick.read_x() y_value = joystick.read_y() press_count = joystick.get_press_count() # Check if the button has been pressed or released if joystick.is_pressed(): print("Button Pressed") if joystick.is_released(): print("Button Released") # Print the joystick's X and Y coordinates, and pressed count print(f'Joystick Position - X: {x_value}, Y: {y_value}, pressed count: {press_count}') time.sleep(0.05) # Delay to reduce the output frequency

자세한 사용 방법

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

  • 컴퓨터에 Thonny IDE가 설치되어 있는지 확인하십시오.
  • Raspberry Pi Pico에 MicroPython 펌웨어가 설치되어 있는지 확인하십시오.
  • Raspberry Pi Pico를 처음 사용한다면, 자세한 설명은 라즈베리 파이 피코 - 시작하기 자습서를 참조하십시오.
  • 제공된 다이어그램에 따라 조이스틱을 Raspberry Pi Pico에 연결하십시오.
  • USB 케이블을 사용하여 Raspberry Pi Pico를 컴퓨터에 연결하십시오.
  • 컴퓨터에서 Thonny IDE를 실행하십시오.
  • Thonny IDE에서 Tools Options를 통해 MicroPython (Raspberry Pi Pico) Interpreter를 선택하십시오.
  • Interpreter 탭에서 드롭다운 메뉴에서 MicroPython (Raspberry Pi Pico)를 선택하십시오.
  • 올바른 포트가 선택되어 있는지 확인하십시오. Thonny IDE가 자동으로 포트를 감지해야 하지만, 경우에 따라 수동으로 선택해야 할 수도 있습니다 (예: Windows의 COM3 또는 Linux의 /dev/ttyACM0).
  • Thonny IDE에서 Tools Manage packages로 이동하십시오.
  • “DIYables-MicroPython-Joystick”을 검색한 후, DIYables에서 만든 조이스틱 라이브러리를 찾으십시오.
  • DIYables-MicroPython-Joystick을 클릭한 후, Install 버튼을 클릭하여 조이스틱 라이브러리를 설치하십시오.
라즈베리 파이 피코 조이스틱 라이브러리
  • 위 코드를 복사하여 Thonny IDE의 에디터에 붙여넣습니다.
  • 스크립트를 Raspberry Pi Pico에 저장하려면:
    • 저장 버튼을 클릭하거나 Ctrl+S 키를 사용합니다.
    • 저장 대화 상자에서 두 개의 섹션, 'This computer'와 'Raspberry Pi Pico'가 표시됩니다. Raspberry Pi Pico를 선택합니다.
    • 파일 이름을 main.py로 저장합니다.
  • 초록색 Run 버튼을 클릭하거나 (또는 F5 키를 눌러) 스크립트를 실행합니다. 스크립트가 실행됩니다.
  • 조이스틱을 왼쪽, 오른쪽, 위 또는 아래로 이동합니다.
  • 조이스틱 상단을 눌러 줍니다.
  • Thonny 하단의 Shell에서 메시지를 확인합니다.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot MPY: soft reboot Joystick Position - X: 2003, Y: 2088, pressed count: 0 Joystick Position - X: 1977, Y: 2076, pressed count: 0 Joystick Position - X: 1980, Y: 2078, pressed count: 0 Joystick Position - X: 802, Y: 2076, pressed count: 0 Joystick Position - X: 1201, Y: 2062, pressed count: 0 Joystick Position - X: 1362, Y: 2060, pressed count: 0 Joystick Position - X: 463, Y: 2079, pressed count: 0 Joystick Position - X: 21, Y: 18, pressed count: 0 Button Pressed Joystick Position - X: 22, Y: 18, pressed count: 0 Joystick Position - X: 21, Y: 19, pressed count: 0 Joystick Position - X: 21, Y: 20, pressed count: 0 Joystick Position - X: 21, Y: 18, pressed count: 0 Joystick Position - X: 21, Y: 19, pressed count: 0 Button Released Joystick Position - X: 9, Y: 18, pressed count: 1 Joystick Position - X: 20, Y: 791, pressed count: 1 Joystick Position - X: 22, Y: 901, pressed count: 1 Joystick Position - X: 1130, Y: 2061, pressed count: 1 Joystick Position - X: 1699, Y: 2067, pressed count: 1 Joystick Position - X: 2000, Y: 2054, pressed count: 1 Button Pressed Joystick Position - X: 1972, Y: 2061, pressed count: 1 Joystick Position - X: 1982, Y: 2077, pressed count: 1 Joystick Position - X: 1992, Y: 2074, pressed count: 1 Joystick Position - X: 1992, Y: 2078, pressed count: 1 Joystick Position - X: 1992, Y: 2077, pressed count: 1 Joystick Position - X: 1981, Y: 4095, pressed count: 1 Button Released Joystick Position - X: 3124, Y: 4095, pressed count: 2 Joystick Position - X: 4066, Y: 4095, pressed count: 2 Joystick Position - X: 1998, Y: 2063, pressed count: 2 Joystick Position - X: 1130, Y: 4095, pressed count: 2 Joystick Position - X: 20, Y: 4095, pressed count: 2 Button Pressed Joystick Position - X: 21, Y: 4095, pressed count: 2 Joystick Position - X: 21, Y: 4095, pressed count: 2 Joystick Position - X: 1976, Y: 2082, pressed count: 2 Joystick Position - X: 1974, Y: 2072, pressed count: 2 Button Released Joystick Position - X: 1997, Y: 2062, pressed count: 3
MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡
  • 조이스틱을 사용하는 동안, Thonny 하단의 쉘에서 확인하세요. 만약 X 값이 0이라면 이는 왼쪽을 의미하며, 그렇지 않으면 오른쪽을 의미합니다. 만약 Y 값이 0이라면 이 위치는 위쪽이며, 그렇지 않으면 아래쪽입니다.

X/Y 값의 이론상의 범위는 0부터 4095까지이나, 실제로는 조이스틱의 기계적 특성 때문에 값들이 일반적으로 이 극한에 도달하지 않습니다. 이러한 차이는 일반적인 응용 분야에서 정상적이며 허용됩니다.

만약 스크립트 이름을 main.py으로 지정하고 이를 Raspberry Pi Pico의 루트 디렉토리에 저장하면, Pico가 전원이 공급되거나 리셋될 때마다 자동으로 실행됩니다. 이는 전원이 켜지자마자 즉시 실행되어야 하는 독립 실행 애플리케이션에 유용합니다. 만약 스크립트 이름을 main.py 이외의 이름으로 지정하면, Thonnys's Shell에서 수동으로 실행해야 합니다.

아날로그 값을 좌/우/상/하 이동 명령어로 변환

아래의 MicroPython 스크립트는 아날로그 값을 명령어로 변환합니다: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN.

/* * 이 라즈베리 파이 피코 코드는 newbiely.kr 에서 개발되었습니다 * 이 라즈베리 파이 피코 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/raspberry-pico/raspberry-pi-pico-joystick */ from DIYables_MicroPython_Joystick import Joystick import time # Constants for threshold values LEFT_THRESHOLD = 1000 RIGHT_THRESHOLD = 3000 UP_THRESHOLD = 1000 DOWN_THRESHOLD = 3000 # Command constants COMMAND_NO = 0x00 COMMAND_LEFT = 0x01 COMMAND_RIGHT = 0x02 COMMAND_UP = 0x04 COMMAND_DOWN = 0x08 # Initialize the joystick with the corresponding pins for X, Y, and button (GP26-ADC0, GP27-ADC1, GP22) joystick = Joystick(pin_x=26, pin_y=27, pin_button=22) # Configure the debounce time if necessary (default is 50ms) joystick.set_debounce_time(100) # debounce time set to 100 milliseconds def check_commands(x_value, y_value): command = COMMAND_NO # Check for left/right commands if x_value < LEFT_THRESHOLD: command |= COMMAND_LEFT elif x_value > RIGHT_THRESHOLD: command |= COMMAND_RIGHT # Check for up/down commands if y_value < UP_THRESHOLD: command |= COMMAND_UP elif y_value > DOWN_THRESHOLD: command |= COMMAND_DOWN return command while True: x_value = joystick.read_x() y_value = joystick.read_y() command = check_commands(x_value, y_value) if command & COMMAND_LEFT: print("COMMAND LEFT") if command & COMMAND_RIGHT: print("COMMAND RIGHT") if command & COMMAND_UP: print("COMMAND UP") if command & COMMAND_DOWN: print("COMMAND DOWN") time.sleep(0.5) # Delay to reduce the output frequency

자세한 사용 방법

  • 위의 코드를 복사하여 Thonny IDE에서 엽니다.
  • 스크립트를 Raspberry Pi Pico에 저장합니다.
  • 조이스틱을 왼쪽, 오른쪽, 위쪽, 아래쪽 또는 임의의 방향으로 움직입니다.
  • Thonny 하단의 Shell에서 메시지를 확인합니다.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot MPY: soft reboot COMMAND UP COMMAND RIGHT COMMAND DOWN COMMAND DOWN COMMAND DOWN COMMAND RIGHT COMMAND DOWN COMMAND RIGHT COMMAND DOWN COMMAND LEFT COMMAND DOWN
MicroPython (Raspberry Pi Pico) • Board CDC @ COM29 ≡

※ 주의:

명령이 없을 수도 있고, 하나의 명령일 수도 있으며, 심지어 동시에 두 개의 명령이 있을 수도 있습니다. 예를 들어, 위쪽과 왼쪽 명령을 동시에 입력하는 경우처럼.

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

라즈베리 파이 피코 - 조이스틱 - 서보 모터 튜토리얼에서 자세한 내용을 확인하세요.

동영상

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