Tentang proyek ini
Pendahuluan
Latar belakang
DHT11 adalah sensor suhu dan kelembaban 4-pin (satu pin tidak digunakan) yang mampu mengukur kelembaban relatif 20% - 90% dan 0 hingga 50 °C. Sensor dapat beroperasi antara 3 dan 5.5V DC dan berkomunikasi menggunakan protokol OneWire miliknya sendiri. Protokol ini membutuhkan waktu yang sangat tepat untuk mendapatkan data dari sensor. Bit LOW dan HIGH dikodekan pada kabel dengan lamanya waktu sinyal HIGH. Total waktu untuk melakukan pembacaan paling banyak 23,4 ms. Ini termasuk penundaan 18 mdtk yang diperlukan untuk memulai transfer data dan waktu hingga 5,4 mdtk untuk data. Sinyal individu bisa sependek 20 s dan selama 80 s.
Ketika Windows 10 IoT Core pertama kali tersedia, saya mengambil Raspberry Pi 2 dan sensor DHT11 saya dan mencobanya di C#. Saya segera menemukan bahwa itu tidak akan berhasil. Masalah dengan C# di Windows 10 IoT Core adalah bahwa itu tidak akan cukup cepat (setidaknya tidak untuk saat ini).
Saya memposting ke forum Microsoft dan melakukan beberapa pertukaran dengan pengembang lain yang mengalami kesulitan yang sama. Saya akhirnya menemukan tanggapan Microsoft pada protokol OneWire di Windows 10 IoT Core yang berbunyi:
Setelah beberapa saat, saya menerima tanggapan atas postingan saya yang berbunyi:
Yah, itu akan menjadi hal yang hebat dan saya sangat senang dengan kemampuan yang akan datang tetapi siapa yang bisa menunggu? Baru-baru ini saya melihat bahwa Microsoft memposting contoh tentang cara mendukung protokol OneWire menggunakan DHT11 sebagai sensor sampel dan menggunakan C++ di Windows 10 IoT Core. Saya melihat ini sebagai peluang untuk membawanya ke C#.
Proyek ini adalah tentang mengubah sampel itu menjadi pustaka yang dapat digunakan di C#. Saya berterima kasih kepada orang yang menulis perpustakaan untuk membantu membuat sensor populer ini berguna di Windows 10 IoT Core, dan semoga dengan perpustakaan ini akan lebih bermanfaat.
Perpustakaan
Pustaka yang saya buat adalah pemfaktoran ulang sederhana dari kode yang awalnya diposting oleh Microsoft, jadi saya tidak menghargai pekerjaan yang dilakukan untuk mendapatkan pembacaan sensor.
Pustaka menyajikan kelas sederhana yang disebut Dht11 di ruang nama Sensors.Dht . Membuat objek baru di C# sangatlah mudah.
Pertama buka pin GPIO yang memiliki pin sensor DHT11.
menggunakan Sensors.Dht;GpioPin pin =GpioController.GetDefault().OpenPin(4, GpioSharingMode.Exclusive);
Kemudian berikan pin ini ke konstruktor Dht11 class dan tentukan GPIO Pin Drive Mode. Ini memungkinkan Anda untuk memutuskan apakah Anda akan menambahkan resistor pull-up Anda sendiri.
Dht11 dht11 =new Dht11(_pin, GpioPinDriveMode.Input);
Untuk mendapatkan pembacaan dari perangkat, gunakan GetReadingAsync metode.
DhtReading reading =menunggu dht11.GetReadingAsync().AsTask();
Ada kelebihan beban yang memungkinkan nilai coba ulang maksimum ditentukan. Nilai defaultnya adalah 20. Ini menentukan berapa banyak upaya yang harus dilakukan untuk membaca sensor sebelum menyerah dan mengembalikan pembacaan yang gagal.
The Bacaan Dht struktur didefinisikan sebagai:
nilai publik struct DhtReading{ bool TimedOut; bool IsValid; Suhu ganda; Kelembaban ganda; int RetryCount;};
Pengamatan
Meskipun sensor bekerja di C++ tetap tidak mendapatkan pembacaan setiap saat. Jadi, perlunya opsi coba lagi di kelas (ini sebenarnya adalah bagian dari sampel Microsoft). Saya pikir akan lebih baik untuk membandingkan ini dengan platform lain untuk melihat bagaimana kinerjanya. Saya mencoba kode pada Raspberry Pi 2 yang menjalankan Raspbian serta pada Arduino Uno. Kode yang saya gunakan untuk keduanya telah disertakan dalam repositori GitHub.
Video yang disertakan dalam proyek ini akan mendemonstrasikan dan membandingkan output dari masing-masing platform ini.
Memulai
Merakit Sirkuit untuk Raspberry Pi 2
Gunakan panduan ini untuk merakit sirkuit saat menggunakan diagram yang terletak di dekat bagian bawah halaman sebagai panduan (perhatikan warna kabel opsional dan telah dipilih untuk membantu membuat sirkuit mudah diikuti saat dibangun).
- Tempatkan tukang sepatu berbentuk T di ujung kiri papan+ ukuran setengah (di mana angkanya dimulai dari 1). Dua pin paling kiri akan berada di E1 dan F1 di papan tulis. Dua pin paling kanan akan berada di E20 dan F20
- Tempatkan resistor 4,7K di antara A4 dan 3V3
- Hubungkan kabel jumper jantan ke jantan oranye di antara B4 dan F28
- Hubungkan kabel jumper jantan merah ke jantan antara F29 dan 3V3
- Hubungkan kabel jumper jantan ke jantan hitam di antara F30 dan GND
- Tempatkan sensor DHT11 ke dalam J30 (-), J29 (+) dan J28 (s)
- Colokkan kabel pita ke tukang sepatu dan Raspberry Pi
Merakit Sirkuit untuk Arduino
Gunakan panduan ini untuk merakit sirkuit saat menggunakan diagram yang terletak di dekat bagian bawah halaman sebagai panduan (perhatikan warna kabel opsional dan telah dipilih untuk membantu membuat sirkuit mudah diikuti saat dibangun).
- Tempatkan resistor 4,7K di antara E12 dan E13
- Hubungkan kabel jumper pria kulit putih ke pria antara D13 dan Sematkan 5 di Arduino
- Hubungkan kabel jumper jantan merah ke jantan antara D12 dan 5V pin di Arduino
- Hubungkan kabel jumper jantan hitam ke jantan antara D11 dan GND di Arduino
- Tempatkan sensor DHT11 ke A11 (-), A12 (+) dan A13 (s)
- Colokkan kabel USB dari komputer Anda ke Arduino
Di bawah ini adalah foto sirkuit yang saya buat.
Memulai Aplikasi untuk Raspberry Pi
Pilih Debug, konfigurasi ARM dan Mesin Jarak Jauh. Sekarang klik kanan proyek, dan pilih Properti lalu klik tag Debug. Selanjutnya masukkan alamat IP Raspberry Pi 2 di bidang Mesin jarak jauh, dan hapus centang Gunakan otentikasi.
Tekan F5 . Aplikasi akan diterapkan ke perangkat yang mungkin memakan waktu beberapa menit untuk pertama kalinya.
Memulai Aplikasi untuk Arduino
Sketsa untuk proyek ini tersedia di GitHub dalam file bernama Dht11_Speed . Mulai Arduino IDE dan buka sketsa. Unggah sketsa ke Arduino (Ctrl U
) lalu mulai Serial Monitor (Ctrl Shift M
)
Jika Anda tidak yakin bagaimana melakukan ini atau baru mengenal lingkungan ini, video di bawah ini akan menunjukkan cara melakukannya.
Memulai Aplikasi untuk Raspbian
Kode C untuk Raspberry Pi tersedia di GitHub untuk proyek ini dalam file bernama Dht11.c . Sumber perlu disalin ke Raspberry Pi dan kemudian dikompilasi di sana. Saya suka menggunakan WinSCP untuk menyalin file. Jika Anda tidak memiliki aplikasi ini, saya sarankan Anda mengunduh dan menginstalnya sekarang. Kode sumber menggunakan wiringPi yang harus diinstal sebelum mengkompilasi aplikasi.
Perintah untuk mengkompilasi kode pada Raspberry Pi adalah:
gcc -oDht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm
Untuk menjalankan aplikasi masukkan perintah:
sudo ./Dht11_Speed 1000 10
Di mana 1000 menentukan penundaan 1000 ms (1 detik) dan 10 adalah jumlah sampel yang harus dibaca.
Video akan mendemonstrasikan lebih detail cara menyalin kode dan cara mengompilasinya di Raspberry Pi yang menjalankan Raspbian. Untuk mempelajari cara memuat Raspbian di Raspberry Pi Anda, buka https://www.raspberrypi.org/downloads/raspbian/.
Video
Video di bawah ini adalah demonstrasi aplikasi:
Lihat video ini di You Tube menggunakan mode Theater untuk kualitas terbaik.
Kode
Kode Sumber Visual Studio 2015 C#/C++
https://github.com/porrey/dht.git Skema
Dht11_RPi2.fzz Dht11_Arduino.fzz