Как использовать внутренний датчик температуры Arduino

Встроенный датчик температуры в Ардуино

В этой статье мы узнаем, как использовать внутренний датчик температуры Arduino. Эта функция присутствует в ATmega168A, 168P, 328 и 328P (используется в Arduino Uno и Nano), а также в ATmega32U4 (используется в Arduino Leonardo). А вот микроконтроллер ATmega2560 (используется в платах Arduino Mega) не имеет в наличии у себя такой внутренний датчик температуры.

Введение

Точность датчика, мягко говоря, несколько высока ±10ºC, поскольку он находится внутри микроконтроллера и подвержен влиянию собственного тепла. На показания температуры может влиять рабочая нагрузка МК и ток, протекающий через его выходы. Но если очень хочется, то можно попробовать откалибровать датчик.

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

Как использовать

Вот несколько шагов по использованию внутреннего датчика температуры Arduino:

  • Подключите Arduino к вашему компьютеру.
  • Загрузите код Arduino, предназначенный для чтения значения температуры.
  • Откройте монитор порта, чтобы увидеть показания температуры.

Код для Arduino Nano

void setup() 
{
  Serial.begin(9600);
  ADMUX = 0xC8; // включить внутреннее опорное напряжение, буфер АЦП со сдвигом вправо, канал АЦП = внутренний датчик температуры
  delay(10);
}

void loop() 
{
  Serial.println(averageTemperature());
  delay(500);
}

int readTemperature() 
{
  ADCSRA |= _BV(ADSC); // Запустить преобразование
  while (bit_is_set(ADCSRA, ADSC)); // ADSC очищается по завершении преобразования
  return (ADCL | (ADCH << 8)) - 310; // объединить байты и задать приблизительное смещение в 310
}

float averageTemperature()
{
  readTemperature();

  float averageTemp; // Переменная для хранения среднего значения
  /* Среднее значение из 1000 измерений */
  for (int i = 1; i < 1000; i++)
  {
    averageTemp += ((readTemperature() - averageTemp)/(float)i);
  }
    

  return averageTemp; // Вернуть значение средней температуры
}

Калибровка датчика

Для калибровки датчика выполните следующие действия:

  • Выполните несколько измерений с помощью датчика.
  • Сравните полученные измерения с данными, полученными от откалиброванного датчика (например, DS18b20).
  • Измените в коде return (ADCL | (ADCH << 8)) - 310; значение смещения (здесь оно 310), чтобы показания были одинаковы.
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии