measuring the salinity

Dependencies:   LinearAnalogSensors mbed

Fork of mbed_measuring_temperature by Mario Simaremare

Committer:
ekasinambela
Date:
Tue Jun 14 09:24:12 2016 +0000
Revision:
7:b0d12907493f
Parent:
6:9de0807e2855
Child:
10:3d1ffeb39123
add LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ekasinambela 0:da915495c7fc 1 #include "mbed.h"
ekasinambela 3:5baf5ad00c1c 2 #include <cmath>
ekasinambela 7:b0d12907493f 3 #include <stdio.h>
ekasinambela 7:b0d12907493f 4 #include <math.h>
ekasinambela 2:1aab63839dba 5 //#include <LinearTemp.h>
ekasinambela 7:b0d12907493f 6 #include "mbed.h"
ekasinambela 7:b0d12907493f 7 #include "TextLCD.h"
ekasinambela 2:1aab63839dba 8
ekasinambela 7:b0d12907493f 9 TextLCD lcd(p19, p20, p21, p22, p23, p24); // rs, e, d4-d7
ekasinambela 0:da915495c7fc 10 Serial pc(USBTX, USBRX);
ekasinambela 0:da915495c7fc 11 DigitalOut myled1(LED1), myled2(LED2);
ekasinambela 3:5baf5ad00c1c 12 AnalogIn pin_1(p16), pin_2(p15), pin_3(p17) ;
ekasinambela 6:9de0807e2855 13 AnalogOut pin_18 (p18);
ekasinambela 2:1aab63839dba 14 //LinearTemp mysensor(p15, 0.0050354, -273.15);
ekasinambela 2:1aab63839dba 15
ekasinambela 5:d2b58a5771d7 16 char program_name[128] = "G3-Waterplay Project";
ekasinambela 7:b0d12907493f 17 float roundvalue = 0;
mariosimaremare 1:6476db5e52e8 18
ekasinambela 4:49b028845be4 19 void salinityMeasurement();
ekasinambela 4:49b028845be4 20 void temperatureMeasurement();
ekasinambela 4:49b028845be4 21
mariosimaremare 1:6476db5e52e8 22 int main()
mariosimaremare 1:6476db5e52e8 23 {
ekasinambela 2:1aab63839dba 24 while(1){
ekasinambela 6:9de0807e2855 25 wait(2);
ekasinambela 4:49b028845be4 26 salinityMeasurement();
ekasinambela 4:49b028845be4 27 temperatureMeasurement();
ekasinambela 0:da915495c7fc 28 }
ekasinambela 0:da915495c7fc 29 }
ekasinambela 4:49b028845be4 30
ekasinambela 4:49b028845be4 31 //salinity function
ekasinambela 4:49b028845be4 32 void salinityMeasurement(){
ekasinambela 4:49b028845be4 33 float f = pin_1.read();
ekasinambela 4:49b028845be4 34
ekasinambela 4:49b028845be4 35 float vin = f * 3.3;
ekasinambela 4:49b028845be4 36 float divider = (float)5/ (float)3;
ekasinambela 4:49b028845be4 37 float vout = vin * divider;
ekasinambela 4:49b028845be4 38
ekasinambela 4:49b028845be4 39 //measure the salinity
ekasinambela 6:9de0807e2855 40 float salt = 16.3 * vout;
ekasinambela 6:9de0807e2855 41 pc.printf("vin: %f, vout: %f, salt: %f \n\r", vin, vout, salt);
ekasinambela 7:b0d12907493f 42 roundvalue = (float)floor((salt*100.0) + 0.5)/100.0;
ekasinambela 7:b0d12907493f 43 lcd.printf("Sal: %g \n", roundvalue);
ekasinambela 4:49b028845be4 44 }
ekasinambela 4:49b028845be4 45
ekasinambela 4:49b028845be4 46 //temperature function
ekasinambela 4:49b028845be4 47 void temperatureMeasurement(){
ekasinambela 4:49b028845be4 48 //measure the temperature
ekasinambela 4:49b028845be4 49 double f2 = pin_2.read();
ekasinambela 4:49b028845be4 50 double vin = f2 * 4.85;
ekasinambela 4:49b028845be4 51 double divider = (double)5/ (double)3;
ekasinambela 4:49b028845be4 52 double vout = vin * divider;
ekasinambela 4:49b028845be4 53
ekasinambela 4:49b028845be4 54 double RT = (vout * (double)15000) / (4.85 - vout);
ekasinambela 4:49b028845be4 55 double K0 = 0.00102119;
ekasinambela 4:49b028845be4 56 double K1 = 0.000222468 * (log(RT));
ekasinambela 4:49b028845be4 57 double K2 = double (1.33342 * pow (10.0, -7.0)) * pow ((double)log(RT), 3.0);
ekasinambela 4:49b028845be4 58 double TKelvin = 1.0 / (K0 + K1 + K2);
ekasinambela 4:49b028845be4 59 double Celcius = (TKelvin - 273.15)+5.0;
ekasinambela 4:49b028845be4 60
ekasinambela 6:9de0807e2855 61 //pc.printf("K0: %f, K1: %f, K2: %f \n\r", K0, K1, K2);
ekasinambela 6:9de0807e2855 62 //pc.printf("vin: %f, vout: %f, temperature: %f \n\r", vin, vout, Celcius);
ekasinambela 6:9de0807e2855 63 pc.printf("vin: %f, vout: %f, temperature: %f \n\r",vin, vout, Celcius);
ekasinambela 7:b0d12907493f 64 roundvalue = (float)floor((Celcius*100.0) + 0.5)/100.0;
ekasinambela 7:b0d12907493f 65 lcd.printf("Temp: %g \n", roundvalue);
ekasinambela 6:9de0807e2855 66
ekasinambela 7:b0d12907493f 67 if (Celcius < 30){
ekasinambela 6:9de0807e2855 68 pin_18 = 1;
ekasinambela 6:9de0807e2855 69 myled1 = 1;
ekasinambela 6:9de0807e2855 70 }else{
ekasinambela 6:9de0807e2855 71 pin_18 = 0;
ekasinambela 6:9de0807e2855 72 myled1 = 0;
ekasinambela 6:9de0807e2855 73 }
ekasinambela 4:49b028845be4 74 }
ekasinambela 4:49b028845be4 75
ekasinambela 4:49b028845be4 76