Jak mierzyc temperaturę z Arduino

Jednym z czujników wchodzących w skład Arduino Starter Kit’u jest czujnik temperatury. Jest to czujnik analogowy, nie potrzebujący żadnych dodatkowych elementów do działania (dokładnie jest to MCP9700-E/TO). Czyli, krótko mówiąc podpinamy masę, zasilanie i już możemy mierzyć temperaturę. Na stronie czujnika w sklepie Nettigo, w zakładce Pliki jest PDF z danymi katalogowymi. I tak, zacznijmy od nóżek:

MCP9700 - oznaczenia pinów
MCP9700 – oznaczenia pinów

. Ważne – nóżki są opisane tak jak widać je patrząc od spodu czujnika. I tak:  do 1 podłączamy napięcie zasilania (zarówno 3.3V lub 5V z Arduino będzie OK), do 3 podłączamy masę (GND) a 2 do pinu Analog 0 na Arduino. W tabelce w dokumentacji czujnika na stronie drugiej mamy pozycję Output Voltage, przy temperaturze 0°C – 500 mV.  Z pierwszej strony PDFa wiemy że czułość wynosi 10 mV/ºC. I to wszystko co nam potrzeba aby napisać prosty program:

float temp;

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

void loop () {
  temp = analogRead(0)*5/1024.0;
  temp = temp - 0.5;
  temp = temp / 0.01;
  Serial.println(temp);
  delay(500);
};

Program odczytuję temperaturę i wysyła odczyt na Serial, z którego możemy go odczytać korzystając z monitora port szeregowego w Arduino IDE. Jak liczona jest temperatura? Rozbiłem ten proces na trzy kroki tak, aby łatwiej było go prześledzić:

  1. temp = analogRead(0)*5/1024.0; Odczytujemy wartość z wejścia analogowego i przeliczamy na napięcie. Maksymalne napięcie mierzone przez Arduino to 5V a dokładność przetwornika A/D to 10 bitów, czyli 1024 wartości. Dlatego wartość napięcia na wejściu Analog0 to wartość zwrócona przez analogRead pomnożona przez napięcie przypadające na jeden krok przetwornika A/D. Trzeba pamiętać, że dzielenie dwóch liczb 5 i 1024 będzie przez kompilator potraktowane jako operacja na  liczbach całkowitych i wynik takiego dzielenia to w takim wypadku to też liczba całkowita – zero. Dlatego w zapisie pojawia się 1024.0 Dzięki temu kompilator dokona dzielenia o jakie nam chodzi i wynik będzie liczbą niecałkowitą.
  2. temp = temp - 0.5; Skalujemy do 0°C – różnica między napięciem odczytanym z czujnika  a 500 mV jest liniowo zależna od temperatury.
  3. temp = temp / 0.01; Tą różnicę dzielimy przez 10mV na stopień i mamy temperaturę

Jak widać czujnik MCP9700 jest bardzo łatwy w zastosowaniu i przyjazny dla początkujących. Teraz już każdy może zmierzyć temperaturę z Arduino.