Skip to content
parksejun24Public

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

CUBE / DAYCUBE

DAYCUBE project hero

큐브의 윗면과 회전 동작을 입력으로 바꾸어 Firebase Realtime Database에 전달하는 물리형 IoT 컨트롤러 프로토타입입니다. 스마트폰 화면을 계속 조작하는 대신, 손으로 큐브를 놓고 돌리는 촉각적 인터랙션을 탐색했습니다.

  • 역할: 프로젝트 기획, 펌웨어 개발
  • 개발 시기: 2020년
  • 최종 펌웨어: ESP32 + MPU9250 + Firebase (CUBE_ver.4)
  • 저장 값: 현재 윗면 /skin, 회전 누적 제어값 /angle

이 저장소는 당시 개발 과정을 보존한 포트폴리오 아카이브입니다. 실제 하드웨어에서 다시 검증하지 않은 부분은 아래에 별도로 표시했습니다.

프로젝트 개요

CUBE는 6면체의 방향과 회전을 두 종류의 입력으로 사용합니다.

  1. MPU9250의 가속도 값을 읽어 위를 향한 면을 1~6으로 판별합니다.
  2. 해당 면에 수직인 자이로 축을 선택합니다.
  3. 임계값을 넘는 회전값을 누적해 정수형 제어값으로 만듭니다.
  4. 200ms 간격의 스레드에서 변경된 값만 Firebase에 전송합니다.
MPU9250
  └─ 가속도/자이로 읽기
       ├─ skinCheck()  → 위를 향한 면 1~6
       ├─ resetting()  → 면 변경 시 회전값 초기화
       └─ spinData()   → 면별 축·방향을 적용한 제어값 누적
                            └─ sentFirebase() → /skin, /angle

/angle은 시간 간격을 적용해 적분한 물리적 각도(°)가 아니라, 당시 프로토타입이 사용한 정수형 회전 제어값입니다.

프로토타입

제작 프로토타입 제품 콘셉트 렌더링
CUBE physical prototype DAYCUBE product rendering

별자리 형태로 면을 구분하는 그래픽과 알루미늄 느낌의 외관을 통해, 전자 장치보다 책상 위 오브제에 가까운 인상을 의도했습니다.

버전별 변화

버전 보드/통신 센서 처리 상태
CUBE_ver.1 네트워크 연동 없음 MPU9250 라이브러리의 자세값으로 6면 판별 초기 실험. 번들 라이브러리는 Madgwick 필터 사용
CUBE_ver.2 ESP8266 + FirebaseArduino 원시 가속도·자이로 기반 구조로 전환 주 루프의 면/회전 처리 코드가 비활성화된 중간 버전
CUBE_ver.3 ESP8266 + FirebaseArduino 면 판별, 회전 누적, 200ms 전송 전체 데이터 흐름이 연결된 버전
CUBE_ver.4 ESP32 + FirebaseESP32 v3 알고리즘을 ESP32로 이식 저장소의 최종 개발 버전

archive/CUBE_legacy_MPU6050에는 로컬 작업 폴더에 남아 있던 MPU6050 원시값 확인용 스케치를 별도로 보존했습니다. CUBE 최종 동작과 직접 연결된 코드는 아닙니다.

데이터 구조

Firebase Realtime Database에는 다음 두 경로를 사용합니다.

{
  "skin": 1,
  "angle": 0
}
  • /skin: 위를 향한 면 번호 (1~6)
  • /angle: 회전 방향과 크기를 표현하는 누적 정수 제어값

실행 준비

1. 버전 선택

가장 최근 코드는 CUBE_ver.4/CUBE_ver.4.ino입니다. ESP32 보드 패키지와 아래 Arduino 라이브러리가 필요합니다.

  • MPU9250 (Bolder Flight Systems 계열 API)
  • ArduinoThread (Thread, ThreadController)
  • FirebaseESP32
  • WiFi (ESP32 코어 포함)

과거 버전은 사용한 보드와 라이브러리 API가 다르므로 각 폴더의 주석을 함께 확인하세요.

2. 인증정보 설정

실행할 버전 폴더의 secrets.example.h를 secrets.h로 복사한 뒤 실제 값을 입력합니다.

#define FIREBASE_HOST "your-project.firebaseio.com"
#define FIREBASE_AUTH "your-firebase-database-secret"
#define WIFI_SSID "your-wifi-name"
#define WIFI_PASSWORD "your-wifi-password"

secrets.h는 .gitignore에 포함되어 있습니다. 실제 인증정보를 커밋하지 마세요.

3. 업로드 및 확인

  1. MPU9250을 보드의 I2C 핀에 연결합니다.
  2. Arduino IDE에서 선택한 .ino 파일을 엽니다.
  3. 보드와 포트를 설정하고 업로드합니다.
  4. 시리얼 모니터를 115200 baud로 열어 초기화 및 네트워크 연결 상태를 확인합니다.
  5. Firebase의 /skin, /angle 값이 동작에 따라 바뀌는지 확인합니다.

저장소 구조

.
├── CUBE_ver.1/                 # 자세값 기반 초기 실험
├── CUBE_ver.2/                 # 원시 센서 기반 구조 전환
├── CUBE_ver.3/                 # ESP8266 + Firebase 동작 버전
├── CUBE_ver.4/                 # ESP32 최종 개발 버전
├── archive/
│   └── CUBE_legacy_MPU6050/    # 별도 MPU6050 센서 테스트
├── assets/                     # 포트폴리오 이미지
├── tests/                      # 공개 안전성·구조 정적 검사
├── SECURITY.md
└── README.md

구현 범위와 한계

코드에서 확인되는 구현은 면 판별, 회전 제어값 계산, Firebase 전송입니다. 다음 항목은 당시 제품 아이디어 또는 후속 계획이었으며 이 저장소에는 구현물이 없습니다.

  • 스마트폰 앱에서 면별 기능을 설정하는 기능
  • 음량·밝기 등 실제 기기를 제어하는 수신 애플리케이션
  • 낙상 감지, 스마트워치 연동, SOS 전송
  • 점자 외장 또는 시각·청각 장애인을 위한 완성 제품
  • 5GHz Wi-Fi 통신

추가로 알아둘 기술적 한계:

  • angle 계산은 샘플 간 시간(dt)을 반영하지 않아 물리적 각도가 아닙니다.
  • 임계값 밖의 자세에서는 마지막으로 판별한 면이 유지됩니다.
  • Wi-Fi 연결 루프에는 타임아웃이 없습니다.
  • Firebase 쓰기 실패에 대한 복구 처리가 없습니다.
  • 현재 환경에서는 Arduino 라이브러리와 실제 하드웨어를 이용한 컴파일·센서 검증을 수행하지 않았습니다.

보안

공개용 이력에는 Wi-Fi 비밀번호나 Firebase 인증정보를 포함하지 않습니다. 과거 개발용 인증정보를 재사용하고 있다면 반드시 폐기하거나 교체해야 합니다. 자세한 내용은 SECURITY.md를 참고하세요.

라이선스

프로젝트 자체에 별도 라이선스가 지정되어 있지 않습니다. CUBE_ver.1/MPU9250-0.1.1에 포함된 서드파티 라이브러리는 해당 디렉터리의 LICENSE를 따릅니다.

About

No description, website, or topics provided.

Resources

Security policy

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages