RgNt5Mfc9aHvi
Zdjęcie przedstawia płytkę Arduino z podłączonymi kabelkami w wyświetlaczem pokazującym godzinę, temperaturę, dzień tygodnia oraz datę. Nad wyświetlaczem widoczne są kolorowe kabelki z wtyczkami wpięte w panel.

I_R_W15_M03 Przykładowe projekty

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

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

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

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

R11PN2VLGKCQC
Schemat podłączenia czujnika TMP36 do Arduino
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY 3.0.

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.

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.

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

Podłączamy zasilanie i przewód masy.

R596M3SHP3LGL
Gotowy układ
Ź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).

Definiujemy kolejną zmienną; tym razem jednak zastosujemy typ float. 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 szeregowego. Otrzymujemy następujący ciąg liczb:

R1SLEU9SN8MUB
Wyniki wypisywane na konsoli
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY 3.0.

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.
R8LZC4VALO47M
Poprawne wyświetlanie wyników
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY 3.0.

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.

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 10. float napiecie znak równości odczyt asterysk 5 kropka 0 średnik. Linia 11. napiecie znak równości napiecie prawy ukośnik 1024 kropka 0 średnik. Linia 12. 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 13. otwórz nawias ostrokątny code style znak równości cudzysłów white minus space dwukropek pre średnik cudzysłów data minus inline zamknij nawias ostrokątny Serial kropka print otwórz nawias okrągły cudzysłów Temperatura dwukropek cudzysłów zamknij nawias okrągły średnik. Linia 14. Serial kropka print otwórz nawias okrągły tempC zamknij nawias okrągły średnik. Linia 15. Serial kropka print otwórz nawias okrągły cudzysłów stopni C cudzysłów zamknij nawias okrągły średnik. Linia 16. Serial kropka println otwórz nawias okrągły zamknij nawias okrągły średnik. Linia 17. delay otwórz nawias okrągły 1000 zamknij nawias okrągły średnik otwórz nawias ostrokątny prawy ukośnik code zamknij nawias ostrokątny. Linia 19. zamknij nawias klamrowy.