메뉴 전체보기

회원메뉴

움직이며 플레이하기: 2인용 Raspberry Pi 게임을 위한 벨트 모션 컨트롤러 > 게시판

본문 바로가기

쇼핑몰 검색

NO. 3512
제목 : 움직이며 플레이하기: 2인용 Raspberry Pi 게임을 위한 벨트 모션 컨트롤러
2026-10-03 18:09

소개: 움직이며 플레이하기: 2인용 Raspberry Pi 게임을 위한 벨트 모션 컨트롤러


겨울이 다가오고 아이들은 거의 매일 오후를 집 안에서 보냅니다. 어느 정도의 스크린 타임은 괜찮습니다. 태블릿을 숨기는 부모는 아니니까요. 하지만 계속 똑같은 장면이 눈에 들어왔습니다. 소파에 축 늘어져 또 다른 영상을 보고 있고, 움직임은 전혀 없는 모습이었죠. “뭐라도 가지고 놀러 가서 TV 그만 봐”라고 말해도 오래가지 않습니다. 반면 게임처럼 느껴지는 것은 효과가 있습니다.

그래서 아이들이 이미 익숙한 곳, 즉 TV에서 해결책을 찾기로 했습니다. 내부에 모션 칩과 충전식 배터리를 넣은 작은 상자를 만들어 벨트에 끼울 수 있게 했습니다. 점프하면 화면 속 캐릭터도 점프하고, 몸을 숙이면 장애물 아래로 숙여 지나갑니다. Raspberry Pi는 Bluetooth로 신호를 받으므로 거실을 가로지르는 케이블이 없습니다. 게임 이름은 BlobJump입니다. 우리 모두 알고 있는 공룡 러너 게임과 기본적으로 같지만, 몸이 컨트롤러 역할을 합니다.

일부러 리모컨을 두 개 만들었습니다. 하나에는 파란색 버튼(남자 주인공), 다른 하나에는 빨간색 버튼(여자 주인공)이 있습니다. 펌웨어를 플래시할 때 이를 설정하며, 플레이 중에도 버튼을 짧게 누르면 서로 바꿀 수 있습니다. 두 번째 아이가 벨트를 켜면 Pi가 화면을 분할하고, 두 아이가 나란히 같은 장애물을 달립니다.

이 Instructable에서는 전체 제작 과정을 설명합니다. LiPo와 충전 보드, ESP32-C3와 MPU-6050을 배선하고, 펌웨어를 플래시한 다음 Pi가 벨트와 통신하도록 설정하는 과정입니다. 컨트롤러 하나에서 멈추고 나중에 두 번째 컨트롤러를 추가해도 됩니다. 벨트 고리가 있는 간단한 케이스도 출력했지만, 첫 테스트라면 골판지와 테이프로도 충분합니다.

퇴근 후 납땜한다면 주말 한두 번 정도를 예상하세요. 저처럼 납땜을 잘 못한다면 더 걸릴 수 있습니다. 기본적인 전자 회로 지식이 있고 Pi에서 터미널 명령 몇 개를 복사해 실행할 수 있어야 합니다. 게임 자체는 학령기 어린이를 위한 것이지만, 제작 과정은 성인이 담당해야 하며 특히 배터리 주변 작업은 주의가 필요합니다.

아무튼 여러분의 집도 ‘실내 활동 시즌’이 되어 소파에 늘어져 지내는 악순환에 지쳤다면, 이 프로젝트가 도움이 될지도 모릅니다. 아래에 단계를 정리했습니다. 준비가 되면 점프해 보세요.




STEP 1. 준비물


준비물


준비물


벨트 리모컨 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




STEP 2. 벨트 리모컨 납땜 및 배선


벨트 리모컨 납땜 및 배선


벨트 리모컨 납땜 및 배선


이 단계에서 부품 더미에 불과했던 프로젝트가 실제로 벨트에 끼울 수 있는 물건처럼 보이기 시작합니다. 저는 먼저 SuperMini와 GY-521에 핀 헤더를 납땜했습니다. 작은 상자 안에서 작업하는 것보다 작업대에서 하는 편이 쉽습니다. 만능기판을 사용한다면 납땜하기 전에 모든 부품을 배치해 보고 위치를 확인하세요.

이 단계의 주요 이미지로 배선도를 사용하고 작업하는 동안 열어 두세요. 저도 피곤할 때는 SDA와 SCL을 다시 확인합니다.

리모컨 하나를 처음부터 끝까지 완성한 다음, 2인용으로 두 번째 리모컨을 만드세요. 두 리모컨의 배선은 동일합니다. 여기서는 파란색 또는 빨간색 버튼 캡만 선택하고, 나중에 서로 다른 펌웨어를 플래시합니다.

전원(LiPo 부분은 천천히 꼼꼼히 읽으세요)

  1. LiPo B+ / B− → USB-C 충전 보드 → LX-LCBST B+ / B−
  2. LX-LCBST VO+ → SuperMini 5V; VO− → GND
  3. 자리를 떠나기 전에 멀티미터로 부스트 전압을 5.0 V로 조정하세요.
  4. 전원 버튼은 배터리의 원시 전원 경로에만 연결하는 것이 아닙니다. 절전/깨우기 기능을 위해 GPIO5와 GND 사이에 연결합니다.

모션 칩(GY-521)

  1. VCC → 3V3, GND → GND
  2. SDA → GPIO8, SCL → GPIO9 — 움직임이 전혀 감지되지 않으면 가장 먼저 SDA와 SCL이 뒤바뀌었는지 확인합니다.
  3. AD0 → GND(주소 0x68)

버튼

  1. 한쪽 다리 → GPIO5, 다른 쪽 다리 → GND
  2. ‘남자’로 플래시할 유닛에는 파란색 캡을, ‘여자’ 유닛에는 빨간색 캡을 장착합니다. 어느 쪽이든 배선은 같습니다.

파우치 안에 넣기 전에 모든 곳의 공통 접지를 확인하고, SuperMini에서 약 5 V가 측정되는지 확인하세요. MPU 배선은 짧게 유지한 뒤, 처음부터 오래 사용하는 대신 LiPo를 짧게 테스트하세요. motion_test가 정상적으로 작동한 다음 단계에서 파란색 또는 빨간색 펌웨어를 플래시합니다.




STEP 3. GitHub에서 코드 동기화하기


코드 받기(처음 한 번):

git clone https://github.com/tlk0s/body-ble-games.git
cd body-ble-games





STEP 4. 컴퓨터에서 리모컨 테스트하기(점프, 숙이기, 옆걸음)


컴퓨터에서 리모컨 테스트하기(점프, 숙이기, 옆걸음)


벨트에 무엇인가를 끼우기 전에 USB를 통해 모션 칩이 작동하는지 확인했습니다. 아직 Raspberry Pi는 사용하지 않습니다. 저장소에는 motion_test라는 스케치가 포함되어 있으며, Mac이나 PC의 시리얼 창에 점프와 숙이기 동작을 출력합니다.

작업대에서의 설정

- SuperMini의 USB-C만 사용해 ESP32-C3에 전원을 공급합니다.

- LiPo가 연결되어 있다면 이 테스트를 위해 배터리를 분리합니다.

- MPU를 손에 들거나 폼 위에 올려 둡니다.

- 나중에 벨트에 장착했을 때 TV를 향하게 할 방향과 같은 방향으로 한쪽 모서리를 향하게 합니다.


펌웨어 플래시하기

PlatformIO를 설치합니다(VS Code 확장 프로그램을 사용해도 됩니다). 복제한 저장소에서 터미널을 엽니다.

motion test 폴더로 이동합니다:

cd body-ble-games/firmware/motion_test

데이터 전송용 USB-C 케이블을 연결합니다. 포트를 찾습니다(Mac: /dev에서 cu.usbmodem; Windows: 장치 관리자에서 COM 포트).


파란색 버튼 리모컨:

make flash-blue


빨간색 버튼 리모컨:

make flash-red


어느 리모컨이든(일반):

make flash


SERIAL MONITOR 열기

보드레이트: 115200
make monitor

로그가 비어 있으면 보드의 RST를 한 번 누릅니다.

캘리브레이션이 실행되는 동안 TV가 있는 방향을 바라보고 가만히 서 있습니다(약 5초).


표시되어야 하는 내용

제자리에서 점프

[JUMP]

스쿼트하거나 앞으로 몸을 기울이기(오리 자세)

[DUCK] ON

일어서기

[DUCK] OFF

옆으로 발을 끌며 이동하기(엉덩이는 앞을 향한 상태 유지)

[STEP] LEFT 또는 [STEP] RIGHT

GPIO5 버튼을 눌렀다가 놓기

[BTN] down 및 [BTN] up, 그다음 남자 또는 여자 영웅 대사 표시


납땜한 모션 센서와 영웅 버튼을 esp에 연결한 데이터 케이블로 직접 테스트했습니다.




STEP 5. 게임 펌웨어를 플래시하고 컴퓨터에서 BlobJump 플레이하기


게임 펌웨어를 플래시하고 컴퓨터에서 BlobJump 플레이하기


게임 펌웨어를 플래시하고 컴퓨터에서 BlobJump 플레이하기


Serial motion_test를 통해 배선이 정상임을 확인했습니다. 이 단계에서는 Bluetooth 펌웨어를 플래시하고, Raspberry Pi로 옮기기 전에 Mac 또는 PC에서 실제 Pygame 앱을 실행합니다. 게임과 벨트는 동일하며, 먼저 노트북 화면에서 실행해 보는 것뿐입니다.

이미 클론한 저장소(github.com/tlk0s/body-ble-games)에서:

cd body-ble-games/firmware/body_controller

열려 있는 serial monitor를 모두 닫습니다. USB 데이터 케이블을 연결합니다.

파란색 버튼 벨트:

make flash-blue

빨간색 버튼 벨트:

make flash-red

업로드가 끝나면 컴퓨터에서 USB를 분리해도 됩니다. 플레이할 때는 LiPo 또는 USB 충전 포트로 리모컨에 전원을 공급합니다. Bluetooth 설정에 추가 문자가 붙은 BodyCtrl이라는 이름의 장치가 표시되어야 합니다.


컴퓨터에서 게임 설정하기

Python 3와 Bluetooth가 켜져 있어야 합니다(Mac 또는 Windows 10 이상).

cd body-ble-games/pi
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

Windows에서는 .venv/bin/pip 대신 .venv\Scripts\pip를 사용합니다.

Mac 또는 Linux:

MOCK_BLE=0 ./run

Windows(PowerShell, pi 폴더에서):

$env:MOCK_BLE="0"; .\.venv\Scripts\python.exe main.py

창이 열립니다. 키보드의 1 또는 2가 아니라 벨트를 기다리는 상태입니다.

  1. 리모컨 하나의 전원을 켭니다(절전 상태라면 버튼을 누릅니다).
  2. 메뉴에 컨트롤러가 연결되었다는 메시지가 표시될 때까지 기다립니다(단순히 "waiting"만 표시되는 상태가 아님).
  3. 점프 동작을 합니다. Pi에서와 마찬가지로 BlobJump가 선택됩니다.
  4. 플레이 방법: 장애물을 뛰어넘고, 장애물 아래에서는 몸을 숙입니다.
  5. 원한다면 벨트 버튼을 짧게 눌러 남자 영웅과 여자 영웅을 바꿉니다.
  6. 앱을 종료하려면 키보드에서 Esc를 누릅니다.

선택 사항인 책상 위 2인 플레이: 두 번째 리모컨의 전원을 켭니다. 두 리모컨이 모두 연결되면 게임 화면이 분할됩니다. 어느 벨트에서든 점프하면 시작됩니다.

선택 사항인 메뉴 건너뛰기(곧바로 BlobJump 시작):

MOCK_BLE=0 BODY_GAME=blob_jump ./run




STEP 6. 벨트 인클로저 3D 프린트하기(상자와 뚜껑)


벨트 인클로저 3D 프린트하기(상자와 뚜껑)


벨트 인클로저 3D 프린트하기(상자와 뚜껑)


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

조립 상태가 꽤 빡빡하지만, 약간의 핫 글루 마법과 전기 테이프를 사용하면 모든 부품을 단단히 고정할 수 있습니다 ;)




STEP 7. Raspberry Pi 키오스크 모드(SSH 설정, 키보드 없음)


Raspberry Pi 키오스크 모드(SSH 설정, 키보드 없음)


Pi는 TV 뒤에 놓습니다. 전원을 켜면 전체 화면으로 BlobJump가 실행되고, 벨트 리모컨은 Bluetooth로 연결됩니다. 저는 Pi에 키보드를 한 번도 연결하지 않았습니다. 아래의 모든 작업은 노트북에서 SSH를 통해 수행하며, 첫 부팅 전에 Raspberry Pi Imager에서 한 번만 옵션을 설정합니다.

Raspberry Pi Imager를 설치합니다. microSD를 삽입합니다.


데스크톱이 포함된 Raspberry Pi OS를 선택합니다(Zero 2 W에서는 32-bit도 충분합니다). 톱니바퀴 아이콘을 클릭합니다(사용자 지정):

  1. 호스트 이름 설정: bodygames(또는 원하는 이름)
  2. 사용자 이름과 비밀번호 설정(예: 사용자 pi)
  3. Wi-Fi 이름과 비밀번호 설정
  4. SSH 활성화: 비밀번호 인증 사용(키를 사용한다면 공개 키를 붙여 넣어도 됨)
  5. 로캘과 키보드 레이아웃 설정

카드에 기록합니다. 카드를 Pi에 넣고 HDMI로 TV에 연결한 다음 전원을 켭니다. 약 2분간 기다립니다.

노트북에서(Pi와 동일한 Wi-Fi에 연결):


ssh pi@bodygames.local


.local이 작동하지 않으면 라우터에서 Pi의 IP를 확인한 다음:
ssh pi@192.168.x.x


처음 로그인할 때는 Imager에서 설정한 비밀번호를 사용합니다.

sudo apt update
sudo apt full-upgrade -y
sudo apt install -y python3 python3-venv python3-dev libsdl2-2.0-0 libportmidi0 bluez bluetooth git

sudo usermod -aG bluetooth,render,video $USER

sudo systemctl enable --now bluetooth

그룹 설정이 적용되도록 SSH에서 로그아웃한 후 다시 로그인합니다:

exit
ssh pi@bodygames.local

Bluetooth 확인:

bluetoothctl show
Powered는 yes로 설정합니다.
cd ~
git clone https://github.com/tlk0s/body-ble-games.git
cd body-ble-games/pi
python3 -m venv .venv
.venv/bin/pip install -U pip
sudo apt install -y build-essential libdbus-1-dev python3-dev
SKIP_CYTHON=1 .venv/bin/pip install -r requirements.txt
chmod +x start-kiosk.sh run
참고: 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

게임에 화면이 표시되도록 데스크톱이 부팅 시 시작되어야 합니다.

sudo raspi-config nonint do_boot_behaviour B4
B4 = auto login to desktop.

화면 꺼짐 비활성화:

sudo raspi-config nonint do_blanking 1

재부팅:

sudo reboot

1분 기다린 후 다시 SSH로 접속합니다.

로그인할 때마다 Pi가 start-kiosk.sh를 실행합니다. 즉, git pull, pip install을 실행한 다음 MOCK_BLE=0으로 전체 화면 BlobJump를 실행합니다.

mkdir -p ~/.config/autostart

자동 시작 파일을 만듭니다(SSH에서 블록 하나를 붙여넣기):

cat > ~/.config/autostart/body-ble-games.desktop << EOF
[Desktop Entry]
Type=Application
Name=Body BLE Games
Comment=Full-screen BLE kiosk
Exec=$HOME/body-ble-games/pi/start-kiosk.sh
Terminal=false
X-GNOME-Autostart-enabled=true
EOF

재부팅:

sudo reboot

재부팅 후에는 Pi에서 아무것도 입력하지 않아도 TV에 게임이 표시되어야 합니다. 업데이트 로그는 ~/body-ble-games/pi/kiosk-update.log에 기록됩니다.


Pi의 전원을 껐다가 다시 켜면 게임이 시작되고 리모컨이 연결되며 아이들이 TV 화면에서 점프할 수 있습니다. 노트북은 SSH 업데이트 전용으로 사용하면 됩니다.





STEP 8. AI 지원 소프트웨어


벨트 하드웨어와 TV에서 게임을 플레이하는 방식은 직접 손으로 만든 결과물입니다. BlobJump와 런처를 포함한 Raspberry Pi용 Python 게임은 AI 코딩 어시스턴트의 도움을 받아 작성했습니다. 하지만 게임의 조작감은 제가 직접 결정했고, 움직임 임계값을 조정했으며, 아이들과 함께 플레이 테스트를 하고, 실제 하드웨어에서 발생한 문제를 수정했습니다. 무엇이 AI의 도움을 받았고 무엇을 작업대에서 직접 납땜했는지 Instructables 독자들이 알 권리가 있다고 생각해 이를 공개합니다.

AI의 도움을 받은 부분

  1. pi/ 폴더의 게임 로직, 그래픽 기본 구조, BLE 연결 코드
  2. firmware/body_controller/의 펌웨어 구조와 움직임 감지 조정
  3. 초안

사람이 직접 한 부분

  1. 배선, LiPo 안전, 외장 설계, 실제로 벨트에 장착되는 구성
  2. 리모컨 플래싱, Pi 키오스크 설정, 내 TV에서의 문제 해결
  3. 결정, 아이디어, 외장…




STEP 9. 다음 계획


  1. pull request로 게임 추가하기(AI가 도와줄 수도 있어요 :) )
  2. Lane Race 게임(사이드스텝)은 저장소에서 작업 진행 중인 상태입니다.
  3. 다른 사람들이 출력할 수 있도록 외장 STLs를 업로드하기
  4. 더 빠른 Pi 보드에서 점수와 사운드 지원
  5. 댓글에 플레이 영상을 공유하기


읽어 주셔서 감사합니다. 직접 만들어 보신다면 벨트 장착 상태의 사진을 꼭 보고 싶습니다.


원문: https://www.instructables.com/Move-to-Play-Belt-Motion-Controllers-for-a-Two-Pla/

좋아요 0
게시판

회사명 공방유니언 주소 각 공방 주소 참조
사업자 등록번호 0000 대표 공방유니언 전화 019-60105846 팩스 0000 이메일 gongbangunion@gmail.com
통신판매업신고번호 0000 개인정보관리책임자 공방유니언
Copyright © 2017 공방유니언. All Rights Reserved.