diff --git a/VesiScan_Android_Pipeline_Summary.md b/VesiScan_Android_Pipeline_Summary.md index df513bf..0bc6dba 100644 --- a/VesiScan_Android_Pipeline_Summary.md +++ b/VesiScan_Android_Pipeline_Summary.md @@ -1125,15 +1125,26 @@ Lock → "Start Measurement" 버튼 활성화 해결: threshold를 1200~1300으로 올려서 테스트 ``` -### Distance/Sample (초록색 슬라이더, 1.5~2.5mm) +### Distance/Sample (초록색 숫자 직접 입력, 0.5~5.0mm) ``` 기본값: 1.771 mm/sample 용도: ADC 샘플 1개당 물리적 거리. BV 계산에 직접 영향. d_mm = delay_offset + sample_index × distance_per_sample +입력: 소수점 3자리까지 정밀 입력 가능 (슬라이더 대신 텍스트 필드) 조절: 기기별 캘리브레이션 시 팬텀 실측값과 맞추기 위해 사용 ``` +### SG Filter (토글 스위치, ON/OFF) + +``` +기본값: ON +용도: Savitzky-Golay 5-tap 스무딩 필터 on/off +ON: SG 적용 → 부드러운 파형, 안정적인 벽 탐지 +OFF: Raw ADC 그대로 → 원본 신호로 벽 탐지 (디버깅용) +효과: 그래프에서 진한 파랑(Denoised)이 연한 파랑(Raw)과 동일해지면 OFF +``` + ### lr_ratio 하한 제한 ``` @@ -1180,7 +1191,60 @@ bytes.push((crc >> 8) & 0xff); --- -# 21. 향후 과제 +# 21. ADC 데이터 CSV 저장 + +### 파일 위치 + +``` +Downloads/VesiScan_ADC/YYYY-MM-DD.csv +``` + +하루 1개 CSV 파일에 매 측정마다 append. 파일 탐색기에서 바로 접근 가능. + +### CSV 포맷 + +```csv +scan_id,timestamp,volume_ml,lr_ratio,channel,s0,s1,s2,...,s99 +1,14:30:12.345,305.2,1.20,CH0,1823,1801,1788,...,1245 +1,14:30:12.345,305.2,1.20,CH1,1756,1734,1721,...,1198 +1,14:30:12.345,305.2,1.20,CH2,1802,1788,1775,...,1234 +1,14:30:12.345,305.2,1.20,CH3,1834,1812,1799,...,1267 +1,14:30:12.345,305.2,1.20,CH4,1645,1623,1610,...,1123 +1,14:30:12.345,305.2,1.20,CH5,1721,1698,1685,...,1178 +2,14:30:22.678,,1.00,CH0,1234,... +``` + +- `scan_id`: 측정 회차 (같은 ID = 같은 측정의 6채널) +- `volume_ml`: BV 추정 결과 (빈칸이면 측정 실패) +- `channel`: CH0~CH5 +- `s0~s99`: ADC 100개 샘플 + +### Python에서 읽기 + +```python +import pandas as pd + +df = pd.read_csv("2026-04-27.csv") + +# 1회차 측정 전체 +scan1 = df[df.scan_id == 1] + +# CH0 ADC 100개 +ch0_adc = scan1[scan1.channel == "CH0"].iloc[0, 5:].values + +# 전체 측정 용적 추이 +volumes = df[df.channel == "CH0"][["scan_id", "timestamp", "volume_ml"]].drop_duplicates() +``` + +### 저장 시점 + +- BV 추정 성공 시: volume_ml + lr_ratio + 6채널 ADC +- BV 추정 실패 시 (center 부족): volume_ml 빈칸 + 6채널 ADC +- 0채널 감지 시: volume_ml 빈칸 + 6채널 ADC (raw 데이터 보존) + +--- + +# 22. 향후 과제 | 항목 | 상태 | 비고 | |------|------|------| @@ -1195,8 +1259,9 @@ bytes.push((crc >> 8) & 0xff); | BLE 디버그 로거 | ✅ 완료 | TX/RX 파싱 + Downloads 내보내기 | | BLE 명령어 Endian 통일 | ✅ 완료 | 테스터 exe와 100% 동일 (BE+공백) | | 자동측정 (IMU 1s + 측정 10s) | ✅ 완료 | | -| 런타임 캘리브레이션 | ✅ 완료 | Threshold + DPS 슬라이더 | +| 런타임 캘리브레이션 | ✅ 완료 | Threshold 슬라이더 + DPS 직접입력 + SG 토글 | | 도넛차트 실시간 ml | ✅ 완료 | lastVolumeMl 직접 표시 | +| ADC CSV 저장 | ✅ 완료 | Downloads/VesiScan_ADC/일별.csv | | Python ↔ Android 1:1 검증 | ✅ 완료 | 전수 상수 비교 | | 금요일 APK 배포 | 🔜 예정 | Gitea 릴리즈 | | mbb 전체측정 전환 | 🔜 예정 | rbb: 헤더 파싱 검증 후 |