Cubesat V1.0 2016 Código mbed que envía datos
Dependencies: Adafruit_RTCLib BMP180 JPEGCamera L3GD20 LSM303DLHC SDFileSystem mbed
main.cpp@0:8e2b7a69ffda, 2016-05-27 (annotated)
- Committer:
- NilliM
- Date:
- Fri May 27 19:31:41 2016 +0000
- Revision:
- 0:8e2b7a69ffda
Cansat V1.0 2016 Mbed esclava
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
NilliM | 0:8e2b7a69ffda | 1 | #include "SDFileSystem.h" |
NilliM | 0:8e2b7a69ffda | 2 | #include "JPEGCamera.h" |
NilliM | 0:8e2b7a69ffda | 3 | #include "L3GD20.h" |
NilliM | 0:8e2b7a69ffda | 4 | #include "LSM303DLHC.h" |
NilliM | 0:8e2b7a69ffda | 5 | #include "BMP180.h" |
NilliM | 0:8e2b7a69ffda | 6 | #include<stdio.h> |
NilliM | 0:8e2b7a69ffda | 7 | #include<string.h> |
NilliM | 0:8e2b7a69ffda | 8 | #include "mbed.h" |
NilliM | 0:8e2b7a69ffda | 9 | #include <math.h> |
NilliM | 0:8e2b7a69ffda | 10 | |
NilliM | 0:8e2b7a69ffda | 11 | |
NilliM | 0:8e2b7a69ffda | 12 | //Puertos serial |
NilliM | 0:8e2b7a69ffda | 13 | Serial pc(USBTX,USBRX); |
NilliM | 0:8e2b7a69ffda | 14 | Serial mm(p28,p27); |
NilliM | 0:8e2b7a69ffda | 15 | |
NilliM | 0:8e2b7a69ffda | 16 | //Sensores |
NilliM | 0:8e2b7a69ffda | 17 | I2C myI2C(p9,p10); |
NilliM | 0:8e2b7a69ffda | 18 | L3GD20 gyro(p9, p10); |
NilliM | 0:8e2b7a69ffda | 19 | LSM303DLHC compass(p9, p10); |
NilliM | 0:8e2b7a69ffda | 20 | BMP180 bmp180(&myI2C); //IMU |
NilliM | 0:8e2b7a69ffda | 21 | AnalogIn uv(p16); //Uv |
NilliM | 0:8e2b7a69ffda | 22 | AnalogIn alc(p17); //Alcohol |
NilliM | 0:8e2b7a69ffda | 23 | AnalogIn met(p18);//metano |
NilliM | 0:8e2b7a69ffda | 24 | AnalogIn lpg(p19);//lpg |
NilliM | 0:8e2b7a69ffda | 25 | AnalogIn Vol(p20); //Voltaje |
NilliM | 0:8e2b7a69ffda | 26 | |
NilliM | 0:8e2b7a69ffda | 27 | //Camara |
NilliM | 0:8e2b7a69ffda | 28 | JPEGCamera camera(p13, p14); // TX, RX |
NilliM | 0:8e2b7a69ffda | 29 | |
NilliM | 0:8e2b7a69ffda | 30 | //SD |
NilliM | 0:8e2b7a69ffda | 31 | SDFileSystem sd(p5, p6, p7, p8, "sd"); |
NilliM | 0:8e2b7a69ffda | 32 | #define archivof "/sd/fotos/pic%05d.jpg"; |
NilliM | 0:8e2b7a69ffda | 33 | #define archivod "/sd/datos/dato%05d.txt"; |
NilliM | 0:8e2b7a69ffda | 34 | |
NilliM | 0:8e2b7a69ffda | 35 | //Variables |
NilliM | 0:8e2b7a69ffda | 36 | |
NilliM | 0:8e2b7a69ffda | 37 | float uv_rad=0; //UV |
NilliM | 0:8e2b7a69ffda | 38 | float ax, ay, az; |
NilliM | 0:8e2b7a69ffda | 39 | float mx, my, mz; |
NilliM | 0:8e2b7a69ffda | 40 | float gx, gy, gz; |
NilliM | 0:8e2b7a69ffda | 41 | double yaw,pitch,roll; |
NilliM | 0:8e2b7a69ffda | 42 | int press; |
NilliM | 0:8e2b7a69ffda | 43 | float temp;//IMU |
NilliM | 0:8e2b7a69ffda | 44 | float voltaje; //Voltaje |
NilliM | 0:8e2b7a69ffda | 45 | float calc;//Alcohol |
NilliM | 0:8e2b7a69ffda | 46 | float cmet;//metano |
NilliM | 0:8e2b7a69ffda | 47 | float clpg;//Lpg |
NilliM | 0:8e2b7a69ffda | 48 | int conta; |
NilliM | 0:8e2b7a69ffda | 49 | |
NilliM | 0:8e2b7a69ffda | 50 | #define M_PI 3.14159265358979323846 |
NilliM | 0:8e2b7a69ffda | 51 | |
NilliM | 0:8e2b7a69ffda | 52 | |
NilliM | 0:8e2b7a69ffda | 53 | |
NilliM | 0:8e2b7a69ffda | 54 | int main() { |
NilliM | 0:8e2b7a69ffda | 55 | mm.baud(9600); |
NilliM | 0:8e2b7a69ffda | 56 | //Camara |
NilliM | 0:8e2b7a69ffda | 57 | LocalFileSystem local("local"); //save images on mbed |
NilliM | 0:8e2b7a69ffda | 58 | Timer timer; |
NilliM | 0:8e2b7a69ffda | 59 | timer.start(); |
NilliM | 0:8e2b7a69ffda | 60 | camera.setPictureSize(JPEGCamera::SIZE320x240); |
NilliM | 0:8e2b7a69ffda | 61 | conta=0; |
NilliM | 0:8e2b7a69ffda | 62 | mkdir("/sd/fotos", 0777); |
NilliM | 0:8e2b7a69ffda | 63 | mkdir("/sd/datos", 0777); |
NilliM | 0:8e2b7a69ffda | 64 | while(1) { |
NilliM | 0:8e2b7a69ffda | 65 | |
NilliM | 0:8e2b7a69ffda | 66 | conta+= 1; |
NilliM | 0:8e2b7a69ffda | 67 | //UV |
NilliM | 0:8e2b7a69ffda | 68 | uv_rad=((uv.read()*3.3)-1)/0.125; |
NilliM | 0:8e2b7a69ffda | 69 | if(uv_rad<0)uv_rad=0; |
NilliM | 0:8e2b7a69ffda | 70 | //Voltaje |
NilliM | 0:8e2b7a69ffda | 71 | voltaje=(Vol.read()*3.3)/(.2423); |
NilliM | 0:8e2b7a69ffda | 72 | |
NilliM | 0:8e2b7a69ffda | 73 | //GASES |
NilliM | 0:8e2b7a69ffda | 74 | //Alcohol |
NilliM | 0:8e2b7a69ffda | 75 | calc=(alc.read()*3.3); |
NilliM | 0:8e2b7a69ffda | 76 | //Metano |
NilliM | 0:8e2b7a69ffda | 77 | cmet=(met.read()*3.3); |
NilliM | 0:8e2b7a69ffda | 78 | //Lpg |
NilliM | 0:8e2b7a69ffda | 79 | clpg=(lpg.read()*3.3); |
NilliM | 0:8e2b7a69ffda | 80 | |
NilliM | 0:8e2b7a69ffda | 81 | |
NilliM | 0:8e2b7a69ffda | 82 | //IMU |
NilliM | 0:8e2b7a69ffda | 83 | bmp180.init(); |
NilliM | 0:8e2b7a69ffda | 84 | compass.read(&ax, &ay, &az, &mx, &my, &mz); |
NilliM | 0:8e2b7a69ffda | 85 | gyro.read(&gx, &gy, &gz); |
NilliM | 0:8e2b7a69ffda | 86 | roll=atan2(ay, az); |
NilliM | 0:8e2b7a69ffda | 87 | pitch=atan((-ax)/(ay*sin(roll)+az*cos(roll))); |
NilliM | 0:8e2b7a69ffda | 88 | yaw=atan2(mz*sin(roll)-my*cos(roll),mx*cos(pitch)+my*sin(pitch)*sin(roll)+mz*sin(pitch)*cos(roll)); |
NilliM | 0:8e2b7a69ffda | 89 | bmp180.startTemperature(); |
NilliM | 0:8e2b7a69ffda | 90 | wait_ms(5); // Wait for conversion to complete |
NilliM | 0:8e2b7a69ffda | 91 | if(bmp180.getTemperature(&temp) != 0) {pc.printf("Error getting temperature\n");} |
NilliM | 0:8e2b7a69ffda | 92 | bmp180.startPressure(BMP180::ULTRA_LOW_POWER); |
NilliM | 0:8e2b7a69ffda | 93 | wait_ms(10); // Wait for conversion to complete |
NilliM | 0:8e2b7a69ffda | 94 | if(bmp180.getPressure(&press) != 0) {pc.printf("Error getting pressure\n");} |
NilliM | 0:8e2b7a69ffda | 95 | |
NilliM | 0:8e2b7a69ffda | 96 | //Camara |
NilliM | 0:8e2b7a69ffda | 97 | |
NilliM | 0:8e2b7a69ffda | 98 | if (camera.isReady()) { |
NilliM | 0:8e2b7a69ffda | 99 | char filename[32]; |
NilliM | 0:8e2b7a69ffda | 100 | //sprintf(filename, "/local/pict%03d.jpg", conta); |
NilliM | 0:8e2b7a69ffda | 101 | sprintf(filename, "/sd/fotos/pic%05d.jpg", conta); |
NilliM | 0:8e2b7a69ffda | 102 | pc.printf("Picture: %s ", filename); |
NilliM | 0:8e2b7a69ffda | 103 | mm.printf("Picture taken"); |
NilliM | 0:8e2b7a69ffda | 104 | if (camera.takePicture(filename)) { |
NilliM | 0:8e2b7a69ffda | 105 | while (camera.isProcessing()) { |
NilliM | 0:8e2b7a69ffda | 106 | camera.processPicture(); |
NilliM | 0:8e2b7a69ffda | 107 | } |
NilliM | 0:8e2b7a69ffda | 108 | wait(2.0); |
NilliM | 0:8e2b7a69ffda | 109 | } else { |
NilliM | 0:8e2b7a69ffda | 110 | pc.printf("take picture failed\n"); |
NilliM | 0:8e2b7a69ffda | 111 | mm.printf("Picture failed\n"); |
NilliM | 0:8e2b7a69ffda | 112 | wait(2.0); |
NilliM | 0:8e2b7a69ffda | 113 | } |
NilliM | 0:8e2b7a69ffda | 114 | } else { |
NilliM | 0:8e2b7a69ffda | 115 | pc.printf("camera is not ready\n"); |
NilliM | 0:8e2b7a69ffda | 116 | mm.printf("Picture failed\n"); |
NilliM | 0:8e2b7a69ffda | 117 | |
NilliM | 0:8e2b7a69ffda | 118 | wait(2.0); |
NilliM | 0:8e2b7a69ffda | 119 | } |
NilliM | 0:8e2b7a69ffda | 120 | |
NilliM | 0:8e2b7a69ffda | 121 | |
NilliM | 0:8e2b7a69ffda | 122 | char fil[32]; |
NilliM | 0:8e2b7a69ffda | 123 | sprintf(fil, "/sd/datos/dato%05d.txt", conta); |
NilliM | 0:8e2b7a69ffda | 124 | FILE *fp = fopen(fil, "w"); |
NilliM | 0:8e2b7a69ffda | 125 | |
NilliM | 0:8e2b7a69ffda | 126 | //Imprimir valores |
NilliM | 0:8e2b7a69ffda | 127 | pc.printf("\nSensor UV\nUV=%.3fmW/cm^2\n\r",uv_rad);//UV |
NilliM | 0:8e2b7a69ffda | 128 | pc.printf("\nGiroscopo\nr:%.1f p:%.1f y:%.1f\n\r",roll*180/M_PI,pitch*180/M_PI,yaw*180/M_PI); |
NilliM | 0:8e2b7a69ffda | 129 | pc.printf("P=%d Pa\n\rT=%.2fC\n\r", press, temp); //IMU |
NilliM | 0:8e2b7a69ffda | 130 | pc.printf("Sensor Voltaje\nVoltaje:%f V\n\r",voltaje);//Voltaje |
NilliM | 0:8e2b7a69ffda | 131 | pc.printf("Sensor Alcohol\nCantidad:%f mg/l\n\r",calc);//Alcohol |
NilliM | 0:8e2b7a69ffda | 132 | pc.printf("Sensor Metano\nCantidad:%f mg/l\n\r",cmet);//Metano |
NilliM | 0:8e2b7a69ffda | 133 | pc.printf("Sensor LPG\nCantidad:%f mg/l\n\r",clpg);//LPG |
NilliM | 0:8e2b7a69ffda | 134 | pc.printf("Sensor de altitud: %.3f", (44330.77)*(1.0-(pow((float)(press/101326.0),(float)0.1902632))));//altitud |
NilliM | 0:8e2b7a69ffda | 135 | |
NilliM | 0:8e2b7a69ffda | 136 | //Imprimir en sd |
NilliM | 0:8e2b7a69ffda | 137 | fprintf(fp,"\nSensor UV\nUV=%.3fmW/cm^2\n\r",uv_rad);//UV |
NilliM | 0:8e2b7a69ffda | 138 | fprintf(fp,"\nGiroscopo\nr:%.1f p:%.1f y:%.1f\n\r",roll*180/M_PI,pitch*180/M_PI,yaw*180/M_PI); |
NilliM | 0:8e2b7a69ffda | 139 | fprintf(fp,"P=%d Pa\n\rT=%.2fC\n\r", press, temp); //IMU |
NilliM | 0:8e2b7a69ffda | 140 | fprintf(fp,"Sensor Voltaje\nVoltaje:%f V\n\r",voltaje);//Voltaje |
NilliM | 0:8e2b7a69ffda | 141 | fprintf(fp,"Sensor Alcohol\nCantidad:%f mg/l\n\r",calc);//Alcohol |
NilliM | 0:8e2b7a69ffda | 142 | fprintf(fp,"Sensor Metano\nCantidad:%f mg/l\n\r",cmet);//Metano |
NilliM | 0:8e2b7a69ffda | 143 | fprintf(fp,"Sensor LPG\nCantidad:%f mg/l\n\r",clpg);//LPG |
NilliM | 0:8e2b7a69ffda | 144 | fprintf(fp, "Sensor de altitud: %.3f", (44330.77)*(1.0-(pow((float)(press/101326.0),(float)0.1902632))));//altitud |
NilliM | 0:8e2b7a69ffda | 145 | |
NilliM | 0:8e2b7a69ffda | 146 | //Imprimir en cadena |
NilliM | 0:8e2b7a69ffda | 147 | mm.printf("@,%1.3f,",uv_rad); |
NilliM | 0:8e2b7a69ffda | 148 | mm.printf("%.1f, %.1f, %.1f,",roll*180/M_PI,pitch*180/M_PI,yaw*180/M_PI); |
NilliM | 0:8e2b7a69ffda | 149 | mm.printf("%d, %.2f,",press, temp); |
NilliM | 0:8e2b7a69ffda | 150 | mm.printf("%2.1f,",voltaje); |
NilliM | 0:8e2b7a69ffda | 151 | mm.printf("%.3f,",calc); |
NilliM | 0:8e2b7a69ffda | 152 | mm.printf("%.3f,",cmet); |
NilliM | 0:8e2b7a69ffda | 153 | pc.printf("%.3f,",clpg);//LPG |
NilliM | 0:8e2b7a69ffda | 154 | mm.printf("%.3f,", (44330.77)*(1.0-(pow((float)(press/101326.0),(float)0.1902632))));//altitud |
NilliM | 0:8e2b7a69ffda | 155 | mm.printf("%.3f #",clpg); |
NilliM | 0:8e2b7a69ffda | 156 | wait( 1 ); |
NilliM | 0:8e2b7a69ffda | 157 | |
NilliM | 0:8e2b7a69ffda | 158 | timer.reset(); |
NilliM | 0:8e2b7a69ffda | 159 | fclose(fp); |
NilliM | 0:8e2b7a69ffda | 160 | } |
NilliM | 0:8e2b7a69ffda | 161 | } |