pitot tube strain gauge

Dependencies:   mbed ADS1015 SDFileSystem

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }