라즈베리 파이 조이스틱
이 튜토리얼은 라즈베리 파이와 함께 조이스틱을 사용하는 방법을 안내합니다. 우리는 다음을 탐구할 것입니다:
- 조이스틱이 작동하는 기본 원리
- 조이스틱을 라즈베리 파이에 연결하고 이를 프로그래밍하기
- 조이스틱의 값을 XY 좌표, 모터의 상/하/좌/우 방향 등과 같은 제어 가능한 값으로 변환하기
![라즈베리 파이 조이스틱](https://newbiely.kr/images/cover/raspberry-pi-joystick.jpg)
준비물
1 | × | 라즈베리 파이 5 | 아마존 | |
1 | × | ADS1115 ADC 모듈 | 아마존 | |
1 | × | 조이스틱 (Joystick) | 쿠팡 | 아마존 | |
1 | × | 점퍼케이블 | 쿠팡 | 아마존 | |
1 | × | (추천) 라즈베리 파이용 스크루 터미널 블록 쉴드 | 쿠팡 | 아마존 | |
1 | × | (추천) 라즈베리 파이 프로토타이핑 베이스 플레이트 & 브레드보드 키트 | 아마존 | |
1 | × | (추천) 라즈베리 파이용 HDMI 터치 스크린 모니터 | 아마존 |
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가 됩니다.
![조이스틱 핀아웃](https://newbiely.kr/images/tutorial/joystick-pinout.jpg)
작동 방식
- 조이스틱을 좌우로 움직이면 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로 변합니다.
선연결
![라즈베리 파이 조이스틱 배선도](https://newbiely.kr/images/tutorial/raspberry-pi-joystick-wiring-diagram.jpg)
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
배선 구성을 간단하고 체계적으로 만들기 위해, Raspberry Pi용 스크루 터미널 블록 실드 사용을 권장합니다. 이 실드는 아래와 같이 더욱 안정적이고 관리하기 쉬운 연결을 제공합니다:
![라즈베리 파이 screw terminal block shield](https://newbiely.kr/images/tutorial/raspberry-pi-screw-terminal-block-shield.jpg)
라즈베리 파이 코드
이 섹션에서는 다음과 같은 Raspberry Pi 예제 코드를 제시할 것입니다:
- 예제 코드: 조이스틱에서 아날로그 값 얻기
- 예제 코드: 조이스틱에서 아날로그 값과 버튼 상태 얻기
- 예제 코드: 아날로그 값을 MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN 명령으로 변환하기
- 예제 코드: 두 개의 서보 모터를 제어하기 위한 각도로 아날로그 값 변환하기 (예: 팬 틸트 카메라)
조이스틱에서 아날로그 값을 읽습니다.
자세한 사용 방법
- Raspberry Pi에 Raspbian 또는 기타 Raspberry Pi 호환 운영 체제가 설치되어 있는지 확인하세요.
- Raspberry Pi가 PC와 동일한 로컬 네트워크에 연결되어 있는지 확인하세요.
- 라이브러리를 설치해야 하는 경우 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를 누를 때까지 무한 루프에서 계속 실행됩니다.
아날로그 값을 읽고 조이스틱에서 버튼 상태를 읽습니다.
자세한 사용 방법
- <span class="highlight-text-2">joystick_sw.py</span> 파일을 생성하고 다음 코드를 추가하세요:
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오:
- 조이스틱의 조작 레버를 왼쪽, 오른쪽, 위쪽, 아래쪽으로 움직입니다.
- 조이스틱의 조작 레버를 위에서 누릅니다.
- 터미널에서 결과를 확인합니다.
아날로그 값을 왼쪽/오른쪽/위/아래 이동 명령으로 변환합니다.
자세한 사용 방법
- Python 스크립트 파일 joystick_cmd.py을(를) 생성하고 다음 코드를 추가하세요:
- 파일을 저장하고 터미널에서 다음 명령을 실행하여 Python 스크립트를 실행하십시오:
- 조이스틱을 아무 방향으로나 움직이세요.
- 터미널에서 결과를 확인하세요.
※ 주의:
주어진 순간에는 명령이 없거나, 하나의 명령이 있거나, 동시에 두 개의 명령이 있을 수 있습니다 (예: 위쪽과 왼쪽).
아날로그 값을 각도로 변환하여 두 개의 서보 모터를 제어합니다.
자세한 내용은 Raspberry Pi - 조이스틱으로 서보 모터 제어라는 튜토리얼에서 확인할 수 있습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.