기프트두이노(Giftduino): 아두이노 기반 DIY 선물 상자 만들기
부품 및 소모품
| 아두이노 우노 (Arduino UNO) |
1개 |
| 홀 이펙트 센서 (A1302) |
1개 |
| 미니 피에조 스피커 (12mm, 2.048kHz) |
1개 |
| 그래픽 LCD (84×48, 노키아 5110 타입) |
1개 |
| 자석 (네오디뮴 자석 권장) |
1개 |
| 브레드보드 및 점퍼 와이어 |
여분 |
| 전원 어댑터 (9V) 또는 9V 배터리 |
1개 |
소프트웨어 및 온라인 서비스
- circuito.io (자동 회로 설계 및 코드 생성)
- 아두이노 IDE
프로젝트 개요
상자를 열면 깜짝 멜로디와 함께 픽셀 아트가 표시되는 인터랙티브 선물 상자를 만들어 보세요. 뚜껑에 부착된 자석이 홀 이펙트 센서를 작동시켜 상자가 열렸음을 감지하면, 노키아 5110 LCD에 "Surprise!" 메시지와 함께 웃는 얼굴 픽셀 아트가 나타나고 피에조 스피커가 축하 멜로디를 연주합니다.
1단계: 부품 수집 및 circuito.io 활용
circuito.io 링크에서 미리 선택된 부품 리스트를 확인하고 Generate 버튼을 누르면 필요한 모든 부품(저항, 커패시터 등 주변 부품 포함)과 배선도, 기본 테스트 코드가 자동 생성됩니다.
대체 가능한 부품 조합 아이디어:
- 피에조 스피커 → LED
- 홀 이펙트 센서 → 초음파 거리 센서
- 벽면 어댑터 → 9V 배터리
- 노키아 LCD → 16×2 캐릭터 LCD
2단계: 배선하기
circuito.io에서 생성된 단계별 배선 가이드를 따라 한 단계씩 진행하면 복잡해 보여도 쉽게 완성할 수 있습니다.
3단계: 코드 업로드 및 커스터마이징
- circuito.io에서 생성된 코드를 다운로드해 압축 해제
- 아두이노 IDE로
firmware.ino 탭 열기
- 아래 제공되는 커스텀 코드를
firmware.ino에 복사·붙여넣기 후 업로드
코드 내 주석을 참고해 멜로디, 픽셀 아트, 센서 임계값 등을 자유롭게 수정할 수 있습니다.
커스텀 펌웨어 코드 (주요 부분)
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <TimerFreeTone.h>
#include <Speaker.h>
// 핀 정의
#define HALLA_PIN_VOUT A3
#define NOKIALCD_PIN_DC 4
#define NOKIALCD_PIN_CS 2
#define NOKIALCD_PIN_RST 3
#define PIEZOSPEAKER_PIN_SIG 5
// LCD 설정
#define LCD_CONTRAST 70
#define LCD_SIZE_COL 84
#define LCD_SIZE_ROW 48
// 멜로디 데이터 (호레이 멜로디)
unsigned int piezoSpeakerHoorayLength = 6;
unsigned int piezoSpeakerHoorayMelody[] = {NOTE_C4, NOTE_E4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
unsigned int piezoSpeakerHoorayNoteDurations[] = {8, 8, 8, 4, 8, 4};
HallA1302 hallA(HALLA_PIN_VOUT);
Adafruit_PCD8544 nokiaLcd(NOKIALCD_PIN_DC, NOKIALCD_PIN_CS, NOKIALCD_PIN_RST);
Speaker piezoSpeaker(PIEZOSPEAKER_PIN_SIG);
void setup() {
Serial.begin(9600);
nokiaLcd.begin(LCD_SIZE_COL, LCD_SIZE_ROW);
nokiaLcd.setContrast(LCD_CONTRAST);
}
void loop() {
int hallAVal = hallA.read();
// 자석이 멀어지면(상자 열림) 홀 센서 값이 512 기준 ±50 이상 변화
if (abs(hallAVal - 512) < 50) {
delay(500);
nokiaLcd.clearDisplay();
nokiaLcd.setRotation(2);
nokiaLcd.setTextColor(BLACK);
nokiaLcd.setTextSize(2);
nokiaLcd.print(" Surprise !");
// 웃는 얼굴 픽셀 아트 그리기
nokiaLcd.drawCircle(37, 15, 3, BLACK); // 왼쪽 눈
nokiaLcd.drawCircle(41, 15, 3, BLACK); // 오른쪽 눈
nokiaLcd.drawRect(25, 22, 30, 20, BLACK); // 얼굴 윤곽
nokiaLcd.drawRect(22, 18, 36, 5, BLACK); // 머리 위
nokiaLcd.drawRect(37, 22, 5, 20, BLACK); // 코
nokiaLcd.display();
// 멜로디 재생
piezoSpeaker.playMelody(piezoSpeakerHoorayLength, piezoSpeakerHoorayMelody, piezoSpeakerHoorayNoteDurations);
delay(10000); // 10초 대기 후 다시 감지
}
}
4단계: 선물 상자 케이스 제작
제공되는 STL 파일을 3D 프린터로 출력하거나, 목재·아크릴·판지 등 원하는 재료로 직접 제작할 수 있습니다. 상자 크기, 모양, 색상 모두 자유롭게 커스터마이징 가능합니다.
5단계: 조립하기
- 아두이노와 실드(또는 브레드보드)를 상자 본체에 고정
- 자석을 뚜껑 안쪽에 접착
- 유연한 강철 와이어로 뚜껑과 본체 연결 (경첩 역할)
- 모든 배선 정리 후 상자 마감
완성! 나만의 매직 기프트 박스
뚜껑을 열면 "Surprise!" 메시지와 멜로디로 받는 사람을 즐겁게 해줄 특별한 선물 상자가 완성되었습니다. 회로도, 3D 프린팅 파일, 전체 코드는 GitHub 저장소에서 확인할 수 있습니다.