라즈베리 파이 조이스틱
이 튜토리얼은 라즈베리 파이와 함께 조이스틱을 사용하는 방법을 안내합니다. 우리는 다음을 탐구할 것입니다:
- 조이스틱이 작동하는 기본 원리
- 조이스틱을 라즈베리 파이에 연결하고 이를 프로그래밍하기
- 조이스틱의 값을 XY 좌표, 모터의 상/하/좌/우 방향 등과 같은 제어 가능한 값으로 변환하기
Hardware Preparation
1 | × | Raspberry Pi 4 Model B | Amazon | |
1 | × | ADS1115 ADC Module | Amazon | |
1 | × | Joystick | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (추천) Screw Terminal Block Shield for Raspberry Pi | 쿠팡 | Amazon | |
1 | × | (추천) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B | Amazon | |
1 | × | (추천) Plastic Case and Cooling Fan for Raspberry Pi 4B | Amazon | |
1 | × | (추천) HDMI Touch Screen Monitor for Raspberry Pi | Amazon |
2축 조이스틱에 대하여
당신은 게임 컨트롤러, 장난감 컨트롤러, 또는 굴삭기 조종기와 같은 큰 기계에서처럼 다양한 장소에서 조이스틱을 접했을 수 있습니다.
조이스틱은 사각형으로 배열된 두 개의 가변저항기와 하나의 푸시 버튼으로 구성되어 있습니다. 다음과 같은 출력을 제공합니다:
- 수평 위치에 해당하는 0에서 1023까지의 아날로그 값 (X-좌표로 알려져 있음)
- 수직 위치에 해당하는 0에서 1023까지의 아날로그 값 (Y-좌표로 알려져 있음)
- 푸시 버튼의 디지털 값 (HIGH 또는 LOW)
두 개의 아날로그 값을 결합하면 조이스틱이 쉬고 있을 때의 값을 중심으로 하는 2차원 좌표를 생성할 수 있습니다. 실제 좌표의 방향을 결정하기 위해 테스트 코드를 실행할 수 있습니다(다음 섹션에 설명됨).
일부 애플리케이션은 세 가지 출력 모두를 사용할 수 있으며, 다른 애플리케이션은 일부만 사용할 수 있습니다.
조이스틱 핀아웃
조이스틱은 5개의 핀이 있습니다.
- GND 핀: 이것은 GND(0V)에 연결되어야 합니다.
- VCC 핀: 이것은 VCC(5V)에 연결되어야 합니다.
- VRX 핀: 이것은 수평 위치에 해당하는 아날로그 값을 출력합니다 (X 좌표로 알려져 있음).
- VRY 핀: 이것은 수직 위치에 해당하는 아날로그 값을 출력합니다 (Y 좌표로 알려져 있음).
- SW 핀: 이것은 조이스틱 내부의 푸시버튼으로부터의 출력입니다. 일반적으로 열려 있습니다. 이 핀에 풀업 저항을 사용하면 SW 핀은 눌리지 않았을 때 HIGH, 눌렸을 때 LOW가 됩니다.
작동 방식
- 조이스틱을 좌우로 움직이면 VRX 핀의 전압이 변합니다. 이 전압 범위는 0V에서 5V까지이며, 왼쪽에서는 0V, 오른쪽에서는 5V가 되어 Raspberry Pi의 아날로그 핀에서 0에서 1023까지의 읽기 값이 나옵니다.
- 마찬가지로, 조이스틱을 위아래로 움직이면 VRY 핀의 전압이 변합니다. 이 전압 범위는 0V에서 5V까지이며, 위쪽에서는 0V, 아래쪽에서는 5V가 되어 Raspberry Pi의 아날로그 핀에서 0에서 1023까지의 읽기 값이 나옵니다.
- 조이스틱을 어느 방향으로든 움직이면, 위치를 각 축에 따른 투영에 비례하여 VRX와 VRY 핀의 전압이 변합니다.
- 조이스틱을 위에서 아래로 누르면 조이스틱 안의 푸시 버튼이 닫힙니다. SW 핀에 풀업 저항을 사용하면 SW 핀의 출력이 5V에서 0V로 변하여 Raspberry Pi의 디지털 핀에서 읽기 값이 HIGH에서 LOW로 변합니다.
Wiring Diagram
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:
라즈베리 파이 코드
이 섹션에서는 다음과 같은 Raspberry Pi 예제 코드를 제시할 것입니다:
- 예제 코드: 조이스틱에서 아날로그 값 얻기
- 예제 코드: 조이스틱에서 아날로그 값과 버튼 상태 얻기
- 예제 코드: 아날로그 값을 MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN 명령으로 변환하기
- 예제 코드: 두 개의 서보 모터를 제어하기 위한 각도로 아날로그 값 변환하기 (예: 팬 틸트 카메라)
조이스틱에서 아날로그 값을 읽습니다.
Detailed Instructions
- Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
- Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하세요.
- 라이브러리를 설치해야 하는 경우 Raspberry Pi가 인터넷에 연결되어 있는지 확인하세요.
- Raspberry Pi를 처음 사용하는 경우 Raspberry Pi 설정 방법을 참조하세요.
- Linux와 macOS에서는 내장된 SSH 클라이언트를 사용하거나 Windows에서는 PuTTY를 사용하여 Raspberry Pi에 SSH로 PC를 연결하세요. PC를 Raspberry Pi에 SSH로 연결하는 방법을 참조하세요.
- RPi.GPIO 라이브러리가 설치되어 있는지 확인하세요. 설치되어 있지 않으면 다음 명령어를 사용하여 설치하세요.
- Raspberry Pi 터미널에서 다음 명령을 실행하여 Adafruit_ADS1x15 라이브러리를 설치하세요:
- 파이썬 스크립트 파일 joystick.py를 만들고 다음 코드를 추가하세요:
- 파일을 저장하고 터미널에서 다음 명령어를 실행하여 Python 스크립트를 실행하세요:
- 조이스틱의 엄지를 최대한 밀고 시계 방향 또는 반시계 방향으로 회전하세요.
- 터미널에서 결과를 확인하세요.
조이스틱의 스틱을 돌리는 동안 터미널을 주시하세요.
X 값이 0이면 현재 위치를 왼쪽으로 기록하거나 기억하고, 반대 방향은 오른쪽임을 명심하세요.
Y 값이 0이면 현재 위치를 위로 기록하거나 기억하고, 반대 방향은 아래로 합니다.
스크립트는 터미널에서 Ctrl + C를 누를 때까지 무한 루프에서 계속 실행됩니다.
아날로그 값을 읽고 조이스틱에서 버튼 상태를 읽습니다.
Detailed Instructions
- <span class="highlight-text-2">joystick_sw.py</span> 파일을 생성하고 다음 코드를 추가하세요:
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오:
- 조이스틱의 조작 레버를 왼쪽, 오른쪽, 위쪽, 아래쪽으로 움직입니다.
- 조이스틱의 조작 레버를 위에서 누릅니다.
- 터미널에서 결과를 확인합니다.
아날로그 값을 왼쪽/오른쪽/위/아래 이동 명령으로 변환합니다.
Detailed Instructions
- Python 스크립트 파일 joystick_cmd.py을(를) 생성하고 다음 코드를 추가하세요:
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오:
- 조이스틱을 아무 방향으로나 움직이세요.
- 터미널에서 결과를 확인하세요.
※ NOTE THAT:
주어진 순간에는 명령이 없거나, 하나의 명령이 있거나, 동시에 두 개의 명령이 있을 수 있습니다 (예: 위쪽과 왼쪽).
아날로그 값을 각도로 변환하여 두 개의 서보 모터를 제어합니다.
자세한 내용은 Raspberry Pi - 조이스틱으로 서보 모터 제어라는 튜토리얼에서 확인할 수 있습니다.
Video Tutorial
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.