Jak mierzyc temperaturę z Arduino
Wygląda na to, że jesteś tutaj nowy(a) jeśli zapiszesz się do mojego RSS feed w prosty sposób otrzymasz informacje o nowych materiałach tutaj.
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
. 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ć:
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.0Dzięki temu kompilator dokona dzielenia o jakie nam chodzi i wynik będzie liczbą niecałkowitą.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.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.
Paweł says:
luty 11th, 2010 at 22:03
Proste, przyjemne i przydatne. Dzięki!
lukas says:
luty 23rd, 2010 at 14:39
Witam
Nawiązując do czujników złożylem zestaw jak podany jest tutaj
http://www.sensor-networks.org/index.php?page=0816816827
czujnik ruchu ruszyl mi po malych korektach i działa bez problemu ale ma problem z uruchomieniem diody ktora by mi sygnalizowała o generowanym ruchu….ogolnie juz siedze nad kodem źródłowym i nie mogę znaleźć gdzie jest błąd bo sądze ze własnie tu jest przyczyna nie świecenia diody.
Starter Kit » Temperatura i LCD says:
marzec 7th, 2010 at 23:09
[...] w pętli loop odczytujemy temperaturę z czujnika MCP-9700 (opisanego w tym poście). Mając temperaturę wyświetlamy napis Temp: potem wartość odczytu i wracamy na początek [...]
RaV says:
maj 4th, 2010 at 10:04
Zrobiłem dokładnie jak z opisem, a odczyty na serialu są koło 90-100. Dodam, że nie siedzę w saunie ;-)
netmaniac says:
maj 4th, 2010 at 10:09
Powinno działać ;)
Hmmm…. Czy zmieniałeś AREF? Czy czujnik w ogóle reaguje na zmiany temperatury? Czy dobre wejście analogowe odczytujesz?
RaV says:
maj 4th, 2010 at 10:39
Yyyy, AREF? Nie wiem, nie znam się. A co to?
Jedyne co zmieniłem w tym kodzie to serial na 9600.
Czujnik jakoś reaguje – jak na niego chuchnę to wartość dochodzi do 140, następnie spada do 80. Hmmm, a może to jakiś czujnik od alkotestu? ;-)
netmaniac says:
maj 4th, 2010 at 21:48
Jak nie wiesz co to AREF to pewnie nie ustawiałeś :)
Jak wrzucisz na seriala wartość odczytaną bezpośrednio z wejścia analogowego to ile pokazuje?
Masz czym zmierzyć napięcie fizycznie na czujniku? I czy zgadza się z tym co podaje Arduino? Arduino podaje odczyt_z_analog/1024*5V – jak jest różnica (spora) w odczycie z woltomierza a z analog to albo arduino trafione, albo AREF jednak ustawiony albo nie wiem co :)
Jeżeli napięcie na czujniku jest faktycznie takie wysokie – 90 st to będzie prawie 1.5V jeśli dobrze pamiętam parametry czujnika
RaV says:
maj 6th, 2010 at 15:20
Pomiar woltomierzem daje trochę ponad 1V. Podczas gdy arduino zwraca wartości ok. 100…
netmaniac says:
maj 7th, 2010 at 08:11
ALe 100 stopni czy wartość odczytana z wejścia analogowego?
I ile to jest trochę ponad 1V? 1.1 Czy 1.4 ?
A w ogóle prośba – czy możemy przenieść się na http://forum.nettigo.pl – wydaje mi się że to lepsze miejsce do tego rodzaju dyskusji…
RaV says:
maj 7th, 2010 at 09:21
OK, przeniosę się :-)
axle says:
październik 26th, 2010 at 13:44
Do Arduino Duemilanove (http://nettigo.pl/product/Arduino,ARDUINO-Duemilanove) podłączyłem (a raczej wpiąłem) ekran LCD (http://nettigo.pl/product/Znakowy-shield-LCD-2×16,2×16-lcd-shield). Gdzie teraz podpiąć czujnik temperatury? Widzę, że na płytce z LCD są różne piny natomiast nie wiem pod które napięcie zasilania się podpiąć ( u dołu są wyjścia 3.3V i 5V, u góry jest AREF ), której masy użyć? – tej u góry czy u dołu? No i z tego co zrozumiałem nóżkę drugą mam podpiąć pod “ANALOG IN 0″? Proszę o pomoc…
netmaniac says:
październik 26th, 2010 at 14:10
Masy sa wszędzie wspólne.
Zasilać możesz go zarówno 3.3 jak i 5V. Wyjście czujnika podłącz do np do Analog IN 0 (może być inny tylko użyj w kodzie programu odpowiedniej wartości w analogRead()
Polecam przeczytać http://starter-kit.nettigo.pl/2010/10/co-mierzy-analogread/ jeżeli zależy na dokładniejszym pomiarze. Pamiętajcie że dla analogReference(INTERNAL) napięcie odniesienia to 1.1V ale wg datasheet ma rozrzut od 1 do 1.2V. Co prawda w całym zakresie temperatur i napięć zasilania ale nie znalazłem dobrej odpowiedzi jakiej wartości można się spodziewać w Arduino.
Starter Kit » Modem komunikacji radiowej XBee XB24B says:
styczeń 13th, 2011 at 00:55
[...] Czujnik MCP9700-E-TO można podłączyć w sposób podany w jednym z poprzednich artykułów Jak mierzyc temperaturę z Arduino. [...]
Joghas says:
marzec 26th, 2011 at 18:16
nie czyta wam ponieważ na schemacie jest błąd oznaczenia pinów sa źle zamieńcie 1 z 3 i bedzie działać
netmaniac says:
marzec 29th, 2011 at 13:08
@Joghas
Na schemacie jest ‘bottom view’ czyli patrząc na czujnik od spodu, od strony nóżek – w ten sposób się wszystko zgadza.