오징어 게임의 '무궁화 꽃이 피었습니다' 인형을 완벽하게 구현한 인터랙티브 프로젝트입니다. 고개를 돌리고, 눈 색이 변하며, 음성으로 게임을 진행합니다. 초음파 센서와 모션 센서로 플레이어의 움직임을 감지해 승패를 판정하며, 패배해도 "다시 할래?"라고 묻는 친절한(?) 인형입니다.
아두이노 우노의 모든 핀을 사용한 첫 프로젝트로, 제작에 3주가 소요되었습니다(출력 6일, 조립 1주, 영상 편집 1주). ELEGOO에서 무료 우노 키트를 제공받아 제작하게 되었습니다.
제작 과정
1. 3D 출력 시작
전체 출력에 6일이 걸렸습니다. Thingiverse 모델을 리믹스하여 내부를 비우고 전자부품 장착 홀을 추가했으며, 서보와 초음파 센서 마운트를 가슴판에 통합했습니다. 다른 색 필라멘트를 사용해 도색 작업을 최소화했습니다.
2. 도색
일반 스프레이 페인트를 사용했습니다. 눈 부분은 마스킹 후 내부를 도색하여 LED 빛이 얼굴 전체가 아닌 눈만 빛나도록 했습니다.
3. 자석 vs 접착제
분리가 가능하도록 자석을 녹여 넣었으나, 다시 만든다면 그냥 접착하는 것이 낫습니다. 자석의 장점은 보관 시 부피를 줄일 수 있다는 정도입니다. 머리는 마지막에 부착하세요.
4. 눈 장착
트라이컬러 LED를 사용했습니다. 가장 긴 핀이 그라운드(핀 2)입니다. 각 리드에 220Ω 저항을 연결하고(그라운드 제외), 눈을 중심으로 핫글루로 고정했습니다. 목과 몸체를 통과할 만큼 충분한 길이의 와이어를 확보하세요.
5. LCD 메뉴
I2C 어댑터가 있는 16×2 LCD를 사용하면 IO 핀을 6개에서 2개로 줄일 수 있습니다. 연결 시 "Welcome to the squid games!" 메시지가 표시됩니다. 1mm 두께의 원형 마운트를 출력해 히트건으로 인형 등 곡면에 맞춰 성형하고, 너트 인서트로 고정했습니다.
6. 서보 모터 – 고개 회전
서보 라이브러리를 사용하지 않고 타이머 1로 직접 제어했습니다(4자리 디스플레이 갱신용 타이머 1과 충돌 방지). 서보는 0°와 180°만 사용하므로 구현이 단순합니다. 타이머 1을 2000Hz(0.5ms 간격)로 설정하고, 0°는 2카운트 HIGH, 180°는 4카운트 HIGH로 제어합니다. 가슴판 마운트에 에폭시로 고정했습니다.
7. 초음파 센서 장착
250ms 주기로 갱신되며, 가슴판에 에폭시로 고정했습니다. 배선은 2선만 필요합니다.
8. IR 수신기
머리 뒤 클립 내부에 장착했습니다. 머리를 돌리면 수신 각도가 벗어나 리모컨이 안 잡힐 수 있으니 위치를 잘 잡으세요.
9. 4자리 7-세그먼트 타이머 디스플레이
가장 손이 많이 가는 부분입니다. 74HC595 시프트 레지스터를 사용해 2ms 주기로 디지트를 순차 점등합니다(5ms부터 플리커 감지). 게임은 최대 5분이므로 최상위 자리는 생략했습니다. 벨트 부분에 매립했으며, 드레멜로 사각 구멍을 뚫고 에폭시 퍼티로 마감했습니다. 74HC595는 프로토타입 실드에 장착해 배선 정리를 했습니다.
10. PIR 모션 센서
시작 후 1분 워밍업이 필요하며, 최소 감도에서도 미세한 움직임을 감지합니다. '말안경' 형태의 박스(7mm 홀)에 넣어 인형 내부에 장착해 오탐을 줄였습니다.
11. 버튼 회로
IO 핀 부족으로 아날로그 입력 1개에 저항 분배(1k, 2k, 5k)로 3개 버튼을 읽습니다. 220Ω 풀다운 저항으로 플로팅 방지. LCD 마운트 플레이트에 함께 장착했습니다.
12. DFPlayer 사운드 모듈
우노의 하드웨어 시리얼을 사용하므로 TX/RX에 1kΩ 저항 필수(없으면 업로드 불가). BUSY 핀으로 재생 중 감지. 프로토타입 실드에 장착, 8Ω 3W 스피커를 바닥면에 고정하고 소리 구멍을 뚫었습니다.
모든 센서와 게임 로직을 제어하는 전체 스케치입니다. 주요 라이브러리: DFPlayerMini_Fast, FireTimer, IRremote, LiquidCrystal_I2C, SoftwareSerial, SR04, Wire.
핀 매핑, 타이머 1 인터럽트(2000Hz)로 서보·디스플레이·1초 카운트다운 동시 처리, 상태 머신(WARMUP→WAIT→READY→GREENLIGHT→REDLIGHT→WIN/LOSE) 기반 게임 로직, 아날로그 버튼 판독, IR 리모컨, DFPlayer 제어 등이 구현되어 있습니다.
/// CodeMakesItGo Dec 2021
#include <DFPlayerMini_Fast.h>
#include <FireTimer.h>
#include <IRremote.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>
#include <SR04.h>
#include <Wire.h>
// ... (전체 코드는 GitHub 참조)