Cubesat V1.0 2016 Código mbed que envía datos

Dependencies:   Adafruit_RTCLib BMP180 JPEGCamera L3GD20 LSM303DLHC SDFileSystem mbed

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?

UserRevisionLine numberNew 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 }