
연구 코드명:Project J3D-Turntable Module for handy 3D scanner
핵심 기술: Python · PySerial · G-code ASCII 프로토콜 · Serial Port 동작신호 역분석
해결 과제: 핸드헬드 3D 스캐너로 소형 부품·제품을 스캔할 때, 사용자가 직접 스캐너를 들고 피사체 주위를 돌며 촬영하는 방식은 피로도가 높고 스캔 데이터 품질이 작업자 숙련도에 크게 의존. 피사체를 일정 각도마다 자동으로 회전시키는 턴테이블이 필요했지만, 제조사 제공 자동 스캔 솔루션은 전용 소프트웨어·라이선스 패키지와 결합되어 일반 고객 환경에서 즉시 활용이 어려움.
목표 : Einscan Pro 용 턴테이블 활용, 보유 3D스캐너에서 활용 가능한 전동 텐테이블 환경 구현
핵심 방향 : 기존 단종 된 Einscan Pro HD의 턴테이블을 활용, 레이저 Handy 3D스캐너에서도 턴테이블 제어하면서 3D스캔 편의성 제공
기술 스택 :
PySerial (USB-Serial 통신), G-code ASCII 프로토콜 (역분석) ,FTDI FT232R (VID=0x0403, PID=0x6001) COM 포트 자동 감지.
하드웨어 : MCU - ATmega (Shining3D Moter Driver v1.1), USB-Serial 변환 - FTDI F1232R, 통신규격 - 115200 baud,8N1


Issue:
제조사 SDK 공식 실행 순서는 scanservice.exe → Sn3DPlatform.exe → 클라이언트입니다. 초기 개발 버전에서는 Sn3DPlatform.exe만 실행하고 ZMQ 소켓으로 턴테이블 진입 명령(enterScan)을 전송했으나, 항상 하드웨어 인식 False · "Resource temporarily unavailable" (ZMQ EAGAIN) 오류가 발생. COM 포트(FTDI VID_0403 PID_6001, COM3)에 USB는 정상 연결된 상태.
Approach: turntableLog.txt 분석으로 실제로 COM 포트를 열고 하드웨어를 초기화하는 프로세스가 scanservice.exe임을 확인. SDK 전체 스택 의존 구조를 파악한 후 방향을 전환 — SDK를 완전히 우회하고 시리얼 포트 직접 제어 방식으로 재설계.
Issue: Shining3D는 턴테이블 시리얼 프로토콜을 공개하지 않음. SDK 없이 하드웨어를 제어하려면 실제 통신내용을 직접 파악 필요.
Approach: scannservice.exe와 턴테이블 사이의 시리얼 신호를 분석. 3D 프린터 표준 G-code와 동일한 ASCII 프로토콜을 사용 확인. 각 명령에 대한 응답신호 ( 예, 명령: M701\n , 응 ok X:80.00 Y:0.00 Z:0.00 E:0.00 등 ) 확인하며 분석.
Issue: SDK 로그 기반으로 추정한 초기 전체 원주 스텝 값(388)은 실제 측정값과 오차. 위치 수(N)가 커질수록 마지막 위치가 360°를 초과하거나 미달하는 문제.
Approach: 실측 기반으로 FULL_CIRCLE_STEPS = 432 로 확정. N등분 배치는 비례식으로 계산하여 어떤 분할 수에서도 균등한 각도 간격을 보장."def _steps_for_position(pos_index, times=8):return round(FULL_CIRCLE_STEPS * (pos_index + 1) / times)# times=8 결과: 54, 108, 162, 216, 270, 324, 378, 432 대응"
1. 자동 포트 감지: FTDI VID/PID 기반 COM 포트 자동 검색 — 사용자가 포트 번호를 설정하지 않아도 USB 연결로 인식
2. 순차 회전 모드: N위치 등간격 분할 → 각 위치 도달 시 이벤트 신호 발생 → 스캐너 촬영 타이밍과 동기화
3. 왕복(Swing) 모드: 핸드헬드 스캐너용 — 각 위치마다 전진 후 재전진, 스캐너가 가만히 있어도 대사물이 스윙하면서 양방향 데이터 취득

❌ Before (기존 방식)
Einscan Pro 턴테이블은 Einscan Pro 시리즈 3D스캐너가 연결 된 운영소프트에서만 턴테이블 제어 가능
SDK 전체 스텍 의존 - scanservice + ZMQ 명령 제어.

✅ After (개선된 방식)
제어 방식 : PySerial 시리얼 직접 제어
환경 의존성 : pip install pyseial 만으로 동작
포트 설정 : FTDI VID/PID 자동 감지
회전 패턴 : N위치 자유 설정, 순차 및 왕복(스윙) 모드 선택 가능
이식성 : 모든 Windows PC

J3D, 3D 스캐너 구매 고객의 활용성 향상 — 고가 자동화 패키지 없이도 안정적인 반복 스캔 환경 구축.
작업자 숙련도 의존도 감소 - 작업자가 다양한 각도로 조정하지 않아도 회전 테이블이 반복 회전하면서 3D스캔 가능.
다양한 사용자 요구 반영 가능 = 현재 스윙회전, 가감속 회전 등 Handy 레이저 3D스캐너의 특징을 반영하여 추가 기능 가능
SDK 라이선스 독립 : Einscan PRO 3D스캐너가 연결되지 않더라도 독립적으로 동작 제어 가능.
