Dalam artikel ini, kita akan membincangkan pelbagai jenis sensor suhu dan bagaimana ia boleh digunakan berdasarkan kes demi kes. Suhu adalah parameter fizikal yang diukur dalam darjah. Ini adalah bahagian penting dari sebarang proses pengukuran. Kawasan yang memerlukan pengukuran suhu yang tepat termasuk perubatan, penyelidikan biologi, elektronik, penyelidikan bahan, dan prestasi termal produk elektrik. Peranti yang digunakan untuk mengukur jumlah tenaga haba yang memungkinkan kita untuk mengesan perubahan fizikal dalam suhu dikenali sebagai sensor suhu. Mereka digital dan analog.
Jenis sensor utama
Secara umum, terdapat dua kaedah untuk memperoleh data:
1. Hubungi... Sensor suhu sentuhan bersentuhan fizikal dengan objek atau bahan. Mereka boleh digunakan untuk mengukur suhu pepejal, cecair atau gas.
2. Tidak boleh dihubungi... Sensor suhu tidak bersentuhan mengesan suhu dengan memintas sebahagian daripada tenaga inframerah yang dipancarkan oleh suatu objek atau bahan dan merasakan keamatannya. Mereka hanya dapat digunakan untuk mengukur suhu dalam pepejal dan cecair. Mereka tidak dapat mengukur suhu gas kerana tidak berwarna (ketelusan).
Peraturan pemilihan sensor
Sensor suhu untuk pemanasan bawah lantai dipilih dengan mengambil kira ciri-ciri seperti kuasa, jenis penutup atas, kaedah pemasangan dan peralatan dengan fungsi tambahan.
Kuasa
Nilainya pasti memenuhi keperluan dan beban lantai yang hangat. Jika tidak, sensor tidak akan berfungsi dengan betul. Apabila kekuatan elemen pemanasan lebih besar daripada pengatur itu sendiri, perlu juga memasang starter magnetik di antara mereka - untuk mengelakkan kerosakan pada peranti kerana peningkatan beban.
Set ciri
Lantai hangat dikendalikan oleh unit elektrik, yang membolehkan anda menyesuaikan operasi elemen pemanasan. Pengawal moden mempunyai fungsi seperti memulakan dan menyahdayakan sistem, menyesuaikan keadaan suhu, serta menetapkan frekuensi menyambungkan dan memutuskan elemen pemanasan.
Kemudahan penggunaan
Sekiranya anda berfikir bahawa anda tidak akan memahami pengaturcaraan, maka anda tidak boleh membeli peranti yang kompleks. Bahkan dengan mengambil kira semua fungsinya. Sebagai contoh, orang tua merasa agak bermasalah untuk berurusan dengan peranti yang dapat diprogramkan. Sebaiknya mereka memilih pilihan mekanikal.
Mudah dihubungkan
Dokumentasi yang disertakan untuk termostat selalu menunjukkan cara menyambungkan sensor pemanasan bawah lantai. Terminal terletak di tepi pada satu sisi unit kawalan. Setelah menyambungkan wayar elektrik mengikut skema, perlu untuk memeriksa prestasi sistem pemanasan. Untuk melakukan ini, ukur rintangan pada terminal sensor suhu dan kabel elektrik pemanasan, atau sambungkan lantai yang hangat dan tingkatkan nilai suhu dari sifar ke penunjuk yang disyorkan oleh SNIP, iaitu, hingga 30 ° C.
Penampilan
Sensor terma bukan sahaja dapat difahami secara fungsional, tetapi juga menarik dalam reka bentuk. Tombol moden terdapat dalam pelbagai warna dan bentuk. Anda boleh memilih pilihan yang selaras dengan bahagian dalam bilik.
Jenis sensor suhu
Terdapat banyak jenis sensor suhu.Dari kawalan on / off sederhana alat termostatik hingga sistem kawalan bekalan air yang kompleks, dengan fungsi memanaskannya, digunakan dalam proses penanaman tanaman. Dua jenis sensor utama, hubungan dan bukan sentuhan, kemudian dibahagikan kepada sensor resistif, voltan dan elektromekanik. Tiga sensor suhu yang paling biasa digunakan adalah:
- Pemanas
- Termokopel rintangan
- Termokopel
Sensor suhu ini berbeza antara satu sama lain dari segi parameter operasi.
Peranti
Ini adalah termokopel (plat atau rod) yang terdiri daripada wayar yang disambungkan ke terminal elemen penderiaan.
Bergantung pada maklumat suhu, rintangan bahagian sensitif berubah, masing-masing, isyarat elektrik yang dibekalkan ke termostat berubah. Oleh itu, nilai mutlak suhu sederhana ditentukan.
External (sensor suhu luaran untuk pemanasan bawah lantai), sebagai peraturan, terletak di bawah penutup lantai penamat dan mengukur penunjuk suhu. Dalaman (built-in), terletak di dalam pengatur dan menentukan tahap pemanasan udara.
Reka bentuk sensor suhu dipilih bergantung pada ciri sistem:
Termistor
Thermistor adalah perintang sensitif yang mengubah ketahanan fizikalnya dengan suhu. Biasanya, termistor diperbuat daripada bahan semikonduktor seramik seperti kobalt, mangan, atau nikel oksida dan dilapisi dengan kaca. Mereka adalah cakera rata rata kecil yang cepat bertindak balas terhadap perubahan suhu.
Oleh kerana sifat semikonduktor bahan, termistor mempunyai pekali suhu negatif (NTC), iaitu rintangan berkurang dengan peningkatan suhu. Namun, ada juga termistor PTC yang rintangannya meningkat dengan peningkatan suhu.
Jadual termistor
Kelebihan termistor
- Kelajuan tindak balas yang tinggi terhadap perubahan suhu, ketepatan.
- Kos rendah.
- Rintangan yang lebih tinggi dalam julat 2,000 hingga 10,000 ohm.
- Kepekaan yang jauh lebih tinggi (~ 200 ohm / ° C) dalam julat suhu terhad sehingga 300 ° C.
Pergantungan suhu rintangan
Pergantungan rintangan pada suhu dinyatakan dengan persamaan berikut:
Di mana A, B, C - ini adalah pemalar (disediakan oleh syarat pengiraan), R - rintangan di Ohms, T - suhu di Kelvin. Anda dapat dengan mudah mengira perubahan suhu dari perubahan rintangan atau sebaliknya.
Bagaimana menggunakan termistor?
Termistor dinilai untuk nilai resistifnya pada suhu bilik (25 ° C). Thermistor adalah peranti penolak pasif, oleh itu ia memerlukan pengeluaran pemantauan voltan keluaran semasa. Sebagai peraturan, mereka dihubungkan secara bersiri dengan penstabil yang sesuai membentuk pembahagi voltan utama.
Contohnya: Pertimbangkan termistor dengan nilai rintangan 2.2K pada 25 ° C dan 50 ohm pada 80 ° C. Thermistor disambung secara bersiri dengan perintang 1 kΩ melalui bekalan 5 V.
Oleh itu, voltan keluarannya dapat dikira seperti berikut:
Pada suhu 25 ° C, RNTC = 2200 ohm;
Pada suhu 80 ° C, RNTC = 50 ohm;
Walau bagaimanapun, penting untuk diperhatikan bahawa pada suhu bilik, nilai rintangan standard berbeza untuk termistor yang berbeza, kerana tidak linear. Thermistor mempunyai perubahan suhu eksponensial, dan oleh itu pemalar beta, yang digunakan untuk mengira rintangannya untuk suhu tertentu. Voltan dan suhu output perintang saling berkaitan secara linear.
Ciri-ciri antara muka dua dawai dalam sensor suhu LMT01
Rajah. 4. Organisasi antara muka semasa dengan LMT01
Seperti disebutkan di atas, untuk mengirimkan hasil pengukuran, LMT01 menghasilkan urutan bit dalam bentuk denyutan pengiraan semasa. Untuk ini, sensor hanya memerlukan dua petunjuk (Rajah 4). Untuk menukar denyutan semasa ke dalam bentuk yang biasa kepada litar mikro digital, dalam beberapa kes anda boleh menggunakan perintang tunggal (tetapi tidak selalu - lebih banyak lagi di bawah).
Setelah power-up, LMT01 memulakan kitaran pengukuran yang memakan masa hingga 54 ms (Gambar 5). Selama ini, arus aras rendah 28 ... 39 μA terbentuk pada output sensor. Ini diikuti dengan kitaran memindahkan hasil pengukuran dalam bentuk denyutan arus dengan amplitud 112 ... 143 μA. Mikrokontroler penerima mesti mengira denyutan ini, misalnya menggunakan pembilang / pemasa terbina dalam. Oleh kerana frekuensi isyarat adalah sekitar 82 ... 94 kHz, maka dengan jumlah denyutan maksimum (4095), jangka masa penghantaran dapat mencapai 50 ms.
Rajah. 5. Gambarajah pemasaan sensor LMT01
Dengan bilangan denyutan yang dikira (PC), nilai suhu dapat ditentukan mengikut formula 1:
, (1)
Oleh itu, pada 0 ° C, sensor akan menghasilkan sekitar 800 denyutan.
Malangnya, penggunaan satu perintang luaran tidak selalu mungkin kerana batasan penurunan voltan minimum di seluruh sensor LMT01. Semasa kitaran pengukuran, penurunan di antara sensor mestilah sekurang-kurangnya 2.15 V. Semasa kitaran penghantaran data, penurunan voltan dapat dikurangkan menjadi 2 V. Tidak sukar untuk membuat beberapa pengiraan kasar.
Pertimbangkan peranti dengan voltan bekalan Vdd = 3.3 V. Sekiranya kita mengambil penurunan minimum yang dibenarkan di seluruh sensor sama dengan 2.15 V semasa kitaran pengukuran, maka isyarat tidak lebih dari 1.15 V akan diperhatikan di seluruh perintang. pengawal, unit logik adalah 0, 7 ∙ Vdd, yang untuk kes kami adalah 2.31 V. Akibatnya, penggunaan perintang sederhana ternyata mustahil, kerana pengawal mikro tidak akan "melihat" isyarat unit logik. Jalan keluar dari situasi ini adalah penggunaan mikrokontroler dengan pembanding bawaan atau litar penukaran tahap.
Sensor suhu yang tahan
Sensor tahan suhu (RTD) terbuat dari logam langka, seperti platinum, yang rintangan elektriknya berbeza dengan suhu.
Pengesan suhu tahan mempunyai pekali suhu positif dan, tidak seperti termistor, memberikan ketepatan pengukuran suhu tinggi. Walau bagaimanapun, mereka mempunyai kepekaan yang lemah. Pt100 adalah sensor yang paling banyak didapati dengan nilai rintangan standard 100 ohm pada 0 ° C. Kelemahan utama adalah kos yang tinggi.
Kelebihan sensor sedemikian
- Julat suhu yang luas dari -200 hingga 650 ° C
- Berikan output arus penurunan yang tinggi
- Lebih linear berbanding termokopel dan RTD
Komponen tambahan dan litar sensor
Sebagai tambahan kepada peranti diod utama, litar sensor suhu merangkumi sejumlah elemen tambahan. Pertama sekali, ia adalah kapasitor yang melindungi peranti daripada pengaruh luar. Faktanya ialah penguat operasi sangat peka terhadap kesan medan elektromagnetik bergantian. Kapasitor menghilangkan kebergantungan ini dengan memasukkan maklum balas negatif.
Dengan penyertaan transistor dan diod zener, voltan rujukan stabil terbentuk. Di sini, perintang dengan kelas ketepatan yang lebih tinggi digunakan dengan nilai rendah pekali rintangan suhu. Oleh itu, keseluruhan skema memperoleh kestabilan tambahan. Sekiranya terdapat kemungkinan perubahan ketara dalam keadaan suhu, perintang ketepatan dapat dihilangkan. Mereka hanya digunakan untuk mengawal kepanasan kecil.
Termokopel
Sensor suhu termokopel paling sering digunakan kerana tepat, beroperasi pada julat suhu yang luas dari -200 ° C hingga 2000 ° C, dan relatif murah. Termokopel dengan wayar dan pasangkan foto di bawah:
Operasi termokopel
Termokopel diperbuat daripada dua logam yang berbeza yang dikimpal bersama untuk menghasilkan perbezaan yang berpotensi berbanding suhu. Dari perbezaan suhu antara dua persimpangan, voltan dihasilkan yang digunakan untuk mengukur suhu. Perbezaan voltan antara dua persimpangan disebut kesan Seebeck.
Sekiranya kedua-dua sebatian tersebut berada pada suhu yang sama, potensi perbezaan sebatian yang berbeza adalah sifar, iaitu V1 = V2. Namun, jika persimpangan berada pada suhu yang berbeza, voltan keluaran relatif terhadap perbezaan suhu antara kedua persimpangan akan sama dengan perbezaan V1 - V2 mereka.
Jenis sensor suhu
Elektronik-mekanikal
Jenis pengatur yang paling mudah dan murah. Bahagian kerja utamanya adalah plat logam khas yang bertindak balas terhadap kenaikan atau penurunan suhu. Sistem dihidupkan dan dimatikan dengan mengubah kelengkungan plat semasa pemanasan dan penyejukan. Menetapkan nilai suhu tepat pada pengatur sedemikian tidak akan berfungsi.
Elektronik
Peranti ini mempunyai elemen khas yang menghasilkan isyarat khas. Kuasa bergantung secara langsung pada nilai suhu persekitaran. Pada peranti seperti itu, anda boleh menetapkan bacaan suhu pemanasan yang tepat hingga sebahagian kecil darjah. Sistem ini dikendalikan oleh butang dan skrin kecil.
Boleh diprogramkan
Termoelemen yang paling mahal. Di atasnya, anda dapat menetapkan nilai tertentu, setelah mencapai seluruh sistem dihidupkan atau dimatikan oleh pengatur. Terima kasih kepada peranti, iklim mikro dibuat di bilik yang sesuai dengan orang tertentu. Adalah mungkin untuk mengkonfigurasi termostat sehingga sistem dihidupkan pada waktu tertentu. Maksudnya, lantai dipanaskan sebelum pemilik tiba di rumah, dan pada masa yang sama, elektrik tidak habis digunakan semasa pemiliknya tidak.
Banyak model mempunyai reka bentuk yang terang dan bergaya dan skrin LCD yang memaparkan maklumat dan memudahkan penyesuaian.
Bekerja dengan perpustakaan siap pakai
Jadi, untuk bekerjasama dengan sensor suhu DS18B20 di rangkaian, anda boleh menemui sebilangan besar perpustakaan, tetapi sebagai peraturan, dua dari yang paling popular digunakan. Ia adalah perpustakaan dan perpustakaan. Lebih-lebih lagi, perpustakaan kedua adalah tambahan yang lebih senang berbanding yang pertama dan tidak boleh digunakan tanpanya. Dengan kata lain, sebelum menyambungkan perpustakaan DallasTemperature.h, anda juga mesti menyambungkan OneWire.h. Cara memasang perpustakaan tertentu di Arduino IDE adalah mungkin.
Perpustakaan OneWire.h
Mari kita pertimbangkan untuk bekerja dengan perpustakaan OneWire.h. Berikut adalah senarai fungsinya dengan penerangan ringkas.
- Sensor suhu OneWire (pin pin_Number)
Fungsi ini adalah konstruktor kelas OneWire dan membuat objek Sensor suhu, iaitu. membuka saluran komunikasi dengan sensor atau sekumpulan sensor pada pin pinNumber. Dalam contoh kami (Gambar 3-5) ini adalah pin "D2" Arduino Nano. Oleh itu, kami menghubungkan bas data DQ DS18B20.
Contohnya:
Sensor suhu OneWire
(
D2
);
// Sensor atau sekumpulan sensor disambungkan ke pin D2
- uint8_t cari (addrArray)
Fungsi mencari peranti seterusnya pada bus 1-Wire dan, apabila dijumpai, memasukkan nilai alamat ke dalam array addrArray, kembali benar. Oleh kerana alamat unik setiap sensor adalah 64-bit, ukuran addrArray mestilah berukuran 8 bait. Sekiranya carian gagal, fungsi kembali palsu. Perlu diperhatikan bahawa apabila beberapa sensor suhu disambungkan ke satu bus, setiap panggilan ke fungsi pencarian akan ditujukan ke sensor berikutnya, kemudian yang berikutnya, dan lain-lain, sehingga semua peranti di dalam bas dihitung. Keistimewaan fungsi ini adalah mengingat alamat yang sudah diproses. Untuk menetapkan semula barisan, anda perlu memanggil fungsi reset_search (), yang akan dibincangkan di bawah.
Contohnya:
bait addrArray
[
8
];
// Array untuk menyimpan alamat 64-bit // Sekiranya peranti sama sekali tidak ada di dalam bas atau semua peranti dihitung // paparkan maklumat yang sesuai di monitor port
sekiranya(!
Pengesan suhu
.
cari
(
addrArray
))
Bersiri
.
println
(
"Tidak ada alamat lagi."
);
// Jika tidak, jika peranti seterusnya menjawab permintaan kehadiran, // paparkan alamat 64-bitnya di monitor port
yang lain{untuk(
i
=
0
;
i
<
8
;
i
++)
Bersiri
.
mencetak
(
addrArray
[
i
],
HEX
);
}
- batalreset_search ()
Seperti yang disebutkan di atas, fungsi ini mengatur semula antrean pengundian untuk peranti di bus 1-Wire ke awal. Ia mesti selalu digunakan bersama dengan fungsi carian apabila yang terakhir kembali palsu. Sebagai contoh, dalam kes kita dengan 5 sensor di dalam bas, dengan memanggil fungsi carian 5 kali, kita dapat 5 alamat. Untuk keenam kalinya, fungsi carian akan menjadi palsu kepada kami dan akan melakukan ini dengan setiap tinjauan seterusnya sehingga barisan dihapuskan. Anda harus memperhatikan ini untuk mengelakkan situasi yang tidak dapat difahami.
Contohnya:
bait addrArray
[
8
];
// Array untuk menyimpan alamat 64-bit // Sekiranya peranti sama sekali tidak ada di dalam bas atau semua peranti dihitung // tetapkan semula barisan pengundian untuk mengulangi kitaran carian
sekiranya(!
Pengesan suhu
.
cari
(
addrArray
))
Pengesan suhu
.
reset_search
();
- uint8_ttetapkan semula ()
Fungsi reset 1-Wire memulakan proses komunikasi. Ia dipanggil setiap kali kita mahu berkomunikasi dengan sensor suhu. Nilai pulangan boleh menjadi benar atau salah. Kami akan mendapat nilai sebenarnya jika sekurang-kurangnya satu sensor di dalam bas bergerak balas dengan nadi kehadiran. Jika tidak, kita menjadi palsu;
Contohnya:
sekiranya(!
Pengesan suhu
.
tetapkan semula
())
Bersiri
.
println
(
"Tiada sensor di dalam bas"
);yang lain
Bersiri
.
println
(
"Sensor dikesan"
);
- batalpilih (addrArray)
Fungsi ini membolehkan anda memilih peranti tertentu yang ingin kami kerjakan pada masa ini. Pilihannya dibuat dengan menyatakan secara jelas alamat 64-bit yang dimasukkan dalam array addrArray. Alamat dapat ditetapkan secara eksplisit dengan menuliskannya dalam array atau menggunakan alamat yang sebelumnya dibaca oleh fungsi carian. Perlu diingatkan bahawa fungsi reset mesti dipanggil sebelum memanggil fungsi pilih. Dengan tetapan semula seterusnya, sambungan dengan sensor yang dipilih terputus sehingga panggilan berikutnya untuk dipilih.
Contohnya:
bait addrArray
[
8
];
// Array untuk menyimpan alamat 64-bit // Sekiranya peranti sama sekali tidak ada di dalam bas atau semua peranti dihitung // keluarkan maklumat yang sesuai ke monitor port
sekiranya(!
Pengesan suhu
.
cari
(
addrArray
))
Bersiri
.
println
(
"Tidak ada alamat lagi."
);
// Jika tidak, jika peranti seterusnya menanggapi permintaan kehadiran, // pilih untuk kerja seterusnya
yang lain{
Pengesan suhu
.
tetapkan semula ()
;
// Jangan lupa mengeluarkan arahan reset suhuSensor
.
pilih (addrArray)
;
// Tentukan array dengan alamat baca
}
- batallangkau ()
Fungsi ini hanya relevan ketika bekerja dengan satu sensor di dalam bas dan hanya melangkau pemilihan peranti. Dengan kata lain, anda tidak dapat menggunakan fungsi carian, dan oleh itu akses cepat dengan satu-satunya sensor anda.
Contohnya:
Pengesan suhu.
tetapkan semula
();
// Tetapkan semula tayar Sensor suhu
.
ponteng
();
// Pilih satu-satunya sensor untuk bekerja lebih jauh dengannya
- bataltulis (uint8_tbait, uint8_t powerType = 0)
Fungsi menghantar bait data ke peranti terpilih di dalam bas. Argumen powerType menentukan jenis bekalan kuasa untuk sensor (0 - sensor dihidupkan terus dari sumber luaran; 1 - sambungan berkuasa parasit digunakan). Parameter kedua dapat dihilangkan jika daya luaran digunakan, kerana secara default adalah 0.
Contohnya:
Pengesan suhu
.
tetapkan semula
();
// Tetapkan semula tayar Sensor suhu
.
ponteng
();
// Pilih satu sensor untuk pekerjaan selanjutnya // Kirim perintah untuk menukar suhu, // menggunakan sambungan dengan daya parasit dari suhu bas data Sensor
.
tulis
(
0x44
,
1
);
- uint8_tbaca ()
Fungsi ini membaca satu bait data yang dihantar oleh peranti hamba (sensor) ke bus 1-Wire.
Contohnya:
// Baca 9 bait data dari bus 1-Wire dan masukkan hasilnya ke dalam array byte array
[
9
];untuk(
uint8_t i
=
0
;
i
<
9
;
i
++){
susunan
[
i
]=
Pengesan suhu
.
membaca
();}
- uint8_t statik crc8 (const uint8_t * addr, uint8_t len);
Fungsi ini dirancang untuk mengira checksum. Direka untuk memeriksa komunikasi yang betul dengan sensor suhu. Di sini addr adalah penunjuk kepada array data, dan len adalah bilangan bait.
Contohnya:
bait addrArray
[
8
];
// Array untuk menyimpan alamat 64-bit // Sekiranya peranti sama sekali tidak ada di dalam bas atau semua peranti dihitung // keluarkan maklumat yang sesuai ke monitor port
sekiranya(!
Pengesan suhu
.
cari
(
addrArray
))
Bersiri
.
println
(
"Tidak ada alamat lagi."
);
// Jika tidak, jika peranti seterusnya menanggapi permintaan kehadiran, // periksa checksum alamatnya
yang lain{
// Jika checksum tidak sesuai, tampilkan mesej ralat
sekiranya(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Bersiri
.
println
(
"CRC tidak sah!"
);}}
Kami memeriksa setiap fungsi perpustakaan OneWire.h secara berasingan dan untuk memperbaiki bahan, di bawah ini saya akan memberikan lakaran untuk membaca suhu dari sekumpulan sensor suhu DS18B20, yang akan disambungkan ke pin D2 menggunakan litar kuasa parasit. Lakaran akan mengandungi komen terperinci mengenai semua perkara yang diperlukan.
#include // Kami menghubungkan perpustakaan untuk bekerja dengan sensor terma DS18B20OneWire ds
(
2
);
// Sensor atau sekumpulan sensor disambungkan ke pin D2 Arduino // PRESET FUNCTION kekosongan persediaan
(
batal
){
Bersiri
.
bermula
(
9600
);
// Permulaan kerja dengan Serial-port} // Gelung kosong CYCLE UTAMA
(
batal
){
bait i
;
// Pemboleh ubah tambahan untuk gelung hadir bait
=
0
;
// Pemboleh ubah untuk menentukan kesediaan sensor untuk jenis byte komunikasi
;
// Pembolehubah untuk menentukan jenis sensor terma pada bas data bait
[
12
];
// Array untuk menyimpan maklumat yang diterima dari addr sensor byte
[
8
];
// Array untuk menyimpan alamat 64-bit sensor float celsius
,
fahrenheit
;
// Pemboleh ubah untuk menghitung suhu // Sekiranya peranti di bas tidak dijumpai atau semua peranti di dalam bas dihitung // paparkan maklumat yang sesuai di monitor port, tetapkan semula barisan // dan lakukan carian lagi, menunggu 250ms
sekiranya(!
ds
.
cari
(
tambah
)){
Bersiri
.
println
(
"Tidak ada alamat lagi."
);
Bersiri
.
println
();
ds
.
reset_search
();
kelewatan
(
250
);kembali;}
// Sekiranya peranti seterusnya di dalam bas dijumpai, paparkan alamat uniknya // di monitor port dalam bentuk heksadesimal Serial
.
mencetak
(
"ROM ="
);untuk(
i
=
0
;
i
<
8
;
i
++){
Bersiri
.
tulis
(
‘ ‘
);
Bersiri
.
mencetak
(
tambah
[
i
],
HEX
);}
// Periksa checksum alamat peranti yang dijumpai // dan jika tidak sesuai, tampilkan maklumat yang sesuai
sekiranya(
OneWire
::
crc8
(
tambah
,
7
)!=
tambah
[
7
]){
Bersiri
.
println
(
"CRC tidak sah!"
);kembali;}
Bersiri
.
println
();
// Periksa sifar bait alamat, yang mengandungi maklumat // mengenai jenis sensor suhu tertentu. Bergantung pada nilai zero byte, kami memaparkan siri cip di port monitor. Sekiranya bait sifar mengandungi nilai // yang tidak diketahui, tampilkan mesej mengenai keluarga sensor suhu yang tidak diketahui.
beralih(
tambah
[
0
]){kes
0x10
:
Bersiri
.
println
(
"Cip = DS18S20"
);
taip_s
=
1
;rehat;kes
0x28
:
Bersiri
.
println
(
"Cip = DS18B20"
);
taip_s
=
0
;rehat;kes
0x22
:
Bersiri
.
println
(
"Cip = DS1822"
);
taip_s
=
0
;rehat;lalai:
Bersiri
.
println
(
"Peranti bukan peranti keluarga DS18x20."
);kembali;}
ds
.
tetapkan semula
();
// Tetapkan semula bas untuk memulakan pertukaran data ds
.
pilih
(
tambah
);
// Pilih sensor dengan alamat saat ini untuk bekerja dengannya // Kirim perintah untuk mengubah suhu (sesuai dengan dokumentasi 0x44) // Jangan lupa tentang parameter kedua "1", kerana kami mengirimkan data melalui / / sesuai dengan bekalan kuasa parasit. ds
.
tulis
(
0x44
,
1
);
// Sensor memulakan penukaran, yang menurut dokumentasi memerlukan maksimum. 750ms // Untuk berada di sisi yang selamat, kami akan mengatur jeda kelewatan ё saat
(
1000
);
// Tetapkan semula bas sekali lagi untuk membaca maklumat dari sensor // simpan tindak balas fungsi tetapan semula () ke pemboleh ubah sekarang untuk kerja lebih lanjut dengannya sekarang
=
ds
.
tetapkan semula
();
ds
.
pilih
(
tambah
);
// Pilih semula sensor dengan alamatnya, kerana ada denyut reset // Perintah 0xBE, menurut dokumentasi teknikal, memungkinkan membaca memori dalaman // sensor suhu (Scratchpad), yang terdiri dari 9 bait. ds
.
tulis
(
0xBE
);
// Baca dan paparkan 9 bait dari memori dalaman sensor suhu Serial ke monitor port
.
mencetak
(
"Data ="
);
Bersiri
.
mencetak
(
hadir
,
HEX
);
Bersiri
.
mencetak
(
» «
);untuk(
i
=
0
;
i
<
9
;
i
++){
data
[
i
]=
ds
.
membaca
();
Bersiri
.
mencetak
(
data
[
i
],
HEX
);
Bersiri
.
mencetak
(
» «
);}
// Periksa dan keluarkan ke port memantau checksum dari data Serial yang diterima
.
mencetak
(
"CRC ="
);
Bersiri
.
mencetak
(
OneWire
::
crc8
(
data
,
8
),
HEX
);
Bersiri
.
println
();
// Mulakan proses menukar data yang diterima menjadi suhu sebenar, // yang disimpan dalam memori baca 0 dan 1 bait. Untuk melakukan ini, kami menggabungkan kedua-dua // bait ini menjadi satu bilangan 16-bit int16_t mentah
=(
data
[
1
]<<
8
)|
data
[
0
];
// Sebelum penukaran lebih lanjut, anda perlu menentukan keluarga yang menjadi milik sensor ini (sebelumnya kami menyimpan hasilnya dalam pemboleh ubah type_s). // Bergantung pada keluarga, suhu akan dikira secara berbeza, // kerana DS18B20 dan DS1822 mengembalikan nilai 12-bit, sementara DS18S20 mengembalikan nilai 9-bit
sekiranya(
taip_s
){
// Sekiranya sensor tergolong dalam keluarga mentah DS18S20
=
mentah
<<
3
;
// resolusi lalai adalah 9 bit
sekiranya(
data
[
7
]==
0x10
){
mentah
=(
mentah
&
0xFFF0
)+
12
—
data
[
6
];}}yang lain{
// Tentukan sejauh mana ketepatan pengukuran sensor ini dikonfigurasi byte cfg
=(
data
[
4
]&
0x60
);
// Pada resolusi yang lebih rendah, anda boleh mengehadkan bit paling kecil, // kerana tidak ditentukan awal
sekiranya(
cfg
==
0x00
)
mentah
=
mentah
&~
7
;
// 9 bit (penukaran mengambil masa 93.75 ms)
yang lainsekiranya(
cfg
==
0x20
)
mentah
=
mentah
&~
3
;
// 10 bit (penukaran memerlukan 187.5 ms)
yang lainsekiranya(
cfg
==
0x40
)
mentah
=
mentah
&~
1
;
// 11 bit (penukaran memerlukan 375 ms) // Ketepatan lalai adalah 12 bit (penukaran mengambil 750 ms)
}
// Hitung dan keluarkan nilai suhu ke monitor port celsius
=(
terapung
)
mentah
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Bersiri
.
mencetak
(
"Suhu ="
);
Bersiri
.
mencetak
(
celsius
);
Bersiri
.
mencetak
(
"Celsius,"
);
Bersiri
.
mencetak
(
fahrenheit
);
Bersiri
.
println
(
"Fahrenheit"
);}
Sekiranya semuanya dilakukan dengan betul, maka di tetingkap monitor port kita akan melihat seperti berikut (Gambar 6):
Gambar 6 - hasil kerja dengan perpustakaan OneWire.h
Perpustakaan DallasTemperature.h
Perpustakaan ini berdasarkan yang sebelumnya dan sedikit memudahkan proses pengaturcaraan kerana fungsi yang lebih difahami. Selepas pemasangan, anda akan mendapat akses kepada 14 contoh kod yang didokumentasikan dengan baik untuk semua kesempatan. Dalam kerangka artikel ini, contoh operasi dengan satu sensor akan dipertimbangkan.
Hasil program ditunjukkan dalam Rajah 7
Rajah №7 - hasil membaca suhu menggunakan perpustakaan DallasTemperature.h
// Kami menyambungkan perpustakaan yang diperlukan # include #include // Kami menghubungkan bus data ke pin # 2 dari Arduino # define ONE_WIRE_BUS 2 // Buat contoh kelas untuk bas kami dan pautan ke OneWire oneWire
(
ONE_WIRE_BUS
);
Sensor suhu Dallas
(&
satuWire
);
// PRESET FUNCTION batal persediaan
(
batal
){
Bersiri
.
bermula
(
9600
);
// Memulakan sensor port bersiri
.
bermula
();
// Memulakan bas
}
// TAMADUN UTAMA
(
batal
){
Bersiri
.
mencetak
(
"Suhu Membaca ..."
);
// Hantar arahan untuk membaca sensor
.
permintaan Suhu
();
Bersiri
.
println
(
"Baca"
);
Bersiri
.
mencetak
(
"Suhu Sensor 1:"
);
// Paparkan nilai suhu Bersiri
.
mencetak
(
penderia
.
getTempCByIndex
(
0
));}
Sensor suhu KY-001 dengan antara muka 1-Wire
Sensor ini digunakan untuk pengukuran suhu yang tepat. Komunikasi dengan sensor dilakukan melalui antara muka 1-Wire [1-2], yang membolehkan anda menyambungkan beberapa peranti serupa ke papan Arduino menggunakan satu pin mikrokontroler [3-4]. Modul ini berdasarkan litar mikro ds18b20 [5].
Saiz modul 24 x 15 x 10 mm, berat 1.3 g. Penyambung tiga pin digunakan untuk penyambungan. Sentuhan pusat - bekalan kuasa + 5V, kenalan "-" - biasa, hubungi "S" - maklumat.
Papan mempunyai LED merah yang menyala ketika maklumat ditukar.
Penggunaan semasa 0.6 mA semasa pertukaran maklumat dan 20 μA dalam mod siap sedia.
Menyambungkan jenis sensor ini ke Arduino dijelaskan dengan baik dalam banyak sumber [6-8]. Dalam kes ini, kelebihan utama Arduino sekali lagi ditunjukkan - keserbagunaan dan kehadiran sejumlah besar maklumat rujukan. Untuk bekerja dengan sensor, anda memerlukan Perpustakaan OneWire [9]. Setelah memuatkan program dari [8] (terdapat ralat pada versi pertama program - tidak ada #cakup sambungan perpustakaan pada tajuk kode), maklumat berikut dapat diperhatikan di monitor port bersiri.
Penulis juga menguji kodnya dari [7], semuanya berfungsi dengan segera, di monitor port bersiri anda dapat membaca maklumat mengenai jenis sensor yang disambungkan dan data suhu sebenar.
Secara amnya, sensor yang sangat berguna yang memungkinkan untuk berkenalan dengan antara muka 1-Wire dalam praktiknya. Sensor memberikan data suhu yang betul dengan segera, pengguna tidak perlu menentukur.