코스트코 망원경(코동) 전동 포커서 프로토타입 테스트 천체관측

코스트코 망원경(이하, 코동)으로 관측을 해보면 초점을 맞추느라 망원경을 건드리면 상하좌우로 움직이는 경우가 많습니다. 

특히, 높은 배율로 행성을 본다면 살짝 건드려도 화각을 벗어날 수 있습니다.  

검색해보면 이미 선배님들께서 '전동 포커서'를 자작하거나 제작하여 동호회에서 나누어 가진 적이 있음을 알 수 있습니다. 일단 공구 시간도 지났으니 구하기 쉽지 않을 것 같고, 아이디어는 이미 다 나와 있으므로 직접 만들어 보기로 했습니다.




아두이노 프로 미니 3.3V와 블루투스 모듈 HC-06을 적용하고, 스마트폰의 Arduino bluetooth controller앱을 써서 제어를 하는 방식입니다. 

아래 사진 Arduino bluetooth controller 앱의 설정을 보면 조이스틱 버튼을 누를 때마다 특정 문자를 매핑하여 보낼 수 있는데, 그 문자를 아두이노 프로 미니에서 받으면 모터를 돌리도록 아두이노 코드를 간단하게 짰습니다. 대충 작성했지만 아래 쪽에 첨부했습니다.  


사진 좌측으로부터, 12V 10rpm 모터와 20T-40T 타이밍 벨트, 아두이노 블루투스 모듈, L298N 모터 드라이버, 아두이노 프로 미니가 연결되어 있습니다. 

철판 등으로 모터 거치대를 만들어야 하는데, 임시로 종이상자를 써서 테스트해 보았습니다. 

* 작동 동영상 => https://youtu.be/qgMyDcuV9as

위 사진을 보면 타이밍벨트가 느슨한데, 종이상자가 눌려서 그렇습니다. 

[향후 개선할 부분] 
  • 제대로 된 모터 지지대를 철판을 구부려서 제작(아래 모터 부분 블로그에서는 3D 프린팅을 하셨습니다)
  • 모터가 강력하여 손으로 돌릴 수 없으므로, 타이밍벨트를 헛돌게 할 수 있는 방법 찾기 - 현재는 전동으로만 초점을 조절할 수 있는 문제가 있습니다. 
  • 실전에 맞추어 모터 회전 수를 조정 

1) 모터 

- 생각보다 10rpm 모터 찾기가 어려웠습니다. 결국 아마존에서 Greartisan 12V 10rpm 모터를 구입했습니다. Aliexpress에서도 하나 샀지만, 설이 끼면서 배송도 너무 느렸고 빠르게 도착한 아마존 모터가 워낙 튼튼하고 강력해서 따로 테스트는 안 했습니다. 
- 10rpm을 고른 이유는 선배님들의 가르침으로,,, 참고: https://m.blog.naver.com/taifight/220801984510 위에 링크한 동작 영상을 보시다시피, 10rpm정도면 적당하다는 느낌이 듭니다.  

2) 타이밍 벨트 

- 모터 찾기만큼 어려웠습니다. 
https://www.aliexpress.com/item/33005589716.html?spm=a2g0o.order_list.0.0.21ef18020OZmtK 에서 6mm-20T, 10mm-40T를 선택했는데, 코동의 초점 휠을 빼낸 후 재보면 8mm가 조금 넘는 정도이지만 10mm로 구입했습니다. 대신 부족한 부분은 뭔가로 메꾸어야겠지요. 

3) 아두이노 프로 미니 3.3V

- 아두이노 블루투스 모듈 HC-06과 통신할 때를 위해 3.3V로 사야 편안합니다. 5V로 사면 레벨컨버터나 저항을 달아야 할 거예요.

4) 아두이노 블루투스 모듈 HC-06 

- BLE 버전도 있지만, 오래되어도 단순 무식한 것이 간단합니다. Arduino bluetooth controller앱을 Play 스토어에서 받고 나서 조이스틱 버튼마다 명령어 글자를 매핑해 줍니다. 
- 좌측: L, 상향: U, 우측: R, 하향: D
- 좌우측 방향은 1초간, 위아래 방향은 4초간 모터를 구동해 보았습니다.   

5) L298N 모터 드라이버 

- 12V를 넣고 모터 제어 12V와 아두이노 프로 미니 구동용 5V전원을 공급해 줍니다. 구입한 아두이노 프로 미니는 3.3V버전이므로 VCC에 연결하면 안되고, 5V선은 RAW핀에 연결해야겠습니다. 

6) USB to 12V 레벨업 컨버터 700mA

- 20000mA짜리 외장 배터리로부터 12V를 공급하면 되겠습니다. 

7) 아두이노 모터 구동 테스트 코드

#include <SoftwareSerial.h>

int motor_1 = 10;
int motor_2 = 9;
int motor_latest = 0; 

SoftwareSerial BTSerial(2,3); 

void setup() {
  // put your setup code here, to run once:
  pinMode(motor_1, OUTPUT);
  pinMode(motor_2, OUTPUT);

  Serial.begin(9600); 
  BTSerial.begin(9600); 
}

void loop() {
  // put your main code here, to run repeatedly:
  byte ch; 
  
  if (BTSerial.available()) {
    ch = BTSerial.read();     
    if (ch == 'L' || ch == 'U') {  
      analogWrite(motor_1, 255);
      digitalWrite(motor_2, 0);
      motor_latest = 1; 
    } else if(ch == 'R' || ch == 'D') {
      digitalWrite(motor_1, 0);
      analogWrite(motor_2, 128);
      motor_latest = 2; 
    }
  }

  if (motor_latest == 1){
    delay(1000); 
    if (ch == 'U') delay(4000); 
    analogWrite(motor_1, 0); 
    motor_latest = 0; 
  } else if (motor_latest == 2){
    delay(1000); 
    if (ch == 'D') delay(4000); 
    analogWrite(motor_2, 0);
    motor_latest = 0; 
  }
}

2022-05-14 추가 

핑백

덧글

댓글 입력 영역


통계 위젯 (블랙)

354
457
566680