pitot tube strain gauge
Dependencies: mbed ADS1015 SDFileSystem
main.cpp
00001 #include "mbed.h" 00002 #include "Adafruit_ADS1015.h" 00003 #include "SDFileSystem.h" 00004 #define ADS1115_ADDR 0b1001000 00005 00006 Serial pc(USBTX, USBRX, 115200); 00007 I2C i2c(p28, p27); 00008 Adafruit_ADS1115 ads1115(&i2c, ADS1115_ADDR); 00009 SDFileSystem sd_file_system(p5, p6, p7, p8, "sd"); 00010 Timer sd_timer; 00011 00012 FILE *sd; 00013 char file_name[64]; 00014 char f_sd; 00015 int16_t val[4] = {}; 00016 float voltage[4] = {}; 00017 float sum[4] = {}; 00018 float v_ave[4] = {}; 00019 float strain_v[4] = {}; 00020 00021 int main() 00022 { 00023 ads1115.setGain(GAIN_TWOTHIRDS); 00024 00025 char file_name_format[] = "/sd/IZU2020_MISSION_%d.dat"; 00026 int file_number = 1; 00027 while(1) { 00028 sprintf(file_name, file_name_format, file_number); 00029 sd = fopen(file_name, "r"); 00030 if(sd != NULL) { 00031 fclose(sd); 00032 file_number++; 00033 } else { 00034 sprintf(file_name, "/sd/IZU2020_MISSION_%d.dat", file_number); 00035 break; 00036 } 00037 } 00038 sd = fopen(file_name, "w"); 00039 sd_timer.start(); 00040 if(sd) { 00041 fprintf(sd, "f_sd, "); 00042 fprintf(sd, "speed[m/s],"); 00043 fprintf(sd, "sigma1,"); 00044 fprintf(sd, "sigma2,"); 00045 fprintf(sd, "taumax[MPa],"); 00046 fprintf(sd, "\r\n"); 00047 } 00048 00049 for(int i = 0; i < 10; i ++ ) { 00050 val[0] = ads1115.readADC_SingleEnded(0); 00051 val[1] = ads1115.readADC_SingleEnded(1); 00052 val[2] = ads1115.readADC_SingleEnded(2); 00053 val[3] = ads1115.readADC_SingleEnded(3); 00054 voltage[0] = val[0] / 32768.0 * 6.144; 00055 voltage[1] = val[1] / 32768.0 * 6.144; 00056 voltage[2] = val[2] / 32768.0 * 6.144; 00057 voltage[3] = val[3] / 32768.0 * 6.144; 00058 sum[0] += voltage[0]; 00059 sum[1] += voltage[1]; 00060 sum[2] += voltage[2]; 00061 sum[3] += voltage[3]; 00062 } 00063 v_ave[0] = sum[0] / 10.0; 00064 v_ave[1] = sum[1] / 10.0; 00065 v_ave[2] = sum[2] / 10.0; 00066 v_ave[3] = sum[3] / 10.0; 00067 00068 while(1) { 00069 val[0] = ads1115.readADC_SingleEnded(0); 00070 val[1] = ads1115.readADC_SingleEnded(1); 00071 val[2] = ads1115.readADC_SingleEnded(2); 00072 val[3] = ads1115.readADC_SingleEnded(3); 00073 voltage[0] = val[0] / 32768.0 * 6.144; 00074 voltage[1] = val[1] / 32768.0 * 6.144; 00075 voltage[2] = val[2] / 32768.0 * 6.144; 00076 voltage[3] = val[3] / 32768.0 * 6.144; 00077 pc.printf("%d, r%d, g%d, w%d\r\n", val[0], val[1], val[2], val[3]); 00078 pc.printf("%f, r%f, g%f, w%f [V]\r\n", voltage[0], voltage[1], voltage[2], voltage[3]); 00079 00080 /*pitot_tube 00081 -------------------------------------------------*/ 00082 float pitot_v = voltage[0] - v_ave[0] + 1; 00083 //P = ((Vout / Vs) - 0.2) / 0.2 00084 float pitot_Pa = (pitot_v / 5.0 - 0.2) / 0.2; 00085 printf("pressure %f[kPa]\r\n", pitot_Pa); 00086 float density = 1.3; 00087 //v = root(2 * P / ρ) 00088 float pitot_speed = sqrt(2 * pitot_Pa * 1000 / density); 00089 printf("speed %f[m/s]\r\n", pitot_speed); 00090 printf("speed %f[km/h]\r\n", pitot_speed * 3600 / 1000.0); 00091 00092 /*strain_gauge 00093 ----------------------------------------------------*/ 00094 strain_v[1] = voltage[1] - v_ave[1]; 00095 strain_v[2] = voltage[2] - v_ave[2]; 00096 strain_v[3] = voltage[3] - v_ave[3]; 00097 //VOUT – VREF = G(VIN+ – VIN–) 00098 //VREF = GND 00099 //G = (49.4kΩ/RG) + 1 00100 //straun = 2/3.3*V 00101 float G = (49.4 * 1000 / 120.0) + 1; 00102 float V1 = strain_v[1] / G; 00103 float strain1 = 2 / 3.3 * V1 * 1000000.0; 00104 float V2 = strain_v[2] / G; 00105 float strain2 = 2 / 3.3 * V2 * 1000000.0; 00106 float V3 = strain_v[3] / G; 00107 float strain3 = 2 / 3.3 * V3 * 1000000.0; 00108 printf("strain r %f g %f w %f [uε]\r\n", strain1, strain2, strain3); 00109 00110 float E = 2.5;//Al 72GPa 00111 float nu = 0.3;//ポアソン比 00112 float g = E / 2 / (1 + nu); //横弾性係数 00113 float sigmax = E / (1 - nu * nu) * (strain1 + nu * strain3) / 1000.0; 00114 float sigmay = E / (1 - nu * nu) * (nu * strain1 + strain3) / 1000.0; 00115 float gammaxy = 2 * strain2 - strain1 - strain3; 00116 float tauxy = g * gammaxy / 1000.0; 00117 float sigma1 = (sigmax + sigmay) + sqrt((sigmax - sigmay) * (sigmax - sigmay) + 4 * tauxy * tauxy); 00118 float sigma2 = (sigmax + sigmay) - sqrt((sigmax - sigmay) * (sigmax - sigmay) + 4 * tauxy * tauxy); 00119 float taumax = (sigma1 - sigma2) / 2.0; 00120 printf("sigmax %f sigmay %f tauxy %f [MPa]\r\n", sigmax, sigmay, tauxy); 00121 printf("sigma1 %f sigma2 %f taumax %f [MPa]\r\n", sigma1, sigma2, taumax); 00122 00123 /*sd 00124 --------------------------------------------------------*/ 00125 f_sd = bool(sd); 00126 if(sd) { 00127 fprintf(sd, "%d,", f_sd); 00128 fprintf(sd, "%f,", pitot_speed); 00129 fprintf(sd, "%f,", sigma1); 00130 fprintf(sd, "%f,", sigma2); 00131 fprintf(sd, "%f,", taumax); 00132 fprintf(sd, "\r\n"); 00133 } 00134 if(sd_timer.read_ms() >= 60*1000) { 00135 sd_timer.reset(); 00136 sd_timer.start(); 00137 if(sd) { 00138 fclose(sd); 00139 sd = fopen(file_name, "a"); 00140 } 00141 } 00142 00143 /*test 00144 ----------------------------------------------------*/ 00145 float P = 5.0 * 9.8; 00146 float A = 14.5 * 3.0; 00147 float sigma = P / A; 00148 pc.printf("test %f\r\n", sigma); 00149 00150 wait(0.5); 00151 } 00152 }
Generated on Tue Jul 19 2022 14:34:50 by
1.7.2