колибровка показаний

Enlan
Offline
Зарегистрирован: 17.04.2016

Здравствуйте уважаемые !

есть экранчик, резистор на 100к и термистр 100к

есть такой код термометра и все в принципе работает но есть одно но

Тепературу показывает но она колибается и есле это не большые показатели к примеру 18-25 градусов

то колебания в приделах 1-2 градуса но есле темперетура 170 - 200 градусов то тут начинаются адские скачки в приделах 30- 50 и тд .  как сделать стабильней все это? ато релле начинает хаотично щелкать...


#include <math.h>
// ==================
#include <SPI.h>                                  
#include <Wire.h>
#include <Adafruit_SSD1306.h>      
#include <Adafruit_GFX.h>                
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

int pinOut = 53;

double Thermistor(int RawADC) {
  double Temp;
  Temp = log(10000.0*((1024.0/RawADC-1))); 
  Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
  Temp = Temp - 273.15;          

  return Temp;
}



void setup() {

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

  pinMode(53, OUTPUT);

}

void loop() {             
  int val;                
  double temp;            
  val=analogRead(0);      
  temp=Thermistor(val);   


  if (temp >= 175){
    digitalWrite(pinOut, LOW);
  }
  else {
    digitalWrite(pinOut, HIGH);
  }

  display.clearDisplay();                                    
  display.setTextColor(WHITE);       
  display.setTextSize(2);                                                  
  display.setCursor(45,1);                                             
  display.print("t C");                                                      
  display.setCursor(30,17);                                                     
  display.print(String(temp));                                           
  display.display();                                                           

  delay(1000);     
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Enlan, формулы в строках 14-16 откуда взяли, ссылку не дадите? Что-то берет сомнение, что температура есть обратная функция от третьей степени логарифма сопротивления...

Enlan
Offline
Зарегистрирован: 17.04.2016

К сожалению источник наверное не вспомню гдето толи на ютубе толи еще где-то...

ну а как это правильней реализовать)

 

evgta
Offline
Зарегистрирован: 02.09.2016

я вот такую формулу использовал, вроде похожа на формулу ТС, выдирал из библиотеки NTC кажется

167 void readtemp()                                                                             //  расчет температуры по формуле Стейнхарта — Харта
168 {
169  
170   voltage = analogRead(ntc) * Vin / 1023;
171   r1 = voltage * 100000.0 / (Vin - voltage);                                            // 100 кОм -  резистор моста
172   TempRes = (1.0 / (1.0 / (3950.0) * log(r1 / 100000.0) + 1.0 / (273.0 + 25.0))) - 273.0;  // двнные NTC
173   tempres = TempRes * 10;
174  
175

}

может у ТС помеха идет?

 

b707
Offline
Зарегистрирован: 26.05.2017

да просто сомнительно, что эти формулы дают правильную температуру...

b707
Offline
Зарегистрирован: 26.05.2017

evgta пишет:

я вот такую формулу использовал, вроде похожа на формулу ТС, выдирал из библиотеки NTC кажется

а на мой взгляд совсем не похожа. Где в вашей формуле третья степень температуры?

Хотя ваша формула тоже хороша - зачем в 171 строке умножать на 100000, а потом в 172 - делить? :)

Тут был персонаж, который для работы с NTC резистором аж свою библиотеку написал и тут рекламировал - теперь я понимаю почему... раз такие жуткие формулы по инету гуляют.

evgta
Offline
Зарегистрирован: 02.09.2016

b707 пишет:

да просто сомнительно, что эти формулы дают правильную температуру...

 

протеус не жаловался :))) плюс минус пару градусов сходилось

 

так и не пылался над ней думать, передрал из библиотеки чтобы если что ее потом не искать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

evgta пишет:

так и не пылался над ней думать, передрал из библиотеки 

Вот в этом и проблема

b707
Offline
Зарегистрирован: 26.05.2017

В общем, пощукал интернет - действительно, народ изгаляется как может, в том числе формула с третьей степень логарифма и зубодробительными коэффициентами часто встречается.

В смысле эффективности. быстроты и обьема кода лучше выкинуть эту математику нафик и пользоваться таблицей.

Что касается выбросов у ТС - написано. что с NTC обязательна фильтрация от наводок по сигналу и по питанию, иначе в шумных условиях будет измеряться полная хрень.

Enlan
Offline
Зарегистрирован: 17.04.2016

Куча коментов а толку ....

Я просто начинал учить С++ был такой сайт может кто знает academy.cppstudio.com

и на столько легко все обяснялось... но почему-то он рухнул(

может кто знает аналогичные самоучители буду благодарен

извините за офтоп

evgta
Offline
Зарегистрирован: 02.09.2016

тут вроде это советуют

http://mexalib.com/search/?q=%D0%98%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%...

ну а мне для моих скромных хотелок хватило гугла и этого http://arduino.ru/Reference

SLKH
Offline
Зарегистрирован: 17.08.2015

Enlan пишет:

Здравствуйте уважаемые !

есть экранчик, резистор на 100к и термистр 100к

есть такой код термометра и все в принципе работает но есть одно но

Тепературу показывает но она колибается и есле это не большые показатели к примеру 18-25 градусов

то колебания в приделах 1-2 градуса но есле темперетура 170 - 200 градусов то тут начинаются адские скачки в приделах 30- 50 и тд .  как сделать стабильней все это? ато релле начинает хаотично щелкать...

У большинства термисторов NTC диапазон рабочих температур до 125 град.; на 170-200 встречаются не слишком часто.

Нам тут какой к обсуждению предлагается?

evgta
Offline
Зарегистрирован: 02.09.2016

b707 пишет:

evgta пишет:

я вот такую формулу использовал, вроде похожа на формулу ТС, выдирал из библиотеки NTC кажется

а на мой взгляд совсем не похожа. Где в вашей формуле третья степень температуры?

Хотя ваша формула тоже хороша - зачем в 171 строке умножать на 100000, а потом в 172 - делить? :)

Тут был персонаж, который для работы с NTC резистором аж свою библиотеку написал и тут рекламировал - теперь я понимаю почему... раз такие жуткие формулы по инету гуляют.

Вспомнил, в строке 171 это номинал резистора моста

а в строке 172 коэф и номинал термистора