Электронный датчик температуры тела

Привет :kissing_heart:
Хочу сделать электронный градусник для контроля температуры тела с отправкой данных на сервер, чтобы составить график.
Попробовала DS18B20.
Показывает 35.2 - 35.26 при 36.6 (в сравнении с ртутным)
Какой ещё датчик можно использовать, с нужной мне точностью

Спойлер
#include <OneWire.h> // https://github.com/PaulStoffregen/OneWire

const byte DS18B20_PIN = 4; // пин датчика DS18b20
byte addr[8];               // адрес датчика температуры
float temperature = 0;      // переменная, в которую записываются показания датчика

const uint32_t temp_interval = 3000; // интервал между обращениями к датчику

OneWire ds(DS18B20_PIN);

// функция обращения к датчику - считывание показаний и команда на следующую конвертацию данных
void getTemperature()
{
  // считываем показания датчика после предыдущей конвертации
  int temp;
  ds.reset();
  ds.select(addr);
  ds.write(0xBE);                      // Считывание значения с датчика
  temp = (ds.read() | ds.read() << 8); // Принимаем два байта температуры
  temperature = (float)temp / 16.0;

  // даем команду на конвертацию для следующего запроса
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
}

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

  // инициализация датчика
  ds.reset();     // сброс шины
  ds.write(0x7F); // установить точность измерения: 0,5гр = 1F; 0,25гр = 3F; 0,125гр = 5F; 0,0625гр = 7F;
  ds.search(addr);
  // команда на конвертацию для первого запроса температуры
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);
}

void loop()
{
  static uint32_t timer = 0;

  // опрос датчика; здесь вызывается один раз в три секунды; при слишком частом опросе микросхема датчика может вносить искажения в температуру за счет собственного разогрева
  if (millis() - timer >= temp_interval)
  {
    timer = millis();
    getTemperature();
    Serial.println(temperature);
  }

  
}

Может быть лучше взять термистор (терморезистор)? И подключить его к аналоговому входу.

Лучше всего платиновый, удобнее Pt500 или Pt1000. Они меньше зависят от сопротивления проводов. К ним, конечно, нужны соотв. платы АЦП. А так это классика измерения температуры, ИМХО.

1 лайк

У них заявленная точность, емнип, 0.5 градуса. А уж что там китайские реплики меряют, даже китайцам неведомо ))

1 лайк

Не надо другой датчик. Этот вполне подойдёт. То что он показывает заниженную температуру это нормальный процесс. Любой датчик будет показывать так же. Ты же не держишь его полностью зажатым в подмышке постоянно? У него часть корпуса наруже и он показывает среднюю температуру между телом и воздухом, согласно процентам поверхности контактирующими с телом и с воздухом. Можно вторым датчиком измерять температуру воздуха и корректировать полученную температуру тела. В любом случае надо сделать несколько замеров при разной температуре воздуха и посмотреть как разница температуры тела и воздуха влияет на разницу показаний ртутного и электронного термометров и скорректировать показания электронного.
Можно накрыть теплоизоляционным материалом весь датчик и приклеить его подмышку, но мне кажется это будет неудобно. И нужно помнить, что разные точки поверхности тела имеют разную температуру и эта температура зависит от внешней температуры воздуха, физических нагрузок, а у женщин ещё и от фазы луны.
Если нашла место на теле, где комфортно размещается датчик, то просто компенсируй разницу температур в программе добавлением постоянного коэффициента. Этого будет достаточно для бытовой точности.

1 лайк

Это абсолютная точность. Т.е. точность с которой можно получить температуру с не калиброванного датчика. Если датчик откалибровать, максимально возможная точность равна разрешению АЦП - 0.0625°C

1 лайк

тут главное на точку аккупунктуры не попасть, там температура всегда занижена или наоборот найти такую, по которой будем диагностировать температуру )))
Кстати их более 680 с которыми доктора работают

Я выбирала 12 бит, при замерах.

Это дискретность, к точности отношения не имеет ))

Обоснуй это утверждение? Из твоей реплики следует что изменение с 8 бит на 12 бит оцифровки на точность не влияет. Ведь дискретность “к точности отношения не имеет”.

А как дискретность соотносится с точностью?

а если на линейке убрать миллиметры?

Можно убрать миллиметры, можно добавить микроны - что это изменит, если линейка на полсантиметра короче, чем на ней написано? А для китайских линеек такое случается ))

Так и с датчиком - это не поверенный прибор, он имеет заявленную погрешность до 0,5 градуса, и с каким разрешением он будет обрабатывать данные - никак не изменит измеренную с погрешностью температуру

Кроме дискретности имеет значение стабильность показаний. Можно прокалибровать датчик, но насколько долго он будет держать калибровку?.. Платиновые чем и известны что долго и надежно держат свои параметры.

Датчики фирмы Даллас DS18B20 чертовски удачны для применения: не нужен АЦП, можно утащить далеко на проводе и тп. Но точность у них, грубо, 1 градус - для погодных и средне-технических дел заглаза. Но для медицины где 36.6 погрешность их великовата. ИМХО.

А так мне они дико нравятся, как и другие штуки от Далласа, жалко что эта фирмешка закончилась, надо кстати где-то почитать их историю. Они придумали таблетки, что юзаются в домофонах, кстати.

Просто любопытно, а что в реальных медицинских электронных градусниках за датчик стоит? Почему он не рассматривается?

Если длина “метровой” линейки 92 см, то от того, что на ней убрать миллиметровые деления, хуже не станет.

а если все “если” убрать, и длина линейки ровно 1м но без миллиметров, с какой точностью ей можно измерить?

А каким боком это “если” относится к неповеренному датчику?

Тогда это сферическая линейка в вакууме.
В реальном мире таких линеек не бывает (и быть не может!).

Несуществующей линейкой измерить ничего нельзя.