Проблеммы с замером температуры

Тема в разделе "Arduino & Shields", создана пользователем Karabas, 5 дек 2015.

  1. Karabas

    Karabas Гик

    И снова обращаюсьза советом, так как не выходит каменный цветок :D
    Есть задача мерять высокую температуру (от 0 до 250 С), поетому приобрел такие термисторы
    http://www.ebay.com/itm/191674222260?_trksid=p2057872.m2749.l2649&ssPageName=STRK:MEBIDX:IT
    Подключил как делитель с 100к резистором.
    Как говориться, ничто не предвещало беды. Собрал, залил скетч, нашел у кого то с похожим датчиком и обьясением.
    Код:
    Код (C++):

    boolean sensorWarning; // Глобальная переменная для пищалки при перегреве датчика

    float tempData()
    {
      float temp;
      float volt = analogRead(A4) * 5.0 / 1023.0;
      float r1 = volt / 2.5; // R_t/R_25C
      unsigned int B = 3950; // Параметр конкретного типа термистора (из datasheet)
      if (volt == 0)
        {
         sensorWarning = true;
         volt = 0.001;
        }
      temp = 1. / ( 1. / (B) * log(r1) + 1. / 298. ) - 273;
      return temp;
    }
     
    Сразу всплыло две проблеммы, первая- если температура достигает примерно 280C, в формулу подставляется ноль и все жутко глючит, но тут ничего страшного, так как столько цельсиев мне и не нужно, но на всякий случай ввел програмное отсечение нуля.

    Вторая более серьезная, а именно то, что эта схема не может померять температуру меньше 10 градусов, а по факту 19С, даже если отключить термистор и подать на вход все 5 вольт на экране будет 10 С.
    Очевидно где то косяк с расчетами, но мой гумунитарный ум при виде синусов и косинусов авторитетно заявляет: "Ой всё!".
     
  2. vvr

    vvr Инженерище

    указанное вами изделие сделано конкретно для определённых целей и низкие температуры там не присутствуют, что вы от него хотите:)
     
  3. Karabas

    Karabas Гик

    Цели у него могут быть любыми, а по паспорту от -40 до 300, а то, что их все кому не лень пихают в 3d принтеры не делает их неспособными мерять любую другую температуру. К тому же сам термистор вполне рабочий, и при низких температурах его сопротивление стабильно растет, при 15С сопротивление около 150кОм, но на индикаторе 19С и не падает.
     
  4. AlexVS

    AlexVS Гик

    А напряжение питания контроллера какое?
     
  5. Karabas

    Karabas Гик

    5 вольт
     
  6. AlexVS

    AlexVS Гик

    Отбросьте все преобразования, проверьте в мониторе напряжение, снимаемое пином с делителя от 0 и до 150 градусов.
     
  7. Karabas

    Karabas Гик

    Измерения не очень точные, но примерно дают понять что и как.
    Термистор подключен между входом и землей, если это важно.
    При температуре 0 градусов значение АЦП- 720 (после расчетов Ардуина считает что это 16 градусов).
    При 150 градусах значение АЦП- 11 (тут Ардуина выдает примерно правильный результат).
    При 23.5С примерные значения 550.

    Но, тут есть огромная нелинейность, при значении 5 (значение АЦП в мониторе) расчетная температура 184 градуса, а при 4- 213! То есть, все что между просто выпадает?!

    Думаю, что что то не так с коэфицентами в формуле, увы я ее едва понимаю.
     
  8. Sindbad

    Sindbad Гик

    А формула-то эта откуда взялась?
     
  9. olegoriy

    olegoriy Гик

  10. видимо без операционника нечего не получится,