Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define tombmeret 14 //Samples
- #define levag 2 //Errors
- #define PIN A0 //NTC analog input
- #define ThErtek 10000 //Thermistor value
- #define ThHomerseklet 25 //Thermistor value on temperature
- #define BCoefficient 3950 // Thermistor beta coefficient (3000-4000)
- #define ResSoros 10000 //Serial resistor value
- int Tomb[tombmeret];
- float tmp = 0;
- void setup() {
- Serial.begin(115200);
- Serial.println("Start");
- if (tombmeret<=2*levag+1){
- Serial.println("Too little sampling is given! STOP");
- while (1);
- }
- }
- void rendezes() {
- for ( int i = 0; i < tombmeret; i++) {
- for ( int j = 0; j < tombmeret-1; j++) {
- if (Tomb[j]>Tomb[j+1]) {
- tmp = Tomb[j+1];
- Tomb[j+1] = Tomb[j];
- Tomb[j] = tmp;
- }
- }
- }
- }
- void loop() {
- for (int i=0; i < tombmeret; i++){
- Tomb[i] = analogRead(PIN); //analog value reading
- delay(20); //waiting for transients
- }
- rendezes(); //sort
- tmp=0;
- for (int i=levag; i < tombmeret-levag; i++){
- tmp= tmp + Tomb[i];
- }
- tmp=tmp / (tombmeret - 2 * levag); //Scanned value after statistical averaging
- if (tmp <= 1) {
- Serial.println("NTC fault! NTC value too low. Short circuit.");
- tmp = 2;
- }
- // Calculate NTC resistor value
- tmp = 1023 / tmp - 1;
- if (tmp == 0) {
- Serial.println("NTC fault! NTC value too high. Broken NTC or wire.");
- tmp=99999999;
- }
- tmp = ResSoros / tmp;
- float steinhart;
- steinhart = tmp / ThErtek; // (R/Ro)
- steinhart = log(steinhart); // ln(R/Ro)
- steinhart /= BCoefficient; // 1/B * ln(R/Ro)
- steinhart += 1.0 / (ThHomerseklet + 273.15); // + (1/To)
- steinhart = 1.0 / steinhart; // Invert
- steinhart -= 273.15; // Calculate Celsius degree
- Serial.print("Temperature (C)=");
- Serial.println(steinhart);
- delay(2000);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement