PS2 무선 조이스틱으로 제어하는 아두이노 로봇 탱크
프로젝트 소개
이 튜토리얼에서는 무선 플레이스테이션 2(PS2) 조이스틱으로 로봇 탱크를 조종하는 방법을 단계별로 설명합니다. 아두이노 우노 보드를 메인 컨트롤러로 사용하여 무선 컨트롤러의 명령을 수신하고 모터 속도를 제어합니다. 동일한 원리를 NodeMCU, FireBeetle 등 다른 개발 보드나 다양한 로봇 모델에도 적용할 수 있습니다.
작성자는 앞서 블링크(Blynk) 앱으로 와이파이 제어 탱크, 구글 어시스턴트 음성 제어 탱크, 직접 제작한 차체 탱크 등 다양한 로봇 프로젝트를 진행한 바 있습니다.
필요한 도구 및 재료
| 구분 | 항목 | 비고 |
| 도구 | 납땜 인두 및 납 | 모터 단자 재납땜 대비 |
| EVA 폼 시트 | 알루미늄 섀시와 회로 기판 간 절연용 |
| 양면 테이프 | 폼 시트 부착, H-브리지 모듈 고정 |
| 가위 | 폼 시트 재단용 |
| 하드웨어 | 아두이노 우노 호환 보드 | 메인 컨트롤러 |
| L298N 듀얼 H-브리지 모듈 | 모터 구동용 (3.3V/5V → 12V 증폭) |
| DIY 로봇 탱크 키트 | DC 모터 2개, 기어, 트랙, 볼트/너트 포함, 조립 도구 동봉 |
| PS2 무선 컨트롤러 | 수신기 포함, 시리얼 통신으로 아두이노와 연결 |
| 18650 3.7V 배터리 3개 | 직렬 연결로 11.1V 출력 (12V 모터 구동용) |
| 3S 18650 배터리 홀더 | 탱크 후면 장착용 |
| 18650 배터리 충전기 | 충전용 |
| 점퍼 와이어 (수-암 6개, 수-수 2개) | 신호/전원 연결용 |
| USB Type-B 케이블 | 코드 업로드용 |
2단계: 로봇 조립
키트 조립은 예상보다 수월했습니다. 모든 부품 품질이 양호하고 여분 부품도 포함되어 있어 분실 시에도 문제없었습니다. 육각 렌치와 드라이버 등 조립 도구가 키트에 포함되어 초보자에게 적합합니다. 단, 매뉴얼이 중국어 스프레드시트라 불친절하고 온라인 튜토리얼이 부족해 작성자가 조립 과정을 영상으로 기록했습니다. 알루미늄 섀시가 회로 기판 핀과 접촉 시 쇼트 우려가 있어 EVA 폼으로 절연 처리했습니다.
3단계: 회로 배선
후면에 장착한 3셀 18650 배터리 팩(11.1V)이 전체 회로에 전원을 공급합니다. L298N H-브리지는 아두이노의 5V 신호를 받아 모터에 12V를 공급하며 정/역회전을 제어합니다.
핀 연결표
| 아두이노 핀 | 연결 대상 |
| D3 | H-브리지 ENA (우측 모터 PWM) |
| D5 | H-브리지 IN1 |
| D4 | H-브리지 IN2 |
| D8 | H-브리지 IN3 |
| D7 | H-브리지 IN4 |
| D6 | H-브리지 ENB (좌측 모터 PWM) |
| 5V, GND | H-브리지 5V, GND |
| D10 | PS2 수신기 핀 6 (Attention) |
| D11 | PS2 수신기 핀 2 (Command) |
| D12 | PS2 수신기 핀 1 (Data) |
| D13 | PS2 수신기 핀 7 (Clock) |
| 3.3V, GND | PS2 수신기 핀 5, 4 |
모터 배선: OUT1/OUT2 → 우측 모터, OUT3/OUT4 → 좌측 모터 / 배터리 팩 ± → H-브리지 12V/GND
4단계: 아두이노 IDE 설정
- 아두이노 IDE 최신 버전 설치 (arduino.cc)
- PS2X 라이브러리 설치: GitHub에서 다운로드 후 라이브러리 폴더에 압축 해제
5단계: PS2X 라이브러리 핵심 기능
빌 포터(Bill Porter)의 PS2X 라이브러리를 사용합니다. 주요 클래스/함수:
PS2X ps2x; - 컨트롤러 객체 생성
ps2x.config_gamepad(clock, command, attention, data, pressures?, rumble?) - 핀 연결 및 설정, 에러 코드 반환
ps2x.Button(button) - 디지털 버튼 상태 읽기 (PSB_PAD_UP, PSB_RED, PSB_L1 등)
ps2x.Analog(stick_axis) - 아날로그 스틱 값 읽기 (0~255, PSS_LX, PSS_LY, PSS_RX, PSS_RY)
6단계: 스케치 #1 - 방향키 제어 (디지털 입력)
고전 게임기처럼 방향키 4개로 전진/후진/좌회전/우회전을 제어합니다. 버튼은 ON/OFF만 감지하므로 모터는 최대 속도(1023 PWM)로 동작합니다. 회전 시 좌우 모터를 반대 방향으로 구동하여 제자리 회전합니다.
7단계: 스케치 #2 - 좌측 아날로그 스틱 + L2/R2 버튼 (레이싱 게임 스타일)
좌측 스틱 X축으로 조향, R2로 전진 가속, L2로 후진을 제어합니다. 스틱 값(0~255)을 -1023~1023으로 매핑하여 좌우 모터 속도 차이를 만듭니다.
8단계: 스케치 #3 - 양쪽 아날로그 스틱 (차동 구동)
좌측 스틱 Y축 → 좌측 트랙, 우측 스틱 Y축 → 우측 트랙을 독립 제어합니다. 실제 중장비 조작감을 줍니다. 데드밴드(±50) 내에서 모터 정지.
9단계: 스케치 #4 - 좌측 아날로그 스틱 단독 제어 (아케이드 스타일)
하나의 스틱 X/Y축을 조합하여 차동 구동을 구현합니다. 버튼 자원을 절약할 수 있으나 조작 난이도가 높습니다. 참고 알고리즘을 변형하여 사용했습니다.
10단계: 마무리 및 참고 자료
작성자의 다른 로봇 프로젝트: 조이 로봇, 와이파이 FPV 로봇, 넌척 제어 로봇팔, 브라우저 제어 로봇팔 등. 비트코인 후원 주소도 공개되어 있습니다.
소스 코드 (4가지 스케치 전체 제공)
각 스케치는 PS2X 라이브러리 초기화, 핀 설정, 메인 루프에서 컨트롤러 읽기 및 모터 제어 로직으로 구성됩니다. 시리얼 모니터로 디버깅 메시지 출력 지원.
회로도
제공된 이미지 2장: 전체 배선도 및 PS2 수신기 핀아웃 상세도