Библиотека для терморезистора

Тема в разделе "Глядите, что я сделал", создана пользователем yul-i-an, 16 июн 2016.

  1. yul-i-an

    yul-i-an Гик

    В своих устройствах использую терморезисторы NTC 3950 1% 10kOm
    Написал библиотеку (TermoRes3950) для их использования, может кому пригодится.
    В принципе её можно применить к любому терморезистору, только нужно в ней заменить таблицу зависимостей температура/сопротивление на необходимую.
    Схема включения

    [​IMG]
    Пример использования
    Код (C++):
    #include <TermoRes3950.h>//библиотека терморезистора
    TermoRes3950 termometr(0);//инициализация терморезистора на АЦП 0
    float temp=0.0;//переменная для хранения температуры

    void setup(){
      Serial.begin(9600);
    }

    void loop(){
      temp=termometr.getTemp();//получаем температуру
      Serial.println(temp);//выводим температуру в монитор порта
      delay(1000);//задержка
    }
     
    Последнее редактирование: 9 июл 2018
    9xA59kK и ИгорьК нравится это.
  2. 9xA59kK

    9xA59kK Гик

    Интересная библиотека.
    По умолчанию настроена на 12 bit АЦП ?
    А на 10 bit закментировано. Я правильно понял. Чтобы подключить на 10 бит надо сделать наоборот.
     
  3. yul-i-an

    yul-i-an Гик

    Совершенно верно (использован оверсемплинг до 12 bit). Там всё просто можно и на 10 bit (но там не только раскоментировать нужно). С оверсемплингом хороший результат измерений получается, особенно если шумы есть.
     
    Последнее редактирование: 2 июл 2016
  4. yul-i-an

    yul-i-an Гик

    Планирую немного переписать библиотеку. Добавить настройку (выставлять сопротивление по схеме из первого поста Ra), сделать так чтобы для нескольких экземпляров класса использовалась одни и те же функции (чтобы не дублировались, в частности таблица температура/сопротивление), выбор режима 10bit или oversempling 12bit возможно библиотека станет универсальной если добавить возможность передавать в нё произвольную таблицу (температура/сопротивление), чтобы любой терморезистор использовать. Но это уже как время позволит.
    Текст библиотеки на данный моммент
    H
    Код (C++):
    #ifndef TermoRes3950_h
    #define TermoRes3950_h

    class TermoRes3950
    {
    public:
    TermoRes3950(int pin);
    double getTemp();
    private:
    static  float getR(float V);
    int _pin;
    };
    #endif
    CPP
    Код (C++):
    /*
      TermoRes3950.cpp - A. Taranov (yul-i-an) 04.2016
    */


    #include <arduino.h>  
    #include "TermoRes3950.h"
    static float addr[34][2] = {//таблица температура, сопротивление
      {
        -45,212.0                                                            
      }
      ,
      {
        -40,175.0                                                            
      }
      ,
      {
        -35,145.0                                                            
      }
      ,
      {
        -30,119.5                                                          
      }
      ,
      {
        -25,97.0                                                            
      }
      ,
      {
        -20,78.0                                                            
      }
      ,
      {
        -15,63.0                                                            
      }
      ,
      {
        -10,50.0                                                            
      }
      ,
      {
        -5,40.0                                                            
      }
      ,
      {
        0,32.0                                                            
      }
      ,
      {
        5,25.5                                                            
      }
      ,
      {
        10,20.0                                                            
      }
      ,
      {
        15,15.7                                                              
      }
      ,
      {
        20,12.62                                                              
      }
      ,
      {
        25,10.0                                                              
      }
      ,
      {
        30,8.24                                                              
      }
      ,
      {
        35,6.63                                                              
      }
      ,
      {
        40,5.41                                                              
      }
      ,
      {
        45,4.41                                                              
      }
      ,
      {
        50,3.62                                                              
      }
      ,
      {
        55,2.99                                                              
      }
      ,
      {
        60,2.48                                                              
      }
      ,
      {
        65,2.08                                                              
      }
      ,
      {
        70,1.75                                                              
      }
      ,
      {
        75,1.47                                                              
      }
      ,
      {
        80,1.258                                                              
      }
      ,
      {
        85,1.063                                                              
      }
      ,
      {
        90,0.905                                                              
      }
      ,
      {
        95,0.776                                                              
      }
      ,
      {
        100,0.669                                                              
      }
      ,
      {
        105,0.581                                                              
      }
      ,
      {
        110,0.505                                                              
      }
      ,
      {
        115,0.442                                                              
      }
      ,
      {
        120,0.387                                                              
      }
      ,
    };
    TermoRes3950::TermoRes3950(int pin)
    {
    _pin = pin;
    }
    double TermoRes3950::getTemp()//получение температуры
    {
      int t;
      t=0;
      for (int i=0; i <= 15; i++){
        t = t + analogRead(_pin);
      }
      t=t/4;
      float R;
      R=getR(t);
      int i=0;
      while (addr[i][1] >R)
      {
        i++;
      }
      double result;
      result=(R-addr[i][1])*(addr[i-1][0]-addr[i][0])/(addr[i-1][1]-addr[i][1])+addr[i][0];
      return result;
    }

    float TermoRes3950::getR(float V)//вычисление сопротивления
    {
      float result;
      result=-10*V/(V-4096);//10 сопротивление Ra
      //result=-10*V/(V-1024);
      return result;
    }
     
  5. Denisjke

    Denisjke Нуб


    Не получается купить вашу библиотеку, не могу проплатить
     
  6. parovoZZ

    parovoZZ Гуру

    купи лучше max6675
     
  7. yul-i-an

    yul-i-an Гик

  8. Denisjke

    Denisjke Нуб

    вчера все это попробовал несколько раэ