Lunar Lander on your phone, Jedi controls on the Arduino
Written in javascript & Arduino wiring, this project lets you control a smartphone with your mind (and an UNO), runs on both Android and iOS
Lunar Lander를 “물리 컨트롤러”로 조종하기
스마트폰 게임을 Arduino + Ethernet으로 제어하는 Raw TCP 컨트롤러 제작기
PROJECT DESCRIPTION
이 프로젝트는 스마트폰에서 실행되는 Lunar Lander(자바스크립트 게임) 를, Arduino UNO + Ethernet Shield 로 만든 물리 컨트롤러(버튼 + 가변저항)로 조종하는 제작기입니다.
핵심은 “마이크로컨트롤러/폰에 무거운 서버를 올리는 대신” Raw TCP 소켓 통신으로 오버헤드를 줄여 조작 지연(latency) 을 최소화하는 것입니다.
배경 및 동기
Lunar Lander의 오마주 클론(비상업용) 프로젝트가 존재했고, 이를 iOS/Android 에서 돌려보고 싶었습니다.
“스마트폰을 컨트롤러로 조종”이 아니라, 반대로 현실의 컨트롤러로 스마트폰 게임을 조종하는 경험을 만들고 싶었습니다.
네트워크 입력은 지연이 곧 체감 난이도라, Raw TCP(Chrome sockets 기반) 로 오버헤드를 줄이는 접근을 선택했습니다.
시스템 아키텍처
프로젝트의 전체 구성은 다음과 같습니다.
로컬 컨트롤러(Arduino UNO + Ethernet Shield)
아날로그 입력: 가변저항(스로틀 역할)
디지털 입력: 버튼(액션/트리거)
스마트폰 앱(웹 기반, Evothings Studio/Viewer로 실행)
스마트폰에서 게임 UI를 띄우고
TCP 소켓으로 Arduino에 연결해 입력을 받아 게임 동작에 반영
데이터 흐름
사용자가 가변저항/버튼 조작
Arduino가 값을 읽고(또는 이벤트를 만들고) TCP로 전송
스마트폰 앱이 TCP로 수신 → 게임 조작값으로 변환
결과적으로 “폰에서 게임은 돌아가되, 조작은 현실의 컨트롤러”가 담당
준비물 (Components)
Hardware
Arduino UNO ×1
Arduino Ethernet Shield(또는 Ethernet 연결 수단) ×1
가변저항(일반적으로 10kΩ) ×1
푸시버튼 ×1
브레드보드, 점퍼 케이블
Software
Evothings Studio(Workbench + Viewer)
(예제 소스) Evothings demo repo의 Lunar Lander 폴더(앱/Arduino 스케치 포함)
하드웨어 구성
가변저항 → A0(Analog 0) 연결
버튼 → D3(Digital 3) 연결
Ethernet Shield 장착 후 라우터(또는 스위치)에 연결
Maker 글에선 여기서 Fritzing/배선 사진 1~2장을 넣으면 “한 번에 이해”가 됩니다. (Hackster 원문에도 Fritzing 스케치가 언급됩니다.)
구현 단계 (DETAILS)
1) Arduino 스케치 업로드
Arduino IDE에서 프로젝트의 arduinoeth.ino(스케치)를 열고 업로드합니다.
업로드 후 Serial Monitor로 Ethernet이 DHCP로 IP를 받는지 확인합니다.
DHCP가 없으면 스케치의 IP 관련 라인을 수동 설정하도록 안내(원문에 “라인 48~50 주석 해제”로 언급)
중요: 최종적으로 “Arduino의 IP 주소”를 메모해 둡니다(앱 설정에 필요).
2) Evothings Studio 준비
PC에 Evothings Workbench 설치
스마트폰에 Evothings Viewer 설치
3) 앱 설정 (IP 입력)
index.html의 IP 입력 영역(원문에서는 line 128의 ArduinoIpAddress 언급)에 Arduino IP를 넣어둡니다.
경우에 따라 app.js에서도 동일 IP로 TCP connect 설정이 필요합니다(원문에서는 line 26 언급).
4) 실행
Workbench에 index.html을 드래그&드롭 → RUN
스마트폰이 Arduino와 같은 Wi-Fi/같은 네트워크에 붙어 있어야 연결됩니다.
연결 후 버튼을 누르면 첫 “착륙 시도”가 시작됩니다.
포인트 정리 (왜 Raw TCP였나?)
이 프로젝트가 재밌는 지점은 “스마트폰 연동”이 아니라, 게임 조작 품질을 네트워크 설계로 끌어올린 것입니다.
원문에서도 “fat server를 피하고 raw TCP로 오버헤드/지연을 줄이려 했다”고 명확히 말합니다.
확장 아이디어
가변저항/버튼 외에 IMU(자이로) 를 붙여 “기울기 조종”으로 확장
LAN이 아닌 외부망 제어를 하려면, TCP 대신 WebSocket 브릿지/중계 서버를 추가해 구조 분리
입력값에 필터(이동평균/저역통과)를 적용해 조작 안정화
마치며
Lunar Lander 같은 단순 게임도, 현실의 입력 장치 + 네트워크 구조가 들어가면 완전히 다른 체험이 됩니다.
이 글의 목적은 “게임 하나 만들기”가 아니라, 연결된 디바이스 입력을 지연 적게 전달하는 방법을 손에 잡히는 예제로 정리하는 데 있습니다.
