Termometr bezdotykowy (pirometr) z modułem GY-906 w Arduino

Moduł modMLX906 (GY-906) to bezdotykowy czujnik temperatury, którego konstrukcja oparta jest na sensorze promieniowania podczerwonego MLX90614. Dzięki użyciu w module stabilizatora 3.3 V oraz rezystorów podciągających do zasilania (linie SDA, SCL), moduł modMLX906 (GY-906) jest idealnym rozwiązaniem do zbudowania taniego i skutecznego termometru bezdotykowego. Aplikacja tego modułu może okazać się szczególnie przydatna wszędzie tam, gdzie pożądany jest pomiar temperatury bez fizycznej ingerencji w obiekt mierzony.

 

Układ MLX90614 może mierzyć temperatury obiektu w zakresie -70 do +380°C oraz temperatury otoczenia (obudowy) w zakresie -40 … + 125°C. Komunikacja z układem odbywa się po magistrali I2C lub za pośrednictwem sygnału PWM. Wartości odczytywane z układu są wynikowymi procesów cyfrowej obróbki sygnału z detektora (w układzie MLX90614 zintegrowano sensor, nisko-szumny wzmacniacz, przetwornik ADC 17-bit oraz procesor DSP ). Układ MLX90614 jest fabrycznie skalibrowany.

Od strony sprzętowej projekt wykorzystuje płytkę Arduino UNO wraz z modułem LCD Keypad Shield. Przy pomocy czterech przewodów żeńsko – żeńskich dołączono moduł pirometru modMLX906 (GY-906) do złącz szpilkowych, przylutowanych do płytki LCD Keypad Shield. Czujnik MLX90614 -(… )-BAA, zawarty w module modMLX906 (GY-906), mierzy temperaturę obiektu przy pomocy jednego kanału, zaś do polepszenia parametrów odległościowych pirometru należałoby zastosować optykę o odpowiedniej ogniskowej oraz materiale (przepuszczającym promieniowanie podczerwone).

Program sterujący pracą pirometru napisano w Arduino. Do obsługi magistrali I2C, łączącej sensor z mikrokontrolerem, wykorzystano bibliotekę I2C Master, wyświetlacz alfanumeryczny natomiast obsługiwany jest przez bibliotekę LiquidCrystal (zintegrowaną ze środowiskiem Arduino).

Na początku programu zadeklarowane zostają zmienne – między innymi daneL oraz daneH – obie przechowujące odczytane z czujnika wartości temperatur. Zmienna adres odpowiada za przechowywanie adresu magistralowego sensora, z kolei zmienna erc ma za zadanie przechowywać wartość z rejestru, który nie jest wykorzystywany, a jego odczyt jest konieczny do poprawnego zakończenia transmisji. W funkcji setup następuje inicjalizacja wyświetlacza oraz magistrali I2C. Początek programu zawierający deklaracje i funkcje setup() ukazano na listingu 1.

 

Listing 1. Deklaracje zmiennych, funkcja setup()

 

W pętli głównej następuje odczyt, konwersja, i wyświetlenie wartości z czujnika.

Rozpoczęta zostaje transmisja po magistrali I2C – jako pierwszy odczytywany będzie rejestr temperatury obiektu (Tobj1, adres 0x07). Odczytywane są trzy bajty z jednego rejestru – jest to warunek konieczny poprawnej transmisji. Sensor przechowuje informacje o temperaturach w postaci dwóch bajtów; trzeci bajt zawiera informacje o kodzie błędu w transmisji – zostaje odczytany, lecz nie jest wykorzystywany w programie. Następną operacją jest przygotowanie zmiennej „temperatura” (typu double); do niej zostaje zapisana wartość z drugiego bajtu (zamaskowana przez mnożenie binarne wartością 01111111) oraz przesunięta o osiem pozycji w lewo. Poprzez dodanie do tej zmiennej wartości pierwszego bajtu (odczytanego z czujnika) otrzymano jedną zmienną, która przechowuje wartość temperatury w postaci cyfrowej (zmienna 16-bit, najbardziej znaczący bit wyzerowany).

Konieczne jest późniejsze przeliczenie tej wartości; wpierw na jednostkę układu SI (Kelvin), wykonując mnożenie wartości cyfrowej przez 0.02 (wartość przypadająca na najmniej znaczący bit), następnie zaś, by uzyskać wartość w stopniach Celsiusza, należy od wyniku odjąć liczbę 273.15. Wynik zostaje ukazany na wyświetlaczu, przy czym za pomocą instrukcji lcd.write(0xDF) wyświetlony zostaje znak stopnia.

Pirometr wyświetla temperaturę mierzonego obiektu oraz, w drugiej linii wyświetlacza, temperaturę czujnika / otoczenia. Procedura odczytu temperatury otoczenia jest analogiczna do odczytu temperatury obiektu – dokonuje się jej jednak pod innym adresem rejestru (0x06 HEX). Na końcu programu wprowadzane jest opóźnienie 200 mS. Kod pętli głównej programu przedstawiono na listingu 2.

 

Listing 2. Pętla główna programu

 

Pomiar dwóch parametrów (temperatury obiektu oraz otoczenia czujnika) może posłużyć do realizacji dodatkowej kompensacji temperaturowej czujnika, wykonania obliczeń różnicy temperatury otoczenia i obiektu lub też sprawdzenia, czy mierzony obiekt nie nagrzewa nadmiernie struktury sensora.

Czujnik MLX90614 powinien współpracować z odpowiednią optyką, by uzyskać najlepsze rezultaty pomiarów przy większych odległościach od mierzonego obiektu. Bez użycia optyki (jak w tym przykładzie), najbardziej realne wyniki pomiaru uzyskuje się w odległości poniżej 2 cm (odległość od czujnika do obiektu mierzonego).

Pełny kod programu:

 

Do pobrania

O autorze