Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Czujnik temperatury

Do budowy termometru użyjemy czujnika TMP36, który nadaje się do pomiaru temperatur w zakresie od –40 do +150°C. Sam czujnik ma postać ściętego z jednej strony cylindra z trzema wyprowadzeniami; jest to obudowa typu THT TO92.

RypMZ2brXODs9
Czujnik temperatury TMP36
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Podstawowe dane techniczne:

  1. napięcie zasilania: od 2,7 V do 5,5 V

  2. zakres pomiarowy: od -40°C do +120°C

  3. dokładność pomiaru: ±2°C

Opiszmy wyprowadzenia czujnika. Gdy patrzymy na jego płaską stronę, a nóżki są skierowane do dołu (tak jak na zdjęciu wyżej), pierwsze wyprowadzenie od lewej strony jest plusem zasilania. Napięcie zasilające nie może być wyższe niż 5,5 V – zaznaczyliśmy to od razu podając dane techniczne czujnika.

Jeżeli podłączymy element TMP36 bezpośrednio do 9‑woltowej baterii, to czujnik z pewnością zostanie uszkodzony. Podłączenie za pośrednictwem płytki Arduino jest z kolei całkowicie bezpieczne, ponieważ jej napięcie robocze (5 V) mieści się w przedziale akceptowanym przez czujnik.

Drugie wyprowadzenie to wyjście analogowe, z którego odczytujemy napięcie, przeliczane następnie na temperaturę. Wreszcie trzecie wyprowadzenie to minus zasilania, który należy połączyć z masą.

Budowa układu

Elementy potrzebne do wykonania zadania:

  1. płytka Arduino Uno

  2. płytka stykowa

  3. kabel USB typu A‑B

  4. czujnik TMP36

  5. przewody i zworki połączeniowe

Elementy podłączamy według przedstawionego niżej schematu.

R1QFqqFv5xPHA
Schemat podłączenia czujnika TMP36 do Arduino

Realizacja projektu

Wyginamy wyprowadzenia czujnika TMP36 tak, abyśmy mogli je wetknąć w trzy otwory na płytce stykowej. Wpinamy czujnik pionowo – poszczególne wyprowadzenia powinny znajdować się w tej samej kolumnie, lecz w różnych wierszach.

RkvNNLfMqaH9L
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Podłączamy zasilanie czujnika do szyny dodatniej. Jeden styk powinien znaleźć się obok wyprowadzenia czujnika (ważne, aby był to ten sam wiersz, po tej samej stronie płytki stykowej); drugi natomiast można umieścić w dowolnym miejscu szyny zasilającej. Łączymy masę czujnika z masą płytki stykowej.

RZ1lGz8ivPDO9
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Środkowe wyprowadzenie (wyjście) podłączamy do złącza analogowego (pinu) A0.

R3ALssCTwHJPI
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Podłączamy zasilanie i przewód masy.

R1QvNPR9lgy6P
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Układ jest dość prosty. Aby jednak działał, należy uzupełnić go o odpowiedni program. Uruchamiamy aplikację Arduino IDE. Wydajemy polecenie Plik | Nowy. Zapisujemy od razu szkic pod nazwą termometr.

Definiujemy stałą odpowiadającą pinowi, do którego podłączono czujnik (A0), a w ciele funkcji setup() wskazujemy port szeregowy (Serial) łączący płytkę Arduino z komputerem oraz ustalamy szybkość transmisji.

Linia 1. const int sensor znak równości A0 średnik. Linia 3. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 4. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 5. zamknij nawias klamrowy.

W ciele funkcji loop() umieszczamy kolejną funkcję, pozwalającą na odczytanie napięcia z czujnika. Jest ono proporcjonalne do temperatury otoczenia. Temperaturze 0°C odpowiada napięcie 500 mV. Dzięki takiemu ustaleniu punktu zerowego można zmierzyć także temperatury ujemne. Zmiana temperatury na wyższą o 1°C oznacza zwiększenie napięcia wyjściowego czujnika o 10 mV; zmniejszenie temperatury o tę samą wartość skutkuje zmniejszeniem napięcia o 10 mV.

Ponieważ temperatura się zmienia, wartość reprezentująca ją w szkicu Arduino powinna być przechowywana w postaci zmiennej. Należy rozumieć to następująco: odczytaną z czujnika temperatury wartość napięcia trzeba zapisać jako zmienną odczyt:

Linia 1. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. int odczyt znak równości analogRead otwórz nawias okrągły sensor zamknij nawias okrągły średnik. Linia 3. zamknij nawias klamrowy.

Wartość zwróconą przez funkcję analogRead() należy przekształcić na rzeczywiste napięcie, które uzyskujemy z czujnika. Obliczamy ją ze wzoru: (odczytana wartość ⋅ 5 V). Wartość 5 V wynika z napięcia dostarczanego z płytki Arduino.

Uzyskany wynik dzielimy przez 1024. Dlaczego dokonujemy dzielenia i dlaczego akurat przez 1024? Otóż wynika to z rozdzielczości, z jaką odczytywany jest sygnał napięciowy z wejść analogowych płytki Arduino: może on osiągnąć jeden z 1024 poziomów (ponumerowanych od 0 do 1023). Wspominaliśmy o tym w poprzedniej lekcji, poświęconej systemowi automatycznego sterowania natężeniem oświetlenia.

Definiujemy kolejną zmienną; tym razem jednak zastosujemy typ floatzmienna typu floatfloat. Ma ona nazwę napiecie.

Ważne!

Należy pamiętać, aby w nazwach zmiennych nie stosować polskich znaków. Korzystając z typu danych float nie wolno również zapominać, że wszystkie liczby zapisujemy wraz z częścią ułamkową (ze znakiem kropki i liczbą po kropce). Robimy tak nawet wtedy, gdy chodzi o zapisanie liczby całkowitej (liczbę 5 należy zapisać jako 5.0).

Linia 1. float napiecie znak równości odczyt asterysk 5 kropka 0 średnik. Linia 2. napiecie znak równości napiecie prawy ukośnik 1024 kropka 0 średnik.

Przekształcamy wartość napięcia na temperaturę w skali Celsjusza. Skorzystamy ze wzoru: ((obliczone napięcie [V] – 0.5 V)  ⋅ 100), gdzie 0.5 V (czyli 500 mV) oznacza wartość początkową, odpowiadającą temperaturze 0°C.

Linia 1. float tempC znak równości otwórz nawias okrągły napiecie minus 0 kropka 5 zamknij nawias okrągły asterysk 100 średnik.

Po dokonaniu obliczeń musimy określić sposób prezentacji wyników na ekranie.

Linia 1. Serial kropka print otwórz nawias okrągły tempC zamknij nawias okrągły średnik.

Następnie wysyłamy szkic do płytki i w prawym górnym rogu okna programu Arduino IDE klikamy przycisk monitora portu szeregowegomonitor portu szeregowegomonitora portu szeregowego. Otrzymujemy następujący ciąg liczb:

RKHQIinDXCka8

Wyniki pomiaru temperatury wprawdzie się pojawiły, lecz są odświeżane tak szybko, że nie da się ich odczytać. Poza tym nie wiadomo, gdzie kończy się jedna liczba, a gdzie zaczyna następna.

Zmodyfikujmy zatem szkic, nakazując wyświetlanie każdej liczby w nowej linii. Użyjemy również funkcji delay(), dzięki której pokazywana wartość pozostanie na ekranie przez określony czas; dopiero później pojawi się następna liczba. Ponownie przesyłamy szkic do płytki i wywołujemy Monitor portu szeregowego.

Linia 1. Serial kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 2. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik.
R1QtWfHHCgRlW

Aby termometr wyglądał bardziej profesjonalnie, uzupełnimy szkic o dodatkowe elementy. Przed liczbą oznaczającą temperaturę będzie się pojawiał tekst „Temperatura:”, a za wyświetloną wartością liczbową dodamy frazę „stopni C”. Skorzystamy z tej samej funkcji, której użyliśmy do wyświetlania temperatury, jednak tekst, który w niej umieścimy, powinien zostać ujęty w cudzysłów.

Raz jeszcze przesyłamy szkic do płytki i wywołujemy monitor portu szeregowego. Następnie chwytamy w dwa palce czujnik, żeby odrobinę go podgrzać; zmiana temperatury powinna nastąpić błyskawicznie, a wyniki zobaczymy na ekranie.

Linia 1. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 2. Serial kropka print otwórz nawias okrągły tempC zamknij nawias okrągły średnik. Linia 3. Serial kropka print otwórz nawias okrągły cudzysłów stopni C cudzysłów zamknij nawias okrągły średnik.
RzThDV2pVyioa

Cały kod programu wygląda następująco:

Linia 1. const int sensor znak równości A0 średnik. Linia 2. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 3. Serial kropka begin otwórz nawias okrągły 9600 zamknij nawias okrągły średnik. Linia 4. zamknij nawias klamrowy. Linia 6. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 7. int odczyt znak równości analogRead otwórz nawias okrągły sensor zamknij nawias okrągły średnik. Linia 8. float napiecie znak równości odczyt asterysk 5 kropka 0 średnik. Linia 9. napiecie znak równości napiecie prawy ukośnik 1024 kropka 0 średnik. Linia 10. float tempC znak równości otwórz nawias okrągły napiecie minus 0 kropka 5 zamknij nawias okrągły asterysk 100 średnik. Linia 12. Serial kropka print otwórz nawias okrągły cudzysłów Temperatura dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 13. Serial kropka print otwórz nawias okrągły tempC zamknij nawias okrągły średnik. Linia 14. Serial kropka print otwórz nawias okrągły cudzysłów stopni C cudzysłów zamknij nawias okrągły średnik. Linia 15. Serial kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 16. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik. Linia 17. zamknij nawias klamrowy.

Tinkercad

Zróbmy symulację termometru, za pomocą środowiska Tinkercad.

R5W6pRURvnflE

Na liście komponentów, znajdującej się po prawej stronie okna, znajdź płytkę stykową.

Kliknij na nią i umieść w głównym oknie.

R2l3BxEPXtPDE

Znajdź i wstaw na płytkę stykową czujnik temperatury.

RdtTWGFBrBcfU

Dodaj teraz moduł Arduino Uno do okna symulacji.

RTrqguNhP6rQ8

Podłączamy pierwszy pin czujnika z pinem 5V Arduino Uno.

RokbWUBEeN2em

Drugi pin czujnika podpinamy z pinem A0 Arduino Uno.

RuKKY43XLBB1T

Trzeci pin czujnika temperatury podpinamy z pinem GND Arduino Uno.

R3WZIyNOjvGu0

Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.

Przepisz kod termometru.

R1VzWXyUp1Fq7

Kliknij belkę z napisem Konsola szeregowa i uruchom symulację.

RXjNyyfIxaxVa

Aby „podgrzać” kliknij na czujnik, nad nim pojawi się suwak, którym można regulować jego temperaturę.

R1RfRWfQqTo49

Film z działania programu.

RKonZVA6DGLjl
Film nawiązujący do treści materiału

Słownik

monitor portu szeregowego
monitor portu szeregowego

moduł służący do odbierania informacji z płytki Arduino oraz wysyłania komend/danych z komputera do Arduino

zmienna typu int
zmienna typu int

zmienna przechowująca liczby całkowite

zmienna typu float
zmienna typu float

zmienna przechowująca liczby zmiennoprzecinkowe