Mario Simaremare / Mbed 2 deprecated g3_waterplay

Dependencies:   mbed

Committer:
mariosimaremare
Date:
Mon Jun 20 22:47:42 2016 +0000
Revision:
10:b0fd262a0679
Parent:
7:46e65aeb4df2
Child:
13:142a142a7ac5
Update TemperatureSensor to improve accuracy.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mariosimaremare 0:ad9362f18797 1 /*
mariosimaremare 0:ad9362f18797 2 * G3: WATERPLAY
mariosimaremare 0:ad9362f18797 3 */
mariosimaremare 0:ad9362f18797 4
mariosimaremare 0:ad9362f18797 5 #include "TemperatureSensor.h"
mariosimaremare 3:7c648d1d8802 6 #include <algorithm>
mariosimaremare 0:ad9362f18797 7 #include "mbed.h"
mariosimaremare 0:ad9362f18797 8
mariosimaremare 0:ad9362f18797 9 TemperatureSensor::TemperatureSensor(
mariosimaremare 3:7c648d1d8802 10 Printer &printer,
mariosimaremare 5:4cbe44452889 11 PinName pin
mariosimaremare 0:ad9362f18797 12 ):
mariosimaremare 3:7c648d1d8802 13 _printer(printer),
mariosimaremare 0:ad9362f18797 14 _analog_in(pin),
mariosimaremare 2:ed17e258da0d 15 _reading(0.0),
mariosimaremare 2:ed17e258da0d 16 _voltage(0.0),
mariosimaremare 1:f448c12d2c5b 17 _temperature(0.0),
mariosimaremare 2:ed17e258da0d 18 _status(0.0),
mariosimaremare 5:4cbe44452889 19 _strStatus("OK")
mariosimaremare 0:ad9362f18797 20 {
mariosimaremare 2:ed17e258da0d 21 this->reload();
mariosimaremare 0:ad9362f18797 22 }
mariosimaremare 0:ad9362f18797 23
mariosimaremare 2:ed17e258da0d 24 void TemperatureSensor::reload()
mariosimaremare 0:ad9362f18797 25 {
mariosimaremare 5:4cbe44452889 26 double readings[SAMPLING_NUMBER];
mariosimaremare 5:4cbe44452889 27 for(int counter = 0; counter < SAMPLING_NUMBER; ++counter){
mariosimaremare 3:7c648d1d8802 28 readings[counter] = _analog_in.read();
mariosimaremare 3:7c648d1d8802 29 }
mariosimaremare 3:7c648d1d8802 30
mariosimaremare 5:4cbe44452889 31 sort(readings, readings + SAMPLING_NUMBER);
mariosimaremare 3:7c648d1d8802 32
mariosimaremare 5:4cbe44452889 33 this->_reading = readings[SAMPLING_NUMBER / 2];
mariosimaremare 5:4cbe44452889 34 this->_voltage = this->_reading * VIN * CONVERTER;
mariosimaremare 5:4cbe44452889 35 double RT = (this->_voltage * RESISTANCE) / (VIN - this->_voltage);
mariosimaremare 1:f448c12d2c5b 36 double logRT = log(RT);
mariosimaremare 5:4cbe44452889 37 double k0 = K0;
mariosimaremare 5:4cbe44452889 38 double k1 = K1 * logRT;
mariosimaremare 5:4cbe44452889 39 double k2 = K2 * pow(logRT, 3.0);
mariosimaremare 5:4cbe44452889 40 double kelvin = 1.0 / (k0 + k1 + k2);
mariosimaremare 7:46e65aeb4df2 41 this->_temperature = (kelvin + KELVIN_TO_CELCIUS);
mariosimaremare 7:46e65aeb4df2 42
mariosimaremare 7:46e65aeb4df2 43 if(this->_temperature > KELVIN_TO_CELCIUS){
mariosimaremare 7:46e65aeb4df2 44 this->_temperature += VARIANCE;
mariosimaremare 10:b0fd262a0679 45 this->_temperature += 0.21*this->_temperature - 6.09;
mariosimaremare 7:46e65aeb4df2 46 }
mariosimaremare 1:f448c12d2c5b 47
mariosimaremare 2:ed17e258da0d 48 this->_status = 0.0;
mariosimaremare 3:7c648d1d8802 49 this->_strStatus = "OK";
mariosimaremare 5:4cbe44452889 50 if(this->_temperature < LOWER_BOUNDARY){
mariosimaremare 5:4cbe44452889 51 this->_status = this->_temperature - LOWER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 52 this->_strStatus = "LW";
mariosimaremare 5:4cbe44452889 53 } else if(this->_temperature > UPPER_BOUNDARY){
mariosimaremare 5:4cbe44452889 54 this->_status = this->_temperature - UPPER_BOUNDARY;
mariosimaremare 3:7c648d1d8802 55 this->_strStatus = "HI";
mariosimaremare 2:ed17e258da0d 56 }
mariosimaremare 2:ed17e258da0d 57 }
mariosimaremare 2:ed17e258da0d 58
mariosimaremare 2:ed17e258da0d 59 double TemperatureSensor::getReading()
mariosimaremare 2:ed17e258da0d 60 {
mariosimaremare 1:f448c12d2c5b 61 return(this->_reading);
mariosimaremare 0:ad9362f18797 62 }
mariosimaremare 0:ad9362f18797 63
mariosimaremare 2:ed17e258da0d 64
mariosimaremare 0:ad9362f18797 65 double TemperatureSensor::getVoltage()
mariosimaremare 0:ad9362f18797 66 {
mariosimaremare 1:f448c12d2c5b 67 return(this->_voltage);
mariosimaremare 0:ad9362f18797 68 }
mariosimaremare 0:ad9362f18797 69
mariosimaremare 0:ad9362f18797 70 double TemperatureSensor::getTemperature()
mariosimaremare 0:ad9362f18797 71 {
mariosimaremare 1:f448c12d2c5b 72 return(this->_temperature);
mariosimaremare 0:ad9362f18797 73 }
mariosimaremare 2:ed17e258da0d 74
mariosimaremare 2:ed17e258da0d 75 double TemperatureSensor::getStatus()
mariosimaremare 2:ed17e258da0d 76 {
mariosimaremare 2:ed17e258da0d 77 return(this->_status);
mariosimaremare 3:7c648d1d8802 78 }
mariosimaremare 3:7c648d1d8802 79
mariosimaremare 3:7c648d1d8802 80 char* TemperatureSensor::getStrStatus()
mariosimaremare 3:7c648d1d8802 81 {
mariosimaremare 3:7c648d1d8802 82 return(this->_strStatus);
mariosimaremare 2:ed17e258da0d 83 }