曙光生物研究探空火箭计划(超详细,持续更新)流量警告
暮光之羽2019/08/11喷气推进 IP:四川

自立下flag已经过去了3个多月,整天画图奔波忙到吐。然后。。。然后就忘记发帖了(跪)

香蕉君可能会迟到,但他从不缺席(误)。


项目说明:

1.搭载仓鼠一只。

2.携带心率血氧传感器对其记录在强加速度下生物体征数据的变化。

3.携带气压传感器测量高度海拔与温度。

4.携带三轴加速度计完成开伞和飞行数据测量。

5.携带sd卡模块记录全部数据。

6.搭载宏天云图传及高清运动相机,实时完成火箭航拍并记录影像。

7.搭载miniDV(夜视)监测生物舱装况并记录影像。

传感器及电子元件清单

IMG_20190704_185335.jpg


注:图中一些元件并没有用到(如hx711用作试车台推力计)

arduino尽管性能不佳,但如此小巧简单还是用作航电开发板的首选。。嗯。老板来两片

mpu6050,强大。@彩虹之巅,详见XXXXXXXXXXXXXXXXXXXXXXXX/t/55025(很多同学反映GitHub上面下载的库文件会带有网页地址,影响程序编译,整理了一下贴过来方便大家使用)

mpu6050.zip

max30102,心率血氧模块,非常小巧好用。上资料:

MH-ET LIVE _MAX30102 Ardunio.zip

微信图片_20190810213812.png

图片mmexport1562767575138.jpg

bmp180,非常常见的气压计。上代码:

//Arduino 1.0+ Only
//Arduino 1.0+ Only

/*Based largely on code by  Jim Lindblom

Get pressure, altitude, and temperature from the BMP085.
Serial.print it out at 9600 baud to serial monitor.
*/

#include <wire.h>

#define BMP085_ADDRESS 0x77  // I2C address of BMP085

const unsigned char OSS = 0;  // Oversampling Setting

// Calibration values
int ac1;
int ac2;
int ac3;
unsigned int ac4;
unsigned int ac5;
unsigned int ac6;
int b1;
int b2;
int mb;
int mc;
int md;

// b5 is calculated in bmp085GetTemperature(...), this variable is also used in bmp085GetPressure(...)
// so ...Temperature(...) must be called before ...Pressure(...).
long b5; 

void setup(){
  Serial.begin(9600);
  Wire.begin();

  bmp085Calibration();
}

void loop()
{
  float temperature = bmp085GetTemperature(bmp085ReadUT()); //MUST be called first
  float pressure = bmp085GetPressure(bmp085ReadUP());
  float atm = pressure / 101325; // "standard atmosphere"
  float altitude = calcAltitude(pressure); //Uncompensated caculation - in Meters 

  Serial.print("Temperature: ");
  Serial.print(temperature, 2); //display 2 decimal places
  Serial.println("deg C");

  Serial.print("Pressure: ");
  Serial.print(pressure, 0); //whole number only.
  Serial.println(" Pa");

  Serial.print("Standard Atmosphere: ");
  Serial.println(atm, 4); //display 4 decimal places

  Serial.print("Altitude: ");
  Serial.print(altitude, 2); //display 2 decimal places
  Serial.println(" M");

  Serial.println();//line break

  delay(1000); //wait a second and get values again.
}

// Stores all of the bmp085's calibration values into global variables
// Calibration values are required to calculate temp and pressure
// This function should be called at the beginning of the program
void bmp085Calibration()
{
  ac1 = bmp085ReadInt(0xAA);
  ac2 = bmp085ReadInt(0xAC);
  ac3 = bmp085ReadInt(0xAE);
  ac4 = bmp085ReadInt(0xB0);
  ac5 = bmp085ReadInt(0xB2);
  ac6 = bmp085ReadInt(0xB4);
  b1 = bmp085ReadInt(0xB6);
  b2 = bmp085ReadInt(0xB8);
  mb = bmp085ReadInt(0xBA);
  mc = bmp085ReadInt(0xBC);
  md = bmp085ReadInt(0xBE);
}

// Calculate temperature in deg C
float bmp085GetTemperature(unsigned int ut){
  long x1, x2;

  x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
  x2 = ((long)mc << 11) (x1 + md);   b5 =" x1 + x2;"   float temp =" ((b5 + 8)">>4);
  temp = temp /10;

  return temp;
}

// Calculate pressure given up
// calibration values must be known
// b5 is also required so bmp085GetTemperature(...) must be called first.
// Value returned will be pressure in units of Pa.
long bmp085GetPressure(unsigned long up){
  long x1, x2, x3, b3, b6, p;
  unsigned long b4, b7;

  b6 = b5 - 4000;
  // Calculate B3
  x1 = (b2 * (b6 * b6)>>12)>>11;
  x2 = (ac2 * b6)>>11;
  x3 = x1 + x2;
  b3 = (((((long)ac1)*4 + x3)<<oss) + 2)>>2;

  // Calculate B4
  x1 = (ac3 * b6)>>13;
  x2 = (b1 * ((b6 * b6)>>12))>>16;
  x3 = ((x1 + x2) + 2)>>2;
  b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;

  b7 = ((unsigned long)(up - b3) * (50000>>OSS));
  if (b7 < 0x80000000)     p =" (b7<<1)/b4;"   else   x1 =" (p">>8) * (p>>8);
  x1 = (x1 * 3038)>>16;
  x2 = (-7357 * p)>>16;
  p += (x1 + x2 + 3791)>>4;

  long temp = p;
  return temp;
}

// Read 1 byte from the BMP085 at 'address'
char bmp085Read(unsigned char address)
{
  unsigned char data;

  Wire.beginTransmission(BMP085_ADDRESS);
  Wire.write(address);
  Wire.endTransmission();

  Wire.requestFrom(BMP085_ADDRESS, 1);
  while(!Wire.available())
    ;

  return Wire.read();
}

// Read 2 bytes from the BMP085
// First byte will be from 'address'
// Second byte will be from 'address'+1
int bmp085ReadInt(unsigned char address)
{
  unsigned char msb, lsb;

  Wire.beginTransmission(BMP085_ADDRESS);
  Wire.write(address);
  Wire.endTransmission();

  Wire.requestFrom(BMP085_ADDRESS, 2);
  while(Wire.available()<2)     ;   msb =" Wire.read();"   lsb =" Wire.read();"   return (int) msb<<8 | lsb; }  read the uncompensated temperature value unsigned int bmp085readut(){   unsigned int ut;     write 0x2e into register 0xf4  this requests a temperature reading   wire.begintransmission(bmp085_address);   wire.write(0xf4);   wire.write(0x2e);   wire.endtransmission();  wait at least 4.5ms   delay(5);  read two bytes from registers 0xf6 and 0xf7   ut =" bmp085ReadInt(0xF6);"   return ut;  read the uncompensated pressure value unsigned long bmp085readup(){   unsigned char msb, lsb, xlsb;   unsigned long up =" 0;"  write 0x34+(oss<<6) into register 0xf4  request a pressure reading w  oversampling setting   wire.write(0x34 + (oss<<6));  wait for conversion, delay time dependent on oss   delay(2 + (3<<oss));  read register 0xf6 (msb), 0xf7 (lsb), and 0xf8 (xlsb)   xlsb =" bmp085Read(0xF8);"   up =" (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) ">> (8-OSS);

  return up;
}

void writeRegister(int deviceAddress, byte address, byte val) {
  Wire.beginTransmission(deviceAddress); // start transmission to device 
  Wire.write(address);       // send register address
  Wire.write(val);         // send value to write
  Wire.endTransmission();     // end transmission
}

int readRegister(int deviceAddress, byte address){

  int v;
  Wire.beginTransmission(deviceAddress);
  Wire.write(address); // register to read
  Wire.endTransmission();

  Wire.requestFrom(deviceAddress, 1); // read a byte

  while(!Wire.available()) {
    // waiting
  }

  v = Wire.read();
  return v;
}

float calcAltitude(float pressure){

  float A = pressure/101325;
  float B = 1/5.25588;
  float C = pow(A,B);
  C = 1 - C;
  C = C /0.0000225577;

  return C;
}</2)></ 0x80000000)></oss) + 2)></ 11)></wire.h>

微信图片_20190810212642.png

sd卡模块(注意带电平转换)

继电器模块(可用三极管代替)

gps模块(需要sim800c支持gprs数据传输至onenet云,然后运存又炸了,然后就需要2560,然后。。就没有然后了。最后搞了个tcl的成品gps+北斗跟踪器)

在这里还是讲述一下这个悲伤的故事叭= =

图片IMG_20190711_163223.jpg

测试123 qwq(因为在室内。。根本搜不到星)

图片IMG_20190711_163311.jpg

后来在室外也搜不到,,商家的陶瓷天线我认为一点用都没有。。。

故接上了3m长的强大天线= =(收到了信号√)

资料包XXXXXXXXXXXXXXXXXXXXXXXX/t/83599

因为要远程监控轨迹,所以就用到了物联网数据整合利器onenet平台XXXXXXXXXXXXXXXXXXXXXXXXX/

申请项目找到自己设备的key然后把key填写至sim800c或其他gprs模块的代码中去,就可以实时记录项目数据了

代码:

#include <timerone.h>

#define DebugSerial Serial
#define GprsSerail Serial3
#define GpsSerial  Serial2

struct
{
  char GPS_Buffer[80];
  bool isGetData;   //是否获取到GPS数据
  bool isParseData; //是否解析完成
  char UTCTime[11];   //UTC时间
  char latitude[11];    //纬度
  char N_S[2];    //N/S
  char longitude[12];   //经度
  char E_W[2];    //E/W
  bool isUsefull;   //定位信息是否有效
} Save_Data;

const unsigned int gpsRxBufferLength = 600;
char gpsRxBuffer[gpsRxBufferLength];
unsigned int gpsRxCount = 0;

#define Success 1U
#define Failure 0U

int L = 13; //LED指示灯引脚

unsigned long  Time_Cont = 0;       //定时器计数器

const unsigned int gprsRxBufferLength = 600;
char gprsRxBuffer[gprsRxBufferLength];
unsigned int gprsBufferCount = 0;
char OneNetServer[] = "api.heclouds.com";       //不需要修改


char device_id[] = "3225187";    //修改为自己的设备ID
char API_KEY[] = "R9xO5NZm6oVI4YBHvCPKEqtwYtMA";    //修改为自己的API_KEY
char sensor_gps[] = "location";

void setup() {
    pinMode(L, OUTPUT);
    digitalWrite(L, LOW);

    Save_Data.isGetData = false;
    Save_Data.isParseData = false;
    Save_Data.isUsefull = false;

    DebugSerial.begin(9600);
    GprsSerail.begin(9600);
    GpsSerial.begin(9600);      //定义波特率9600

    Timer1.initialize(1000);
    Timer1.attachInterrupt(Timer1_handler);

    initGprs();

    DebugSerial.println("\r\nsetup end!");
}

void loop() {
      gpsRead();  //获取GPS数据
      parseGpsBuffer();//解析GPS数据
      printGpsBuffer();//输出解析后的数据  ,包括发送到OneNet服务器  
}

void printGpsBuffer()
{
  if (Save_Data.isParseData)
  {
    Save_Data.isParseData = false;
    
    DebugSerial.print("Save_Data.UTCTime = ");
    DebugSerial.println(Save_Data.UTCTime);

    if(Save_Data.isUsefull)
    {
      Save_Data.isUsefull = false;
      DebugSerial.print("Save_Data.latitude = ");
      DebugSerial.println(Save_Data.latitude);
      DebugSerial.print("Save_Data.N_S = ");
      DebugSerial.println(Save_Data.N_S);
      DebugSerial.print("Save_Data.longitude = ");
      DebugSerial.println(Save_Data.longitude);
      DebugSerial.print("Save_Data.E_W = ");
      DebugSerial.println(Save_Data.E_W);
      
      postGpsDataToOneNet(API_KEY,device_id,sensor_gps,Save_Data.longitude,Save_Data.latitude); 
    }
    else
    {
      DebugSerial.println("GPS DATA is not usefull!");
    }
    
  }
}

void parseGpsBuffer()
{
  char *subString;
  char *subStringNext;
  if (Save_Data.isGetData)
  {
    Save_Data.isGetData = false;
    DebugSerial.println("**************");
    DebugSerial.println(Save_Data.GPS_Buffer);

    
    for (int i = 0 ; i <= 6 ; i++)     {       if (i ="= 0)"       {         if ((substring =" strstr(Save_Data.GPS_Buffer, ",")) == NULL)"           errorlog(12);   解析错误       }       else         substring++;         if ((substringnext =" strstr(subString, ",")) != NULL)"         {           char usefullbuffer[2];            switch(i)           {             case 1:memcpy(save_data.utctime, substring, substringnext - substring);break;  获取utc时间             case 2:memcpy(usefullbuffer, substring, substringnext - substring);break;              case 3:memcpy(save_data.latitude, substring, substringnext - substring);break;   获取纬度信息             case 4:memcpy(save_data.n_s, substring, substringnext - substring);break;  获取n s             case 5:memcpy(save_data.longitude, substring, substringnext - substring);break;              case 6:memcpy(save_data.e_w, substring, substringnext - substring);break;  获取e w             default:break;           }           substring =" subStringNext;"           save_data.isparsedata =" true;"           if(usefullbuffer[0] ="= 'A')"             save_data.isusefull =" true;"           else if(usefullbuffer[0] ="= 'V')"         }         else           errorlog(13);       }   } } void gpsread() {   while (gpsserial.available())   {     gpsrxbuffer[gpsrxcount++] =" GpsSerial.read();"     if (gpsrxcount ="= gpsRxBufferLength)clrGpsRxBuffer();"   char* gps_bufferhead;   char* gps_buffertail;   if ((gps_bufferhead =" strstr(gpsRxBuffer, "$GPRMC,")) != NULL || (GPS_BufferHead = strstr(gpsRxBuffer, "$GNRMC,")) != NULL )"     if (((gps_buffertail =" strstr(GPS_BufferHead, "\r\n")) != NULL) && (GPS_BufferTail "> GPS_BufferHead))
    {
      memcpy(Save_Data.GPS_Buffer, GPS_BufferHead, GPS_BufferTail - GPS_BufferHead);
      Save_Data.isGetData = true;

      clrGpsRxBuffer();
    }
  }
}

void clrGpsRxBuffer(void)
{
  memset(gpsRxBuffer, 0, gpsRxBufferLength);      //清空
  gpsRxCount = 0;
}

double longitudeToOnenetFormat(char *lon_str_temp)
{
  double lon_temp = 0;
  long lon_Onenet = 0;
  int dd_int = 0;
  long mm_int = 0;
  double lon_Onenet_double = 0;

  lon_temp = atof(lon_str_temp);
  lon_Onenet =lon_temp*100000;  //转换为整数

  dd_int = lon_Onenet/10000000; //取出dd

  mm_int = lon_Onenet%10000000;  //取出MM部分


  lon_Onenet_double = dd_int + (double)mm_int/60/100000;//换算为Onenet格式


  return lon_Onenet_double;
}

double latitudeToOnenetFormat(char *lat_str_temp)
{
  double lat_temp = 0;
  long lat_Onenet = 0;
  int dd_int = 0;
  long mm_int = 0;

  double lat_Onenet_double = 0;

  lat_temp = atof(lat_str_temp);
  lat_Onenet =lat_temp*100000;  //转换为整数

  dd_int = lat_Onenet/10000000; //取出dd

  mm_int = lat_Onenet%10000000;  //取出MM部分

  lat_Onenet_double = dd_int + (double)mm_int/60/100000;//换算为Onenet格式


  return lat_Onenet_double;
}

void postGpsDataToOneNet(char* API_VALUE_temp,char* device_id_temp,char* sensor_id_temp,char* lon_temp,char* lat_temp)
{
    char send_buf[400]= {0};
    char text[100] = {0};
    char tmp[25] = {0};

    char lon_str_end[15] = {0};
    char lat_str_end[15] = {0};

    dtostrf(longitudeToOnenetFormat(lon_temp),3,6, lon_str_end);  //转换成字符串输出
    dtostrf(latitudeToOnenetFormat(lat_temp),2,6, lat_str_end);  //转换成字符串输出

    //连接服务器
    memset(send_buf, 0, 400);    //清空
    strcpy(send_buf, "AT+CIPSTART=\"TCP\",\"");
    strcat(send_buf, OneNetServer);
    strcat(send_buf, "\",80\r\n");
    if (sendCommand(send_buf, "CONNECT", 10000, 5) == Success);
    else errorLog(7);

    //发送数据
    if (sendCommand("AT+CIPSEND\r\n", ">", 3000, 1) == Success);
    else errorLog(8);

    memset(send_buf, 0, 400);    //清空

    /*准备JSON串*/
    //ARDUINO平台不支持sprintf的double的打印,只能转换到字符串然后打印
    sprintf(text,"{\"datastreams\":[{\"id\":\"%s\",\"datapoints\":[{\"value\":{\"lon\":%s,\"lat\":%s}}]}]}"
      ,sensor_id_temp,lon_str_end,lat_str_end);
  
    /*准备HTTP报头*/
    send_buf[0] = 0;
    strcat(send_buf,"POST /devices/");
    strcat(send_buf,device_id_temp);
    strcat(send_buf,"/datapoints HTTP/1.1\r\n");//注意后面必须加上\r\n
    strcat(send_buf,"api-key:");
    strcat(send_buf,API_VALUE_temp);
    strcat(send_buf,"\r\n");
    strcat(send_buf,"Host:");
    strcat(send_buf,OneNetServer);
    strcat(send_buf,"\r\n");
    sprintf(tmp,"Content-Length:%d\r\n\r\n", strlen(text));//计算JSON串长度
    strcat(send_buf,tmp);
    strcat(send_buf,text);

    if (sendCommand(send_buf, send_buf, 3000, 1) == Success);
    else errorLog(9);

    char sendCom[2] = {0x1A};
    if (sendCommand(sendCom, "\"succ\"}", 3000, 1) == Success);
    else errorLog(10);

    if (sendCommand("AT+CIPCLOSE\r\n", "CLOSE OK", 3000, 1) == Success);
    else errorLog(11);

    if (sendCommand("AT+CIPSHUT\r\n", "SHUT OK", 3000, 1) == Success);
    else errorLog(11);
}

void initGprs()
{
    if (sendCommand("AT\r\n", "OK", 3000, 10) == Success);
    else errorLog(1);

//      如果输入 AT+CREG? <cr>则返回+CREG: <mode>, <stat> [ ,<lac>,<ci> ]  
// 注: <mode>的值共有三个选项,分别是 0 or 1 or 2,  其中0 代表关闭网络注册结果
//            码, 1 代表当网络注册状态改变时激活网络注册结果码, 2 代表激活网
// 络注册结果码同时显示区域和小区信息.
//    <stat>的返回值共有三个,分别是 0, 1, 2,3,4,5 ,  其中 0 代表没有注册网络同时
//   模块没有找到运营商, 1代注册到了本地网络, 2 代表找到运营商但没
// 有注册网络, 3 代表注册被拒绝, 4 代表未知的数据, 5代表注册在漫游
// 状态.
//    <lac>表示所属网络区域代码,十六进制格式显示,如: “ 279C” 
//    <ci>表示所属网络的小区 ID,十六进制格式显示,如: “ 0EB2”  Tech-Link T&E 
    if (sendCommand("AT+CREG?\r\n", "+CREG: 0,1", 3000, 10) == Success);
    else errorLog(2);

    if (sendCommand("AT+CGCLASS=\"B\"\r\n", "OK", 3000, 2) == Success);
    else errorLog(3);

    if (sendCommand("AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n", "OK", 3000, 2) == Success);
    else errorLog(4);

    if (sendCommand("AT+CGATT=1\r\n", "OK", 3000, 2) == Success);
    else errorLog(5);

    if (sendCommand("AT+CLPORT=\"TCP\",\"2000\"\r\n", "OK", 3000, 2) == Success);
    else errorLog(6); 
}

void(* resetFunc) (void) = 0; //制造重启命令 

void errorLog(int num)  
{
    DebugSerial.print("ERROR");
    DebugSerial.println(num);
    while (1)
    {
        digitalWrite(L, HIGH);
        delay(300);
        digitalWrite(L, LOW);
        delay(300);

        if (sendCommand("AT\r\n", "OK", 100, 10) == Success)
        {
            DebugSerial.print("\r\nRESET!!!!!!\r\n");
            resetFunc();
        }
    }
}



unsigned int sendCommand(char *Command, char *Response, unsigned long Timeout, unsigned char Retry)
{
    clrGprsRxBuffer();
    for (unsigned char n = 0; n < retry; n++)     {         debugserial.print("\r\n---------send at command:---------\r\n");         debugserial.write(command);         gprsserail.write(command);         time_cont =" 0;"         while (time_cont < timeout)         {             gprsreadbuffer();             if(strstr(gprsrxbuffer, response) !=" NULL)"             {                 debugserial.print("\r\n="=========receive AT Command:==========\r\n");"                 debugserial.print(gprsrxbuffer);  输出接收到的信息                 clrgprsrxbuffer();                 return success;             }         }     }     debugserial.print("\r\n="=========receive AT Command:==========\r\n");"     debugserial.print(gprsrxbuffer);     clrgprsrxbuffer();     return failure; } void timer1_handler(void) {     time_cont++; void gprsreadbuffer() {     while (gprsserail.available())         gprsrxbuffer[gprsbuffercount++] =" GprsSerail.read();"         if (gprsbuffercount ="= gprsRxBufferLength)clrGprsRxBuffer();" void clrgprsrxbuffer(void)     memset(gprsrxbuffer, 0, gprsrxbufferlength);       清空     gprsbuffercount =" 0;" }< pre></ retry; n++)></ci></lac></stat></mode></ci></lac></stat></mode></cr></= 6 ; i++)></timerone.h>

当然喽。2560!328p相继去世

小朋友就应该有小朋友的亚子(误)

IMG_20190810_223833.jpg

宏天云图传(来自邪恶疯狂推销员 绝对零度 )

QQ图片20190810232834.png

2w图传配备1280p高清小蚁运动相机

IMG_20190620_205304.jpg

调试(用的雪花屏减少信号干扰)

图片IMG_20190730_192728.jpg

玛德线断了

图片IMG_20190802_221431.jpg

自奸商零度了解小蚁相机的信号传输方式不同,连接线比普通micro usb多一根(普通为黑白绿红,坑爹线为黑白黄绿红)

那么。。注入灵魂

图片IMG_20190802_214239.jpg

图片IMG_20190802_221145.jpg

图片IMG_20190802_231612.jpg

小部件比如开关什么的就不列举了

接线图及电子元件测绘

IMG_20190725_220435.jpg

IMG_20190725_220400.jpg


现在来整合一下max30102和bmp180的程序

开局失利= = 刚一上来内存就爆了qaq

我日你仙人板板

微信图片_20190810214341.png

官方明示不得使用mega328p

无奈去掉了血氧浓度测试这个功能(有兴趣的盆友可以用2560畅玩)

阉割成太监:

微信图片_20190810214723.png

搞了一下午终于小有成就

微信图片_20190810214903.png

嗯。看起来好像没什。。。。

我@#¥%%#@¥%……(此处应该有脏话)

崩溃

I2c通信失败

在哥们的帮助下排错= =(转眼就忙到了凌晨)

1565445264(1).png

天。。粗心漏了一段代码

终于,功夫不负有心人

QQ图片20190810215838.jpg

源汁源味

max30102_bmp180(1)(1).rar

实在是没有精力搞sd卡数据写入了(大家闲着可以搞一搞),然后在小箱子里翻到了这个神器(某宝搜索串口数据储存器)

只要接电源和数据线路(txd反接rxd这样)就可以完成数据写入了(最大支持32GbU盘或tf卡)

IMG_20190810_220601.jpg

资料如下

LCES 串口SD卡模块资料.zip

布线做航电

此乃精工雕琢,集天地之精华之纸模(雾)

图片IMG_20190727_175358.jpg

图片IMG_20190727_175323.jpg

图片IMG_20190727_175349.jpg

糙汉子一枚略略略粗糙orz

根据纸模的大致结构就可以进行3d建模了

肝肝肝。肝就对了

day one 

1565448508(1).png

day two

图片-50d3bb49b826ce1b.png

day three

图片-25d31c77b002ce1.png

day four

图片3f962f31d6d4ddab.png

day five

图片IMG_20190725_222105.jpg

QQ图片20190810230125.png

!!!!

图片-70a6d0893797d3d2.png

看了看时间,已是凌晨3点

一阵反胃。赶忙跑到厕所,那一天真的画吐了

洗了个澡回到电脑前,揉揉眼睛看着努力的成果,开心得笑了,可能这就是diy的乐趣吧

/****************************************************************************************/

我是航天员刘培强

图片IMG_20190806_121614.jpg

图片IMG_20190806_121733.jpg

图片IMG_20190806_125129.jpg

当老爷供着

IMG_20190807_192800.jpg

七夕了,送根黄瓜

IMG_20190807_192001.jpg

IMG_20190807_191957.jpg

小崽子在我给它量体征的时候咬了我一口跑路了,害的我在床下逮了半个小时

1565452082(1).png

1565452136(1).png

1565452167(1).png

感谢@零度 提供的3d打印服务w

补更完毕

待续,感谢关注


来自:航空航天 / 喷气推进
41
 
9
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
电子Q
5年4个月前 IP:上海
862189

LZ考虑打板不,打板可以减少不少体积,提高电路可靠性

测试电路一般是一大堆传感器和线的...我会随便用黑胶布包一下就完了...不会像LZ一样用SW系统建模(膜)


不过看起来是大工程啊,加油~😁

引用
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ERIC20041219
5年4个月前 IP:浙江
862191

支持!☣生物探空火箭

引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862195
引用ERIC20041219发表于2楼的内容
支持!☣生物探空火箭

感谢资磁!

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
山氰水溴
5年4个月前 IP:广东
862196

滋磁,建议楼主使用场管模块代替继电器,增加可靠性。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mach ring studio
5年4个月前 IP:浙江
862224

原来这仓鼠是干这事用的

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
xljxlj
5年4个月前 修改于 5年4个月前 IP:浙江
862254
引用暮光之羽发表于3楼的内容
感谢资磁!

328不够用可以用mega644,那个运存大些,价格差不多,板子大小也差不多


感觉还是打样一下比较好,杜邦线的质量的确不咋地,我还有一个10x15cm的免费打样机会没用掉,可以帮你打下,支持一下学长啊😁

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
UIC
5年4个月前 IP:浙江
862279

支持支持!估计射高能有多少

别让小老鼠掉下来时候挂了啊,还是想看到心率血压数据

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ENG ETO
5年4个月前 IP:湖南
862290

可以先空载发射测一下加速度

别仓鼠当场去世了(手动滑稽)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862291
引用xljxlj发表于6楼的内容
328不够用可以用mega644,那个运存大些,价格差不多,板子大小也差不多感觉还是打样一下比较好,...

哇,找了半天这种东西了,多谢提示😂


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862292

非常人道的测试:把仓鼠绑自行车后轮上,然后码表定速骑

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862294

这种加速度的话人是肯定承受不了的,大概20几个g,小动物在短时间内应该没什么大问题💀

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Robot_V1
5年4个月前 修改于 5年4个月前 IP:江西
862322
引用暮光之羽发表于11楼的内容
这种加速度的话人是肯定承受不了的,大概20几个g,小动物在短时间内应该没什么大问题💀

为何不先做个简易离心机测试一下呢?

ps:1、关于抗过载能力:有记录的人类存活的最大过载约为46.2g(没错,就是那个火箭雪橇的驾驶员);其他哺乳动物未知,小强能扛1000g以上。

2、动物在不同方向上对加速度的承受能力有极大差异。以人类为例,对前后方向上的过载承受能力远高于竖直方向。这是血液流向决定的。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496
5年4个月前 IP:江苏
862357

离心机测试+1。

话说只有我的关注点在萌萌哒小仓鼠吗?为啥要送它上天(而不是其他动物)?

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ENG ETO
5年4个月前 IP:湖南
862364
引用154454496发表于13楼的内容
离心机测试+1。话说只有我的关注点在萌萌哒小仓鼠吗?为啥要送它上天(而不是其他动物)?

感觉没有别的合适的了……

小强之类的生命体征不好测啊……


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862369

小崽子又咬我,明天做离心机训练

超级截屏_20190814_004930.png


引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Squid
5年4个月前 IP:重庆
862406

建议加个座椅,把小白鼠牢牢地绑在上面,以免乱动弄掉测心跳的电极或者在发射中左右摇摆。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
862408
引用Squid发表于16楼的内容
建议加个座椅,把小白鼠牢牢地绑在上面,以免乱动弄掉测心跳的电极或者在发射中左右摇摆。

蛤蛤蛤(手动滑稽)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
BackspACE
5年4个月前 IP:内蒙古
862474

建议去打个PCB吧,无论是体积还是电气部分的稳定性都要好很多。某宝随便找就可以,也不贵。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 修改于 5年4个月前 IP:山西
862815

小鼠的生活日常


video_20190819_114702.mp4 点击下载

臂力惊人身强体壮,经过一番训练已经丝毫不会畏惧很大的噪音了(⊙x⊙;)

(在它小屋外经常使用角磨机。。)

注:3d打印那边出了点问题,应该是软件问题,目前已经调整好了,还剩下小鼠的宇航服没做好,然后就是这几天撸主外出参加比赛大概4天时间

IMG_20190821_190347.jpg

嘤嘤嘤,请观众老爷们耐心等待。

零件加工好后由@零度 负责更新制作组图

呜呜呜

太艹了,各种失误

qq_pic_merged_1567159190950.jpg


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Andyccr
5年4个月前 IP:广东
862846

好,牛逼。鼓励。

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533
5年4个月前 IP:广东
862853

鼠鼠吓尿会不会造成航电报废2333

+0.5
科创币
虎哥
2019-08-23
噗,这是一个很重要的问题
+0.5
科创币
ERIC20041219
2019-08-24
亏你想的出来
引用
评论
9
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Robot_V1
5年4个月前 IP:山东
862875

楼上说得对,“乘员舱”应妥善密封、加压、控温,还应提前对“乘员”进行训练,使其适应“乘员舱”以及发射时的噪声、振动。毕竟实验目的是“对其记录在强加速度下生物体征数据的变化”,应尽量减少其他因素造成的影响。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:内蒙古
862890
引用zx-16533发表于21楼的内容
鼠鼠吓尿会不会造成航电报废2333

所以专门为小鼠制作了一套航天服,具有抗荷防水的功能,连接件见正文最下方3图,分别是头盔、腰带、手套环😂这个问题早就考虑到了233

引用
评论
3
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
314152
5年4个月前 IP:广东
862904
引用Robot_V1发表于12楼的内容
为何不先做个简易离心机测试一下呢?ps:1、关于抗过载能力:有记录的人类存活的最大过载约为46.2g...

没错,头脚方向大部分人6G就挂彩了😂当然也不乏少数且经过训练的那些扛12G30+s以上

倒是胸背方向能扛20+G,参考联盟那次事故

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 修改于 5年0个月前 IP:山西
863150

失踪人口回归前来更新(汗)

3D打印航电 @零度(此楼更新中)

5a507c8817b1d1d0.jpg

48c540340c7a704f.jpg

这里出了点小插曲。。。除了打印软件抽风外,散热风扇也坏掉了

经过一番调整之后恢复了正常

7a0dc60fc85e4b8d.jpg

142e990b7360faf4.jpg

IMG_20190829_233741.jpg

装零件

IMG_20190830_165131.jpg

IMG_20190830_165122.jpg

可能由于调试原因,一个部件打坏了。还有几个部件需要做出调整

QQ图片20190830171734.jpg

QQ图片20190830171526.jpg

塞不进去(无助= =)

``JP09R@URJT8L_H`{YY}~2.jpg

还有就是。。这哥们好像变胖了= =

只能再做一套航天服了

QQ图片20190830171456.jpg

航电舱与发动机段连接件(因为没有57的酚醛棒料了,只能打印一个喽)

QQ图片20190830165831.png

大一真是忙的一批,好不容易结了几门课终于有时间回来更新了

今天调试了一下GPS/北斗模块,让我的小奴隶去给物联卡交了个话费

这里就出现问题了= =、

BF1T%9S952CVH263_(I}AVS.png

但是

7FB2DA69FB5897F613C57D5AFB63B9DE.jpg

原因是这样的,如果你的物联卡不是本省的。。就不会在营业厅的终端上查找到。

也就是说不能在实体店进行缴费活动,只能在网上营业厅缴费

028B197D2C71A6D2CC1B2ED9C1C13C5E.jpg

缴费过后,插进模块开始测试

😃用放大镜看看这是个什么品种的憨批

DMUQ2TTA599{_RQZE)C$`3M.png

?????????????

W6N@6(MYGG~@V3AY%TMRK$A.png

981823206DD2CF3BFBB045DC90F33BD847B951.jpg

指示灯显示正常

CFF94B8E8E7B5E4646109A59E403F047.jpg

响应很快,精度很好(误差在一米左右的范围)

Inked113{OCIG3)74%DV92XP`M[9_LI.jpg

(未完)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年4个月前 IP:山西
863151

火箭发动机(此楼更新中)

感谢@御坂18650 毛妹贡献的57航箭

IMG_20190830_173250.jpg

IMG_20190830_173317.jpg

经毛妹测试,使用KNSB燃料可获得800N的推力

57外径航箭测绘

QQ图片20190830172843.png

当时还没用熟soildworks。。emm就用AutoCAD先跑一跑

航箭气动自旋1200r/min,这还怎么航拍。。(对方并不想理你并向你丢了一只高能自爆螺旋拐弯狗.jpg)

所以用铝板把气动槽填♂满了嘤

IMG_20190829_190718.jpg

用剪板器ctrl+c

IMG_20190829_195336.jpg

金属粘黏剂ctrl+v

IMG_20190829_195259.jpg

IMG_20190829_195324.jpg

粘贴完毕之后敲敲打打,胶水填缝

最后用角磨机磨平alt+f4(误)

燃料隔热层

因为小动物比较脆弱,所以在此选择比较温和的燃料,也是非常普遍的业余固体燃料-KNSB

隔热层使用pvc排水管道

IMG_20190830_121640.jpg

切割切割。。

鸭累!欧拉欧拉欧拉欧拉!(突然中二)

车削外壁

IMG_20190830_114649.jpg

值得注意的是,PVC管道十分脆弱,因此在使用卡盘时要在内壁垫一个坚固的实体

就是你啦(掏出)

IMG_20190830_114917.jpg

雪花飘飘,北风萧萧(雾)

IMG_20190830_121630.jpg

IMG_20190830_121627.jpg

(未完)

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
misaka10039
5年4个月前 IP:重庆
863213

加油

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
以太LYB
5年3个月前 IP:湖南
864093

坐等,加油。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
徐轩
5年3个月前 IP:宁夏
864110

加油

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
精致大眼剑水蚤
5年3个月前 IP:广东
864116

问一下,是Autocad好用还是soildworks好用?我一同学学Autocad学了一星期,跟没学差不多。。。😂

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
sd196821
5年3个月前 IP:北京
864119
引用精致大眼剑水蚤发表于30楼的内容
问一下,是Autocad好用还是soildworks好用?我一同学学Autocad学了一星期,跟没学...

3维图solidworks好用,平面图随意

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
精致大眼剑水蚤
5年3个月前 IP:广东
864164
引用sd196821发表于31楼的内容
3维图solidworks好用,平面图随意

谢谢告知!!

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年3个月前 IP:山西
864272
引用精致大眼剑水蚤发表于32楼的内容
谢谢告知!!

平面还是AutoCAD强大

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
5年3个月前 IP:山西
864273

统一回复,开学之后事多的一批😂

不过楼主仍在艰难爬行中,感谢大家关注w

引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ERIC20041219
5年3个月前 IP:浙江
864278
引用暮光之羽发表于34楼的内容
统一回复,开学之后事多的一批😂不过楼主仍在艰难爬行中,感谢大家关注w

加油,深有同感

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wadjt
5年3个月前 IP:四川
864283
引用暮光之羽发表于23楼的内容
所以专门为小鼠制作了一套航天服,具有抗荷防水的功能,连接件见正文最下方3图,分别是头盔、腰带、手套环...

祝升空顺利,然后那到一手数据,(其实最想看仓鼠下来是不是已经不醒鼠事了😁

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
信仰は儚き人間の為に
5年3个月前 IP:广东
864290

仓鼠会不会又胖了

引用
评论(1)
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
精致大眼剑水蚤
5年3个月前 IP:广东
864343

楼主加油,期待结果

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玄狐道士
5年3个月前 IP:日本
864347

卧槽,玩得这么大😆,要不要先拿昆虫来做试验啊,感觉用仓鼠还有有点担心安全性😀

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
信仰は儚き人間の為に
4年6个月前 IP:广东
882325

鼠鼠上天了吗

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-86504
4年6个月前 IP:广东
882337

我以前对着自己的窜天猴发白日梦时也想过,没想到真的有人做了,牛逼啊 sticker

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
暮光之羽
进士 机友 笔友
文章
29
回复
350
学术分
0
2017/04/27注册,11个月21天前活动

Xing He Rocket and Space Technology Club

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}