Ketahanan termal Arduino. Mengukur suhu dan kelembaban di Arduino - pilihan metode. Pemanasan langsung dan tidak langsung

Untuk membuat stasiun cuaca atau termometer rumah, Anda perlu mempelajari cara menghubungkan papan Arduino dan perangkat untuk mengukur suhu dan kelembapan. Pengukuran suhu dapat dilakukan menggunakan termistor atau sensor digital DS18B20, tetapi perangkat yang lebih kompleks digunakan - sensor DHT11 atau DHT22. Pada artikel ini kami akan memberi tahu Anda cara mengukur suhu dan kelembapan menggunakan Arduino dan sensor ini.

Pengukuran termistor

Cara termudah untuk menentukan suhu adalah dengan menggunakan. Ini adalah jenis resistor yang resistansinya bergantung pada suhu lingkungan. Ada termistor dengan koefisien resistansi suhu positif dan negatif - masing-masing termistor PTC (juga disebut posistor) dan NTC.

Pada grafik di bawah ini Anda dapat melihat ketergantungan resistansi terhadap suhu. Garis putus-putus menunjukkan ketergantungan termistor dengan TCS negatif (NTC), dan garis padat tebal untuk termistor dengan TCS positif (PTC).

Apa yang kita lihat di sini? Hal pertama yang menarik perhatian Anda adalah termistor PTC memiliki grafik yang rusak dan akan sulit atau tidak mungkin untuk mengukur sejumlah nilai suhu, tetapi termistor NTC memiliki grafik yang kurang lebih seragam, meskipun jelas nonlinier. Apa maksudnya? Menggunakan termistor NTC lebih mudah untuk mengukur suhu karena lebih mudah untuk mengetahui fungsi perubahan nilainya.

Untuk mengubah suhu menjadi resistansi, Anda dapat membaca nilainya secara manual, tetapi hal ini sulit dilakukan di rumah dan Anda memerlukan termometer untuk menentukan nilai sebenarnya dari suhu lingkungan. Lembar data beberapa komponen berisi tabel seperti itu, misalnya, untuk rangkaian termistor NTC dari Vishay.

Kemudian Anda dapat mengatur terjemahan melalui cabang menggunakan fungsi if...else atau switchcase. Namun, jika tabel tersebut tidak disediakan dalam lembar data, Anda harus menghitung fungsi perubahan resistansi seiring dengan meningkatnya suhu.

Untuk menggambarkan perubahan ini ada persamaan Steinhart-Hart.

dimana A, B dan C adalah konstanta termistor yang ditentukan dengan mengukur tiga suhu dengan perbedaan minimal 10 derajat Celcius. Pada saat yang sama, berbagai sumber menunjukkan bahwa untuk termistor NTC 10 kOhm, keduanya sama:

Catatan:

Mereka yang memahami teks teknis dalam bahasa Inggris dengan baik dan menyukai perhitungan dapat membaca dokumen berikut: https://www.bipm.org/utils/common/pdf/ITS-90/Guide-SecTh-Thermistor-Thermometry.pdf

Ini adalah brosur pengukuran suhu termistor yang dikeluarkan oleh Thermometer Advisory Committee (TAC).

Namun, penggunaan persamaan seperti itu memakan waktu dan tidak dapat dibenarkan dalam proyek amatir, sehingga persamaan beta dapat digunakan untuk termistor.

B adalah koefisien beta dan dihitung berdasarkan pengukuran resistansi pada dua suhu berbeda. Hal ini ditunjukkan dalam lembar data (seperti yang diilustrasikan di bawah) atau dihitung secara independen.

Dalam hal ini, B ditunjukkan dalam bentuk:

Artinya koefisien dihitung berdasarkan data yang diperoleh dari pengukuran resistansi pada suhu 25 dan 100 derajat Celcius, ini adalah opsi yang paling umum. Kemudian dihitung dengan rumus:

B = (ln(R1) - ln(R2)) / (1/T1 - 1/T2)

Diagram khas untuk menghubungkan termistor ke mikrokontroler ditunjukkan di bawah ini.

Di sini R1 adalah resistor konstan, termistor dihubungkan ke sumber daya, dan data diambil dari titik tengah di antara keduanya, diagram secara kondisional menunjukkan bahwa sinyal disuplai ke pin A0 - ini adalah.

Untuk menghitung resistansi termistor, Anda dapat menggunakan rumus berikut:

Rtermistor=R1⋅((Vss/Voutput)−1)

Untuk menerjemahkannya ke dalam bahasa yang dapat dimengerti oleh Arduino, perlu diingat bahwa Arduino memiliki ADC 10-bit, yang berarti nilai digital maksimum dari sinyal input (tegangan 5V) adalah 1023. Maka dengan syarat:

  • D - nilai sinyal sebenarnya.

Rtermistor=R1⋅((Dmaks /D)−1)

Sekarang kita gunakan ini untuk menghitung resistansi dan kemudian menghitung suhu termistor menggunakan persamaan beta. Sketsanya akan seperti ini:

Bahkan lebih populer untuk mengukur suhu menggunakan. Arduino menemukan sensor digital DS18B20. Ia berkomunikasi dengan mikrokontroler melalui antarmuka 1 kabel, Anda dapat menghubungkan beberapa sensor (hingga 127) pada satu kabel, dan untuk mengaksesnya Anda harus mengetahui ID setiap sensor.

Catatan: Anda harus mengetahui ID meskipun hanya menggunakan 1 sensor.

Diagram koneksi sensor ds18b20 ke Arduino terlihat seperti ini:

Mode ini tidak menjamin pengoperasian yang benar saat mengukur suhu di atas 100 derajat Celcius.

Sensor suhu digital DS18B20 terdiri dari serangkaian komponen, seperti CIMS lainnya. Anda dapat melihat struktur internalnya di bawah ini:

Untuk bekerja dengannya, Anda perlu mengunduh perpustakaan Onewire untuk Arduino, dan untuk sensornya sendiri disarankan untuk menggunakan perpustakaan DallasTemperature.

Contoh kode ini menunjukkan dasar-dasar bekerja dengan 1 sensor suhu, hasil dalam derajat Celcius dikeluarkan melalui port serial setelah setiap pembacaan.


Sensor ini populer dan sering digunakan untuk mengukur tingkat kelembapan dan suhu lingkungan. Pada tabel di bawah ini kami telah menunjukkan perbedaan utamanya.

Diagram koneksinya cukup sederhana:

    1 keluaran - catu daya;

    2 keluaran - data;

    3 pin - tidak digunakan;

    Pin 4 adalah kabel biasa.

Jika sensor Anda dibuat dalam bentuk modul, ia akan memiliki tiga output, dan resistor tidak diperlukan - sudah disolder di papan.

Agar berfungsi, kita memerlukan perpustakaan dht.h; itu tidak termasuk dalam set standar, jadi Anda perlu mengunduh dan menginstalnya di folder perpustakaan di folder dengan Arduino IDE. Ini mendukung semua sensor dari keluarga ini:

    DHT 21 (AM2301);

    DHT 22 (AM2302, AM2321).

Kesimpulan

Saat ini, membuat stasiun sendiri untuk mengukur suhu dan kelembapan sangatlah sederhana berkat platform Arduino. Biaya proyek tersebut adalah 3-4 ratus rubel. Untuk pengoperasian mandiri, alih-alih mengeluarkan data ke komputer, perangkat ini dapat digunakan (kami menjelaskannya di artikel terbaru), lalu Anda dapat membuat perangkat portabel untuk digunakan baik di rumah maupun di mobil. Tulis di kolom komentar apa lagi yang ingin kamu ketahui tentang produk sederhana buatan sendiri menggunakan Arduino!

Termistor (atau termistor) adalah resistor yang mengubah hambatan listriknya tergantung pada suhu. Ada dua jenis termistor: PTC - dengan koefisien suhu positif, dan NTC - dengan koefisien suhu negatif. Koefisien positif berarti bahwa ketika suhu meningkat, resistansi termistor meningkat. Termistor NTC berperilaku sebaliknya. Termistor juga berbeda dalam resistansi nominalnya, yang sesuai dengan suhu ruangan - 25 C°. Misalnya, termistor dengan rating 100 kOhm dan 10 kOhm sangat populer. Termistor seperti ini sering digunakan pada printer 3D. Dalam tutorial ini kita akan menggunakan termistor NTC 100K dalam wadah kaca. Seperti ini:

1. Menghubungkan termistor ke Arduino

Untuk mengukur resistansi termistor, kita menghubungkannya sebagai lengan bawah pembagi tegangan. Kami akan menghubungkan titik tengah pembagi ke input analog Arduino - A0. Metode serupa digunakan di . Kami berbicara secara rinci tentang input analog Arduino dalam pelajaran: Diagram skematik Penampilan tata letak
Berapakah hambatan yang harus dimiliki resistor pada lengan atas pembagi? Biasanya, resistor digunakan dengan resistansi yang sesuai dengan nilai termistor. Pada pelajaran kita, kita menggunakan resistor dengan R1 = 102 kOhm, hal ini dapat dengan mudah diperoleh dengan menghubungkan dua buah resistor 51 kOhm secara seri.

2. Program untuk menghitung resistansi termistor

Program pertama yang akan kita tulis akan menghitung resistansi termistor dalam ohm.
#define SERIAL_R 102000 // resistansi resistor serial, 102 kOhm const byte tempPin = A0; batal setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. println(tr); penundaan(100);

Anda dapat melihat bahwa resistansi termistor yang diukur kurang dari 100 kOhm, yang berarti suhu sekitar di bawah 25 C°. Langkah selanjutnya adalah menghitung suhu dalam derajat Celcius.

3. Program untuk menghitung suhu pada termistor Untuk menghitung nilai suhu digunakan rumus Steinhart-Hart: Persamaan tersebut memiliki parameter A, B dan C yang harus diambil dari spesifikasi sensor. Karena kita tidak memerlukan ketelitian yang tinggi, kita dapat menggunakan persamaan yang dimodifikasi (persamaan B):
  • Dalam persamaan ini, hanya parameter B yang masih belum diketahui, yang mana untuk termistor NTC sama dengan 3950. Parameter lainnya sudah kita ketahui:
  • T0 adalah suhu ruangan dalam Kelvin, yang menunjukkan nilai termistor; T0 = ​​25 + 273,15;
  • T adalah suhu yang diinginkan, dalam Kelvin;
  • R adalah resistansi terukur termistor dalam Ohm;
Mari kita modifikasi program Arduino dengan menambahkan perhitungan suhu: #define B 3950 // B-coefisien #define SERIAL_R 102000 // resistansi resistor seri, 102 kOhm #define THERMISTOR_R 100000 // resistansi termistor nominal, 100 kOhm #define NOMINAL_T 25 // suhu nominal (di mana TR = 100 kOhm) const byte tempPin = A0; batal setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. print("R="); Serial.print(", t="); float steinhart = tr / THERMISTOR_R; // (R/Ro) steinhart = log(steinhart); B; // 1/B * ln(R/Ro) steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/Ke) steinhart = 1.0 / steinhart; / Balikkan steinhart -= 273.15; steinhart);
Sudah lebih baik! Program ini menunjukkan suhu dalam derajat Celcius. Seperti yang diharapkan, suhunya sedikit di bawah 25 C°.

Pencarian

  1. Termometer dengan tampilan. Mari kita sambungkan layar LCD simbolis ke sirkuit dan tulis program yang akan menampilkan suhu setiap 100 milidetik.
  2. Alarm terlalu panas. Mari tambahkan bel ke rangkaian dan tulis program yang akan terus menghitung suhu. Program juga harus memiliki syarat: jika suhu melebihi 70 C°, maka kita nyalakan bel.

25 November 2018

Termistor(termistor, hambatan termal) - perangkat semikonduktor yang hambatan listriknya bervariasi tergantung pada suhunya.

Termistor ditemukan oleh Samuel Ruben pada tahun 1930.

Termistor terbuat dari bahan dengan koefisien resistansi suhu tinggi (TCR), yang biasanya lebih tinggi daripada TCR logam dan paduan logam.

Berdasarkan jenis ketergantungan resistansi pada suhu, termistor dibedakan dengan negatif ( NTC-termistor, dari kata “ N negatif T suhu C efisien") dan positif ( PTC-termistor, dari kata “ P positif T suhu C efisien" atau posistor ) koefisien resistansi suhu (atau TCR). Untuk posistor, resistansinya meningkat seiring suhu; Untuk NTC-termistor, peningkatan suhu menyebabkan penurunan resistansinya.

Secara konvensional, termistor diklasifikasikan menjadi termistor suhu rendah (dirancang untuk beroperasi pada suhu di bawah 170 Kelvin), suhu sedang (dari 170 hingga 510 K) dan suhu tinggi (di atas 570 K). Termistor diproduksi dirancang untuk beroperasi pada suhu 900 hingga 1300 K.

Termistor tersedia dalam berbagai jenis, misalnya:

Secara khusus, saya tertarik pada termistor untuk beberapa parameter. Pertama, mereka digunakan untuk mengukur suhu di Extruder printer 3D dan mengukur suhu yang diperlukan untuk melelehkan plastik dengan cukup baik. Kedua, ukurannya, jika dilihat dari jenis termistor ke-3 pada gambar di atas, yaitu dari resin epoksi, ukurannya sangat kecil dan dapat dihubungkan ke permukaan apa pun dan mengukur suhu di atasnya. Berdasarkan parameter inilah saya akan menggunakannya karena saya ingin membuat mesin untuk membuat batang untuk mencetak pada printer 3D.

Dalam contoh ini, kita akan menggunakan termistor NTC paling sederhana dengan resistansi nominal 100 kOhm pada suhu 25 derajat C, yang digunakan pada printer 3D. Termistor ini bertanda 3950.

Untuk implementasi kita membutuhkan:

Diagram koneksi semua elemen akan terlihat seperti ini:

Untuk menghitung nilai suhu gunakan rumus Steinhart-Hart:

Persamaan tersebut memiliki parameter A, B dan C yang harus diambil dari spesifikasi sensor. Karena kita tidak memerlukan ketelitian yang tinggi, kita dapat menggunakan persamaan yang dimodifikasi (persamaan B):

Dalam persamaan ini, hanya parameter B yang masih belum diketahui, yang mana untuk termistor NTC sama dengan 3950. Parameter lainnya sudah kita ketahui:

  • T0 - suhu ruangan dalam Kelvin, yang nilai termistornya ditunjukkan; T0 = ​​25 + 273,15;
  • T adalah suhu yang diinginkan, dalam Kelvin;
  • R adalah resistansi terukur termistor dalam Ohm;
  • R0 adalah resistansi nominal termistor dalam Ohm.

Sketsanya akan terlihat seperti ini:

#define B 3950 // Koefisien B #define SERIAL_R 102000 // resistansi resistor seri, 102 kOhm #define THERMISTOR_R 100000 // resistansi termistor nominal, 100 kOhm #define NOMINAL_T 25 // suhu nominal (di mana TR = 100 kOhm) konstan byte tempPin = A0; batal setup() ( Serial.begin(9600); pinMode(tempPin, INPUT); ) void loop() ( int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial. print("R="); Serial.print(", t="); float steinhart = tr / THERMISTOR_R; // (R/Ro) steinhart = log(steinhart); B; // 1/B * ln(R/Ro) steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/Ke) steinhart = 1.0 / steinhart; / Balikkan steinhart -= 273.15; steinhart);

Inilah yang akan kita lihat di monitor port:

Kita melihat dari bacaan bahwa resistansinya lebih besar dari 100 kOhm dan suhunya 23 derajat, cukup logis, rumusnya berfungsi dengan benar.
Sekarang, dengan menggunakan rumus ini, kita sudah dapat membangun kondisi berbeda untuk tindakan berbeda.

Mari sambungkan salah satu sensor yang tersedia ke Arduino - sensor suhu atau termistor.

Penunjukan termistor pada diagram

Termistor- semikonduktor penghambat, hambatan listrik yang sangat bergantung pada suhu. Ketika suhu meningkat, resistensi menurun.

Apa yang kita inginkan

Kami membangun sirkuit dengan termistor dan mengubah jumlah dioda yang terbakar tergantung pada suhu.

Apa yang Anda perlukan

Selain semua yang biasa - termistor. Kami menggunakan B57164-K0103.

Tahapan pekerjaan

  • Skema perakitan No.1
  • Menentukan kisaran perubahan suhu
  • Penyempurnaan skema dan program
  • Kami senang dengan hasilnya
  • Kami menghasilkan ide.

Skema perakitan No.1

Kami menggunakan resistor 10KOm

Rangkaian ini sangat mirip dengan rangkaian dengan tombol, tetapi sekarang alih-alih tombol kita memasang termistor dan menghubungkannya ke input analog A2.

Input analog dapat membedakan kekuatan sinyal hilir. 0 adalah level minimum, 1023 adalah level maksimum. Dikatakan gradasi 10-bit (2 10 = 1024).

Jika Anda melepas termistor sama sekali, level sinyal akan menjadi nol, tetapi jika Anda memasang termistor, arus akan mulai mengalir melaluinya dan masuk ke input A2. Tugas kita adalah menentukan tegangan bersyarat pada input, menetapkan batas minimum dan maksimum tergantung pada suhu termistor.

Program:

batalkan pengaturan() (
pinMode(A2,MASUKAN); //Pin A2 - masukan sinyal

Serial.mulai(9600); //komunikasi dengan komputer 9600 bps
}
lingkaran kosong() (
int t = analogBaca(A2); //baca nilai dari A2
Serial.println(t); //tulis nilai ini ke //port serial (bagi kami ini adalah USB)

penundaan(10); // tunggu sebentar
}

Kami mem-flash programnya. Di layar kita menemukan tombol "Serial Monitor", klik.

Tombol Monitor Seri

Angka-angka yang dijalankan di jendela yang terbuka adalah nilai bersyarat yang bergantung pada suhu. Tuliskan jumlah minimum yang berhasil Anda perhatikan. Sekarang pegang resistor dengan hati-hati - dari kehangatan tangan Anda, suhunya akan naik dan angka di layar akan meningkat. Biarkan ini menjadi suhu maksimum.

Kami sedang memperbaiki skema ini.

Mari kita sambungkan 3 dioda ke sirkuit, “menggantungnya” di port 10-12 papan.

Hati-hati dengan dioda.

Biarkan satu dioda menyala pada suhu minimum, 2 saat suhu meningkat, dan ketiganya pada suhu maksimum.

Untuk melakukan ini, kami akan mengkalibrasi pembacaan yang masuk dalam program. Misalkan nilai minimumnya adalah 540, maksimum (bila kita ingin menyalakan ketiga dioda) - 600.

Mari kita definisikan nilai variabel led sebagai berikut:

int led = peta(t,540,600,0,3);

Jadi, ketika pembacaan variabel t berubah dari 540 menjadi 600 satuan, maka nilai variabel led akan berubah dari 0 menjadi 3.

Menulis sebuah program

Batalkan penyiapan() (

pinMode(A2,MASUKAN); //Pin A2 - masukan sinyal

Serial.mulai(9600); //komunikasi dengan komputer 9600 bps

untuk (int i=10; i<=12; i++) {

pinMode(i, KELUARAN);

lingkaran kosong() (

int t = analogBaca(A2); //baca nilai dari A2

int led = peta(t,540,600,0,3);

jika (led>=1) (digitalWrite(10,TINGGI);)

lain (digitalWrite(10,LOW);)

jika (led>=2) (digitalWrite(11,TINGGI);)

lain (digitalWrite(11,LOW);)

jika (led>=3) (digitalWrite(12,TINGGI);)

lain (digitalWrite(12,RENDAH);)

Serial.println(t); //tulis nilai ini ke //port serial (bagi kami ini adalah USB)

penundaan(10); // tunggu sebentar

Ya, semuanya tampak berfungsi.

Pikirkan di mana Anda dapat menggunakan sirkuit rakitan.

Bagaimana jika diodanya diganti dengan yang lain?

Coba sambungkan beberapa dioda lagi untuk menampilkan suhu dengan lebih akurat.

Halo, komunitas Habra. Setelah membaca beberapa artikel di hub Arduino saya terpikat untuk mendapatkan mainan ini. Dan baru-baru ini saya menerima parsel dengan pembayaran. Lalu saya mencoba-coba LED dan menginginkan sesuatu yang lebih serius. Saya memutuskan untuk membuat termometer sederhana hanya dengan menggunakan termistor, resistor 10 kOhm, dan layar LCD. Jika ada yang tertarik dengan apa yang terjadi, silakan lihat kucingnya.

Awal

Termistor adalah resistor variabel yang mengubah resistansinya tergantung pada suhu lingkungan.

Kami membutuhkan rincian berikut:
Arduino Uno - 1 buah
Termistor - 1 buah.
Resistor dengan resistansi 10 kOhm - 1 pc.
Layar LCD HJ1602A - 1 buah.
Menghubungkan jumper - beberapa potong

Saya memiliki semua ini, jadi saya segera mulai mendesain di papan tempat memotong roti.

Saya juga menyolder kaki ke layar pada hari pembelian.

Kemudian kami menghubungkan layar ke output Arduino. Layar saya memiliki pinout ini.

1 (GND) GND - Tanah
2 (VDD) 5v - Daya(+)
3 (VO/Contrast) - Kontrol kontras (Saya menghubungkan resistor variabel di sini)
4 (RS) - 12 - Saluran data
5 (RW) - 11 - Saluran data
6 (E) - 10 - Saluran data
11 (DB4) - 5 - Saluran data
12 (DB5) - 4 - Saluran data
13 (DB6) - 3 - Saluran data
14 (DB7) - 2 - Saluran data
15 (BL1/Lampu Latar1) - 13 - Daya lampu latar(+)
16 (BL2/Lampu Latar2) - GND - Tanah(-)

Inilah gambaran yang kami dapatkan.

Selanjutnya, sambungkan satu kaki termistor ke input analog A4 dan resistor 10 kOhm ke ground, dan kaki kedua termistor ke 5V.

Secara umum, itu saja. Perangkat keras sudah siap. Berikut diagramnya.

Pemrograman

Semuanya jelas dengan pemrograman. Kode sumber sketsa:

// menghubungkan dua perpustakaan untuk bekerja dengan LCD dan perhitungan matematis #include #termasuk LCD Kristal Cair(12, 11, 10, 5, 4, 3, 2); // inisialisasi LCD int lampu latar = 13; void setup(void) ( pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); ) // membuat metode untuk mengkonversi pembacaan sensor ke derajat Celsius double Getterm(int RawADC) ( double temp; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); temp = temp - 273.15; return temp; ) // membuat metode untuk menampilkan pembacaan sensor void printTemp(void) ( double temp = Getterm(analogRead(4)); // membaca pembacaan dari sensor LCD .clear(); lcd.setCursor(0,0); lcd.print("Suhu adalah:"); void loop(void) ( printTemp(); // memanggil metode yang dibuat sebelumnya delay(1000); )

Hasil dari program tersebut.

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat