POC Breath using SMD commercial sensors

Dependencies:   iAQ_Core Adafruit_SGP30_mbed mbed BME680

Committer:
christodoulos
Date:
Thu Jan 23 15:24:41 2020 +0000
Revision:
5:646a7e58989e
Parent:
4:54dc2a95c130
Child:
6:f6faf142e5fc
23rd Jan

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mehrnaz 2:ef98576cd67b 1 #include "mbed.h"
mehrnaz 2:ef98576cd67b 2
mehrnaz 3:3d51f8870e91 3 // First the inputs and pins are defined
mehrnaz 3:3d51f8870e91 4
christodoulos 5:646a7e58989e 5 AnalogIn flowIn(PA_1);//PA0 on schematic but PA1 on PCB
mehrnaz 3:3d51f8870e91 6 Serial co2(PC_10,PC_11);
mehrnaz 3:3d51f8870e91 7 AnalogIn sensor1(PC_0);
mehrnaz 3:3d51f8870e91 8 AnalogIn sensor2(PC_1);
mehrnaz 3:3d51f8870e91 9 AnalogIn sensor3(PC_2);
mehrnaz 3:3d51f8870e91 10 AnalogIn sensor4(PC_3);
christodoulos 5:646a7e58989e 11 AnalogIn sensor5(PA_4); //Also 2612
christodoulos 5:646a7e58989e 12 AnalogIn sensor6(PA_5); //Also 2610
christodoulos 5:646a7e58989e 13 AnalogIn sensor7(PA_6); //Also 2620
christodoulos 5:646a7e58989e 14 AnalogIn sensor8(PA_7); //Also 2602
christodoulos 5:646a7e58989e 15 AnalogIn temp(PA_0);//PA1 on schematic but PA0 on PCB
mehrnaz 2:ef98576cd67b 16
mehrnaz 3:3d51f8870e91 17 ///////////////////// FLOW LOOP /////////////////////////
mehrnaz 2:ef98576cd67b 18 float finalflow;
mehrnaz 2:ef98576cd67b 19 float flowVal1;
mehrnaz 2:ef98576cd67b 20 float flowVal2;
mehrnaz 2:ef98576cd67b 21 float P1;
mehrnaz 2:ef98576cd67b 22 int flag=0;
mehrnaz 2:ef98576cd67b 23 int o=0;
mehrnaz 2:ef98576cd67b 24 float bpArray[10];
christodoulos 5:646a7e58989e 25 float fp;
christodoulos 5:646a7e58989e 26 float sp;
mehrnaz 2:ef98576cd67b 27 float FPressure;
christodoulos 5:646a7e58989e 28
mehrnaz 2:ef98576cd67b 29 float flow()
mehrnaz 2:ef98576cd67b 30 {
mehrnaz 2:ef98576cd67b 31 while(1)
mehrnaz 2:ef98576cd67b 32 {
mehrnaz 2:ef98576cd67b 33 wait(0.01);
mehrnaz 2:ef98576cd67b 34 flowVal1=3.3*flowIn; //Logic level 3.3
mehrnaz 2:ef98576cd67b 35 flowVal2 = 1.5*flowVal1; //5v
mehrnaz 3:3d51f8870e91 36 P1 =(125*flowVal2)-62.5; //Pressure
mehrnaz 3:3d51f8870e91 37 //making the value of pressure positive inside the SQRT function:
mehrnaz 2:ef98576cd67b 38 if(flag==0)
mehrnaz 2:ef98576cd67b 39 {
mehrnaz 2:ef98576cd67b 40 finalflow=0;
mehrnaz 2:ef98576cd67b 41 bpArray[o]=P1;
mehrnaz 2:ef98576cd67b 42 sp+=bpArray[o];
mehrnaz 2:ef98576cd67b 43 o=o+1;
christodoulos 5:646a7e58989e 44 if (o==9)
mehrnaz 2:ef98576cd67b 45 {
mehrnaz 2:ef98576cd67b 46 fp=sp/10;
mehrnaz 2:ef98576cd67b 47 flag=1;
mehrnaz 2:ef98576cd67b 48 }
mehrnaz 2:ef98576cd67b 49 }
mehrnaz 2:ef98576cd67b 50 if (flag==1)
mehrnaz 2:ef98576cd67b 51 {
christodoulos 5:646a7e58989e 52 FPressure=P1-fp;
mehrnaz 4:54dc2a95c130 53 finalflow=(0.24*sqrt(FPressure)); //flow in litter per second
christodoulos 5:646a7e58989e 54 if(isnan(finalflow)==true){
christodoulos 5:646a7e58989e 55 return 0;
christodoulos 5:646a7e58989e 56 }
christodoulos 5:646a7e58989e 57 else{
christodoulos 5:646a7e58989e 58 return finalflow;
christodoulos 5:646a7e58989e 59 }
mehrnaz 2:ef98576cd67b 60 }
mehrnaz 2:ef98576cd67b 61 }
mehrnaz 2:ef98576cd67b 62 }
mehrnaz 2:ef98576cd67b 63
mehrnaz 3:3d51f8870e91 64 ///////////////////// CO2 LOOP /////////////////////////
mehrnaz 3:3d51f8870e91 65 int value;
mehrnaz 2:ef98576cd67b 66 float carbon()
mehrnaz 2:ef98576cd67b 67 {
mehrnaz 2:ef98576cd67b 68 bool allow = false;
mehrnaz 2:ef98576cd67b 69 char c;
mehrnaz 2:ef98576cd67b 70 char co2_measure[5];
mehrnaz 2:ef98576cd67b 71 int count=0;
mehrnaz 2:ef98576cd67b 72
mehrnaz 2:ef98576cd67b 73 while(1)
mehrnaz 2:ef98576cd67b 74 {
mehrnaz 2:ef98576cd67b 75 c = co2.getc();
mehrnaz 3:3d51f8870e91 76 //based on the user manual PDF for the CO2 sensor, the value starts with "Z"
mehrnaz 3:3d51f8870e91 77 //and we need to extract the right number of CO2 value
mehrnaz 2:ef98576cd67b 78 if(c=='Z') {
mehrnaz 2:ef98576cd67b 79 allow = true;
mehrnaz 2:ef98576cd67b 80 }
mehrnaz 2:ef98576cd67b 81
mehrnaz 2:ef98576cd67b 82 if(allow) {
mehrnaz 2:ef98576cd67b 83 if(c>=48 && c<=57) {
mehrnaz 2:ef98576cd67b 84 co2_measure[count]=c;
mehrnaz 2:ef98576cd67b 85 count++;
mehrnaz 2:ef98576cd67b 86 }
mehrnaz 2:ef98576cd67b 87
mehrnaz 3:3d51f8870e91 88 if(count>=6) {
mehrnaz 2:ef98576cd67b 89 value = ((co2_measure[0]-'0')*100000+co2_measure[1]-'0')*10000+(co2_measure[2]-'0')*1000+(co2_measure[3]-'0')*100;
mehrnaz 2:ef98576cd67b 90 float CAR;
mehrnaz 2:ef98576cd67b 91 CAR=(float)value/10000;
mehrnaz 2:ef98576cd67b 92 count=0;
mehrnaz 2:ef98576cd67b 93 allow=false;
mehrnaz 2:ef98576cd67b 94 return CAR;
mehrnaz 2:ef98576cd67b 95 }
mehrnaz 2:ef98576cd67b 96 }
mehrnaz 2:ef98576cd67b 97 }
mehrnaz 2:ef98576cd67b 98 }
mehrnaz 2:ef98576cd67b 99
mehrnaz 3:3d51f8870e91 100 ///////////////////// TEMPERATURE LOOP /////////////////////////
mehrnaz 3:3d51f8870e91 101
mehrnaz 3:3d51f8870e91 102 float t2Cel;
mehrnaz 3:3d51f8870e91 103
mehrnaz 3:3d51f8870e91 104 float getTemp()
mehrnaz 3:3d51f8870e91 105 {
mehrnaz 3:3d51f8870e91 106 while(1) {
christodoulos 5:646a7e58989e 107 float B = 3380.00; //Define thermistor constant
christodoulos 5:646a7e58989e 108 float rRef=10000.00; // Define reference resistance
christodoulos 5:646a7e58989e 109 float r1=10000.00; // Define thermistor resistance at 25 C
christodoulos 5:646a7e58989e 110 float t1=25.00+273.00; // Define thermistor initial temperature s 25C in Kelvin
mehrnaz 3:3d51f8870e91 111 float x = temp.read(); //Measure input voltage at pin A0 in bits
mehrnaz 3:3d51f8870e91 112 float v = 3.3*x; //Convert bits into voltage
christodoulos 5:646a7e58989e 113 float r2 = (5*rRef/v)-rRef; //Convert voltage into thermistor resistance
mehrnaz 3:3d51f8870e91 114 float t2 = (B*t1)/(B-t1*log(r1/r2)); //Convert thermistor resistance into temperature in Kelvin (log means natural logarithm ln)
christodoulos 5:646a7e58989e 115 t2Cel = t2-273.00; //Convert temperature from Kelvin to Celcius
mehrnaz 3:3d51f8870e91 116 return t2Cel;
mehrnaz 3:3d51f8870e91 117 // printf("Temp: %f\n", t2Cel);
mehrnaz 3:3d51f8870e91 118 }
mehrnaz 3:3d51f8870e91 119 }
mehrnaz 3:3d51f8870e91 120
mehrnaz 3:3d51f8870e91 121 ///////////////////// 8-CHANNEL SENSOR LOOP /////////////////////////
mehrnaz 3:3d51f8870e91 122
christodoulos 5:646a7e58989e 123 int c2612()
christodoulos 5:646a7e58989e 124 {
christodoulos 5:646a7e58989e 125 float sen5;
christodoulos 5:646a7e58989e 126 while(1){
christodoulos 5:646a7e58989e 127 sen5=1000*((5/sensor5*3.3)-1);
christodoulos 5:646a7e58989e 128 return (int)sen5;
christodoulos 5:646a7e58989e 129 }
christodoulos 5:646a7e58989e 130 }
christodoulos 5:646a7e58989e 131
christodoulos 5:646a7e58989e 132 int c2610()
christodoulos 5:646a7e58989e 133 {
christodoulos 5:646a7e58989e 134 float sen6;
christodoulos 5:646a7e58989e 135 while(1){
christodoulos 5:646a7e58989e 136 sen6=1000*((5/sensor6*3.3)-1);
christodoulos 5:646a7e58989e 137 return (int)sen6;
christodoulos 5:646a7e58989e 138 }
christodoulos 5:646a7e58989e 139 }
christodoulos 5:646a7e58989e 140
christodoulos 5:646a7e58989e 141 int c2620()
mehrnaz 3:3d51f8870e91 142 {
christodoulos 5:646a7e58989e 143 float sen7;
christodoulos 5:646a7e58989e 144 while(1){
christodoulos 5:646a7e58989e 145 sen7=1000*((5/sensor7*3.3)-1);
christodoulos 5:646a7e58989e 146 return (int)sen7;
christodoulos 5:646a7e58989e 147 }
christodoulos 5:646a7e58989e 148 }
christodoulos 5:646a7e58989e 149
christodoulos 5:646a7e58989e 150 int c2602()
christodoulos 5:646a7e58989e 151 {
christodoulos 5:646a7e58989e 152 float sen8;
mehrnaz 3:3d51f8870e91 153 while(1){
christodoulos 5:646a7e58989e 154 sen8=1000*((5/sensor8*3.3)-1);
christodoulos 5:646a7e58989e 155 return (int)sen8;
christodoulos 5:646a7e58989e 156 }
christodoulos 5:646a7e58989e 157 }
christodoulos 5:646a7e58989e 158
christodoulos 5:646a7e58989e 159 int s1()
christodoulos 5:646a7e58989e 160 {
christodoulos 5:646a7e58989e 161 int sen1;
christodoulos 5:646a7e58989e 162 while(1){
christodoulos 5:646a7e58989e 163 sen1=((5E6)/(sensor1*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 164 return sen1;
mehrnaz 3:3d51f8870e91 165 }
mehrnaz 3:3d51f8870e91 166 }
christodoulos 5:646a7e58989e 167 int s2()
mehrnaz 3:3d51f8870e91 168 {
christodoulos 5:646a7e58989e 169 int sen2;
mehrnaz 3:3d51f8870e91 170 while(1){
christodoulos 5:646a7e58989e 171 sen2=((5E6)/(sensor2*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 172 return sen2;
mehrnaz 3:3d51f8870e91 173 }
mehrnaz 3:3d51f8870e91 174 }
christodoulos 5:646a7e58989e 175 int s3()
mehrnaz 3:3d51f8870e91 176 {
christodoulos 5:646a7e58989e 177 int sen3;
mehrnaz 3:3d51f8870e91 178 while(1){
christodoulos 5:646a7e58989e 179 sen3=((5E6)/(sensor3*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 180 return sen3;
mehrnaz 3:3d51f8870e91 181 }
mehrnaz 3:3d51f8870e91 182 }
christodoulos 5:646a7e58989e 183 int s4()
mehrnaz 3:3d51f8870e91 184 {
christodoulos 5:646a7e58989e 185 int sen4;
mehrnaz 3:3d51f8870e91 186 while(1){
christodoulos 5:646a7e58989e 187 sen4=((5E6)/(sensor4*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 188 return sen4;
mehrnaz 3:3d51f8870e91 189 }
mehrnaz 3:3d51f8870e91 190 }
christodoulos 5:646a7e58989e 191 int s5()
mehrnaz 3:3d51f8870e91 192 {
christodoulos 5:646a7e58989e 193 int sen5;
mehrnaz 3:3d51f8870e91 194 while(1){
christodoulos 5:646a7e58989e 195 sen5=((5E6)/(sensor5*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 196 return sen5;
mehrnaz 3:3d51f8870e91 197 }
mehrnaz 3:3d51f8870e91 198 }
christodoulos 5:646a7e58989e 199 int s6()
mehrnaz 3:3d51f8870e91 200 {
christodoulos 5:646a7e58989e 201 int sen6;
mehrnaz 3:3d51f8870e91 202 while(1){
christodoulos 5:646a7e58989e 203 sen6=((5E6)/(sensor6*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 204 return sen6;
mehrnaz 3:3d51f8870e91 205 }
mehrnaz 3:3d51f8870e91 206 }
christodoulos 5:646a7e58989e 207 int s7()
mehrnaz 3:3d51f8870e91 208 {
christodoulos 5:646a7e58989e 209 int sen7;
mehrnaz 3:3d51f8870e91 210 while(1){
christodoulos 5:646a7e58989e 211 sen7=((5E6)/(sensor7*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 212 return sen7;
mehrnaz 3:3d51f8870e91 213 }
mehrnaz 3:3d51f8870e91 214 }
christodoulos 5:646a7e58989e 215 int s8()
mehrnaz 3:3d51f8870e91 216 {
christodoulos 5:646a7e58989e 217 int sen8;
mehrnaz 3:3d51f8870e91 218 while(1){
christodoulos 5:646a7e58989e 219 sen8=((5E6)/(sensor8*3.3))-(5E6);
mehrnaz 3:3d51f8870e91 220 return sen8;
mehrnaz 3:3d51f8870e91 221 }
mehrnaz 3:3d51f8870e91 222 }