Zasada działania termometrów na podczerwień jest prosta, wszystkie ciała o temperaturze powyżej 0 Kelwinów (zero absolutne) emitują energię podczerwoną, która może być wykryta przez czujnik temperatury na podczerwień. W jego konstrukcji znajduje się soczewka, która skupia energię podczerwieni emitowaną przez obiekt przed detektorem. Detektor przekształca tę energię w sygnał elektryczny, który następnie może być przekazany do mikrokontrolera w celu interpretacji i wyświetlenia w jednostkach temperatury po skompensowaniu zmian temperatury otoczenia. W tym projekcie zbudujemy termometr na podczerwień, używając Arduino Uno, czujnika temperatury MLX90614 IR oraz wyświetlacza LCD Nokia 5110 do wyświetlania zmierzonej temperatury.
MLX90614 to czujnik temperatury na podczerwień do bezdotykowego pomiaru temperatury. Może on mierzyć temperaturę w zakresie od -70 do 380°C z dokładnością do około 0,5°C w temperaturze pokojowej.
Niektóre z cech tego czujnika są wymienione poniżej:
- Mały rozmiar i niski koszt
- Łatwy do integracji
- Fabrycznie skalibrowany w szerokim zakresie temperatur: -40 do 125°C dla temperatury czujnika i -70 do 380°C dla temperatury obiektu
- Wysoka dokładność 0,5°C w szerokim zakresie temperatur (0…+50°C zarówno dla Ta jak i To)
- Rozdzielczość pomiaru 0,02°C
- Wersje jedno i dwustrefowe
- Interfejs cyfrowy zgodny z SMBus do szybkiego odczytu temperatury i budowy sieci czujników
- Wyjście PWM dostosowane do ciągłego odczytu
- Dostępny w wersjach 3 V i 5 V
W tym projekcie po raz pierwszy użyjemy shielda LCD Nokii 5110, o ile kilka razy używaliśmy innej wersji wyświetlacza, o tyle nigdy nie używaliśmy wersji shielda. Do shielda dołączony jest joystick oraz przycisk. Jest on kompatybilny z Arduino Uno i większością innych płytek Arduino.
Schemat
Schemat tego projektu jest bardzo prosty, ponieważ wyświetlacz jest dostarczany jako shield, co eliminuje potrzebę łączenia go przewodem i wszystko co musimy zrobić to podłączyć wyświetlacz do Arduino. Połączenie pomiędzy Arduino a czujnikiem temperatury pokazane jest na schemacie poniżej.
Aby ułatwić śledzenie połączeń, poniżej zostały one dokładniej opisane.
Przejrzyj jeszcze raz połączenia, aby upewnić się, że wszystko jest tak, jak powinno być.
Kod
Naszym celem w tym projekcie jest pomiar temperatury, przetworzenie jej i wyświetlenie na wyświetlaczu LCD. Aby umożliwić łatwą komunikację z czujnikiem temperatury mlx90614, użyjemy biblioteki czujnika temperatury mlx90614 od Adafruit oraz biblioteki grafu LCD Nokii 5110 do łatwego wyświetlania tekstu na ekranie. Biblioteki te można pobrać poprzez link dołączony do każdej z nich w zdaniu powyżej.
Aby pokrótce wyjaśnić kod projektu, zaczynamy jak zwykle od włączenia wszystkich bibliotek, które będą potrzebne w kodzie.
# Written by Nick Koumaris
# info@educ8s.tv
#include <LCD5110_Graph.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>=
Następnie tworzymy obiekt biblioteki LCD, podając piny Arduino, do których podłączone są piny LCD.
LCD5110 lcd(2,3,4,6,5); //Use this line with the shield
Po wykonaniu tych czynności tworzymy zmienne dla czcionek i innych elementów potrzebnych do wyświetlania, a następnie tworzymy instancję czujnika temperatury.
char TEMPERATURE = 'C';
extern uint8_t SmallFont[];
extern uint8_t BigNumbers[];
extern uint8_t uic[];
extern uint8_t uif[];
extern uint8_t splash[];
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Następnie piszemy funkcję void setup. Rozpoczynamy kod od inicjalizacji wyświetlacza LCD i czujnika temperatury, po czym używamy funkcji LCD.drawbitmap() do stworzenia interfejsu użytkownika na wyświetlaczu. Interfejs został już zaprojektowany i przekonwertowany do pliku C i jest już dołączony do kodu. Powodem użycia UI jest możliwość wyświetlania danych w bardziej przyjazny i efektywny sposób. W przeszłości stworzyliśmy wiele tutoriali pokazujących jak tworzyć własne grafiki dla wyświetlacza LCD Nokii 5110. Jeden z takich poradników jest dostępny tutaj.
void setup()
{
Serial.begin(9600);
lcd.InitLCD(60);
mlx.begin();
lcd.drawBitmap(0, 0, splash, 84, 48);
lcd.update();
delay(3000);
}
Kolejną funkcją jest funkcja void loop. Zakres działania funkcji void loop jest prosty. Zaczynamy od określenia jednostki miary w jakiej ma być wyświetlana temperatura albo w Celsjuszach albo w Fahrenheitach, następnie odczytujemy temperaturę z czujnika temperatury i wyświetlamy ją na wyświetlaczu. Dla dokładności, pomiędzy odczytami wstawiamy opóźnienie czasowe 1000 ms, aby zapewnić i zapobiec zderzeniu się żądań odczytu.
void loop()
{
String temperature="";
lcd.clrScr();
if(TEMPERATURE == 'C')
{
temperature = String(mlx.readObjectTempC(),1);
lcd.drawBitmap(0, 0, uic, 84, 48);
}else
{
temperature = String(mlx.readObjectTempF(),1);
lcd.drawBitmap(0, 0, uif, 84, 48);
}
if(temperature.length()>4)
{
temperature.remove(3,2);
}
Serial.println(temperature);
lcd.setFont(BigNumbers);
if(temperature.length()==4)
{
lcd.print(temperature,5,19);
}else
{
lcd.print(temperature,15,19);
}
Kompletny kod projektu znajduje się w sekcji download .
Demo
Upewnij się, że projekt jest podłączony zgodnie z opisem w sekcji schematy. Skopiuj kod i załaduj go na płytkę Arduino, a następnie skieruj czujnik temperatury na obiekt, którego temperaturę chcesz zmierzyć. Po chwili na ekranie pojawi się temperatura tego obiektu.
Oprócz bezkontaktowego pomiaru temperatury, czujnik temperatury MLX90614 IR może być również użyty do pomiaru temperatury otoczenia, ale nie będziemy się tym zajmować w tym projekcie.
Niektóre z głównych zastosowań tego projektu obejmują:
- Ogrzewanie i klimatyzacja
- Monitorowanie systemów - monitorowanie wydajności systemów chłodzenia, pracy kotłów, systemów parowych oraz wykrywanie gorących punktów w systemach elektrycznych/elektronicznych i panelach.
- Rolnictwo - monitorowanie temperatury, w której przetwarzana i przechowywana jest żywność. Wersja wideo tego projektu może być obejrzana na youtube tutaj.