Jak mierzyc temperaturę z Arduino

piątek, październik 30, 2009 3:31 by netmaniac | Filled in arduino, dla początkujących, howto

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

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.

You can leave a response, or trackback from your own site.

Komentarze: 15 to Jak mierzyc temperaturę z Arduino

  1. Paweł says:

    luty 11th, 2010 at 22:03

    Proste, przyjemne i przydatne. Dzięki!

  2. 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.

  3. 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 [...]

  4. 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 ;-)

  5. 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?

  6. 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? ;-)

  7. 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

  8. RaV says:

    maj 6th, 2010 at 15:20

    Pomiar woltomierzem daje trochę ponad 1V. Podczas gdy arduino zwraca wartości ok. 100…

  9. 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…

  10. RaV says:

    maj 7th, 2010 at 09:21

    OK, przeniosę się :-)

  11. 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…

  12. 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.

  13. 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. [...]

  14. 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ć

  15. 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.

Dodaj komentarz