曙光生物研究探空火箭计划(超详细,持续更新)流量警告

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

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


项目说明:

1.搭载仓鼠一只。

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

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

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

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

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

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

传感器及电子元件清单

IMG_20190704_185335.jpg


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

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

mpu6050,强大。@彩虹之巅,详见https://www.kechuang.org/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长的强大天线= =(收到了信号√)

资料包https://www.kechuang.org/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

补更完毕

待续,感谢关注


来自:火箭技术 / 喷气推进
 
8
qxdnfsy
2年2个月前
1楼

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

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


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

回复
评论(1)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ERIC20041219
2年2个月前
2楼

支持!☣生物探空火箭

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

感谢资磁!

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

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

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

原来这仓鼠是干这事用的

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

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


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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
UIC
2年2个月前
7楼

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ENG ETO
2年2个月前
8楼

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

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

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

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


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前
10楼

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前
11楼

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

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

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

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
154454496
2年2个月前
13楼

离心机测试+1。

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

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

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

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


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前
15楼

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

超级截屏_20190814_004930.png


回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Squid
2年2个月前
16楼

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

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

蛤蛤蛤(手动滑稽)

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
BackspACE
2年2个月前
18楼

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前 修改于 2年2个月前
19楼

小鼠的生活日常


video_20190819_114702.mp4 38.16MB

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

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

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

IMG_20190821_190347.jpg

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

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

呜呜呜

太艹了,各种失误

qq_pic_merged_1567159190950.jpg


回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Andyccr
2年2个月前
20楼

好,牛逼。鼓励。

回复
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-16533
2年2个月前
21楼

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

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

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

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

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

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

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前 修改于 1年10个月前
25楼

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

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字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年2个月前
26楼

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

感谢@御坂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
2年2个月前
27楼

加油

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
以太LYB
2年1个月前
28楼

坐等,加油。

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
徐轩
2年1个月前
29楼

加油

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
精致大眼剑水蚤
2年1个月前
30楼

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

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

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

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

谢谢告知!!

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

平面还是AutoCAD强大

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
暮光之羽作者
2年1个月前
34楼

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

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

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

加油,深有同感

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

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

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
信仰は儚き人間の為に
2年1个月前
37楼

仓鼠会不会又胖了

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

楼主加油,期待结果

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
玄狐道士
2年1个月前
39楼

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

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

鼠鼠上天了吗

回复
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zx-86504
1年4个月前
41楼

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

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

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

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

Xing He Rocket and Space Technology Club

%7B%22isDisplay%22%3Atrue%7D

仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。

下载

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传
空空如也~
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
{{forum.displayName}}
{{forum.countThreads}}
篇文章,
{{forum.countPosts}}
条回复
{{forum.description || "暂无简介"}}
ID: {{user.uid}}
学术分隐藏
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

支持的图片格式:jpg, jpeg, png
插入公式
分享回复:{{shareId}}
加载中...
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

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

空空如也

下载资料
{{fileName}}
大小:{{size}}
下载当前附件将花费 {{costMessage}}
{{description}}
你当前剩余 {{holdMessage}}
{{fileName}}
大小:{{size}}
当前附件免费。
你已购买过此附件,下载当前附件不需要花费积分。
加载中...
{{errorInfo}}
附件已丢失
当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}