// Salinitetsmåler_DFR0300_H // Programmet måler og beregner Salinitets verdien til en væske på bakgrunn av // kaliberingsverdier for ferskvann 0, 17,5 og 35 promille // Supply-spenning 3,3 V // Nils Kr. Rossing 14.08.23 #include #include DS18B20 ds(0); //Sensoren er koblet til pinne D0 uint8_t address[] = {40, 250, 31, 218, 4, 0, 0, 52}; uint8_t selected; // Deklarasjon av variabler float Salinitet = 0; // Målt og beregnet salinitets-verdi float korreksjon = 0; // Korrigeringsverdi mht temperatur float korrSalinitet = 0; // Korrigert salinitet float UD_35 = 0.82; // Målt digital spenningsverdi ved 35 promille float UD_175 = 0.49; // Målt digital spenningsverdi ved 17,5 promille void setup() { Serial.begin(115200); //Baud rate: 115 200 selected = ds.select(address); analogReadResolution(12); // Sett oppløsningen til AD-konverteren 12 bit } void loop() { float Temperature = 0; // Målt temperatur ved hjelp av DS18B20 float korrSalinitet = 0; // Korreksjonsverdi av salinitet mht float korreksjon = 0; // Korreksjonsverdi mht temperaturendringer long sensorValue = 0; // Les av analog inngang fra pinne A0: float UD_mid = 0; // Middelverdi av målt spenning float UD_mid_volt = 0; // Middelverdi av målt spenning for(int i=0; i<100; i++) { sensorValue = sensorValue + analogRead(A0); } UD_mid = float(sensorValue/100); // Finner middelverdien UD_mid_volt = UD_mid * (3.32 / 4096.0); // Temperature = ds.getTempC(); // Måler temperaturen // Konverterer den analoge avlesningen (som går fra 0-4095) til en spenning 0 - 3,0V: Serial.print(millis()/1000,1); //Serial.print(";"); Serial.print("Midlere spenning: "); // Skriv ut den avleste verdien for kalibrering: Serial.print(UD_mid_volt); // Beregner Salinitet Salinitet = 9.7532 * UD_mid_volt * UD_mid_volt + 20.955 * UD_mid_volt - 0.3339; // Polinomtilpasset av 2 grad R^2 0,9998 korreksjon = 0.8566*(Temperature) + 17.557 - 34.3; korrSalinitet = Salinitet - korreksjon; Serial.print(", Midlere temperatur: "); // Skriv ut den avleste verdien for kalibrering: //Serial.print(";"); Serial.print(Temperature,1); Serial.print(", Ukorrigert salinitet: "); // Skriv ut den avleste verdien: //Serial.print(";"); Serial.println(Salinitet,2); Serial.print(", Korrigert salinitet: "); // Skriv ut den avleste verdien: //Serial.print(";"); Serial.println(korrSalinitet,2); delay(20000); //int minutter = 1; //for (int j=0; j