---
title: "Lunar Lander on your phone, Jedi controls on the Arduino"
url: "https://maker.wiznet.io/Alan/projects/lunar-lander-on-your-phone-jedi-controls-on-the-arduino/"
markdown_url: "https://maker.wiznet.io/Alan/projects/lunar-lander-on-your-phone-jedi-controls-on-the-arduino/md"
type: "UCC: User Created Content"
author: "Alex Jonsson"
author_url: "https://www.hackster.io/evo/lunar-lander-on-your-phone-jedi-controls-on-the-arduino-f5e247"
editor: "WIZnet"
editor_url: "https://maker.wiznet.io/"
original_author: "Alex Jonsson"
original_url: "https://www.hackster.io/evo/lunar-lander-on-your-phone-jedi-controls-on-the-arduino-f5e247"
published: "2026-01-23"
language: "en"
likes: 0
views: 574
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# 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

Original author: Alex Jonsson (source: https://www.hackster.io/evo/lunar-lander-on-your-phone-jedi-controls-on-the-arduino-f5e247)

## Article

## Lunar Lander를 “물리 컨트롤러”로 조종하기

스마트폰 게임을 Arduino + Ethernet으로 제어하는 Raw TCP 컨트롤러 제작기

### PROJECT DESCRIPTION

![](https://maker.wiznet.io/upload/ckeditor5/419353361%5F1769189729%2Epng)

이 프로젝트는 **스마트폰에서 실행되는 Lunar Lander(자바스크립트 게임)** 를, **Arduino UNO + Ethernet Shield** 로 만든 물리 컨트롤러(버튼 + 가변저항)로 조종하는 제작기입니다.
핵심은 “마이크로컨트롤러/폰에 무거운 서버를 올리는 대신” **Raw TCP 소켓 통신**으로 오버헤드를 줄여 **조작 지연(latency)** 을 최소화하는 것입니다.

---

## 배경 및 동기

Lunar Lander의 오마주 클론(비상업용) 프로젝트가 존재했고, 이를 **iOS/Android** 에서 돌려보고 싶었습니다.

“스마트폰을 컨트롤러로 조종”이 아니라, 반대로 **현실의 컨트롤러로 스마트폰 게임을 조종**하는 경험을 만들고 싶었습니다.

네트워크 입력은 지연이 곧 체감 난이도라, **Raw TCP(Chrome sockets 기반)** 로 오버헤드를 줄이는 접근을 선택했습니다.

---

## 시스템 아키텍처

![](https://maker.wiznet.io/upload/ckeditor5/419353361%5F1769189709%2Epng)

프로젝트의 전체 구성은 다음과 같습니다.

**로컬 컨트롤러(Arduino UNO + Ethernet Shield)**

아날로그 입력: 가변저항(스로틀 역할)

디지털 입력: 버튼(액션/트리거)

**스마트폰 앱(웹 기반, Evothings Studio/Viewer로 실행)**

스마트폰에서 게임 UI를 띄우고

TCP 소켓으로 Arduino에 연결해 입력을 받아 게임 동작에 반영

---

## 데이터 흐름

![](https://maker.wiznet.io/upload/ckeditor5/419353361%5F1769189776%2Epng)

사용자가 **가변저항/버튼** 조작

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 스케치 포함)

---

## 하드웨어 구성

![](https://maker.wiznet.io/upload/ckeditor5/419353361%5F1769189787%2Epng)

**가변저항 → 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 같은 단순 게임도, **현실의 입력 장치 + 네트워크 구조**가 들어가면 완전히 다른 체험이 됩니다.
이 글의 목적은 “게임 하나 만들기”가 아니라, **연결된 디바이스 입력을 지연 적게 전달하는 방법**을 손에 잡히는 예제로 정리하는 데 있습니다.

---

Source: https://maker.wiznet.io/Alan/projects/lunar-lander-on-your-phone-jedi-controls-on-the-arduino/
