1KyeK

Starry Sky Photography | Camera, Mobile Phone, Equatorial Mount, Galaxy Photography, Jupiter

 
Overview

手机追星拍摄效果https://www.bilibili.com/video/BV14g411m7Ut?vd_source=c748f0905deed633de7597d610ad91cc
3D模型文件在这个群里:681038889 里面保姆级教程
材料的购买:立创商城新人注册优惠券入口可以在这注册领30优惠券,在这里注册有时候还会有不定时的优惠券发放
手机拍摄效果:
手机直出,淡淡的银河系星河,实际上比这个好看一些。
快门速度:S,开到1分钟都不会有拖影。
AF对焦模式开到MF拉到无穷远拍星星
ISO是感光度,大晚上的不建议开超过400
加上了显示屏,使用方法看B站视频,
就是先用指星笔指到北极星,然后调整手机或者相机到你想拍的星星就行了。
大佬用照相机拍的木星
可能是仙女座吧
手机放外边可以打开自动点击器,这样可以间隔一段时间拍一张照片,后期叠加一下或者做个视频都是很方便的。
程序如下:
 
#include //定时器库的头文件#include
// 引入驱动OLED0.91所需的库#include #include
#define SCREEN_WIDTH 128 // 设置OLED宽度,单位:像素#define SCREEN_HEIGHT 32 // 设置OLED高度,单位:像素
// 自定义重置引脚,虽然教程未使用,但却是Adafruit_SSD1306库文件所必需的#define OLED_RESET 4Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NS  7     //南北半球(正反转) #define a   5     //a+#define aa  6     //a-#define b   9     //b+#define bb  10     //b-#define SS0  12   //速度编码1#define SS1  11   //~2#define SS2  8   //~3#define scanMs   20   //定义扫描时间const int tab[8][4] = {  {1, 0, 0, 0},  {1, 0, 1, 0},  {0, 0, 1, 0},  {0, 1, 1, 0},   {0, 1, 0, 0},  {0, 1, 0, 1},  {0, 0, 0, 1},  {1, 0, 0, 1}};static int tab_i = 0;//查表循环
//速度表: {{Ms},{Us}}    恒星速/5X/MAX /1h /2h /3h /5h /12h延时速度//计算:恒星日:23:56:04 = 86164s /2916/96/2 ~ 153.899ms/step//如需月亮速:89428s /2916/96/2~159.729ms/stepconst int Sptab[2][8] = {  {153 , 30 , 0  , 6  , 12 , 19 , 32 , 76 },   {345 , 780, 800, 412, 824, 237, 162, 950}};void scanSp();long double previousMillis = 0; //上一次转换电平绝对时间int A = 0;int Comtime = 0; //补偿恒星速中断、读写、判断耗时 usint Comtimeset;float ms = 0.0;float us = 0.0;int ctl[4]; //0N1S, 2-5Speedint b1 = b;int bb1 = bb;
//int time1 = 0;//int time2;
void setup(){  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  pinMode(a,  OUTPUT);  pinMode(aa, OUTPUT);  pinMode(b,  OUTPUT);  pinMode(bb, OUTPUT);  pinMode(NS, INPUT_PULLUP); //输入上拉 南北半球(正反转)  pinMode(SS0, INPUT_PULLUP); //speed  pinMode(SS1, INPUT_PULLUP); //  pinMode(SS2,  INPUT_PULLUP); //  pinMode(A1, INPUT);  pinMode(A2, INPUT);
  for (;;) {
    if (!digitalRead(A1))//增加补偿    {      delay(40);      if (!digitalRead(A1))      {        Comtime++;      }      Comtimeset = Comtime;    }    else if (!digitalRead(A2))//减小补偿    {      delay(40);      if (!digitalRead(A2))      {        Comtime--;      }      Comtimeset = Comtime;    }
    words_display();    display.display();
    if (digitalRead(2) && digitalRead(3)) //加减速按键同时按下,开始追星    {      break;    }  }  MsTimer2::set(scanMs, scanSp);//中断扫描引脚  MsTimer2::start();}
void scanSp(){  if (digitalRead(3))//kj  {    for (int i = 0; i <= 7; i++) {      tt(a, aa, b1, bb1, i);      delay(1);    }  }
  if (digitalRead(2))//js  {    for (int i = 0; i <= 7; i++) {      tt(a, aa, bb, b, i);      delay(1000);    }    delay(100);  }  if (!digitalRead(A1))//kj  {    ctl[0] = digitalRead(NS);    ctl[1] = digitalRead(SS0);    ctl[2] = digitalRead(SS1);    ctl[3] = digitalRead(SS2);    Speed(ctl);//计算延时毫秒数  }
}
void words_display(){  ctl[0] = digitalRead(NS);  ctl[1] = digitalRead(SS0);  ctl[2] = digitalRead(SS1);  ctl[3] = digitalRead(SS2);  Speed(ctl);//计算延时毫秒数  int spp = ctl[3] + 2 * ctl[2] + 4 * ctl[1];  display.clearDisplay();  display.setTextColor(WHITE);  display.setTextSize(1.5);  display.setCursor(0, 0);  display.print("speed:");  display.print(spp);  display.setCursor(50, 0);  display.print("HS:");  if (digitalRead(NS))  {    display.print("N");  }  else  {    display.print("S");  }  display.setCursor(83, 0);  display.print("RT:");  display.print(millis() / 1000);  display.print("s");  display.setCursor(0, 10);  display.print("CT:");  display.print(Comtime);  display.setCursor(50, 10);  display.print(int(ms));  display.print("MS ");  display.print(int(us));  display.print("US");}void Speed(int ct[4]) //速度与方向{  int spp = ct[3] + 2 * ct[2] + 4 * ct[1]; // 0-7  if (ct[0] == 0) {    b1 = b;    bb1 = bb;  }  else {    b1 = bb;    bb1 = b;  }  switch (spp) {    case 0: {     //star000        ms = Sptab[0][0];        us = Sptab[1][0] - Comtime;      } break;    case 1: {     //5Xstar001        ms = Sptab[0][1];        us = Sptab[1][1];      } break;    case 7: {     //MAX111        ms = Sptab[0][2];        us = Sptab[1][2];      } break;    case 2: {     //1h 010        ms = Sptab[0][3];        us = Sptab[1][3];      } break;    case 3: {     //2h 011        ms = Sptab[0][4];        us = Sptab[1][4];      } break;    case 4: {     //3h 100        ms = Sptab[0][5];        us = Sptab[1][5];      } break;    case 5: {     //5h 101        ms = Sptab[0][6];        us = Sptab[1][6];      } break;    case 6: {     //12h 110        ms = Sptab[0][7];        us = Sptab[1][7];      } break;    default : {      } break;  }  //Serial.println(ms);  //Serial.println(us);}
void tt(int a1, int aa1, int b1, int bb1, int tab_i) //一个电机循环{  digitalWrite(a1,  tab[tab_i][0]);  digitalWrite(aa1, tab[tab_i][1]);  digitalWrite(b1,  tab[tab_i][2]);  digitalWrite(bb1, tab[tab_i][3]);}
void loop() {
  if (ms >= 20) {       //大于20ms时才使用millis()计时    long double currentMillis = millis();    //time1 = micros();    tt(a, aa, b1, bb1, tab_i);    if (currentMillis - previousMillis >= ms) {      delayMicroseconds (us);      previousMillis = currentMillis + us / 1000;      tab_i++;      if (tab_i >= 8) tab_i = 0;      //time2 = micros();      //Serial.println(time2-time1);    }
  }  else {    for (int i = 0; i <= 7; i++) {      tt(a, aa, b1, bb1, i);      delay(ms);      delayMicroseconds (us);    }  }
}
 
参考设计图片
×
 
 
Search Datasheet?

Supported by EEWorld Datasheet

Forum More
Update:2025-05-24 14:13:18

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
community

Robot
development
community

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号