Daftar Isi:

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

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

Video: Termometer Logging DIY Dengan 2 Sensor: 3 Langkah (dengan Gambar)
Video: PyroMini Infrared Temperature Sensor: 3. Data Logging to MicroSD Card 2024, Juli
Anonim
Termometer Logging DIY Dengan 2 Sensor
Termometer Logging DIY Dengan 2 Sensor
Termometer Logging DIY Dengan 2 Sensor
Termometer Logging DIY Dengan 2 Sensor

Proyek ini merupakan peningkatan dari proyek saya sebelumnya "DIY Logging Thermometer". Ini mencatat pengukuran suhu ke kartu micro SD.

Perubahan perangkat keras

Saya menambahkan sensor suhu DS18B20 ke modul jam waktu nyata, di mana ada ketentuan pada papan sirkuit tercetak untuk perangkat ini; dan menambahkan kabel yang sesuai dari pin "DS" RTC ke D2 Arduino.

Perubahan perangkat lunak

Kemudian saya menambahkan dan memodifikasi perangkat lunak. Perubahan utamanya adalah:

Layar LCD menunjukkan dua suhu "Masuk" dan "Keluar".

File log yang direkam pada kartu SD memiliki dua bidang suhu, "suhu Masuk" dan "suhu Keluar".

Karena rekaman yang lebih lama di kartu SD, buffer yang berfungsi untuk EEPROM lebih besar dan akibatnya saya mulai mengalami masalah konflik memori. Saya membuat sejumlah perubahan yang bertujuan untuk mengurangi penggunaan memori dinamis, termasuk menggunakan array karakter untuk semua string, bukan objek String.

Bagian dari perangkat lunak yang mendapatkan suhu memiliki modifikasi besar, banyak yang berkaitan dengan mengidentifikasi probe mana yang "masuk" dan mana yang "keluar". Identifikasi ini sebagian besar otomatis. Jika karena alasan tertentu probe diputar, itu dapat diperbaiki dengan mencabut probe "keluar" dan kemudian memasangnya kembali. Saya sendiri tidak mengalami pembalikan ini. Pemrogram atau pengguna tidak perlu mengetikkan alamat sensor, perangkat lunak menemukan alamat sensor suhu dengan sendirinya.

Menurut pengujian yang telah saya lakukan, identifikasi probe suhu, dan respons terhadap pelepasan dan penggantian kartu SD, masih berfungsi dengan mulus.

Langkah 1: Pengembangan Perangkat Lunak

Langkah ini memberi Anda perangkat lunak lengkap untuk proyek yang telah selesai. Saya mengkompilasinya menggunakan Arduino IDE 1.6.12. Ini menggunakan 21.400 byte memori program (69%) dan 1.278 byte memori dinamis (62%).

Saya telah memberikan komentar dalam kode dengan harapan akan memperjelas apa yang sedang terjadi.

Langkah 2: Bekerja Dengan Dua Sensor Suhu - Detail

Perangkat lunak ini menggunakan perpustakaan "OneWire". Itu tidak menggunakan "DallasTemperature" atau perpustakaan serupa. Sebaliknya perintah dan data dari sensor suhu dilakukan dengan sketsa dan dapat dilihat dan dipahami dengan cukup mudah. Saya menemukan daftar perintah perpustakaan OneWire yang berguna di

www.pjrc.com/teensy/td_libs_OneWire.html

Ketika ada dua (atau lebih) sensor suhu, menjadi penting untuk mengidentifikasi yang mana.

Saya menyebut dua sensor saya "masuk" dan "keluar", yang merupakan tipikal unit komersial yang memiliki sensor di modul tampilan yang biasanya "di dalam", dan sensor lainnya pada kabel sehingga dapat diletakkan di sisi lain dari dinding eksternal dan dengan demikian menjadi "luar".

Pendekatan biasa untuk mengidentifikasi probe yang berbeda adalah dengan menemukan alamat perangkat dan memasukkannya ke dalam perangkat lunak bersama dengan label pengenal. Semua proyek lain yang saya lihat menggunakan pendekatan ini, apakah mereka menggunakan perpustakaan DallasTemperature atau tidak.

Niat saya adalah bahwa perangkat lunak harus secara otomatis mengidentifikasi sensor dan mengalokasikannya dengan benar ke "masuk" dan "keluar". Ini cukup mudah dilakukan dengan meletakkannya di pin Arduino yang terpisah. Dalam proyek ini, A0 hingga A3 dan A6 dan A7 semuanya tidak digunakan, jadi salah satunya dapat digunakan dalam kasus ini. Namun saya berhasil membuat identifikasi otomatis bekerja dengan sensor keduanya pada bus OneWire yang sama.

Ini bekerja seperti ini.

Pustaka OneWire memiliki perintah "OneWireObject.search(address)" di mana "alamat" adalah larik 8 byte dan "OneWireObject" adalah nama instance objek OneWire yang telah dibuat sebelumnya. Itu dapat memiliki nama apa pun yang Anda suka. Milik saya disebut "ds". Saat Anda mengeluarkan perintah "pencarian" ini, pustaka OneWire melakukan beberapa pensinyalan pada bus satu kabel. Jika menemukan sensor yang merespons, ia mengembalikan nilai boolean "TRUE" dan mengisi larik "alamat" dengan pengidentifikasi unik 8 byte dari sensor. Pengidentifikasi ini mencakup kode keluarga (di awal) dan jumlah cek (di akhir). Di antaranya adalah 6 byte yang secara unik mengidentifikasi sensor di dalam keluarganya.

Satu hasil (alamat dan mengembalikan TRUE) diperoleh setiap kali perintah ini diberikan, melewati semua perangkat di bus OneWire. Setelah setiap perangkat merespons, saat berikutnya "pencarian" dikeluarkan, pengembaliannya adalah "FALSE", yang menunjukkan setiap perangkat di bus telah merespons. Jika "pencarian" dikeluarkan lagi, perangkat pertama merespons lagi - dan seterusnya tanpa batas. Perangkat selalu merespons dalam urutan yang sama. Urutan tanggapan didasarkan pada pengidentifikasi perangkat di bus OneWire. Tampaknya menjadi pencarian biner mulai dari bit paling signifikan dari pengidentifikasi perangkat. Protokol yang digunakan untuk menemukan pengenal 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 pencarian ini dengan dari 1 hingga 11 sensor pada satu bus, dan menemukan urutan respons untuk serangkaian perangkat yang diberikan selalu sama, tetapi ketika saya menambahkan perangkat baru ke ujung bus, tidak mungkin Saya bisa memprediksi di mana dalam urutan pencarian itu akan muncul. Misalnya, sensor ke-11 yang saya tambahkan berada di posisi No.5; dan sensor pertama yang saya pasang di bus adalah yang terakhir dalam urutan pencarian.

Dalam proyek ini dengan dua sensor, salah satunya disolder pada modul RTC; yang lain dicolokkan menggunakan header laki-laki di papan dan header perempuan di kabel. Itu dapat dengan mudah dilepas.

Ketika sensor pada kabel (sensor "keluar") terlepas, perintah "pencarian" menghasilkan pengembalian "TRUE" dan "FALSE" secara bergantian.

Ketika sensor pada kabel terpasang, perintah "search" menghasilkan siklus 3 tahap, dengan dua "TRUE" dan satu "FALSE" kembali.

Prosedur saya adalah mengeluarkan 1, 2 atau 3 perintah "pencarian", sampai hasil FALSE dikembalikan. Lalu saya mengeluarkan 2 perintah "pencarian" lagi. Jika yang kedua gagal (yaitu SALAH) saya tahu hanya ada satu sensor di bus dan itu adalah sensor "masuk". Identitas perangkat dicatat dan dialokasikan ke sensor "dalam".

Di lain waktu, jika pengembalian pertama dan kedua adalah BENAR, saya tahu ada dua sensor di bus. Saya memeriksa mana yang memiliki identitas yang sama dengan sensor "masuk", dan mengalokasikan yang lain sebagai sensor "keluar".

Poin kecil lainnya adalah bahwa pengumpulan hasil dari dua sensor dilakukan dengan mengirimkan "mulai konversi" dengan apa yang dikenal sebagai perintah "lewati ROM". Kami memiliki opsi untuk mengirim perintah ke satu perangkat (menggunakan pengenal uniknya) atau ke semua perangkat di bus (lewati ROM). Kodenya terlihat seperti ini:

ds.reset(); //

// kirim perintah "skip ROM" (jadi perintah berikutnya berfungsi di kedua sensor) ds.write(0xCC); // Lewati perintah ROM ds.write(0x44, 0); // mulai konversi di kedua probe temperature_state = wait_convert; // pergi ke status tunda

Ketika waktu tunda yang diperlukan telah berlalu, suhu diterima dari masing-masing sensor satu per satu. Berikut adalah kode untuk sensor kedua (yaitu sensor OUT).

jika (bendera2) {

sekarang = ds.reset(); ds.select(DS18B20_addr_out); ds.write(0xBE); // Membaca Scratchpad dari data probe "keluar"[0] = ds.read(); data[1] = ds.read(); temperature_out = (data[1] << 8) + data[0]; temperature_out = (6 * temperature_out) + temperature_out / 4; // kalikan dengan 6,25 } else { // bukan flag2 - yaitu Sensor keluar tidak terhubung temperature_out = 30000; // perbaiki pada 300,00 C jika sensor suhu tidak berfungsi } // akhiri if (flag2)

Saya mengerjakan sebagian besar perangkat lunak ini dalam sketsa yang berdiri sendiri yang hanya memiliki sensor suhu di dalamnya, tanpa komplikasi dukungan LCD, RTC, dan kartu SD. Sketsa pengembangan ini ada di file di bawah ini.

Langkah 3: Hasil Awal

Hasil Awal
Hasil Awal

Bagan ini adalah kombinasi dari dua bacaan paruh hari pertama.

Direkomendasikan: