보정Calibrate
60개 표본과 최소 2.5초 안정 구간60 samples and at least 2.5 seconds stable
LAB · Experimental · Not for diving
Galaxy Watch8 기압 센서로 얕은 물의 압력 변화를 다룬 개인 실험입니다. 센서 데이터가 끊기거나 사용자가 중지했을 때의 동작을 중심으로 설계했습니다. 다이빙용이 아닙니다.A personal experiment with shallow-water pressure changes using the Galaxy Watch8 barometer. I focused on how the prototype behaves when sensor data stops or the user ends a session. Not for diving.


기압계는 수심계가 아닙니다.A barometer is not a depth gauge.
조사한 공개 API 범위에서는 서드파티 앱이 사용할 수 있는 인증된 전용 수심 센서나 공개 침수 이벤트를 확인하지 못했습니다. Android의 TYPE_PRESSURE는 주변 공기압 센서이며 수중 정확도, 선형성 또는 센서 포트 응답을 보장하지 않습니다.Within the public APIs I reviewed, I could not identify a certified depth sensor or public immersion event available to third-party apps. Android defines TYPE_PRESSURE as an ambient air-pressure sensor and does not guarantee underwater accuracy, linearity, or sensor-port response.
공개 API만으로 백그라운드에서 전체 화면이 자동으로 열리도록 보장할 수 없고, Samsung Water Lock을 자동 활성화하는 공개 Wear OS API도 확인하지 못했습니다. 따라서 목표를 “다이브 컴퓨터”가 아니라 “사용자가 명시적으로 시작하는 얕은 압력 변화 실험”으로 제한했습니다.Public APIs cannot guarantee a forced full-screen launch from the background, and I found no public Wear OS API for automatically enabling Samsung Water Lock. The product goal was therefore constrained to a user-started shallow pressure-change experiment—not a dive computer.
물 밖에서 안정된 기준 압력을 보정한 뒤, 현재 압력과의 차이를 물의 밀도와 중력가속도로 나눠 상대 수심을 추정합니다.After calibrating a stable out-of-water baseline, the pressure difference is divided by water density and gravity to estimate relative depth.
estimate (m) = Δ pressure (hPa) × 100 ÷ (density × 9.80665)
60개 표본과 최소 2.5초 안정 구간60 samples and at least 2.5 seconds stable
사용자가 명시적으로 시작하는 포그라운드 서비스와 지속 알림User-initiated foreground service and persistent notification
약 3 cm 상당 증가가 0.4초 지속될 때 후보 확정Candidate after ~3 cm-equivalent rise for 0.4 seconds
오래된 데이터, 포화, 권한 차단 또는 사용자 중지 시 종료Stop on stale or saturated data, blocked permission, or user action
v0.1 실기기 로그에서 기압계는 담수 약 4.67 cm와 5.79 cm 수준의 압력 변화에 반응했습니다. 그러나 앱은 입수 후보 상태를 한 번도 만들지 못했습니다. 신뢰하기 어려운 센서 범위 메타데이터와 절전 중 1–4.5초 표본 공백이 주요 원인이었습니다.In an early v0.1 device log, the barometer reacted to pressure changes equivalent to roughly 4.67 cm and 5.79 cm of fresh water. Yet the app never entered a candidate immersion state. Unreliable sensor-range metadata and 1–4.5-second sample gaps during sleep were key causes.
이 기록은 정확도를 증명하지 않습니다. 대신 “센서가 제한적으로 반응했다”와 “초기 탐지가 실패했다”를 동시에 보여 줍니다. 이후 센서 메타데이터 예외, 절전 중 처리, 오래된 데이터 감지, 사용자 중지와 앱 내부 오터치 처리를 명시적 요구사항으로 바꿨습니다.This does not prove accuracy. It shows both limited pressure response and failed detection. Those failures became explicit requirements for metadata exceptions, wake-up and CPU behavior, stale-data detection, user stop controls, and in-app accidental-touch handling.
압력 반응을 정확한 수심 측정으로 확대 해석하지 않습니다.Pressure response is not presented as accurate depth measurement.
실패 로그를 삭제하지 않고 제품의 안전 정지 규칙으로 전환합니다.Keep failure logs and translate them into fail-safe product rules.
감시 상태와 중지 경로를 알림·Ongoing Activity로 계속 보여 줍니다.Keep monitoring state and stop controls visible through notification and Ongoing Activity.
v0.4는 Java/Android 리소스 컴파일, lintDebug/lintRelease, R8 release AAB 빌드를 완료했고 JUnit 52개가 모두 통과했습니다. API 36, 454×454 에뮬레이터 한 종류에서 권한, 보정, 대기/활성 주기, 0.06 m 압력 리플레이, 수면 복귀와 중지 흐름을 확인했습니다.v0.4 completed Java and Android resource compilation, debug and release lint, R8 release AAB build, and all 52 JUnit tests. On one API 36 emulator at 454 × 454, I verified permissions, calibration, idle/active sampling, a 0.06 m pressure replay, return to the surface, and stop control.
통과한 JUnit 단위 테스트JUnit unit tests passed
문서화된 UI 지원 언어Documented UI languages
검증한 에뮬레이터 구성Emulator configuration tested
아직 완료되지 않은 실기기 출시 검증Completed release validations on physical devices