기존 오픈소스 망원경 제어기는 라즈베리 파이(전력 소모 큼)를 쓰거나 Arduino를 PC/스마트폰/태블릿의 확장 장치로 사용했습니다. rDUINOScope는 PC, 태블릿, 휴대폰, 인터넷 연결 없이도 독립적으로 동작하며 아마추어 천문인이 밤하늘을 즐길 수 있게 합니다.
초기 목표는 SkyWatcher, Orion, Vixen 등 상용 GoTo 제품의 저렴하고 제작하기 쉬운 대안을 만드는 것이었습니다. 하드웨어 아키텍처는 Arduino DUE 보드와 시중의 저렴한 센서들로 구성됩니다. 제작 방법과 사용자 가이드는 프로젝트 웹사이트에 있습니다. 시스템의 핵심은 지속적으로 기능이 추가되는 소프트웨어가 로드된 Arduino DUE 보드입니다.
rDUINOScope는 Stellarium과도 연동됩니다.
상세 기능
rDUINOScope는 오픈소스, Arduino Due 기반 망원경 제어 시스템(GoTo)입니다. 독립형 시스템으로 설계되어 PC, 태블릿, 휴대폰, 인터넷 없이도 작동하며 멋진 관측 경험을 제공합니다.
기본적으로 최고의 250개 천체(메시에 카탈로그 및 히든 트레저 카탈로그)와 200개 항성 데이터베이스를 내장하고, 이들의 위치를 계산해 망원경을 향하게 합니다. 정렬 절차가 구현되어 있어 대상을 향해 이동할 때 "항상 접안렌즈에 들어오는" 경험을 제공하며, 대상이 접안렌즈에 들어오면 자동으로 추적합니다.
전자기기를 활용하고 싶다면 블루투스 통신(무선 설정)으로 모든 전자기기와 연결해 MEADE LX200 통신 프로토콜 기반 명령을 주고받을 수 있습니다.
모든 종류의 스테퍼 모터와 호환되며, DIY 마운트뿐 아니라 SkyWatcher, MEADE, Orion, Vixen 등 상용 제품에도 장착 가능합니다.
Arduino 코드 구조를 아셔야 합니다. 보통 SETUP()과 LOOP() 두 섹션이 있습니다. SETUP()은 프로그램 시작 시 한 번 실행되어 시스템을 초기화하고, LOOP()는 초당 여러 번 반복 실행됩니다. 화면, 터치 입력 등이 깜빡이지 않게 하려면 Arduino가 사용자가 무엇을 기대하는지 알 수 있는 메커니즘이 필요합니다. 그래서 LOOP()에는 "터치 고려... 시간 고려..."만 있고 실제 활동은 별도 함수에서 처리해 프로그램 흐름을 제어하고 화면이 초당 여러 번 새로고침되지 않게 했습니다.
calculateLST_HA() 함수(행 678)로 HA를 계산한 후, 이 사이트로 검증했습니다. 나중에 메시에 천체 DB를 추가한 후에는 Stellarium으로 교차 검증했습니다.
주요 문제는 공식 자체가 아니라 Arduino의 변수 타입 다루는 방식, 특히 계산 정밀도였습니다.
HA와 DEC를 구한 후 망원경을 향하게 하려면 모터가 얼마나 돌아야 하는지 알아야 합니다. 웜기어 비율(웜이 몇 바퀴 돌아야 기어가 360° 도는지)을 알아야 합니다. 제 Vixen Super Polaris는 RA/DEC 축 모두 144톱니 기어를 씁니다. 모터 회전량과 지구 자전 보상 주기를 계산하는 간단한 엑셀 파일(Gears_Stepper_Calculation.xlsx)을 만들었고, 같은 수학 모델을 코드에도 구현했습니다. 코드 상단(행 34-37)의 값만 본인 마운트에 맞게 바꾸면 됩니다.
// 마운트, 기어, 드라이브 정보
// HourAngle을 마이크로스텝 비율로 계산하는 데 사용
// 본인 설정에 맞게 이 부분 수정
// ---------------------------------------------
// 참고: RA와 DEC는 같은 기어 비율 사용 (내 경우 144톱니)
//----------------------------------------------
int WORM = 144;
int REDUCTOR = 4; // 1:4 기어 감속
int DRIVE_STP = 200; // 스테퍼 드라이브: 회전당 200 스텝
int MICROSteps = 16; // 1/16 마이크로스텝 모드 (시차 추적용 - 최저 속도 결정)
비율을 계산하면 코드는 천체 좌표로 망원경을 향하게 하는 모터 회전량과 지구 자전 보상을 위한 클럭 속도를 알게 됩니다. 관련 함수는 행 906(Sidereal_rate())과 행 917(cosiderSlewTo())에서 시작합니다.
고려사항
이것은 소비자용 완제품이 아닙니다. 필요에 맞게 커스터마이징할 수 있어 유연하지만, 유연함에는 단점도 따릅니다. 그런 점들을 놓치지 않도록 "고려사항" 섹션을 포함했습니다.
모터 장착은 단순하지만 계산 방식에 영향을 줍니다. 제 경우 Vixen Super Polaris의 순정 기어는 웜 샤프트 오른쪽에 있습니다. 하지만 샤프트가 짧아 풀리로 교체하려면 반대쪽(왼쪽)에 달아야 했습니다. 이로 인해 모터가 역방향으로 돌아야 망원경 위치가 증가해 원래 코드를 수정해야 했습니다. 모터 회전 방향을 반드시 확인하세요. 아니면 스텝 카운트가 틀려 위치가 어긋납니다. 행 1028에서 STP_BACK을 명령하지만 행 1031에서 카운터를 += 하는 식입니다.
작업: 다음 코드 부분 수정: consider_Manual_Move(int xP, int yP), cosiderSlewTo(), Sidereal_rate().
북반구 vs 남반구: 코드는 위치한 반구에 따라 전진 방향을 반전시킵니다. 터치 입력 처리 부분에서 이뤄지니 해당 섹션을 확인해 수정하세요.
DEC/RA 축 기어링: 내 코드는 두 축 모두 144톱니 기어 사용을 전제로 합니다(Vixen Super Polaris 기준). 다른 설정이라면 코드 일부를 수정해야 할 수 있습니다. 문제가 있으면 메시지 주세요.
활동 계획
이제 rDUINOScope GoTo 시스템 제작 활동을 계획할 시점입니다. 모든 것(HW, 도구, 재료)이 준비됐다면 2-3일 내 완료 가능합니다. 저는 밤에만 작업할 수 있었고 연구도 많이 해 4-5개월 걸렸습니다. 조립엔 대략:
실드 보드 제작 및 시스템 구동: 1일
박스에 모든 것 수납: 1일
모터와 풀리를 마운트에 장착: 1일
2단계: 자재 조달
프로그램 작동 원리를 알았으니 자재 조달을 계획하세요.
자재 명세서(BOM): 대부분 중국 온라인 공급업체에서 구매했습니다. GPS, 블루투스, 조이스틱 등 몇 가지는 지연 방지를 위해 현지 구매했습니다. 총 약 $190 USD 들었습니다. 상용 시스템 가격에 비하면 매우 저렴합니다. 가격과 구매처 목록은 프로젝트 웹사이트(rDUINO_step2.html)와 이 페이지의 "COMPONENTS" 섹션에 있습니다.
더 싸거나 빠르게 구할 수 있다면 그렇게 하세요.
설계에 따라 40핀 케이블(TFT용), 조이스틱 고정용 플라스틱 볼트, Arduino Due 프로그래밍용 USB 케이블(박스 안에 넣어도 업데이트 가능하게), 팬 등이 추가로 필요할 수 있습니다.
집에 없다면 납땜 재료, 니퍼, 디지털 멀티미터 등도 구비하세요.
필요 소프트웨어: Arduino IDE와 관련 소프트웨어(드라이버, 보드 정의, 라이브러리)를 설치하세요:
IDE 실행 → Tools → Board → Boards Manager에서 "Arduino SAM Boards (32-bit ARM Cortex-M3)" 설치.
사용한 라이브러리 팩을 다운로드해 Arduino IDE 설치 폴더의 "libraries" 폴더에 복사. (참고: "libraries"는 컴퓨터 폴더이기도 하지만 프로젝트 웹사이트의 완성 패키지 안에도 "_libraries" 폴더로 있습니다. 패키지 다운로드 후 확장자를 .ZIP으로 바꾸고 압축 해제해 "_libraries" 폴더 내용을 컴퓨터의 "libraries" 폴더에 복사하세요.)
IDE 재시작 후 메인 프로그램 파일 "_02_Boiana_EQ.ino" 열기. 4개 지원 파일이 별도 탭으로 열립니다.
이제 코드 컴파일 후 Arduino Due에 업로드할 수 있습니다(Arduino를 컴퓨터에 연결한 상태에서).
박스 장착: GPS NEO 6M(안테나가 하늘을 향하게), DHT22 온도 센서(박스 밖 구멍으로 노출), PS2 조이스틱, TFT 화면, 모든 스위치(전원 ON/OFF, 주야간 모드). 모터 드라이브 커넥터, 12V 전원 커넥터, Arduino Due 네이티브 포트용 USB 케이블 포트 구멍도 뚫었습니다.
부품별 Arduino Due 핀 연결
부품
하드웨어 핀
Arduino 핀
GPS
GPS NEO 6M
RX
16
GPS NEO 6M
TX
17
RTC
RTC DS3231
SDA
A4
RTC DS3231
SCL
A5
Bluetooth
BT HC-05
TXD
14
BT HC-05
RXD
15
DHT
DHT22
out
3
Speaker
Piezo Speaker
-
2
PS2 조이스틱
PS2 joystick
VRx
A1
PS2 joystick
VRy
A0
Declination DRV8825
DEC DRV8825
STEP
6
DEC DRV8825
DIR
7
DEC DRV8825
M0
10
DEC DRV8825
M1
9
DEC DRV8825
M2
8
DEC DRV8825
RESET / SLEEP
-
Right Ascension DRV8825
RA DRV8825
STEP
4
RA DRV8825
DIR
5
RA DRV8825
M0
11
RA DRV8825
M1
13
RA DRV8825
M2
12
RA DRV8825
RESET / SLEEP
-
TFT Screen
TFT Shield 사용
핀 (22-53) + SPI
-
Day/Night Mode Switch
-
A3
이제 실드 보드 조립 준비 완료. 프로토타입 PCB를 준비해 어떻게 자를지 구상하세요. 모든 부품을 실장하고 배선 공간을 확보하며, Arduino에 꽂을 핀아웃을 납땜하세요. 실드 보드 위 부품이나 박스 위 부품용 커넥터로 연결되게 하세요.
아래는 조립 과정 사진입니다:
완성 후 보드를 연결하고 테스트했더니 작동 안 함! :( 배선 확인해보니 두 연결 사이에 브리지가 생겨 수정했습니다. 이 시점부터 모든 납땜을 꼼꼼히 검사하기 시작했습니다. 잘못된 배선으로 Arduino나 다른 부품이 타지 않은 게 천만다행입니다. NB: 모든 연결을 반드시 확인하세요! DRV8825와 모터 드라이브 배선도는 아래와 같습니다. 중요하니 꼭 따르세요.
적절한 전원 어댑터(12V, 1.6A) 사용하고 모터 드라이브를 전원 켜기 전에 연결하세요. NB: DRV8825에 부하가 걸린 상태에서 모터 드라이브를 연결하면 드라이버가 탈 수 있습니다!
이제 모든 부품이 납땜됐으니 모터 드라이브도 연결하고 소프트웨어를 Arduino에 로드해 전체 설정을 테스트하세요. 이 시점에선 글리치 없이 작동해야 합니다.
소프트웨어를 만져보며 사용자 인터페이스를 익히세요. 인터페이스 도움을 위해 프로젝트 웹사이트에 사용자 가이드를 만들었습니다.
4단계: 박스에 모두 넣기
실드 보드 준비되면 박스에 나머지 부품을 배치하고 구멍 뚫을 위치, 모양, 크기를 계획하세요. 구멍 뚫기는 작은 포켓 나이프가 최고입니다(적어도 제겐). 원형이든 사각이든 상관없고 작은 날카로운 칼로 쉽게 깎을 수 있습니다.
예외는 화면입니다. 길고 평평한 정사각형 구멍이 꼭 필요합니다. 아버지께 부탁해 절단기로 작업했습니다.
레이아웃이 마음에 들고 실행 가능하면 구멍 뚫기 시작하세요. 긴 과정이고 지저분해지지만 2-3시간이면 됩니다. 원형 구멍 필요할 때(12V 커넥터, RA/DEC 모터 커넥터)는 드릴을 썼습니다.
핫글루 건으로 부품을 박스에 고정하세요:
이제 앞면 부품(TFT 화면, PS2 조이스틱, 주야간 모드 스위치)만 남았습니다. TFT 화면에 간단한 리본 케이블(암/수 커넥터)로 연결하려 했는데 안 됐습니다. 핀이 미러링돼 TFT가 작동하지 않았습니다. 그래서 복잡한 2D→3D 변환을 통해 가진 커넥터와 리본 케이블로 문제를 해결했습니다.
긴 이야기 짧게: 로켓 과학은 아니지만 해결책 찾느라 고생했습니다. 못생긴 해결책이지만 1년 넘게 잘 작동합니다. 아래가 그 의미입니다:
리본 케이블
40핀 암 커넥터
2x20핀 어레이로 자른 PCB에 납땜할 핀
매력처럼 작동해 박스를 완성할 수 있었습니다!
5단계: 독일식 적도 마운트
모터 드라이브를 마운트에 연결하는 방법은 제조사마다 설계가 달라 공유할 수 없습니다. 저는 80년대 Vixen Super Polaris를 쓰는데 아래 방식이 맞습니다. 1단계에서 코드 값을 바꾼 결정이 이제 영향을 미칩니다. 아래가 제 풀리/벨트 설정입니다.
2세트 구매했습니다. 1:4 감속 세트와 1:3 감속 세트. 감속비에 따라 풀리 간 거리가 달라 벨트 크기도 다릅니다. 미리 잘 계획하면 비용 아낄 수 있었지만 급했기에 둘 다 샀습니다.
벨트, 풀리, 마운트를 앞에 두고 1:4 감속이 마운트에 완벽히 맞아 그쪽으로 진행해 모터 하우징을 만들었습니다. 반나절 만에 아래처럼 나왔습니다:
전체 설정 테스트 후 소프트웨어 변수(행 35 값을 4로) 업데이트해 최종 설계를 반영했습니다. 다시 테스트하니 완벽 작동.
제대로 테스트하려면 맑은 별밤을 기다려야 했는데, 기다리는 동안 뭔가 아쉬웠습니다. 취미 예산으로 살 수 있는 것보다 훨씬 좋은 망원경 제어 GoTo 시스템이지만 모양이 안 예뻤습니다. 나중에 자랑스러운 rDUINOScope가 된 마무리 손질이 필요했습니다.
드디어 제 rDUINOScope Vixen SP 페라리 룩이 제가 느낀 그대로 완성됐습니다!
파일 목록
_READ_ME.txt: 최종 릴리스 v2.1 Boiana EQ 설명 및 FAQ. _READ_ME.txt
// HERE GOES THE Mount, Gears and Drive information.
// ... used to calculate the HourAngle to microSteps ratio
// UPDATE THIS PART according to your SET-UP
// ---------------------------------------------
// NB: RA and DEC uses the same gear ratio (144 tooth in my case)!
//----------------------------------------------
int WORM = 144;
int REDUCTOR = 4; // 1:4 gear reduction
int DRIVE_STP = 200; // Stepper drive have 200 steps per revolution
int MICROSteps = 16; // I'll use 1/16 microsteps mode to drive sidereal - also determines the LOWEST speed.