QQ登录

只需一步,快速开始

[自制DIY] 从零开始打造一个GOTO系统(2)

[复制链接]
open 发表于 2016-3-12 11:58 | 显示全部楼层 |阅读模式 来自: 中国–广东–广州 电信

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?加入牧夫(请注明天文爱好者,否则无法通过审核,请勿使用gmail/outlook/aol/icloud邮箱注册)

×
本帖最后由 open 于 2016-3-12 12:00 编辑

   前言:学习进度很慢哦。所以学到哪写到哪了。前面一篇写了如果在stellarium在模拟赤道仪所在位置。接下来是让stellarium控制赤道仪指向目标了。   首先要理解stellarium接下来所发送的命令。这里同样复制论坛中的资料。
    当在stellarium 中按下 crtl+1 或者slew , 则向下位机发送
    #:Q#:Sr 04:06:12#                发送目标RA值
     回复1,则再发送                       回复1 ,表示ok
     # :Sd +76:24:55#                  发送目标DEC值
      回复1,则在发送                       回复1 ,表示ok
      MS#                                           MS# 命令发送就是告诉下位机,你可以move了 ,应该这是叫 move scope     接下来就是要处理stellarium所发送的命令了。代码如下。延续上一篇的的代码略为修改。
  1. #include <stdlib.h>
  2. char input[20];                     //用作接收Stellarium发送的命令
  3. char txRA[10];                      //用作返回RA给Stellarium
  4. char txDEC[11];                     //用作返回DEC给Stellarium
  5. long RAtel, DECtel;                 //用作记录赤道仪RA DEC
  6. long RAtarget, DECtarget;           //有作接收Stellarium发送来的 RA DEC 值
  7. long raHH, raMM, raSS;              //RA
  8. char SIGNtel;                       // DEC: 43 = +   45 = -
  9. long decDEG, decMM, decSS;          // DEC




  10. void setup() {
  11.   Serial.begin(9600);                 //端口波特比
  12.   RAtarget = RAtel = 9110;             //初始化赤道仪RA值在Stellarium上标识 以秒计算 北极星RA 02:31:50#   2*3600+31*60+50
  13.   DECtarget = DECtel = 321351;         //初始化赤道仪DEC值在Stellarium上标识 以秒计算 北极星DEC +89*15:51#   89*3600+15*60+51
  14. }


  15. void loop() {
  16.   if(Serial.available()>0){
  17.     RecvCommand(); //接收Stellarium命令
  18.   }
  19. }


  20. //--------------------------------------------------------------------------------------------------------------------------------------------------------   

  21. void RecvCommand(){
  22.   
  23.   int i=0;
  24.   input[i++] = Serial.read();
  25.   delay(5);
  26.   while((input[i++] = Serial.read()) != '#'){
  27.     delay(5);
  28.   }
  29.   input[i]='\0';
  30.   
  31.   if(input[1]==':' && input[2]=='G' && input[3]=='R' && input[4]=='#'){             //命令 #:GR# stellarium询问现在望远镜指向的RA值
  32.     transmitRA();                                                                   //发送赤道仪AR值给stellarium
  33.   }


  34.   if(input[1]==':' && input[2]=='G' && input[3]=='D' && input[4]=='#'){             //命令  #:GD# stellarium询问现在望远镜指向的DEC值
  35.     transmitDEC();                                                                  //发送赤道仪DEC值给stellarium
  36.   }


  37.   //if(input[1]==':' && input[2]=='Q' && input[3]=='#'){                              //命令 #:Q# stellarium 要求赤道仪停止运行??????先注释掉不用
  38.   //
  39. // }


  40.   if(input[0]==':' && input[1]=='S' && input[2]=='r'){                              //  #:Q#:Sr 04:06:12#  stellarium发送目标RA值命令
  41.     getRA();                                                                        //取得stellarium发送目标RA值
  42.   }
  43.   
  44.    
  45.   if(input[0]==':' && input[1]=='S' && input[2]=='d'){                              //# :Sd +76:24:55# stellarium发送目标DEC值命令
  46.     getDEC();                                                                       //取得stellarium发送目标DEC值
  47.   }
  48.   
  49.   
  50.   if(input[0]==':' && input[1]=='M' && input[2]=='S' && input[3]=='#'){           //:MS# 当 stellarium 发送完 目标 RA DEC 后 告诉赤道仪可以移动了.
  51.       Serial.print("0");                                                         //回复stellarium 0 表示结束
  52.       RAtel = RAtarget;                                                           //更新赤道仪的RA值为目标RA值
  53.       DECtel = DECtarget;                                                         //更新赤道仪的DEC值为目标DEC值
  54.   }
  55. }

  56. //--------------------------------------------------------------------------------------------------------------------------------------------------------   

  57. void transmitRA(){                                                            // 发送赤道仪AR值给stellarium   
  58.      raHH = RAtel/3600;
  59.      raMM = (RAtel-raHH*3600)/60;
  60.      raSS = (RAtel-raHH*3600)-raMM*60;
  61.      sprintf(txRA, "%02d:%02d:%02d#", int(raHH), int(raMM), int(raSS));
  62.      Serial.print(txRA);     
  63.     }
  64.    
  65. //--------------------------------------------------------------------------------------------------------------------------------------------------------   

  66. void transmitDEC(){                                                             // 发送赤道仪DEC值给stellarium   
  67.    
  68.      (DECtel < 0) ? SIGNtel = 45: SIGNtel = 43;                                 // DEC值 有 正 负 之分  在ansi码中 43是 +  45是 - 如 +76:24:55#  -76:24:55#  
  69.      decDEG = abs(DECtel)/3600;
  70.      decMM = (abs(DECtel) - decDEG*3600)/60;
  71.      decSS = (abs(DECtel) - decDEG*3600) - decMM*60;
  72.      sprintf(txDEC, "%c%02d%c%02d:%02d#", SIGNtel, int(decDEG), 42, int(decMM), int(decSS));
  73.      Serial.print(txDEC);
  74.   
  75.     }
  76.    
  77. //--------------------------------------------------------------------------------------------------------------------------------------------------------   
  78.       
  79. void getRA(){                                                                   //取得stellarium发送过来的RA值 格式是 :Sr HH:MM:SS#  
  80.      Serial.print("1");                                                        //回复stellarium 1 表示OK 让stellarium 继续发送DEC
  81.      RAtarget = (atol(input+4))*3600 + (atol(input+7))*60 + atol(input+10);     //保存
  82.     }


  83. //--------------------------------------------------------------------------------------------------------------------------------------------------------   
  84.    
  85. void getDEC(){                                                                  //取得stellarium发送过来的DEC值 格式是 :Sd +DD*MM:SS#   
  86.     Serial.print("1");                                                         //回复stellarium 1 表示OK 让stellarium 继续
  87.     DECtarget = (atol(input+5))*3600 + (atol(input+8))*60 + atol(input+11);
  88.     if (input[4] == '-'){                                                       //判断是不是 -
  89.       DECtarget *=(-1);                                                         //如果是 把值改为负值
  90.     }
  91.    }
  92.   
  93.   
  94. //--------------------------------------------------------------------------------------------------------------------------------------------------------
复制代码
  当在stellarium 中按下 crtl+1 或者slew 赤道仪会移动到指定目标。效果如下(不懂发视频,上个视频连接吧):
http://v.youku.com/v_show/id_XMTQ5NzMxNDE4MA==.html
hhbb 发表于 2016-3-12 12:28 | 显示全部楼层 来自: 中国–浙江–温州 电信
楼主厉害!
回复 顶~ 砸~

使用道具 举报

火星蒙面侠 发表于 2016-3-12 16:59 | 显示全部楼层 来自: 中国–广东–潮州 联通
厉害,到现在我连个步进电机都没搞定

点评

至今我也不懂怎么整步进电机。我还没有买步进电机  详情 回复 发表于 2016-3-14 11:37
回复 顶~ 砸~

使用道具 举报

 楼主| open 发表于 2016-3-14 11:37 | 显示全部楼层 来自: 中国–广东–广州 电信
火星蒙面侠 发表于 2016-3-12 16:59
厉害,到现在我连个步进电机都没搞定

至今我也不懂怎么整步进电机。我还没有买步进电机

点评

我做过一个脱离电脑的GOTO,你可以搜索我的帖子。。硬件我会,有空可以多交流哈。。至于这个操作这个stellarium软件,结合起来应该是非常简单的。。。  详情 回复 发表于 2016-4-3 17:20
回复 顶~ 砸~

使用道具 举报

天籁 发表于 2016-4-3 17:20 | 显示全部楼层 来自: 中国–广东–广州 电信
open 发表于 2016-3-14 11:37
至今我也不懂怎么整步进电机。我还没有买步进电机

我做过一个脱离电脑的GOTO,你可以搜索我的帖子。。硬件我会,有空可以多交流哈。。至于这个操作这个stellarium软件,结合起来应该是非常简单的。。。

点评

请教老兄,你做的星图是用什么投影系的?点击拾取是怎么逆变换的?我现在做的星图是正投影,点击拾取老出问题,准确率很低。  详情 回复 发表于 2016-4-3 20:24
回复 顶~ 砸~

使用道具 举报

guoifei 发表于 2016-4-3 19:29 | 显示全部楼层 来自: 中国–福建–南平 电信
这个不错
回复 顶~ 砸~

使用道具 举报

xiaoguilink 发表于 2016-4-3 20:24 | 显示全部楼层 来自: 中国–广东–肇庆 电信
天籁 发表于 2016-4-3 17:20
我做过一个脱离电脑的GOTO,你可以搜索我的帖子。。硬件我会,有空可以多交流哈。。至于这个操作这个stel ...

请教老兄,你做的星图是用什么投影系的?点击拾取是怎么逆变换的?我现在做的星图是正投影,点击拾取老出问题,准确率很低。

点评

极射赤平投影,stellarium就是用这个投影。点击拾取是搜索显示坐标中靠触点最近的那个星。  详情 回复 发表于 2016-4-20 12:35
回复 顶~ 砸~

使用道具 举报

天籁 发表于 2016-4-20 12:35 | 显示全部楼层 来自: 中国–广东–广州 联通
xiaoguilink 发表于 2016-4-3 20:24
请教老兄,你做的星图是用什么投影系的?点击拾取是怎么逆变换的?我现在做的星图是正投影,点击拾取老出 ...

极射赤平投影,stellarium就是用这个投影。点击拾取是搜索显示坐标中靠触点最近的那个星。

点评

能否告知具体算法,该投影的变换矩阵一直查不到,自己也不会算,拾取的逆变换也是方便的话留个QQ,有偿。  详情 回复 发表于 2016-4-20 12:46
回复 顶~ 砸~

使用道具 举报

xiaoguilink 发表于 2016-4-20 12:46 | 显示全部楼层 来自: 中国–广东–肇庆 电信
天籁 发表于 2016-4-20 12:35
极射赤平投影,stellarium就是用这个投影。点击拾取是搜索显示坐标中靠触点最近的那个星。
...

能否告知具体算法,该投影的变换矩阵一直查不到,自己也不会算,拾取的逆变换也是方便的话留个QQ,有偿。
回复 顶~ 砸~

使用道具 举报

本版积分规则

APP下載|手机版|爱牧夫天文淘宝店|牧夫天文网 ( 公安备案号21021102000967 )|网站地图|辽ICP备19018387号

GMT+8, 2024-12-23 14:09 , Processed in 0.076593 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表