Advertisement
Szerelo

NTC reading by statistical averaging

Jul 30th, 2018
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. #define tombmeret 14       //Samples
  2. #define levag 2            //Errors
  3. #define PIN A0             //NTC analog input
  4. #define ThErtek 10000      //Thermistor value
  5. #define ThHomerseklet 25   //Thermistor value on temperature
  6. #define BCoefficient 3950  // Thermistor beta coefficient (3000-4000)
  7. #define ResSoros 10000     //Serial resistor value
  8. int Tomb[tombmeret];
  9. float tmp = 0;
  10.  
  11. void setup() {
  12.   Serial.begin(115200);
  13.   Serial.println("Start");
  14.   if (tombmeret<=2*levag+1){
  15.     Serial.println("Too little sampling is given! STOP");
  16.     while (1);
  17.     }
  18.   }
  19. void rendezes() {
  20.   for ( int i = 0; i < tombmeret; i++) {
  21.     for ( int j = 0; j < tombmeret-1; j++) {
  22.       if (Tomb[j]>Tomb[j+1]) {
  23.         tmp = Tomb[j+1];
  24.         Tomb[j+1] = Tomb[j];
  25.         Tomb[j] = tmp;
  26.         }
  27.       }
  28.     }
  29.   }
  30.  
  31. void loop() {
  32.   for (int i=0; i < tombmeret; i++){
  33.     Tomb[i] = analogRead(PIN);     //analog value reading
  34.     delay(20);                     //waiting for transients
  35.     }
  36.   rendezes();           //sort
  37.   tmp=0;
  38.   for (int i=levag; i < tombmeret-levag; i++){
  39.     tmp= tmp + Tomb[i];
  40.     }
  41.   tmp=tmp / (tombmeret - 2 * levag);    //Scanned value after statistical averaging
  42.   if (tmp <= 1) {
  43.     Serial.println("NTC fault! NTC value too low. Short circuit.");
  44.     tmp = 2;
  45.     }
  46. // Calculate NTC resistor value
  47.   tmp = 1023 / tmp - 1;          
  48.   if (tmp == 0) {
  49.     Serial.println("NTC fault! NTC value too high. Broken NTC or wire.");
  50.     tmp=99999999;
  51.     }
  52.   tmp = ResSoros / tmp;
  53.   float steinhart;
  54.   steinhart = tmp / ThErtek;     // (R/Ro)
  55.   steinhart = log(steinhart);    // ln(R/Ro)
  56.   steinhart /= BCoefficient;     // 1/B * ln(R/Ro)
  57.   steinhart += 1.0 / (ThHomerseklet + 273.15); // + (1/To)
  58.   steinhart = 1.0 / steinhart;                 // Invert
  59.   steinhart -= 273.15;                         // Calculate Celsius degree
  60.   Serial.print("Temperature (C)=");
  61.   Serial.println(steinhart);
  62.   delay(2000);  
  63.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement