Lifetime
Companion

연구개발

RND | 턴테이블 제어 앱 개발

2026.04.20 12:41




001.png

1. 프로젝트 개요 (Project Overview)

  • 연구 코드명: Project J3D-TurntableApp_MobileControl 

  • 핵심 기술:  Flutter (Dart) · Provider 상태관리 · TCP/UDP 소켓 통신 · Android SDK

  • 해결 과제:  

  • 3D 스캐너용 자동 턴테이블을 제어하는 PC S/W 이미 개발 완료, 피사체 옆에서 실시간으로 동작을 확인하며 제어하려면 PC 앞에서만 조작 가능한 구조적 한계

  • 또한 촬영 중 즉각적인 긴급 정지, 연속 회전 중 특정 지점 스윙 실행 등 현장 밀착형 제어가 불가능하여 스캔 품질 저하 및 작업 효율 손실 발생. 

  • 모바일 앱으로 무선 원격 제어 환경을 구축하여 PC에서 손을 떼고 피사체 옆에서 직접 제어할 수 있도록 함.

    2. 시스템 설계 (System Architecture)

    • 핵심 방향 :  Android 스마트폰에서 Wi-Fi를 통해 PC 턴테이블 SW와 TCP 소켓으로 직접 통신. 하단 내비게이션 3탭 구조(메인 / 연결설정 / 동작제어)로 초보자도 순서대로 따라가면 즉시 제어 가능한 단일 앱으로 구현. 공유기 모드(모바일이 PC 탐색)와 핫스팟 모드(PC가 모바일에 연결) 두 가지 네트워크 환경을 모두 지원.

    • 기술 스택 :  Flutter 3.x · Dart · Provider (상태관리) · TCP Socket Port 1103 (제어 명령) · UDP Broadcast Port 1104 (기기 자동 탐색) · package_info_plus (버전 자동 반영) · Android API 21+


    제어앱 구조 및 파이썬 코드.png

    3. 기술적 도전과 해결 (Technical Challenges and Solutions)

    Challenge #1: 기기 자동탬색, IP를 몰라도 연결되는 구조 설계

    • Issue:  사용자가 매번 PC의 IP 주소를 직접 입력하는 방식은 비전문가에게 진입 장벽이 됨. 공유기 환경에서는 PC IP가 바뀔 수 있고, 모바일 핫스팟 환경에서는 구조 자체가 달라짐.

    • Approach: 두 가지 모드를 이중으로 지원하는 탐색 구조를 설계.

      공유기 모드: 모바일이 UDP 포트 1104로 브로드캐스트를 전송 → PC SW가 수신 후 자신의 IP와 TCP 포트 1103을 담은 응답 패킷 전송 → 모바일이 수신 즉시 자동 TCP 연결 시도

      핫스팟 모드: 모바일이 핫스팟을 열고 PC가 연결 요청을 보내면 모바일이 승인 또는 거절을 선택하는 역방향 구조

      두 모드 모두 사용자가 IP를 입력하지 않아도 자동으로 연결되며, 연결 성공 후 동작제어 탭으로 자동 이동하여 즉시 제어 가능.

    J3D 턴테이블 제어앱_공우기_IP직접연결.jpg J3D 턴테이블 제어앱_핫스팟_IP직접연결.jpg

    Challenge #2: 하트비트(Heartbeat) 신호가 PC에서 오류로 기록되는 문제

    • Issue:  TCP 연결이 장시간 유지될 경우 중간 네트워크 장비나 OS가 유휴 소켓을 임의로 끊는 현상을 방지하기 위해, 모바일 앱은 5초마다 {"ping": true} 신호를 자동 전송하고 10초 내에 {"pong": true} 응답이 없으면 연결 끊김으로 판단하여 자동 재연결하는 하트비트 체계를 구현. 그런데 PC 턴테이블 SW의 명령이 action 필드 기반으로 동작하여, ping 키만 포함된 패킷을 수신하면 action 값이 빈 문자열로 인식되어 PC 로그에 알 수 없는 명령 무시: 메시지가 5초 간격으로 반복 출력되었다. 로그가 의미 없는 오류로 가득 차 실제 동작 로그를 파악하기 어려운 문제.

    • Approach: PC SW 명령 파서 최상단에 ping 키 존재 여부를 먼저 확인하는 분기를 추가. ping 수신 시 즉시 {"pong": true}를 응답하고 명령 처리 흐름을 건너뛰도록 수정. 모바일-PC 간 프로토콜 계약이 양쪽 코드에서 완전히 일치해야 한다는 것을 알게됨.

    Challenge #3: PC 동작 상태가 모바일에 실시간 반영되지 않는 단방향 통신 문제

    • Issue:  초기 설계는 모바일 → PC 방향의 명령 전송에만 집중하였고, PC → 모바일 방향의 상태 전송은 구현되지 않았다. 결과적으로 PC에서 회전이 완료되어도 모바일 앱은 RUNNING 상태를 계속 표시하였고, PC에서 동작을 멈추면 모바일의 정지·긴급정지 버튼이 여전히 활성 상태. 반대로 PC에서 회전을 시작해도 모바일은 여전히 READY 상태를 표시하는 등 양방향 상태 불일치가 상시 발생.

    • Approach: PC SW가 동작 상태가 변경될 때마다 아래 JSON을 즉시 모바일로 전송하는 상태 브로드캐스트 체계를 추가 정의.

      PC 동작 시점전송 신호

      회전 시작{"state": "RUNNING"} / 회전 완료·정지{"state": "READY"} / 감속 중{"state": "STOPPING"} / 장치 연결됨{"state": "DEVICE_CONNECTED"} / 오류 발생{"state": "ERROR", "message": "내용"}

      모바일의 핸들러가 이 신호를 수신하여 UI 버튼 활성·비활성 및 상태 표시를 즉시 갱신. 단방향 명령 앱에서 진정한 양방향 연동 앱으로 전환됨.

    4. 개발 결과 및 시연 (Development Results and Demonstration)

    실시간 작동 시연

    공유기 모드 및 Hot Spot 에서 UDP 브로드캐스트로 PC를 자동 탐색·연결하고, 1회 회전 / 연속 회전 / 긴급 정지 / 현지점 스윙을 무선으로 실시간 제어하는 전 과정 시연. 

     앱으로 턴테이블 제어_1.gif

    Before & After 비교

    ❌ Before (기존 방식)

    • PC 앞에서만 턴테이블 제어 가능 — 피사체 위치 조정과 제어를 혼자 동시에 수행 불가
    • 회전 중 즉각 정지 또는 특정 지점 스윙 불가
    • 3D스캔 품질 확인을 위해 PC와 피사체 사이를 반복 이동하며 작업 효율 저하 

    PC턴테이블_제어설정 화면.png

    ✅ After (개선된 방식)

    • Wi-Fi를 통한 완전 무선 원격 제어 — 피사체 옆에서 직접 조작, 단, 원치않는 접속에 대한 승인 및 거절 가능
    • 연속 회전 중 현지점 스윙 인터럽트 스윙 등 핸디형 3D스캐너에 최적화 된 턴테이블 기능 추가 가능
    • PC 프리셋(분할수·속도·가변속도·자동스윙) 실시간 조회 및 모바일 앱으로 직접 제어 가능 

    J3D턴테이블 연결제어 동작제어.jpg PC연결승인 창.png 

    주요 성과 및 효과

    • 3D 스캐너 활용성 향상: 턴테이블 제어의 공간적 제약 해소, 1인 스캔 작업 완결 가능

    • 3D스캔하면서 턴테이블 제어: 피사체 상태를 눈으로 확인하며 즉각 개입 가능

    • 기존 Einscan PRO 용 턴테이블(고정식 3D스캐너 전용 턴테이블)을 핸디형 레이저 3D스캐너에 알맞게 변형하여, 추가적인 필요 기능 및 물리적 부분 업데이트 가능 

    제어앱 아이콘.jpg J3D 턴테이블 제어앱_메인.jpg J3D턴테이블 동작제어화면.jpg

    5. 결론 및 향후 계획 (Conclusion and Future Plans)

    • Flutter 단일 코드베이스로 Android 앱을 구현하고 TCP/UDP 소켓 직접 통신 방식을 채택함으로써 별도 서버 없이 PC 턴테이블 SW와 저지연 실시간 연동을 실현. 
    • 향후 iOS 지원 확장, 카메라 셔터 원격 제어 연동, 스캔 세션 자동 기록 및 재현 기능,
    • 멀티 턴테이블 동시 제어 기능 추가를 통해 고객 3D 스캐닝 워크플로우 전반의 자동화 수준을 높이는 방향으로 개발 계속 진행 중.

    © 2022 J3D Co., Ltd (주식회사 제이쓰리디) | 3D For Automation

    산업현장의 Needs를 계속 청휘하고 피드백 해 드리고 있습니다. 언제든지, 어떤 내용이라고 개선 요구 사항을 메일로 주세요. lee@j3d.co.kr