В Греции все есть, так в LGT8F328 и платах Arduino UNO, Mini, Nano (кроме Mega2560) есть кроме всего прочего возможность измерить температуру. Специализированные микросхемы типа  18B20 или LM35 точнее, так как микросхема может нагреваться от проходящих по ней токов и точность будет ±10ºC но и встроенный может пригодится, особенно если откалибровать датчик.

Измерять температуру умеет любой P-N переход, так что встроенный АЦП ардуинки можно переключить не только на измерение напряжения питания, но и на встроенный термометр. 

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), чтобы показания были одинаковы.