다이빙컴퓨터 DIY로 만들기 프로젝트 - 3
점점 일이 커지고 있습니다. 네.. 괜히 시작했네 싶어지고 있습니다.

버튼이 없는 완전 단독형 Dive Computer를 만들라고 하다보니,
그래도 결국 뭔가를 설정할 수 밖에 없는 일이 생기고, (예를 들면 나이트록스라든가, GF값이라던가)
완전 Stand-Alone 이라기보단 역시나 스마트폰에 의존할 수 밖에 없겠더군요.
그래서, 결국 다이빙컴퓨터의 펌웨어 개발을 하면서, 동시에 안드로이드 앱 개발을 동시에 진행할 수 밖에 없게 되었습니다.
이 역시도 수없이 많은 디버깅을 거치면서, MVP 앱 형태는 어느정도 갖춰가고 있습니다.
MVP 앱이란, Minimum Viable Product 의 약자인데, 그냥 최소한의 기능만을 구현한 단순 앱을 뜻해요.
뭐... 사실 다 완성해도 MVP 앱 수준을 벗어나진 못하겠지만서도...ㅋ
그래서 지금 만들고 있는 MVP의 현재 모습은...


최초 화면은 블루투스를 이용해서, 다이빙컴퓨터와 연결하는 화면. 탭 이름은 Scan.
여기서는 폰 근처의 BUDA 다이빙 컴퓨터를 찾아서 표시해주고, Connect를 누르면 연결해 줍니다.
BUDA-8428이란 이름은, 이 컴퓨터 기계의 MAC어드레스에서 4자리 숫자 따와서, 다른 컴터와 구분하기 위해 만든 기계별 이름.
DashBoard에 들어가면, 현재 다이빙 컴퓨터의 상태와 설정값이 볼 수 있습니다.
나름 갖출 건 다 갖췄다니깐요~ ㅋ


이건 설정화면!
산소비율을 21% 이상으로 입력하면, Air에서 Nitrox로 바뀌게 되어 있지욥. 나름 디테일함. ㅋ
MOD ppO2는, Nitrox를 쓸때 최대 산소분압을 몇으로 설정할 지 설정할 수 있게 해놓은 부분입니다.
기본값은 1.4인데, 1.5나 1.6까지 설정 가능합니다. 이 값에 따라 MOD (Max Of Depth)가 정해지겠지요?
Gradient Factor는, 뷜만 알고리즘을 쓰기 때문에 일종의 보수도(?) 설정을 위한 값입니다.
요즘 뭐 Shearwater 컴퓨터는 아예 디폴트값을 50/85로 해서 나온다는 얘기가 있던데
저도 그걸 따라갈지, 그냥 보수적으로 40/85로 할지 고민하다가, 그냥 마이웨이 가기로~
아주아주 작고 소듕하리만큼 느므느므 작은 Buzzer를 쓸 예정이어서 사실 알람소리가 거의 들리지도 않을테지만,
그래도 혹시나 거슬려 할 사람들을 위해 알람을 켜고 끄는 것도 넣었고요~
Final Deco Stop은, 실제 NDL을 넘겨서 감압 다이빙을 해야 할 경우,
최종 감압정지하는 수심을 3m로 할지, 6m로 할지 결정하는 옵션입니다요.
이게 왜 필요하냐면....
NDL을 조금만 오버하면 감압이 짧게 요구되어 3m 에서 짧게 해도 되지만, 조금씩 감압해야 할 시간이 늘어간다면,
3m-> 6m-> 9m-> 12m-> 18m 로, 점점 3m단위로 단계적 감압하도록 제시하게 되어 있지요.
예를 들면, 감압을 엄청 많이 해야 할 상황이다~ 라고 하면,
18m에서 1분, 12m에서 1분30초, 9m에서 3분, 6m에서 6분, 3m에서 10분... 뭐 이런 식으로 단계적으로 감압을 제시하게 됩니다.
물론, 모두 뷜만알고리즘과 GF에 기인하여 계산하여 제시하게 되는데,
(이건 다른 다이빙 컴퓨터의 Deco Plan을 계산하는 방식을 참고하여 만들었으니 걱정 ㄴㄴ)
최종적으로 가장 오래 감압을 해야 할 최종 수심이 본래 3m 이지만,
파도 높고 조류 센 상황에서 3m 감압이 쉽지 않을 수 있기에, 최종 감압 수심을 6m로도 설정할 수 있게 한 겁니다.
6m로 설정하면, 3m에서의 감압은 스킵하는 거냐?
댓츠노노~ 그건 아니고, 대신 6m에서 더 길게 하라고 제시하는 방식입지요. 눼눼.. 나름 고민 많이 하고 짠겁니다.


앱 시작 화면에 뜰 스플래시 화면에서는 역시나 우리의 핸썸하신, 붓쳐핸썸 이미지가 나오게 만들어서
뭔가 좀 완성되어가는 척 하고는 있지만,
펌웨어 업데이트 기능을 미리 정의하는 것만해도 고려할게 많더이다.
언제 펌웨어 가능하게 할 것인가 자체부터 다 결정해야했......
충전중에만 가능하고, 배터리는 20퍼 이상 있어야하고, 다이빙 중엔 안되고... 블라블라~
다이빙 중 오롯이 다이빙 상태를 모니터링 해야 하고, 주요 알람을 줘야 하는데,
만에 하나, 다이빙 상태에서 블루투스 연결로 기본 기능 구현에 방해가 될 수도 있기 때문에,
다이빙 중에는 블루투스, GPS를 아예 꺼버리게 만들어놨습니다...만,
이런건 이중삼중 안전장치를 만들어놔야 하더이다.
암튼 아직 다이빙로그 저장하고 Export 하는 기능과, 펌웨어 업데이트 하는 기능은 여전히 개발중....
대신 개발하면서 작동 잘하는지 검증용으로, 시뮬레이션 기능을 넣었는데,
컴퓨터가 지 혼자 막 다이빙해서 데코 찍고, 급상승하고, 오르락내리락 하면서 온갖 경고를 다 만드는 진상 고객 시나리오라서,
(내가 세부에서 만났던 '최강꼰대틀딱 아재 다이버'의 펀다이빙 하던 모습을 그대로 적용해 봄)
이게 아무나 실행시키면 좋을게 없는지라, Dev Use Only 버튼으로 막아놓았습니다.
저 버튼을 누르면 비번을 입력해야지만, 'Start Simulation' 버튼으로 바뀌게 됩니다.
다이빙 Log는 4초마다 수심이나 경고등을 모두 다 기록하게 되어있어서,
다양한 다이빙로그북 앱에서 불러올 수 있는 Subsurface의 XML 구조로 변환할 수 있도록 개발 중에 있습니다.
다이빙 컴퓨터에서는 단순하게 기록해서 저장하고, 안드로이드앱에서 불러와서 XML로 변환하는 방식입지요.
(나름 철저합니다요.My MBTI = Power J)
프로토타입 하드웨어라도 만들어볼라고 준비하다가 보니,
제가 구입한 ESP32-S3보드가 3.7v의 Lipo 배터리를 바로 사용할 수 없단 사실을 알게 되어
5v 승압 모듈도 구매해야 했고,
5v 승압 모듈을 쓰면 남은 배터리 잔량을 추적할 수 없게 되어,
별도의 잔량 측정을 위한 저항 circuit을 추가해야 해서 저항들도 구매해야 했고,
아직 납땜작업은 시작도 못한 상태입니다.
우선 컴터에 ESP32-S3보드만 연결해서 Terminal로 Log 값들만 보면서 시뮬레이션 돌려보면서 개발중에 있습니다.
아.... 이제 본업도 바빠지게 되어서 언제 개발을 끝낼 수 있을지,
아니.... 언제 프로토타입이라도 만들 수 있을지 기약이 없지만서도...
그래도 함 끝까지 맹글어 볼랍니다. 투비컨티뉴우우우우드