
Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-23 14:49


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

Bagan ini adalah kombinasi dari dua bacaan paruh hari pertama.
Direkomendasikan:
Gunakan Smartphone Sebagai Termometer Non Kontak / Termometer Portabel: 8 Langkah (dengan Gambar)

Gunakan Smartphone Sebagai Termometer Non Kontak / Portable Thermometer : Mengukur suhu tubuh dengan non-kontak / contactless seperti thermo gun. Saya membuat proyek ini karena Thermo Gun sekarang sangat mahal, jadi saya harus mendapatkan alternatif untuk membuat DIY. Dan tujuannya dibuat dengan versi anggaran rendah.SuppliesMLX90614Ardu
Sensor Logging Menggunakan InfluxDB, Grafana & Hassio: 5 Langkah

Sensor Logging Menggunakan InfluxDB, Grafana & Hassio: Dalam posting ini, kita belajar bagaimana menggunakan InfluxDB untuk penyimpanan data sensor jangka panjang dan kita menggunakan Grafana untuk analisis data. Ini adalah bagian dari seri otomatisasi rumah tempat kami mempelajari cara mengatur dan menggunakan Asisten Rumah sehingga semua ini akan dilakukan menggunakan Hassio
Logging Data Jarak Jauh Akurasi Tinggi Menggunakan Multimeter/Arduino/pfodApp: 10 Langkah (dengan Gambar)

Pencatatan Data Jarak Jauh Akurasi Tinggi Menggunakan Multimeter/Arduino/pfodAplikasi: Diperbarui 26 April 2017Revisi sirkuit dan papan untuk digunakan dengan meter USB 4000ZC.Tidak diperlukan pengkodean Android Instruksi ini menunjukkan kepada Anda bagaimana mengakses berbagai pengukuran akurasi tinggi dari Arduino Anda dan juga mengirimkannya dari jarak jauh untuk login dan
Stasiun Cuaca Dengan Data Logging: 7 Langkah (dengan Gambar)

Stasiun Cuaca Dengan Data Logging: Dalam instruksi ini saya akan menunjukkan kepada Anda bagaimana membuat sistem stasiun cuaca sendiri. Yang Anda butuhkan hanyalah pengetahuan dasar dalam elektronik, pemrograman, dan sedikit waktu. Proyek ini masih dalam tahap pembuatan. Ini hanya bagian pertama. Upgrade akan
Realtime MPU-6050/A0 Data Logging Dengan Arduino dan Android: 7 Langkah (dengan Gambar)

Pencatatan Data MPU-6050/A0 Realtime Dengan Arduino dan Android: Saya tertarik menggunakan Arduino untuk pembelajaran mesin. Sebagai langkah pertama, saya ingin membangun tampilan data dan logger realtime (atau cukup dekat dengannya) dengan perangkat Android. Saya ingin menangkap data akselerometer dari MPU-6050 jadi saya