- DHT11 - Spesifikasi dan Cara Kerja
- Berkomunikasi dengan Sensor DHT11
- Komponen yang dibutuhkan
- Skema
- DHT11 dengan penjelasan PIC MPLABX Code
Pengukuran Suhu dan Kelembaban sering berguna dalam banyak aplikasi seperti Otomasi Rumah, Pemantauan Lingkungan, Stasiun cuaca, dll. Sensor suhu yang paling populer digunakan di sebelah LM35 adalah DHT11, kami sebelumnya telah membangun banyak Proyek DHT11 dengan menghubungkannya dengan Arduino, dengan Raspberry Pi dan banyak papan pengembangan lainnya. Pada artikel ini, kita akan belajar bagaimana menghubungkan DHT11 ini dengan PIC16F87A yang merupakan Mikrokontroler PIC 8-bit. Mikrokontroler ini akan kita gunakan untuk membaca nilai Temperatur dan Kelembaban menggunakan DHT11 dan menampilkannya pada layar LCD. Jika Anda benar-benar baru dalam menggunakan mikrokontroler PIC, Anda dapat menggunakan seri tutorial PIC kami untuk mempelajari cara memprogram dan menggunakan mikrokontroler PIC, oleh karena itu, mari kita mulai.
DHT11 - Spesifikasi dan Cara Kerja
Sensor DHT11 tersedia baik dalam bentuk modul maupun dalam bentuk sensor. Dalam tutorial ini kita menggunakan sensor, satu-satunya perbedaan antara keduanya adalah dalam bentuk modul sensor memiliki kapasitor penyaringan dan resistor pull-up yang dipasang pada pin keluaran sensor. Jadi jika Anda menggunakan modul, Anda tidak perlu menambahkannya secara eksternal. DHT11 dalam bentuk sensor ditunjukkan di bawah ini.
Sensor DHT11 hadir dengan casing warna biru atau putih. Di dalam casing ini, kami memiliki dua komponen penting yang membantu kami merasakan kelembapan dan suhu relatif. Komponen pertama adalah sepasang elektroda; hambatan listrik antara kedua elektroda ini ditentukan oleh substrat penahan kelembaban. Jadi resistansi yang diukur berbanding terbalik dengan kelembaban relatif lingkungan. Semakin tinggi kelembaban relatif, semakin rendah nilai resistansi dan sebaliknya. Juga, perhatikan bahwa Kelembaban relatif berbeda dengan kelembapan sebenarnya. Kelembaban relatif mengukur kadar air di udara relatif terhadap suhu di udara.
Komponen lainnya adalah Termistor NTC yang dipasang di permukaan. Istilah NTC adalah singkatan dari koefisien temperatur negatif, untuk kenaikan temperatur nilai resistansi akan menurun. Output dari sensor dikalibrasi oleh pabrik dan oleh karena itu sebagai programmer kita tidak perlu khawatir untuk mengkalibrasi sensor tersebut. Output dari sensor yang diberikan oleh komunikasi 1-wire, mari kita lihat diagram pin dan koneksi dari sensor ini.
Produk ini ada dalam paket baris tunggal 4pin. Pin ke-1 dihubungkan melintasi VDD dan pin ke-4 dihubungkan melintasi GND. Pin ke-2 adalah pin data, digunakan untuk keperluan komunikasi. Pin data ini membutuhkan resistor pull-up 5k. Namun, resistor lain yang menarik seperti 4,7k hingga 10k juga dapat digunakan. Pin ke-3 tidak terhubung dengan apapun. Jadi diabaikan.
Lembar data memberikan spesifikasi teknis serta informasi antarmuka yang dapat dilihat pada tabel di bawah ini-
Tabel di atas menunjukkan kisaran dan akurasi pengukuran Suhu dan Kelembaban. Dapat mengukur suhu dari 0-50 derajat Celcius dengan akurasi +/- 2 derajat Celcius dan kelembaban relatif dari 20-90% RH dengan akurasi +/- 5% RH. Spesifikasi detailnya dapat dilihat pada tabel di bawah ini.
Berkomunikasi dengan Sensor DHT11
Seperti yang telah disebutkan sebelumnya, untuk membaca data dari DHT11 dengan PIC kita harus menggunakan protokol Komunikasi satu kabel PIC. Rincian tentang bagaimana melakukan ini dapat dipahami dari diagram antarmuka DHT 11 yang dapat ditemukan di lembar datanya, hal yang sama diberikan di bawah ini.
DHT11 membutuhkan sinyal start dari MCU untuk memulai komunikasi. Oleh karena itu, setiap MCU perlu mengirimkan sinyal start ke DHT11 Sensor untuk memintanya mengirimkan nilai suhu dan kelembaban. Setelah menyelesaikan sinyal start, DHT11 mengirimkan sinyal respon yang mencakup informasi suhu dan kelembaban. Komunikasi data dilakukan dengan protokol komunikasi data bus tunggal. Panjang data penuh adalah 40bit dan sensor mengirimkan bit data yang lebih tinggi terlebih dahulu.
Karena resistor pull-up, jalur data selalu berada pada level VCC selama mode siaga. MCU perlu menurunkan tegangan ini dari tinggi ke rendah untuk rentang minimum 18ms. Selama ini, sensor DHT11 mendeteksi sinyal start dan mikrokontroler membuat jalur data tinggi selama 20-40us. Waktu 20-40us ini disebut masa tunggu di mana DHT11 mulai merespons. Setelah masa tunggu ini, DHT11 mengirimkan data ke unit mikrokontroler.
Format DATA Sensor DHT11
Data terdiri dari desimal dan bagian integral yang digabungkan bersama. Sensor mengikuti format data di bawah ini -
Data RH integral 8bit + data RH desimal 8bit + data T integral 8bit + data T desimal 8bit + checksum 8bit.
Seseorang dapat memverifikasi data dengan memeriksa nilai checksum dengan data yang diterima. Hal ini dapat dilakukan karena, jika semuanya sudah benar dan jika sensor telah mengirimkan data yang benar, maka checksum harus berupa jumlah "data RH integral 8bit + RHdata desimal 8bit + data T integral 8bit + data T desimal 8bit".
Komponen yang dibutuhkan
Untuk proyek ini, hal-hal di bawah ini diperlukan -
- Pengaturan pemrograman mikrokontroler PIC (8bit).
- Papan tempat memotong roti
- Unit catu daya 5V 500mA.
- Resistor 4,7k 2 lembar
- Resistor 1k
- PIC16F877A
- Kristal 20mHz
- 33pF kapasitor 2 pcs
- LCD karakter 16x2
- Sensor DHT11
- Kabel jumper
Skema
Diagram sirkuit untuk menghubungkan DHT11 dengan PIC16F877A ditunjukkan di bawah ini.
Kami telah menggunakan LCD 16x2 untuk menampilkan nilai suhu dan kelembaban yang kami ukur dari DHT11. LCD dihubungkan dalam mode 4-kabel dan sensor serta LCD didukung oleh catu daya eksternal 5V. Saya telah menggunakan papan tempat memotong roti untuk membuat semua koneksi yang diperlukan dan telah menggunakan adaptor 5V eksternal. Anda juga dapat menggunakan papan catu daya papan tempat memotong roti ini untuk memberi daya pada papan Anda dengan 5V.
Setelah rangkaian siap, yang harus kita lakukan adalah mengunggah kode yang diberikan di bagian bawah halaman ini dan kita dapat mulai membaca Suhu dan Kelembaban seperti yang ditunjukkan di bawah ini. Jika Anda ingin mengetahui bagaimana kode itu ditulis dan bagaimana cara kerjanya, bacalah lebih lanjut. Anda juga dapat menemukan pekerjaan lengkap dari proyek ini dalam video yang diberikan di bagian bawah halaman ini.
DHT11 dengan penjelasan PIC MPLABX Code
Kode tersebut ditulis menggunakan MPLABX IDE dan dikompilasi menggunakan kompiler XC8 yang keduanya disediakan oleh Microchip sendiri dan gratis untuk diunduh dan digunakan. Silakan merujuk ke tutorial dasar untuk memahami dasar-dasar pemrograman, hanya tiga fungsi penting yang diperlukan untuk berkomunikasi dengan sensor DHT11 yang dibahas di bawah ini. Fungsinya adalah -
batal dht11_init (); void find_response (); char read_dht11 ();
Fungsi pertama digunakan untuk sinyal start dengan dht11. Seperti yang telah dibahas sebelumnya, setiap komunikasi dengan DHT11 dimulai dengan sinyal start, disini arah pin diubah terlebih dahulu untuk mengkonfigurasi pin data sebagai keluaran dari mikrokontroler. Kemudian garis data ditarik rendah dan terus menunggu 18mS. Setelah itu lagi jalur dibuat tinggi oleh mikrokontroler dan terus menunggu hingga 30us. Setelah waktu tunggu tersebut, pin data diset sebagai masukan ke mikrokontroler untuk menerima data.
batal dht11_init () { DHT11_Data_Pin_Direction = 0; // Konfigurasi RD0 sebagai keluaran DHT11_Data_Pin = 0; // RD0 mengirim 0 ke sensor __delay_ms (18); DHT11_Data_Pin = 1; // RD0 mengirim 1 ke sensor __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfigurasi RD0 sebagai input }
Fungsi selanjutnya digunakan untuk menyiapkan bit cek tergantung pada status pin data. Ini digunakan untuk mendeteksi respon dari sensor DHT11.
batal find_response () { Check_bit = 0; __delay_us (40); jika (DHT11_Data_Pin == 0) { __delay_us (80); jika (DHT11_Data_Pin == 1) { Check_bit = 1; } __delay_us (50);} }
Akhirnya fungsi baca dht11; di sini data dibaca ke dalam format 8-bit dimana data dikembalikan menggunakan operasi pergeseran bit tergantung pada status pin data.
char read_dht11 () { char data, for_count; untuk (for_count = 0; for_count <8; for_count ++) { while (! DHT11_Data_Pin); __delay_us (30); jika (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - for_count)); // Hapus bit (7-b) } lain { data- = (1 << (7 - for_count)); // Setel bit (7-b) sementara (DHT11_Data_Pin); } } mengembalikan data; }
</s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> </s> orang </s>
Setelah itu, semuanya dikerjakan menjadi fungsi utama. Pertama, inisialisasi sistem dilakukan di mana LCD diinisialisasi dan arah port pin LCD diatur ke output. Aplikasi berjalan di dalam fungsi utama
void main () { system_init (); sementara (1) { __delay_ms (800); dht11_init (); find_response (); jika (Check_bit == 1) { RH_byte_1 = read_dht11 (); RH_byte_2 = read_dht11 (); Temp_byte_1 = read_dht11 (); Temp_byte_2 = read_dht11 (); Penjumlahan = read_dht11 (); if (Penjumlahan == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Kelembaban = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((Kelembaban / 10)% 10)); lcd_data (48 + (Kelembaban% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Kelembaban:"); // lcd_puts (""); lcd_data (48 + ((RH / 10)% 10)); lcd_data (48 + (RH% 10)); lcd_puts ("%"); } lain { lcd_puts ("Kesalahan checksum"); } } lain { clear_screen (); lcd_com (0x80); lcd_puts ("Kesalahan !!!"); lcd_com (0xC0); lcd_puts ("Tidak Ada Respon."); } __delay_ms (1000); } }
Komunikasi dengan sensor DHT11 dilakukan di dalam while loop dimana sinyal start dikirimkan ke sensor. Setelah itu, fungsi find_response dipicu. Jika Check_bit adalah 1 maka komunikasi selanjutnya dilakukan, jika tidak LCD akan menampilkan dialog error.
Bergantung pada data 40bit, read_dht11 dipanggil 5 kali (5 kali x 8bit) dan menyimpan data sesuai format data yang disediakan dalam lembar data. The Status checksum juga diperiksa dan jika ditemukan kesalahan, itu juga akan memberitahukan pada LCD. Akhirnya, data diubah dan dikirim ke LCD karakter 16x2.
Kode lengkap untuk pengukuran Suhu dan Kelembaban PIC ini dapat diunduh dari sini. Juga periksa video demonstrasi yang diberikan di bawah ini.
Semoga Anda memahami proyek ini dan menikmati membangun sesuatu yang bermanfaat. Jika Anda memiliki pertanyaan, tinggalkan di bagian komentar di bawah atau gunakan forum kami untuk pertanyaan teknis lainnya.