Isi kandungan:

Termometer Pembalakan DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)
Termometer Pembalakan DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)

Video: Termometer Pembalakan DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)

Video: Termometer Pembalakan DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)
Video: Langkah2 yang dilakukan sebelum mengevakuasi korban yang tersengat listrik tegangan 220-400 Volt 2024, Julai
Anonim
Termometer Pembalakan DIY Dengan 2 Sensor
Termometer Pembalakan DIY Dengan 2 Sensor
Termometer Pembalakan DIY Dengan 2 Sensor
Termometer Pembalakan DIY Dengan 2 Sensor

Projek ini adalah penambahbaikan dari projek saya sebelumnya "DIY Logging Thermometer". Ia mencatat ukuran suhu pada kad SD mikro.

Perubahan perkakasan

Saya menambahkan sensor suhu DS18B20 ke modul jam masa nyata, di mana terdapat peruntukan pada papan litar bercetak untuk peranti ini; dan menambahkan wayar yang sesuai dari pin "DS" RTC ke D2 Arduino.

Perisian berubah

Kemudian saya menambah dan mengubahsuai perisian. Perubahan utama adalah:

Paparan LCD menunjukkan dua suhu "In" dan "Out".

Fail log yang direkodkan pada kad SD mempunyai dua medan suhu, "suhu Masuk" dan "suhu Keluar".

Kerana rekod yang lebih lama pada kad SD, penyangga yang berfungsi untuk EEPROM lebih besar dan akibatnya saya mula menghadapi masalah konflik memori. Saya membuat sejumlah perubahan yang bertujuan untuk mengurangkan penggunaan memori dinamik, termasuk menggunakan susunan watak untuk semua rentetan dan bukannya objek String.

Bahagian perisian yang mendapat suhu mempunyai pengubahsuaian besar, yang banyak berkaitan dengan mengenal pasti probe mana yang "masuk" dan mana yang "keluar". Pengenalan ini kebanyakannya automatik. Sekiranya atas sebab tertentu, probe dialihkan, ia boleh diperbaiki dengan mencabut probe "keluar" dan kemudian memasangnya kembali. Saya sendiri tidak mengalami pembalikan ini. Pengaturcara atau pengguna tidak perlu memasukkan alamat sensor, perisian mencari alamat sensor suhu dengan sendirinya.

Menurut pengujian yang telah saya lakukan, pengenalpastian probe suhu, dan tindak balas terhadap pembuangan dan penggantian kad SD, masih berjalan lancar.

Langkah 1: Pembangunan Perisian

Langkah ini memberi anda perisian lengkap untuk projek yang telah siap. Saya menyusunnya menggunakan Arduino IDE 1.6.12. Ia menggunakan 21, 400 byte memori program (69%) dan 1, 278 bait memori dinamik (62%).

Saya telah meletakkan komen dalam kod dengan harapan dapat menjelaskan apa yang sedang berlaku.

Langkah 2: Bekerja Dengan Dua Sensor Suhu - Perincian

Perisian ini menggunakan perpustakaan "OneWire". Ia tidak menggunakan perpustakaan "DallasTemperature" atau yang serupa. Sebaliknya arahan dan data dari sensor suhu dilakukan oleh lakaran dan dapat dilihat dan difahami dengan mudah. Saya menjumpai senarai berguna arahan perpustakaan OneWire di

www.pjrc.com/teensy/td_libs_OneWire.html

Apabila terdapat dua (atau lebih) sensor suhu, perlu untuk mengenal pasti yang mana satu.

Saya memanggil dua sensor saya "dalam" dan "keluar", yang khas dari unit komersial yang mempunyai sensor di modul paparan yang biasanya "di dalam", dan sensor lain pada kabel sehingga dapat dipasang di sisi lain dinding luaran dan dengan itu menjadi "luar".

Pendekatan yang biasa untuk mengenal pasti probe yang berbeza adalah mencari alamat peranti dan memasukkannya ke dalam perisian bersama dengan label pengenal. Semua projek lain yang saya lihat menggunakan pendekatan ini, sama ada mereka menggunakan perpustakaan DallasTemperature atau tidak.

Tujuan saya adalah agar perisian secara automatik mengenal pasti sensor dan mengalokasikannya dengan betul ke "in" dan "out". Ini cukup mudah dilakukan dengan meletakkannya pada pin Arduino yang berasingan. Dalam projek ini, A0 hingga A3 dan A6 dan A7 semuanya tidak digunakan, jadi salah satu daripadanya mungkin telah digunakan dalam kes ini. Walau bagaimanapun, saya berjaya membuat pengenalan automatik dengan sensor di kedua-dua bas OneWire yang sama.

Ia berfungsi seperti ini.

Perpustakaan OneWire mempunyai perintah "OneWireObject.search (address)" di mana "address" adalah susunan 8 bait dan "OneWireObject" adalah nama contoh objek OneWire yang telah dibuat sebelumnya. Ia boleh mempunyai nama yang anda suka. Tambang dipanggil "ds". Apabila anda mengeluarkan perintah "carian" ini, perpustakaan OneWire melakukan beberapa isyarat pada bus satu wayar. Sekiranya ia menemui sensor yang bertindak balas, ia mengembalikan nilai boolean "BENAR" dan mengisi array "alamat" dengan pengenal unik 8 byte sensor. Pengecam ini merangkumi kod keluarga (pada awal) dan jumlah cek (di akhir). Di antara 6 bait yang mengenal pasti sensor dalam keluarganya secara unik.

Satu hasil (alamat dan pengembalian BENAR) diperoleh setiap kali arahan ini diberikan, mengitar semua peranti pada bas OneWire. Setelah setiap peranti bertindak balas, "Carian" berikutnya dikeluarkan, pengembaliannya adalah "PALSU", yang menunjukkan bahawa setiap peranti di dalam bas telah bertindak balas. Sekiranya "carian" dikeluarkan semula, peranti pertama bertindak balas sekali lagi - dan seterusnya tanpa had. Peranti sentiasa bertindak balas dalam urutan yang sama. Urutan tindak balas berdasarkan pengecam peranti pada bas OneWire. Nampaknya carian binari bermula dari bit pengecam peranti yang paling tidak signifikan. Protokol yang digunakan untuk mencari pengecam ini cukup kompleks, dan dijelaskan di halaman 51 - 54 dokumen "Book of iButton Standards" yang merupakan dokumen pdf di https://pdfserv.maximintegrated.com/en/an/AN937.pd …

Saya menguji proses carian ini dengan 1 hingga 11 sensor pada satu bas, dan mendapati pesanan respons untuk satu set peranti selalu sama, tetapi ketika saya menambahkan peranti baru di hujung bas, tidak ada cara Saya dapat meramalkan di mana dalam urutan carian itu akan muncul. Sebagai contoh, sensor ke-11 yang saya tambah masuk pada kedudukan No.5; dan sensor pertama yang saya pasangkan di bas adalah yang terakhir dalam urutan carian.

Dalam projek ini dengan dua sensor, salah satunya dipasang pada modul RTC; yang lain dipasang menggunakan header lelaki di papan dan header wanita pada kabel. Ia boleh dilepaskan dengan mudah.

Apabila sensor pada kabel (sensor "keluar" terlepas, perintah "cari" menghasilkan "BETUL" dan "SALAH" bergantian kembali.

Apabila sensor pada kabel terpasang, perintah "search" menghasilkan kitaran 3 peringkat, dengan dua "TRUE" dan satu "FALSE" kembali.

Prosedur saya adalah untuk mengeluarkan perintah "search" 1, 2 atau 3, sehingga hasil yang SALAH dikembalikan. Kemudian saya mengeluarkan 2 lagi arahan "search". Sekiranya yang kedua gagal (iaitu SALAH) saya tahu hanya ada satu sensor di dalam bas dan itu adalah sensor "dalam". Identiti peranti direkodkan dan diperuntukkan kepada sensor "in".

Di kemudian hari, jika kedua-dua pengembalian pertama dan kedua adalah BENAR, saya tahu terdapat dua sensor di dalam bas. Saya periksa yang mana satu daripadanya mempunyai identiti yang sama dengan sensor "dalam", dan memperuntukkan yang lain sebagai sensor "keluar".

Titik kecil yang lain adalah pengumpulan hasil dari dua sensor dilakukan dengan mengirimkan "permulaan penukaran" dengan apa yang dikenali sebagai perintah "langkau ROM". Kami mempunyai pilihan untuk menghantar perintah ke satu peranti (menggunakan pengecam uniknya) atau ke semua peranti di dalam bus (langkau ROM). Kodnya seperti ini:

ds.reset (); //

// hantar arahan "langkau ROM" (jadi arahan seterusnya berfungsi di kedua-dua sensor) ds.write (0xCC); // Langkau arahan ROM ds.write (0x44, 0); // mulakan penukaran dalam kedua-dua probe suhu_state = tunggu_konversi; // pergi ke keadaan kelewatan

Apabila masa kelewatan yang diperlukan telah berlalu, suhu diterima dari setiap sensor secara individu. Berikut adalah kod untuk sensor kedua (iaitu sensor OUT).

jika (bendera2) {

hadir = ds.reset (); ds.select (DS18B20_addr_out); ds.write (0xBE); // Baca Scratchpad data probe "out" [0] = ds.read (); data [1] = ds.read (); temperature_out = (data [1] << 8) + data [0]; suhu_out = (6 * suhu_keluar) + suhu_keluar / 4; // darabkan dengan 6.25} yang lain {// bukan flag2 - iaitu Out sensor tidak disambungkan suhu_out = 30000; // tetapkan pada 300.00 C jika sensor suhu tidak berfungsi} // akhir jika (bendera2)

Saya menjayakan sebahagian besar perisian ini dalam lakaran yang berdiri sendiri yang hanya mempunyai sensor suhu di dalamnya, tanpa komplikasi sokongan kad LCD, RTC dan SD. Sketsa pengembangan ini terdapat dalam fail di bawah.

Langkah 3: Hasil Awal

Keputusan Awal
Keputusan Awal

Carta ini adalah gabungan dua bacaan hari pertama pertama.

Disyorkan: