Isi kandungan:
- Langkah 1: Pembangunan Perisian
- Langkah 2: Bekerja Dengan Dua Sensor Suhu - Perincian
- Langkah 3: Hasil Awal
Video: Termometer Pembalakan DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
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
Carta ini adalah gabungan dua bacaan hari pertama pertama.
Disyorkan:
Smart Watchz Dengan Pengesanan Gejala Corona dan Pembalakan Data: 10 Langkah
Smart Watchz With Corona Symptoms Detection and Data Logging: Ini adalah Smartwatch dengan pengesanan gejala Corona menggunakan LM35 dan Accelerometer dengan log data di pelayan. Rtc digunakan untuk menunjukkan waktu dan menyegerakkan dengan telefon dan menggunakannya untuk log data. Esp32 digunakan sebagai otak dengan pengawal korteks dengan Biru
Anemometer Pembalakan Data Sendiri: 11 Langkah (dengan Gambar)
Anemometer Pembalakan Data Sendiri: Saya suka mengumpul dan menganalisis data. Saya juga gemar membina alat elektronik. Setahun yang lalu ketika saya menemui produk Arduino, saya segera berfikir, " Saya ingin mengumpulkan data persekitaran. " Hari yang berangin di Portland, OR, jadi saya
Gunakan Telefon Pintar Sebagai Termometer Tanpa Kenalan / Termometer Mudah Alih: 8 Langkah (dengan Gambar)
Gunakan Telefon Pintar Sebagai Termometer Tidak Sentuh / Termometer Mudah Alih: Mengukur suhu badan dengan tidak bersentuhan / tanpa sentuh seperti senapang termo. Saya membuat projek ini kerana Thermo Gun sekarang sangat mahal, jadi saya mesti mendapat alternatif untuk membuat DIY. Dan tujuannya dibuat dengan versi bajet yang rendah. Menyediakan MLX90614Ardu
Pembalakan Data Jauh dengan Ketepatan Tinggi Menggunakan Multimeter / Arduino / pfodApp: 10 Langkah (dengan Gambar)
Pembalakan Data Jauh Akurasi Tinggi Menggunakan Multimeter / Arduino / pfod Aplikasi: Dikemas kini 26 April 2017 Litar dan papan yang disemak untuk digunakan dengan meter USB 4000ZC. Tidak memerlukan pengekodan Android. Arahan ini menunjukkan kepada anda bagaimana mengakses pelbagai ukuran ketepatan tinggi dari Arduino anda dan juga menghantarnya dari jauh untuk pembalakan dan
Stesen Cuaca Dengan Pembalakan Data: 7 Langkah (dengan Gambar)
Stesen Cuaca Dengan Pembalakan Data: Dalam arahan ini saya akan menunjukkan kepada anda bagaimana membuat sistem stesen cuaca sendiri. Apa yang anda perlukan adalah pengetahuan asas dalam elektronik, pengaturcaraan dan sedikit masa. Projek ini masih dalam proses. Ini hanya bahagian pertama. Peningkatan akan