Сбор информации о погодных условиях
Dependencies: RF24 USBDevice mbed
Sensors/Thermistor.cpp@6:db4538895ae7, 2015-12-05 (annotated)
- Committer:
- pro100kot14
- Date:
- Sat Dec 05 16:57:30 2015 +0000
- Revision:
- 6:db4538895ae7
- Parent:
- 4:7cd67d988145
Added unit testing. Test results are displayed on the device LEDs.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pro100kot14 | 1:8766173d267f | 1 | #include "Thermistor.h" |
pro100kot14 | 1:8766173d267f | 2 | |
pro100kot14 | 1:8766173d267f | 3 | Thermistor::Thermistor(AnalogIn inputChanel, double a, double b, double c):input(inputChanel), error(0){ |
pro100kot14 | 1:8766173d267f | 4 | this->a = a; |
pro100kot14 | 1:8766173d267f | 5 | this->b = b; |
pro100kot14 | 1:8766173d267f | 6 | this->c = c; |
pro100kot14 | 1:8766173d267f | 7 | } |
pro100kot14 | 1:8766173d267f | 8 | |
pro100kot14 | 6:db4538895ae7 | 9 | |
pro100kot14 | 1:8766173d267f | 10 | double Thermistor::getTemperature(){ |
pro100kot14 | 6:db4538895ae7 | 11 | return getTemperatureByAdcValue(input.read(), a, b, c, error); |
pro100kot14 | 6:db4538895ae7 | 12 | } |
pro100kot14 | 6:db4538895ae7 | 13 | |
pro100kot14 | 6:db4538895ae7 | 14 | double Thermistor::getTemperatureByAdcValue(float adcVal, double a, double b, double c, double error){ |
pro100kot14 | 1:8766173d267f | 15 | double temp; |
pro100kot14 | 1:8766173d267f | 16 | double realV; |
pro100kot14 | 1:8766173d267f | 17 | double resistance; |
pro100kot14 | 1:8766173d267f | 18 | //3.3 - ADC maximum |
pro100kot14 | 6:db4538895ae7 | 19 | realV = adcVal*3.3; |
pro100kot14 | 2:ad2653bcf93f | 20 | resistance = (10000 * 3.3) / realV - 10000; |
pro100kot14 | 1:8766173d267f | 21 | //Considering the error |
pro100kot14 | 1:8766173d267f | 22 | resistance -= error; |
pro100kot14 | 1:8766173d267f | 23 | //Calculations using Steinhart–Hart equation |
pro100kot14 | 1:8766173d267f | 24 | temp = log(resistance); |
pro100kot14 | 1:8766173d267f | 25 | temp = 1/(a+b*temp+c*temp*temp*temp); |
pro100kot14 | 1:8766173d267f | 26 | //Convert from Fahrenheit to Celsius |
pro100kot14 | 1:8766173d267f | 27 | temp -= 273.15; |
pro100kot14 | 1:8766173d267f | 28 | return temp; |
pro100kot14 | 1:8766173d267f | 29 | } |
pro100kot14 | 1:8766173d267f | 30 | |
pro100kot14 | 6:db4538895ae7 | 31 | |
pro100kot14 | 1:8766173d267f | 32 | void Thermistor::setError(double error){ |
pro100kot14 | 1:8766173d267f | 33 | this->error = error; |
pro100kot14 | 1:8766173d267f | 34 | } |
pro100kot14 | 1:8766173d267f | 35 | |
pro100kot14 | 1:8766173d267f | 36 | double Thermistor::getError(){ |
pro100kot14 | 1:8766173d267f | 37 | return error; |
pro100kot14 | 1:8766173d267f | 38 | } |
pro100kot14 | 1:8766173d267f | 39 | |
pro100kot14 | 1:8766173d267f | 40 | void Thermistor::setCoefficientA(double a){ |
pro100kot14 | 1:8766173d267f | 41 | this->a = a; |
pro100kot14 | 1:8766173d267f | 42 | } |
pro100kot14 | 1:8766173d267f | 43 | |
pro100kot14 | 1:8766173d267f | 44 | void Thermistor::setCoefficientB(double b){ |
pro100kot14 | 1:8766173d267f | 45 | this->b = b; |
pro100kot14 | 1:8766173d267f | 46 | } |
pro100kot14 | 1:8766173d267f | 47 | |
pro100kot14 | 1:8766173d267f | 48 | void Thermistor::setCoefficientC(double c){ |
pro100kot14 | 1:8766173d267f | 49 | this->c = c; |
pro100kot14 | 1:8766173d267f | 50 | } |
pro100kot14 | 1:8766173d267f | 51 | |
pro100kot14 | 1:8766173d267f | 52 | double Thermistor::getCoefficientA(){ |
pro100kot14 | 1:8766173d267f | 53 | return a; |
pro100kot14 | 1:8766173d267f | 54 | } |
pro100kot14 | 1:8766173d267f | 55 | |
pro100kot14 | 1:8766173d267f | 56 | double Thermistor::getCoefficientB(){ |
pro100kot14 | 1:8766173d267f | 57 | return b; |
pro100kot14 | 1:8766173d267f | 58 | } |
pro100kot14 | 1:8766173d267f | 59 | |
pro100kot14 | 1:8766173d267f | 60 | double Thermistor::getCoefficientC(){ |
pro100kot14 | 1:8766173d267f | 61 | return c; |
pro100kot14 | 6:db4538895ae7 | 62 | } |
pro100kot14 | 6:db4538895ae7 | 63 | |
pro100kot14 | 6:db4538895ae7 | 64 | bool ThermistorTest::adcValue_0_049_is_0_degree(){ |
pro100kot14 | 6:db4538895ae7 | 65 | return abs(Thermistor::getTemperatureByAdcValue(0.049, 0.001995, 0.00007997, 0.0000003863)) < 1.0; |
pro100kot14 | 6:db4538895ae7 | 66 | } |
pro100kot14 | 6:db4538895ae7 | 67 | |
pro100kot14 | 6:db4538895ae7 | 68 | bool ThermistorTest::adcValue_0_104_is_15_degree(){ |
pro100kot14 | 6:db4538895ae7 | 69 | return abs(Thermistor::getTemperatureByAdcValue(0.104, 0.001995, 0.00007997, 0.0000003863) - 15.0) < 1.0; |
pro100kot14 | 6:db4538895ae7 | 70 | } |
pro100kot14 | 6:db4538895ae7 | 71 | |
pro100kot14 | 6:db4538895ae7 | 72 | bool ThermistorTest::adcValue_0_202_is_30_degree(){ |
pro100kot14 | 6:db4538895ae7 | 73 | return abs(Thermistor::getTemperatureByAdcValue(0.202, 0.001995, 0.00007997, 0.0000003863) - 30.0) < 1.0; |
pro100kot14 | 6:db4538895ae7 | 74 | } |