Breakout Suhu & Kelembaban DHT Kompak untuk Raspberry Pi – ATtiny85 & DHT22/DHT11
Komponen hardware: Atmel ATTiny85 × 1 Sensor Suhu DHT22 × 1 Sensor Suhu & Kelembaban DHT11 × 1 Programmer Tiny AVR SparkFun × 1 Resistor 4,7K Ω Adafruit × 3 Resistor 10K Ω Adafruit × 1 Resistor 100 Ω Adafruit × 1 LED Biru Diffused 3mm Adafruit × 1 Saklar Tombol Taktile Adafruit × 1 Strip header jantan 0,1″ 36-pin Break-away Adafruit 1 potong @ panjang 6, 1 potong @ panjang 2 (total 8 pin) × 1 Kabel Jumper generik (0,1″) × 1 Arduino UNO & Genuino UNO Opsional – digunakan untuk debugging dan pengujian. × 1 Aplikasi perangkat lunak dan layanan online: Microsoft Visual Studio 2015 Microsoft Windows 10 IoT Core Arduino IDE
CERITA
Pendahuluan
DHT11 dan DHT22 adalah sensor suhu dan kelembaban yang populer karena akurasinya dengan biaya sangat rendah. Satu masalahnya, mereka bekerja melalui protokol one-wire milik yang memerlukan timing yang presisi. Sensor ini terbukti sulit dibaca pada papan dengan sistem operasi non-real-time.
Beberapa waktu yang lalu, saya memposting artikel berjudul “DHT11 /DHT22 Temperature Sensor” yang menunjukkan cara menggunakan kode contoh Microsoft C++ dari C# untuk membaca sensor ini. Library tersebut bisa mendapatkan pembacaan tetapi saya harus menambahkan logika ulang coba untuk membuatnya lebih andal. Ini terbukti berhasil untuk sebagian besar tetapi beberapa orang mengalami kesulitan untuk membuatnya bekerja secara konsisten.
Mengingat tingkat minat dalam menggunakan sensor ini pada Raspberry Pi saat menjalankan Windows 10 IoT Core, saya memutuskan untuk membuat opsi kedua yang menyediakan metode yang sangat andal untuk membaca sensor ini sambil tetap mempertahankan biaya rendah.
Ringkasan
Pendekatan yang dipresentasikan di sini adalah menyambungkan sensor DHT ke ATtiny85 yang murah dan mengaturinya sebagai perangkat slave I2C. Ini dicapai menggunakan library TinyWireS dan membuat serangkaian register yang dapat dibaca dan ditulis untuk berinteraksi dengan perangkat.
Perangkat mendukung fungsi berikut:
- Interval baca yang dapat dikonfigurasi untuk menentukan seberapa sering membaca sensor DHT. Default adalah membaca setiap 2 detik.
- Mode manual yang menonaktifkan interval dan mengambil pembacaan sesuai permintaan.
- Ambang suhu atas dan bawah yang dapat dikonfigurasi yang akan memicu pin interrupt saat pembacaan suhu saat ini di atas atau di bawah ambang.
- Mode simpan konfigurasi yang memungkinkan pengaturan yang dikonfigurasi untuk dipulihkan saat menyala atau setelah reset.
- Reset konfigurasi yang memungkinkan konfigurasi yang disimpan dikembalikan ke nilai default.
- Kontrol daya sensor yang memungkinkan daya ke sensor diaktifkan dan dinonaktifkan untuk menghemat daya.
- Alamat perangkat I2C yang dapat diprogram. Alamat default perangkat ini adalah 0x26, tetapi dapat diubah melalui perintah. Perangkat akan mengingat alamat. Jika direset, alamat akan kembali ke 0x26. Library C# juga mencakup kode untuk mencari perangkat pada bus I2C sehingga Anda tidak perlu mengetahui alamat untuk terhubung.
- Pemilihan model DHT yang dapat diprogram. Firmware default ke DHT22, tetapi dapat diubah dengan mengirim perintah ke perangkat untuk menggunakan model yang berbeda. Model disimpan sehingga setelah setiap reboot atau siklus daya ia mempertahankan jenis model yang akan digunakan.
Kode Sumber
Ada tiga kumpulan kode dalam proyek ini. Firmware utama untuk papan, skrip master Arduino yang digunakan untuk menguji dan mendemonstrasikan papan saat terhubung ke Arduino Uno dan aplikasi kode Windows 10 IoT yang menunjukkan cara menggunakan perangkat dari Raspberry Pi. Semua kode tersedia dalam repositori GitHub yang tertaut.
Rangkaian Perangkat
Rangkaian kecil dan hanya menggunakan beberapa komponen murah. ATtiny85 dapat dibeli dari beberapa penjual. Saya merekomendasikan untuk membeli beberapa karena mereka memiliki banyak kegunaan yang berguna.
Rangkaian memiliki header enam pin yang memungkinkannya untuk terhubung ke rangkaian lain atau langsung ke Raspberry Pi. Pin didefinisikan sebagai berikut:
- GND -> Sambungkan ini ke ground pada rangkaian Anda atau ke pin ground di Raspberry Pi.
- RST -> Pin ini digunakan untuk merestart atau me-reboot perangkat. Pin ini harus dihubungkan ke 5V dalam operasi normal. Untuk merestart perangkat, picu pulsa LOW sesingkat mungkin pada pin ini.
- INT -> Pin ini memiliki dua tujuan. Saat ambang diaktifkan, pin ini akan HIGH setiap kali ambang terlampaui dan LOW sebaliknya. Saat menggunakan mode hemat daya, pin ini digunakan untuk membangunkan perangkat dengan memicu pulsa HIGH sesingkat mungkin.
Ada juga header dua pin di mana jumper dapat ditambahkan untuk mengaktifkan, atau dilepaskan untuk menonaktifkan LED papan.
Saat menggunakan ini dalam proyek yang lebih besar, rangkaian DHT Tiny dapat digabungkan atau disematkan ke dalam rangkaian proyek yang ada. Dalam hal ini, pin header dan LED adalah opsional.
Rangkaian juga dapat dibangun pada papan terpisah dan dihubungkan ke Raspberry Pi Anda dengan beberapa kabel atau kabel penyambung.
Memprogram ATtiny85
Muat skrip yang disebut DHT_Tiny_Breakout.ino ke ATtiny85 menggunakan programmer AVR Anda. Jika Anda tidak memiliki programmer, Anda dapat menggunakan Arduino Uno (atau papan serupa). Lihat satu atau beberapa artikel yang tercantum di bawah ini untuk bantuan.
- Programming ATtiny85 with Arduino Uno di Hackster.io
- Virtual Workshop: Program an ATTiny85 with Arduino
- Programming an ATtiny w/ Arduino 1.6 (or 1.0)
- Programming an ATtiny w/ Arduino 0022
Saya menggunakan SparkFun Tiny AVR Programmer untuk memuat ATtiny85 saya.
Saya menjalankan chip saya pada 16 MHz. Lihat artikel saya berjudul “ATtiny @ 16MHz” untuk instruksi cara melakukannya.
Saat menggunakan ATtiny85, skrip slave memerlukan library TinyWireS untuk diinstal di folder library Anda. Library ini dapat diunduh dari https://github.com/rambo/TinyWire.
Rangkaikan Rangkaian di Breadboard
Langkah pertama adalah mendapatkan DHT Tiny berjalan di breadboard. Gunakan breadboard setengah ukuran, bangun rangkaian dengan mengikuti diagram skematis dan breadboard yang disertakan dalam proyek.
Berikut beberapa tips untuk membantu memudahkannya:
- Bangun DHT Tiny di breadboardnya sendiri dan kemudian gunakan breadboard lain untuk koneksi antara DHT Tiny dan Uno atau Raspberry Pi.
- Menggunakan pin header direkomendasikan karena memudahkan untuk menghubungkan dan memutuskan DHT Tiny sebagai satu unit.
- Jika Anda berencana untuk menggunakan header jantan break-away standar di breadboard, Anda perlu menyesuaikan rim plastik hitam ke tengah pin sehingga akan muat di breadboard (lihat gambar di bawah). Gunakan pluit hidung jarum untuk menyesuaikan.
- Jika Anda memiliki header jantan break-away 0,1″ yang lebih panjang, gunakan ini di breadboard Anda. Tetapkan ukuran header normal jika Anda berencana untuk solder komponen pada PCB. Yang lebih panjang tidak direkomendasikan untuk PCB.
- Anda akan memerlukan kabel jumper betina-betina jika Anda menggunakan pin header di breadboard. Jika Anda tidak memiliki ini, hapus pin header dan gunakan kabel jumper jantan-jantan antara kedua papan.
- Jaga kabel jauh dari chip sebanyak mungkin sehingga lebih mudah untuk Anda memasukkan jari Anda dan menarik keluar chip untuk pemrograman.
Di bawah ini beberapa gambar versi breadboard dari DHT Tiny saya.
Menghubungkan ke Arduino Uno
Jika Anda tertarik untuk tes cepat, demonstrasi, atau Anda mengalami kesulitan untuk membuat ini bekerja dengan Raspberry Pi Anda, Anda dapat menghubungkan DHT Tiny ke Arduino Uno (atau perangkat serupa).
- Sambungkan pin GND ke GND di Uno.
- Sambungkan pin 5V ke 5V di Uno.
- Sambungkan pin RST ke D4 di Uno.
- Sambungkan pin SDA ke A4 di Uno.
- Sambungkan pin SCL ke A5 di Uno.
- Sambungkan pin INT ke D3 di Uno dan aktifkan LED melalui jumper.
Muat dan jalankan skrip yang bernama DHT_Tiny_Master.ino. Skrip ini akan menampilkan output di Serial Monitor.
Saat menghubungkan I2C antara kedua papan, penting untuk memiliki resistor pull-up pada garis SDA dan SCL. Dalam rangkaian ini, ada dua resistor 4,7K Ω yang terhubung antara pin dan 5V.
Di bawah ini beberapa gambar DHT Tiny breadboard yang terhubung ke Arduino Uno.
Menghubungkan ke Raspberry Pi
Jika Anda tertarik untuk tes cepat, demonstrasi, atau Anda mengalami kesulitan untuk membuat ini bekerja dengan Raspberry Pi Anda, Anda dapat menghubungkan DHT Tiny ke Arduino Uno (atau perangkat serupa).
- Sambungkan pin GND ke GND (pin 9) di Raspberry Pi 2/3.
- Sambungkan pin 5V ke 5V (pin 2) di Raspberry Pi 2/3.
- Sambungkan pin RST ke GPIO4 (pin 7) di Raspberry Pi 2/3.
- Sambungkan pin SDA ke SDA (pin 3) di Raspberry Pi 2/3.
- Sambungkan pin SCL ke SCL (pin 5) di Raspberry Pi 2/3.
- Sambungkan pin INT ke GPIO17 (pin 11) dan aktifkan LED.
Saat menghubungkan I2C antara kedua papan, penting untuk memiliki resistor pull-up pada garis SDA dan SCL. Dalam rangkaian ini, ada dua resistor 4,7K Ω yang terhubung antara pin dan 3V3.
PENTING! Papan DHT Tiny akan dipasok daya dari pin 5V di Raspberry Pi, tetapi resistor pull-up harus dihubungkan ke pin 3V3 di Raspberry Pi (3V3 ada pada pin 1 dan 17).
Di bawah ini beberapa gambar DHT Tiny breadboard yang terhubung ke Raspberry Pi 3.
Menjalankan Aplikasi Windows 10
Dapatkan kode dari tautan repositori GitHub di bagian bawah proyek dan ekstrak ke komputer Anda. Buka kode sumber Aplikasi Universal di Visual Studio 2015 dan deploy ke Raspberry Pi dan luncurkan dari konsol admin atau jalankan dalam mode debug dari Visual Studio.
Jika ini adalah pertama kalinya Anda menjalankan kode dari Visual Studio untuk aplikasi Windows 10 IoT Core, lihat artikel ini dari Microsoft:
- Deploying an App with Visual Studio
Lihat demonstrasi video di bawah ini untuk melihat aplikasi berjalan di Raspberry Pi 3 yang terhubung ke DHT Tiny.
Highlight Aplikasi
Aplikasi UWP Windows 10 ini adalah aplikasi demonstrasi yang menampilkan semua fitur DHT Tiny. Kode akan menampilkan suhu, kelembaban, dan nilai register lainnya dari perangkat. UI juga menyediakan cara untuk mengubah konfigurasi perangkat termasuk alamat perangkat.
Library DHT Tiny
Kode contoh menggunakan library yang ditulis untuk berinteraksi dengan DHT Tiny. Library ini siap digunakan dan dapat disertakan langsung dalam semua aplikasi Anda.
Dapatkan Library dari NuGet
Jika Anda tidak ingin menyertakan proyek secara langsung dalam aplikasi Anda, cukup unduh library DHT Tiny dari NuGet menggunakan perintah yang ditunjukkan di bawah ini. Buka Package Manager Console di Visual Studio dan ketik perintah.
PM> Install-Package IoT.DhtTiny
Memindai Bus I2C untuk Perangkat
Library DHT Tiny mencakup metode yang akan mencari bus I2C untuk perangkat DHT Tiny apa pun dan mengembalikan daftar alamat. Daftar ini dapat digunakan untuk menginisialisasi satu atau lebih perangkat yang ditemukan. Ini sangat berguna jika Anda mengubah alamat perangkat tetapi tidak ingat apa alamat yang Anda atur. Perhatikan bahwa metode callback adalah opsional.
// *** // *** Enumerate the DHT Tiny devices on the i2c bus. // *** IEnumerable<byte> address = await DhtTiny.FindAllDhtTinyAsync(this.FindAllDhtTinyCallback); // *** // *** Call back method // *** private void FindAllDhtTinyCallback(I2cScanEventArgs e) { int percentComplete = (int)((double)e.CurrentIndex / (double)e.Total * 100.0d); this.Status = string.Format("Locating devices [0x{0:X2}] [{1}%] [Found = {2:##0}]...", e.CurrentAddress, percentComplete, e.Items.Count()); }
Skematis DHT Tiny Breakout untuk Raspberry Pi
Demonstrasi Perangkat Lunak
Video ini menunjukkan Aplikasi Universal yang berjalan di Raspberry Pi 3 yang terhubung ke DHT Tiny di breadboard.
[VIDEO COMING SOON]
Membuat Perangkat Akhir
Cara termudah dan paling hemat biaya untuk membuat papan adalah menggunakan papan prototipe PCB seperti Perma-Proto Quarter-sized Breadboard PCB dari Adafruit. Gambar di bawah ini menunjukkan breakout menggunakan papan prototipe ini. Perhatikan saya menggunakan dremel untuk mencabut bagian jalur daya dari papan.
See More: DHT Tiny Breakout for the Raspberry Pi