

겨울이 다가오고 아이들은 거의 매일 오후를 집 안에서 보냅니다. 어느 정도의 스크린 타임은 괜찮습니다. 태블릿을 숨기는 부모는 아니니까요. 하지만 계속 똑같은 장면이 눈에 들어왔습니다. 소파에 축 늘어져 또 다른 영상을 보고 있고, 움직임은 전혀 없는 모습이었죠. “뭐라도 가지고 놀러 가서 TV 그만 봐”라고 말해도 오래가지 않습니다. 반면 게임처럼 느껴지는 것은 효과가 있습니다.
그래서 아이들이 이미 익숙한 곳, 즉 TV에서 해결책을 찾기로 했습니다. 내부에 모션 칩과 충전식 배터리를 넣은 작은 상자를 만들어 벨트에 끼울 수 있게 했습니다. 점프하면 화면 속 캐릭터도 점프하고, 몸을 숙이면 장애물 아래로 숙여 지나갑니다. Raspberry Pi는 Bluetooth로 신호를 받으므로 거실을 가로지르는 케이블이 없습니다. 게임 이름은 BlobJump입니다. 우리 모두 알고 있는 공룡 러너 게임과 기본적으로 같지만, 몸이 컨트롤러 역할을 합니다.
일부러 리모컨을 두 개 만들었습니다. 하나에는 파란색 버튼(남자 주인공), 다른 하나에는 빨간색 버튼(여자 주인공)이 있습니다. 펌웨어를 플래시할 때 이를 설정하며, 플레이 중에도 버튼을 짧게 누르면 서로 바꿀 수 있습니다. 두 번째 아이가 벨트를 켜면 Pi가 화면을 분할하고, 두 아이가 나란히 같은 장애물을 달립니다.
이 Instructable에서는 전체 제작 과정을 설명합니다. LiPo와 충전 보드, ESP32-C3와 MPU-6050을 배선하고, 펌웨어를 플래시한 다음 Pi가 벨트와 통신하도록 설정하는 과정입니다. 컨트롤러 하나에서 멈추고 나중에 두 번째 컨트롤러를 추가해도 됩니다. 벨트 고리가 있는 간단한 케이스도 출력했지만, 첫 테스트라면 골판지와 테이프로도 충분합니다.
퇴근 후 납땜한다면 주말 한두 번 정도를 예상하세요. 저처럼 납땜을 잘 못한다면 더 걸릴 수 있습니다. 기본적인 전자 회로 지식이 있고 Pi에서 터미널 명령 몇 개를 복사해 실행할 수 있어야 합니다. 게임 자체는 학령기 어린이를 위한 것이지만, 제작 과정은 성인이 담당해야 하며 특히 배터리 주변 작업은 주의가 필요합니다.
아무튼 여러분의 집도 ‘실내 활동 시즌’이 되어 소파에 늘어져 지내는 악순환에 지쳤다면, 이 프로젝트가 도움이 될지도 모릅니다. 아래에 단계를 정리했습니다. 준비가 되면 점프해 보세요.


벨트 리모컨 1개와 Raspberry Pi 1대. 2인용으로 만들려면 ‘각 벨트’ 항목의 모든 부품을 2배로 준비하세요.
각 벨트
• ESP32-C3 SuperMini(파란색 또는 빨간색 펌웨어 플래시)
• GY-521 MPU-6050 모듈(I2C, AD0을 GND에 연결)
• LX-LCBST USB-C Li-ion 충전기 + 5 V 부스트(5.0 V로 조정)
• 보호 회로가 포함된 1S LiPo 3.7 V, 500–1000 mAh
• 순간식 버튼(파란색 캡 = 남자 유닛, 빨간색 캡 = 여자 유닛)
• 연결선, 24–26 AWG
• 상자 충전용 USB-C 케이블
• 만능기판, 핀 헤더, 열수축 튜브, MPU용 폼 — 선택 사항
Pi + TV(1회 준비)
• Raspberry Pi Zero 2 W(Bluetooth)
• Raspberry Pi OS가 설치된 16 GB 이상의 microSD
• HDMI 케이블 및 디스플레이
• 5 V USB 전원 공급 장치, 2.5 A 이상
선택 사항
• 뚜껑이 있는 3D 프린트 벨트 상자(PLA 또는 PETG)
도구
• 납땜 인두와 납
• 전선 스트리퍼/니퍼
• 멀티미터
• ESP32 플래시용 USB 케이블
• PlatformIO 또는 Arduino IDE가 설치된 컴퓨터
• Raspberry Pi Imager


이 단계에서 부품 더미에 불과했던 프로젝트가 실제로 벨트에 끼울 수 있는 물건처럼 보이기 시작합니다. 저는 먼저 SuperMini와 GY-521에 핀 헤더를 납땜했습니다. 작은 상자 안에서 작업하는 것보다 작업대에서 하는 편이 쉽습니다. 만능기판을 사용한다면 납땜하기 전에 모든 부품을 배치해 보고 위치를 확인하세요.
이 단계의 주요 이미지로 배선도를 사용하고 작업하는 동안 열어 두세요. 저도 피곤할 때는 SDA와 SCL을 다시 확인합니다.
리모컨 하나를 처음부터 끝까지 완성한 다음, 2인용으로 두 번째 리모컨을 만드세요. 두 리모컨의 배선은 동일합니다. 여기서는 파란색 또는 빨간색 버튼 캡만 선택하고, 나중에 서로 다른 펌웨어를 플래시합니다.
전원(LiPo 부분은 천천히 꼼꼼히 읽으세요)
모션 칩(GY-521)
버튼
파우치 안에 넣기 전에 모든 곳의 공통 접지를 확인하고, SuperMini에서 약 5 V가 측정되는지 확인하세요. MPU 배선은 짧게 유지한 뒤, 처음부터 오래 사용하는 대신 LiPo를 짧게 테스트하세요. motion_test가 정상적으로 작동한 다음 단계에서 파란색 또는 빨간색 펌웨어를 플래시합니다.
코드 받기(처음 한 번):

벨트에 무엇인가를 끼우기 전에 USB를 통해 모션 칩이 작동하는지 확인했습니다. 아직 Raspberry Pi는 사용하지 않습니다. 저장소에는 motion_test라는 스케치가 포함되어 있으며, Mac이나 PC의 시리얼 창에 점프와 숙이기 동작을 출력합니다.
- SuperMini의 USB-C만 사용해 ESP32-C3에 전원을 공급합니다.
- LiPo가 연결되어 있다면 이 테스트를 위해 배터리를 분리합니다.
- MPU를 손에 들거나 폼 위에 올려 둡니다.
- 나중에 벨트에 장착했을 때 TV를 향하게 할 방향과 같은 방향으로 한쪽 모서리를 향하게 합니다.
PlatformIO를 설치합니다(VS Code 확장 프로그램을 사용해도 됩니다). 복제한 저장소에서 터미널을 엽니다.
motion test 폴더로 이동합니다:
데이터 전송용 USB-C 케이블을 연결합니다. 포트를 찾습니다(Mac: /dev에서 cu.usbmodem; Windows: 장치 관리자에서 COM 포트).
보드레이트: 115200
로그가 비어 있으면 보드의 RST를 한 번 누릅니다.
캘리브레이션이 실행되는 동안 TV가 있는 방향을 바라보고 가만히 서 있습니다(약 5초).
제자리에서 점프
[JUMP]
스쿼트하거나 앞으로 몸을 기울이기(오리 자세)
[DUCK] ON
일어서기
[DUCK] OFF
옆으로 발을 끌며 이동하기(엉덩이는 앞을 향한 상태 유지)
[STEP] LEFT 또는 [STEP] RIGHT
GPIO5 버튼을 눌렀다가 놓기
[BTN] down 및 [BTN] up, 그다음 남자 또는 여자 영웅 대사 표시
납땜한 모션 센서와 영웅 버튼을 esp에 연결한 데이터 케이블로 직접 테스트했습니다.


Serial motion_test를 통해 배선이 정상임을 확인했습니다. 이 단계에서는 Bluetooth 펌웨어를 플래시하고, Raspberry Pi로 옮기기 전에 Mac 또는 PC에서 실제 Pygame 앱을 실행합니다. 게임과 벨트는 동일하며, 먼저 노트북 화면에서 실행해 보는 것뿐입니다.
이미 클론한 저장소(github.com/tlk0s/body-ble-games)에서:
열려 있는 serial monitor를 모두 닫습니다. USB 데이터 케이블을 연결합니다.
파란색 버튼 벨트:
빨간색 버튼 벨트:
업로드가 끝나면 컴퓨터에서 USB를 분리해도 됩니다. 플레이할 때는 LiPo 또는 USB 충전 포트로 리모컨에 전원을 공급합니다. Bluetooth 설정에 추가 문자가 붙은 BodyCtrl이라는 이름의 장치가 표시되어야 합니다.
Python 3와 Bluetooth가 켜져 있어야 합니다(Mac 또는 Windows 10 이상).
Windows에서는 .venv/bin/pip 대신 .venv\Scripts\pip를 사용합니다.
Mac 또는 Linux:
Windows(PowerShell, pi 폴더에서):
창이 열립니다. 키보드의 1 또는 2가 아니라 벨트를 기다리는 상태입니다.
선택 사항인 책상 위 2인 플레이: 두 번째 리모컨의 전원을 켭니다. 두 리모컨이 모두 연결되면 게임 화면이 분할됩니다. 어느 벨트에서든 점프하면 시작됩니다.
선택 사항인 메뉴 건너뛰기(곧바로 BlobJump 시작):


처음 책상에서 테스트할 때는 골판지와 테이프로도 충분합니다. 아이들이 소파에서 착용하기 전에, 벨트에 끼울 수 있고 전원 버튼이 노출되며 뚜껑을 매번 열지 않고도 충전할 수 있도록 USB-C 구멍이 있는 작은 상자를 만들고 싶었습니다. 저는 Tinkercad에서 설계했지만(Fusion, OpenSCAD 또는 슬라이서와 호환되는 도구를 사용해도 됩니다), 웹 기반 파라메트릭 상자 생성기의 도움도 일부 받았습니다.
조립 상태가 꽤 빡빡하지만, 약간의 핫 글루 마법과 전기 테이프를 사용하면 모든 부품을 단단히 고정할 수 있습니다 ;)

Pi는 TV 뒤에 놓습니다. 전원을 켜면 전체 화면으로 BlobJump가 실행되고, 벨트 리모컨은 Bluetooth로 연결됩니다. 저는 Pi에 키보드를 한 번도 연결하지 않았습니다. 아래의 모든 작업은 노트북에서 SSH를 통해 수행하며, 첫 부팅 전에 Raspberry Pi Imager에서 한 번만 옵션을 설정합니다.
Raspberry Pi Imager를 설치합니다. microSD를 삽입합니다.
데스크톱이 포함된 Raspberry Pi OS를 선택합니다(Zero 2 W에서는 32-bit도 충분합니다). 톱니바퀴 아이콘을 클릭합니다(사용자 지정):
카드에 기록합니다. 카드를 Pi에 넣고 HDMI로 TV에 연결한 다음 전원을 켭니다. 약 2분간 기다립니다.
노트북에서(Pi와 동일한 Wi-Fi에 연결):
.local이 작동하지 않으면 라우터에서 Pi의 IP를 확인한 다음:
ssh pi@192.168.x.x
처음 로그인할 때는 Imager에서 설정한 비밀번호를 사용합니다.
그룹 설정이 적용되도록 SSH에서 로그아웃한 후 다시 로그인합니다:
Bluetooth 확인:
Powered는 yes로 설정합니다.
참고: 64비트 Pi OS에서 dbus-fast를 빌드하면 20분 이상 멈춘 것처럼 보일 수 있습니다. SKIP_CYTHON=1을 사용하면 오래 걸리는 컴파일을 피할 수 있습니다. 32비트 OS에서는 대신 piwheels를 사용할 수 있습니다: pip install -r requirements.txt --extra-index-url https://www.piwheels.org/simple
게임에 화면이 표시되도록 데스크톱이 부팅 시 시작되어야 합니다.
화면 꺼짐 비활성화:
재부팅:
1분 기다린 후 다시 SSH로 접속합니다.
로그인할 때마다 Pi가 start-kiosk.sh를 실행합니다. 즉, git pull, pip install을 실행한 다음 MOCK_BLE=0으로 전체 화면 BlobJump를 실행합니다.
자동 시작 파일을 만듭니다(SSH에서 블록 하나를 붙여넣기):
재부팅:
재부팅 후에는 Pi에서 아무것도 입력하지 않아도 TV에 게임이 표시되어야 합니다. 업데이트 로그는 ~/body-ble-games/pi/kiosk-update.log에 기록됩니다.
Pi의 전원을 껐다가 다시 켜면 게임이 시작되고 리모컨이 연결되며 아이들이 TV 화면에서 점프할 수 있습니다. 노트북은 SSH 업데이트 전용으로 사용하면 됩니다.
벨트 하드웨어와 TV에서 게임을 플레이하는 방식은 직접 손으로 만든 결과물입니다. BlobJump와 런처를 포함한 Raspberry Pi용 Python 게임은 AI 코딩 어시스턴트의 도움을 받아 작성했습니다. 하지만 게임의 조작감은 제가 직접 결정했고, 움직임 임계값을 조정했으며, 아이들과 함께 플레이 테스트를 하고, 실제 하드웨어에서 발생한 문제를 수정했습니다. 무엇이 AI의 도움을 받았고 무엇을 작업대에서 직접 납땜했는지 Instructables 독자들이 알 권리가 있다고 생각해 이를 공개합니다.
읽어 주셔서 감사합니다. 직접 만들어 보신다면 벨트 장착 상태의 사진을 꼭 보고 싶습니다.
원문: https://www.instructables.com/Move-to-Play-Belt-Motion-Controllers-for-a-Two-Pla/