Cara Guna Sensor Suhu Tanpa Sentuh MLX90614 (GY-906) dengan Arduino Uno

Cartoon of a small blue GY-906 MLX90614 board with a silver metal can and a loose black four-pin header beside it, a blue 0.96-inch OLED with white pixels, a plain white mini breadboard, rainbow male-to-male jumper leads and a blue Arduino Uno

GY-906 membaca suhu purata semua benda di dalam kon 90°, jadi tompok yang diukurnya dua kali lebih lebar daripada jaraknya ke sasaran — lebih kurang 4 cm garis pusat pada jarak 2 cm, 60 cm pada jarak 30 cm. Pada Uno ia VIN ke 5V, GND ke GND, SCL ke A5, SDA ke A4, selepas anda solder header empat-pin yang datang longgar di dalam beg. Ini sensor permukaan untuk hobi dan industri, bukan termometer perubatan.

Baca ini dahulu. Suhu kulit bukan suhu teras badan. Tiada apa-apa di sini yang merupakan pengukuran klinikal atau nasihat perubatan; saringan suhu badan memerlukan peranti yang diperakui dari segi perubatan, dan Melexis sendiri menamakan versi MLX90614 yang layak — ini bukan salah satu daripadanya.

Apa sebenarnya yang diukur oleh MLX90614?

MLX90614 di dalam can perak berkilat pada modul GY-906 ialah sebuah thermopile: inframerah daripada objek suam jatuh pada satu membran nipis yang membawa simpang panas bagi serantai thermocouple bersiri dan memanaskannya sepersekian darjah di atas simpang sejuk pada substrat chip, dan voltan yang terhasil daripada beza itulah pengukuran yang sebenarnya. Beza belum lagi suhu, jadi chip ini turut mengukur suhu pakejnya sendiri dan menjadikannya rujukan untuk mengira angka objek tadi. Sebab itulah ada dua output — suhu pakej sensor itu sendiri, dan suhu objek — dan sebab itulah wujud peraturan yang paling penting, kerana segala yang boleh dilihat oleh tingkap itu menyumbang kepada bacaan. Datasheet Melexis menyebutnya terus terang: “The measured value is the average temperature of all objects in the Field Of View of the sensor”, dan “the accuracy is only valid if the object fills the FOV of the sensor completely.”

Kenapa bacaan berubah bila sensor digerakkan?

GY-906 tak memberi anda titik laser mahupun viewfinder, jadi tiada apa-apa yang menunjukkan seberapa lebar bulatan yang dipuratakan itu — menggerakkan sensor mengubahnya, dan hanya kiraan yang memberitahu berapa banyak. Modul kami membawa optik 90°, jadi separuh sudut kon itu ialah 45°; jejari bulatan ialah jarak didarab tangen separuh sudut, dan tan 45° = 1. Jadi jejarinya sama dengan jarak, dan garis pusatnya dua kali ganda jarak.

Jarak ke sasaran Garis pusat bulatan yang dipuratakan Apa yang realistiknya termasuk
2 cm ≈ 4 cm Muka sebiji mug, dan tiada apa-apa lagi
10 cm ≈ 20 cm Seluruh bahagian bawah sebuah laptop
30 cm ≈ 60 cm Satu kepala, kedua-dua bahu dan dinding di belakangnya

Air panas dalam mug membuktikannya dalam masa setengah minit. Pada 2 cm, bulatan 4 cm itu semuanya mug, jadi angkanya munasabah. Berundur ke 30 cm dan mug yang sama — anggap mukanya 8 cm lebar — mengisi kurang daripada 2 % bulatan 60 cm yang 98 % selebihnya ialah dinding bersuhu bilik, jadi puratanya jatuh dalam lingkungan satu dua darjah daripada suhu bilik itu. Tiada apa-apa yang hanyut; anda cuma bertanya soalan yang lain. Satu peringatan: Melexis mentakrifkan field of view pada titik sensitivitinya sudah jatuh ke 50 %, jadi bulatan itu bertepi lembut dan benda yang berada sedikit di luarnya pun masih menyumbang — menjadikan peraturan praktikalnya lebih ketat daripada kiraan, bukan lebih longgar.

Kartun perbandingan menunjukkan board sensor inframerah biru kecil dengan can perak memancarkan kon teal yang sempit ke atas sebiji mug putih dari dekat, dan kon teal yang lebar melimpah jauh melepasi mug ke dinding navy dari jarak jauh
Sensor yang sama, mug yang sama, jawapan yang berbeza. Dari dekat, bulatan yang diukur semuanya mug. Dari sepanjang lengan, kebanyakannya dinding — dan puratanya ikut dinding.

Pilihan: biar kami solderkan headernya untuk anda

ItemPriceQty
Soldering Service for Circuit Boards & Electronics - 5 Pins Soldering ServiceSoldering Service for Circuit Boards & Electronics - 5 Pins Soldering ServiceSOLSE05RM0.80

Header empat-pin GY-906 datang longgar dan kena disolder dahulu. Servis ini meliputi sehingga lima pin, iaitu tepat kerja ini. Ia diuruskan secara manual dan bukan melalui checkout — WhatsApp kami dahulu dan kami akan uruskannya bersama pesanan anda.

Kenapa GY-906 sampai dengan headernya belum dipasang?

GY-906 dihantar sebagai board biru kosong dengan empat lubang bersadur emas yang masih kosong di sepanjang tepi bawahnya — VIN, GND, SCL, SDA — dan header hitam empat-pinnya longgar di dalam beg. Itulah yang membolehkan board yang sama menerima header lurus, header bersudut tepat, atau wayar yang disolder rata ke dalam sesebuah casing. Ia juga bermakna tiada apa-apa yang bersambung sehingga wujud empat sambungan solder.

Empat sambungan pada pitch 2.54 mm ialah kerja solder pertama yang bagus, dan panduan solder header pin kami menerangkan tekniknya. Dua perkara khusus untuk board ini: cucuk header masuk dari sebelah can perak supaya pinnya keluar di belakang dan sensor menghadap jauh daripada breadboard, dan jauhkan mata besi solder — dan kemudian jari anda — daripada can berkilat itu sendiri: tudung itu ialah tingkap optik sensor dan rujukan suhunya, bukan pemegang. Tak mahu solder sendiri? Servis solder lima-pin kami meliputi tepat header ini. Kalau ini kali pertama anda, menonton orang membasahkan pad dan mengalirkan solder ke atasnya jauh lebih berkesan daripada mana-mana penerangan bertulis:

Macam mana dua peranti I2C berkongsi satu Arduino Uno?

MLX90614 dan OLED 0.96 inci tergantung pada dua wayar yang sama kerana I2C ialah bas beralamat: semuanya mendengar, tetapi hanya peranti yang alamatnya dipanggil akan menjawab. Alamat kilang sensor ini ialah 0x5A. OLED itu pula sebuah SSD1306, alamatnya ditetapkan oleh satu jumper di belakang yang dihantar tersambung pada pad bertanda 0x78 — iaitu alamat tulis 8-bit, yang membawa bit baca/tulis di kedudukan paling bawah. Anjak ke kanan satu bit untuk mendapat alamat 7-bit yang dijangka library: 0x78 >> 1 = 0x3C. Tiada perlanggaran, satu bas. Kiraan yang sama meliputi pilihan satu lagi: jumper yang duduk pada pad 0x7A bermakna 0x3D, dan OLED_ADDR dalam sketch di bawah kena padan dengannya.

Perkongsian bas itulah sebabnya sebuah breadboard berbaloi tempatnya: setiap satu daripada empat net itu kena sampai ke dua board dan ke Uno, sedangkan satu pin Uno tak boleh memegang dua shell jumper. Satu lajur pada mini breadboard 170-lubang ialah lima lubang yang disatukan di bawahnya, jadi setiap lajur menjadi simpang tempat satu net bercabang. Cucuk empat pin GY-906 ke dalam satu bank dan pin OLED ke bank sebelah, supaya setiap jumper pendek cuma perlu melintasi alur tengah.

Kedua-dua modul terbaring rata dan bukan berdiri tegak — pinnya keluar di belakang board, jadi setiap PCB berakhir terapung beberapa milimeter di atas breadboard dengan mukanya menghadap siling. Halakan badan setiap satu keluar melepasi tepi breadboard dan bukan merentasinya, kalau tidak ia menutup tie point yang diperlukan oleh jumpernya sendiri; OLED itu memanjang kira-kira 27 mm melepasi baris pinnya. Dan dengan can menghadap ke atas, anda membidik binaan ini dengan membawa sasaran ke atas sensor, bukan membawa sensor ke sasaran.

⚠️ Dua board ini tidak menggunakan susunan pin yang sama. Susunan GY-906 ialah VIN, GND, SCL, SDA; OLED pula GND, VCC, SCL, SDA. Kuasa dan ground bertukar tempat, jadi menyalin corak dari satu board ke satu lagi ialah cara paling mudah untuk memberi kuasa secara terbalik kepada paparan. Baca label OLED dengan paparannya menghadap anda — membalikkannya untuk melihat pin akan menyongsangkan susunan itu.

Net Pin GY-906 Pin OLED Header Uno
Kuasa VIN (pin ke-1) VCC (pin ke-2) 5V
Ground GND (pin ke-2) GND (pin ke-1) GND
Clock SCL (pin ke-3) SCL (pin ke-3) A5
Data SDA (pin ke-4) SDA (pin ke-4) A4

Itu lapan batang jumper male-to-male: empat yang pendek menyambung setiap pasangan lajur, empat yang lebih panjang keluar ke header female Uno. Dan 5V memang rel yang betul walaupun die MLX90614 itu komponen kelas 3 V, kerana modul ini meregulat untuk anda — satu pembedahan board yang sama ini menemui regulator 662K yang menghasilkan 3.3 V daripada VIN, yang menerima sehingga 6 V, berserta pull-up I2C 4.7 kΩ — yang semestinya berada pada rel teregulat itu, memandangkan Melexis menetapkan SDA dan SCL komponen 3 V itu hanya sehingga paras bekalannya sendiri. Sebab itulah ia sesuai untuk ESP32 3.3 V dan Uno 5 V sama rata: datasheet ATmega328P meletakkan ambang input-tinggi pada 0.6 × VCC, iaitu 3.0 V pada board 5 V, dan 3.3 V melepasi angka itu dengan margin.

Kartun sensor GY-906 biru kecil dengan can perak dan OLED biru 0.96 inci terbaring rata di atas mini breadboard putih polos, disambung oleh empat jumper pendek dan disambungkan ke Arduino Uno biru dengan empat jumper yang lebih panjang
Susunan siap di atas meja. Setiap blok lima lubang ialah satu net, jadi empat jumper pendek melintasi alur tengah untuk mencantum dua board itu dan empat yang lebih panjang membawa empat net yang sama ke Uno.

Sketch mana yang membacanya dan meletakkan angka itu pada OLED?

Pasang Adafruit MLX90614 Library, Adafruit SSD1306 dan Adafruit GFX daripada Library Manager. Ketiga-tiganya bergantung pada Adafruit BusIO, dan BusIO yang tertinggal itulah sebab biasa kod ini enggan compile. Satu perangkap nama: methodnya ialah writeEmissivity(), bukan setEmissivity() yang dinamakan oleh beberapa panduan pihak ketiga — header yang disertakan menyelesaikan hal itu.

// GY-906 (MLX90614) sensor inframerah + OLED 0.96 inci pada Arduino Uno.
// Satu bas I2C: SDA -> A4, SCL -> A5. Sensor menjawab di 0x5A, paparan di 0x3C.
// Ini DEMONSTRASI pengukuran suhu permukaan secara inframerah.
// Ia bukan termometer perubatan dan tiada bacaan di sini yang merupakan ukuran kesihatan.

#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_ADDR 0x3C   // alamat tulis 0x78 yang dianjak ke kanan satu bit

Adafruit_SSD1306 display(128, 64, &Wire, -1);
Adafruit_MLX90614 mlx;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  delay(300);   // datasheet: bacaan cuma sah 250 ms selepas power-up

  // Adafruit_SSD1306::begin() memulangkan false hanya kalau frame buffernya tak
  // muat dalam SRAM - ia tak pernah menyemak sama ada paparan menjawab, jadi tanya bas.
  Wire.beginTransmission(OLED_ADDR);
  if (Wire.endTransmission() != 0) {
    Serial.println(F("Tiada OLED di 0x3C. Periksa SDA/SCL dan jumper alamat."));
    while (1) { }
  }
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);

  if (!mlx.begin()) {          // begin() false bila 0x5A tak menjawab
    display.setTextSize(1);
    display.setCursor(0, 8);
    display.println(F("MLX90614 tiada 0x5A"));
    display.println(F("Periksa empat"));
    display.println(F("sambungan solder."));
    display.display();
    Serial.println(F("Tiada apa-apa menjawab di 0x5A."));
    while (1) { }
  }

  // Emissivity disimpan dalam EEPROM sensor sendiri dan kekal selepas power cycle.
  Serial.print(F("Emissivity tersimpan: "));
  Serial.println(mlx.readEmissivity(), 2);   // 1.00 seperti keluar dari kilang
}

void loop() {
  double object  = mlx.readObjectTempC();    // purata seluruh kon
  double ambient = mlx.readAmbientTempC();   // pakej sensor itu sendiri

  display.clearDisplay();

  if (isnan(object) || isnan(ambient)) {     // bacaan yang gagal memulangkan NAN
    display.setTextSize(1);
    display.setCursor(0, 28);
    display.println(F("Bacaan gagal"));
  } else {
    display.setTextSize(1);
    display.setCursor(0, 0);
    display.print(F("PERMUKAAN purata FOV"));

    display.setTextSize(3);
    display.setCursor(0, 18);
    display.print(object, 1);
    display.print(F("C"));

    display.setTextSize(1);
    display.setCursor(0, 52);
    display.print(F("badan sensor "));
    display.print(ambient, 1);
    display.print(F("C"));

    Serial.print(object, 2);
    Serial.print(F(" C permukaan / "));
    Serial.print(ambient, 2);
    Serial.println(F(" C badan sensor"));
  }

  display.display();
  delay(500);
}

Tiga pilihan yang disengajakan di situ. Adafruit_MLX90614::begin() memulangkan bool yang false bila tiada apa-apa mengaku terima di 0x5A, jadi sketch ini berhenti dan menamakan chip itu, bukannya mencetak sifar sampai bila-bila. Paparan pula perlu ujiannya sendiri, kerana di dalam source Adafruit_SSD1306, begin() memulangkan false hanya apabila frame buffer tak muat dalam SRAM — ia tak pernah bertanya sama ada OLED itu menjawab — jadi sketch ini ping 0x3C sendiri melalui Wire. Bacaan yang gagal memulangkan NAN, jadi nilainya melalui isnan() dan bukan satu perbandingan biasa. Dan penantian 300 ms itu wujud kerana datasheet cuma menjamin hasil yang sah 250 ms selepas power-up. Kekalkan setiap string di dalam F(): Adafruit_SSD1306 menuntut frame buffer 1024 bait, separuh SRAM Uno, di atas 538 bait statik sketch ini.

Upload dan ulang ujian mug tadi, kali ini pada OLED: dari dekat, angka besar itu ialah mug, dan sambil anda mengangkat mug menjauh, ia berjalan turun menghampiri angka badan sensor di bawahnya. Cuma jangan biarkan objek panas terletak lama di atas can itu — ia memanaskan pakej sensor itu sendiri, iaitu satu-satunya keadaan yang angka ketepatan tadi andaikan sudah anda elakkan.

Kenapa permukaan logam berkilat terbaca terlalu sejuk?

Sebabnya MLX90614 keluar dari kilang dikalibrasi untuk pemancar yang sempurna — “As a standard, the MLX90614 is calibrated for an object emissivity of 1”. Emissivity ialah pecahan inframerah yang dipancarkan sesuatu permukaan berbanding pemancar sempurna secara teori pada suhu yang sama, dan Melexis meletakkan aluminium yang digilap pada kira-kira 0.18, aluminium yang teroksida teruk pada 0.30 sahaja, dan cat biasa pada 0.85–0.95.

Apa yang sampai ke sensor ialah inframerah yang dipancarkan sendiri oleh permukaan itu — berkadaran dengan emissivity didarab kuasa empat suhu mutlaknya — campur inframerah bilik yang dipantulkannya. Pemancar yang lemah, atas sebab yang sama juga, ialah cermin yang bagus, jadi kebanyakan yang kembali itu sebenarnya gambar bilik anda. Letak angka padanya: heatsink aluminium gilap 60 °C di dalam bilik 30 °C memancarkan 18 % daripada apa yang dipancarkan jasad hitam pada 60 °C dan memantulkan 82 % daripada bilik 30 °C — jumlah sinaran inframerah yang setara dengan lebih kurang 36 °C. Itulah keseluruhan penjelasan untuk “heatsink saya terbaca cuma sedikit di atas suhu bilik”.

Penyelesaiannya ialah pita matt atau cat matt pada bintik yang hendak dibaca, bukan sensor yang lain: ulang kiraan tadi pada 0.95 dan heatsink yang sama terbaca kira-kira 58.7 °C. Anda juga boleh memberitahu sensor nilai emissivity yang sebenar dalam satu baris kod, tetapi buatlah dengan sedar — mlx.writeEmissivity(0.95) menulis ke EEPROM dalaman, jadi ia kekal selepas power cycle dan mempengaruhi setiap bacaan selepas itu sehingga anda menulis gantinya — termasuk bacaan bulan depan pada benda yang lain pula. Mencetak mlx.readEmissivity() semasa mula, seperti yang dibuat oleh sketch ini, menjadikan hal itu kelihatan, dan mlx.writeEmissivity(1.0) mengembalikan nilai kilang.

Kartun perbandingan heatsink bersirip perak berkilat yang memantulkan sinaran kembali ke sensor inframerah biru kecil dengan tolok bacaan rendah, di sebelah heatsink yang sama ditutup pita matt hitam yang memberi tolok bacaan tinggi
Heatsink yang sama, suhu yang sama. Logam gilap yang terdedah kebanyakannya mencerminkan bilik kembali ke sensor, jadi ia terbaca sejuk; sejalur pita matt memancar dengan betul dan angkanya jadi tepat.

Bolehkah ini digunakan untuk menyemak suhu badan seseorang?

Tidak — GY-906 membawa MLX90614 yang salah untuk kerja itu, dan Melexis menyelesaikan hal ini di dalam datasheet, bukan meninggalkannya kepada tafsiran. Ketepatan perubatan pada keluarga ini — ±0.2 °C dalam tetingkap sempit sekitar suhu badan — “is only available for the MLX90614Dxx versions”, dan komponen yang mematuhi ASTM E1965-98, iaitu standard untuk termometer inframerah yang digunakan pada pesakit, dinamakan satu per satu: ESF-DCC, ESF-DCH dan ESF-DCI. Field of view mereka ialah 35°, 10° dan 5° — semuanya sempit, justeru kerana kon yang lebar tak mampu mengasingkan dahi daripada rambut, dinding dan hembusan penghawa dingin di belakangnya.

Optik 90° modul kami meletakkannya dalam kategori yang berbeza secara reka bentuk, dan dokumen yang sama mengesahkannya dengan cara kedua: komponen Dxx menjalankan gain amplifier yang lebih tinggi sehingga mengehadkan suhu objeknya sekitar 200 °C, sedangkan komponen ini ditetapkan sehingga 380 °C. Siling itulah yang menjadikannya bagus untuk apa yang ia memang dibuat — besi solder, motor, cakera brek, permukaan memasak, hot end printer 3D. Untuk manusia, guna termometer klinikal yang diperakui.

Kesilapan biasa yang kami nampak

Berdiri jauh sambil mengharapkan bacaan setitik. Ini kekecewaan yang paling kerap. Sepanjang lengan, sensor memuratakan bulatan yang lebih lebar daripada seorang manusia, jadi angkanya melorot menghampiri suhu bilik.

Menghalakannya pada logam yang terdedah. Permukaan berkilat terbaca jauh lebih rendah pada emissivity lalai 1.0. Tampal pita matt pada bintik itu, atau tulis nilai emissivity yang sebenar dan ingat bahawa ia kekal tertulis.

Memegang can itu, atau memasangnya di sebelah sesuatu yang panas. Angka objek dikira berpandukan suhu pakej sensor itu sendiri, jadi jari pada can logam atau regulator panas di sebelahnya merosakkan rujukannya — sebab itulah ketepatan yang dinyatakan datasheet cuma sah selagi tiada beza suhu merentasi pakej itu.

Membaca sebaik sahaja dipasang, lebih-lebih lagi di luar rumah. Membawa board dari bilik berhawa dingin ke suhu 33 °C meninggalkannya jauh daripada keseimbangan selama beberapa minit; biar ia stabil dahulu. Sama juga dengan rel USB yang melendut — kebergantungan pada bekalan lebih kurang 0.6 °C setiap volt.

Soalan lazim

Sejauh mana MLX90614 boleh mengukur?

Sejauh mana pun anda mahu — tetapi semakin jauh, semakin luas kawasan yang dipuratakan. Dengan field of view 90° modul ini, bulatannya dua kali lebih lebar daripada jaraknya: 2 cm memberi 4 cm, 30 cm memberi 60 cm. Ketepatan cuma sah selagi objek mengisinya penuh.

Boleh tak guna GY-906 sebagai termometer demam atau suhu badan?

Tidak. Ia sensor permukaan untuk hobi dan industri, suhu kulit bukan suhu teras badan, dan Melexis mengehadkan ketepatan perubatan kepada komponen MLX90614Dxx yang mempunyai field of view sempit dan mematuhi ASTM E1965-98. Guna peranti yang diperakui untuk manusia.

Kenapa GY-906 saya terbaca jauh lebih sejuk daripada suhu sebenar objek?

Hampir selalunya emissivity. Sensor ini dihantar dikalibrasi untuk pemancar yang sempurna, jadi logam gilap — sekitar 0.18 untuk aluminium — kebanyakannya memantulkan bilik kembali kepadanya. Tampal pita matt pada bintik itu, atau tulis nilai emissivity yang sebenar ke dalam sensor.

Adakah GY-906 perlukan board 3.3V, atau 5V selamat?

5V memang selamat. Modul ini membawa regulator 3.3 V sendiri pada VIN, yang menerima sehingga 6 V, dan pull-up I2C-nya menuju ke rel itu. Uno membaca HIGH bermula dari 3.0 V ke atas, jadi 3.3 V berada jauh dalam julat — dan modul yang sama berfungsi pada ESP32 3.3 V.

Boleh tak sensor dan OLED berkongsi dua pin yang sama?

Boleh. I2C ialah bas beralamat: MLX90614 menjawab di 0x5A dan SSD1306 ini di 0x3C, jadi kedua-duanya duduk pada A4 dan A5. Panduan DHT11 dan OLED kami serta panduan sudut tilt MPU6050 menggunakan corak yang sama.

Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.

Leave a Reply

Your email address will not be published. Required fields are marked *