- DHT11 - Spesifikasi dan Bekerja
- Berkomunikasi dengan Sensor DHT11
- Komponen yang diperlukan
- Skematik
- DHT11 dengan penjelasan PIC MPLABX Code
Pengukuran suhu dan kelembapan sering berguna dalam banyak aplikasi seperti Automasi Rumah, Pemantauan Lingkungan, Stasiun cuaca, dll. Sensor Suhu yang paling popular di sebelah LM35 adalah DHT11, sebelumnya kami telah membangun banyak Projek DHT11 dengan menghubungkannya dengan Arduino, dengan Raspberry Pi dan banyak papan pengembangan lain. Dalam artikel ini, kita akan belajar bagaimana menghubungkan DHT11 ini dengan PIC16F87A yang merupakan Mikrokontroler PIC 8-bit. Kami akan menggunakan mikrokontroler ini untuk membaca nilai Suhu dan Kelembapan menggunakan DHT11 dan memaparkannya pada paparan LCD. Sekiranya anda benar-benar baru menggunakan mikrokontroler PIC, anda boleh menggunakan siri tutorial PIC kami untuk belajar bagaimana memprogram dan menggunakan mikrokontroler PIC, yang boleh dikatakan, mari kita mulakan.
DHT11 - Spesifikasi dan Bekerja
Sensor DHT11 tersedia sama ada dalam bentuk modul atau dalam bentuk sensor. Dalam tutorial ini kita menggunakan sensor, satu-satunya perbezaan antara keduanya adalah dalam bentuk modul sensor memiliki kapasitor penyaringan dan resistor penarik yang terpasang pada pin output sensor. Oleh itu, jika anda menggunakan modul, anda tidak perlu menambahkannya secara luaran. Bentuk sensor DHT11 ditunjukkan di bawah.
Sensor DHT11 dilengkapi dengan selongsong warna biru atau putih. Di dalam selongsong ini, kami mempunyai dua komponen penting yang membantu kami merasakan kelembapan dan suhu relatif. Komponen pertama adalah sepasang elektrod; rintangan elektrik antara dua elektrod ini ditentukan oleh substrat penahan kelembapan. Jadi rintangan yang diukur berkadar songsang dengan kelembapan relatif persekitaran. Semakin tinggi kelembapan relatif lebih rendah akan menjadi nilai rintangan dan sebaliknya. Juga, perhatikan bahawa kelembapan relatif berbeza dengan kelembapan sebenar. Kelembapan relatif mengukur kandungan air di udara berbanding dengan suhu di udara.
Komponen lain adalah NTC Thermistor yang dipasang di permukaan. Istilah NTC bermaksud pekali suhu Negatif, kerana kenaikan suhu nilai rintangan akan menurun. Output sensor dikalibrasi kilang dan oleh itu sebagai pengaturcara, kita tidak perlu bimbang untuk mengkalibrasi sensor. Keluaran sensor yang diberikan oleh komunikasi 1-Wire, mari kita lihat gambarajah pin dan sambungan sensor ini.
Produk terdapat dalam pakej baris tunggal 4 pin. Pin 1 disambungkan melintasi VDD dan pin ke-4 disambungkan melintasi GND. Pin ke-2 adalah pin data, digunakan untuk tujuan komunikasi. Pin data ini memerlukan perintang tarik 5k. Walau bagaimanapun, perintang penarik lain seperti 4.7k hingga 10k juga boleh digunakan. Pin ke-3 tidak dihubungkan dengan apa-apa. Sehingga tidak dipedulikan.
Lembar data memberikan spesifikasi teknikal serta maklumat antara muka yang dapat dilihat pada jadual di bawah-
Jadual di atas menunjukkan julat dan ketepatan pengukuran Suhu dan Kelembapan. Ia dapat mengukur suhu dari 0-50 darjah Celsius dengan ketepatan +/- 2 darjah Celsius dan kelembapan relatif dari 20-90% RH dengan ketepatan +/- 5% RH. Spesifikasi terperinci dapat dilihat pada jadual di bawah.
Berkomunikasi dengan Sensor DHT11
Seperti yang telah disebutkan sebelumnya, untuk membaca data dari DHT11 dengan PIC kita harus menggunakan protokol Komunikasi satu wayar PIC. Perincian mengenai bagaimana melakukan ini dapat difahami dari rajah antara muka DHT 11 yang dapat ditemukan di lembar datanya, yang sama diberikan di bawah.
DHT11 memerlukan isyarat permulaan dari MCU untuk memulakan komunikasi. Oleh itu, setiap kali MCU perlu menghantar isyarat permulaan ke Sensor DHT11 untuk memintanya untuk menghantar nilai suhu dan kelembapan. Setelah menyelesaikan isyarat permulaan, DHT11 menghantar isyarat tindak balas yang merangkumi maklumat suhu dan kelembapan. Komunikasi data dilakukan oleh protokol komunikasi data bus tunggal. Panjang data penuh ialah 40bit dan sensor menghantar bit data yang lebih tinggi terlebih dahulu.
Oleh kerana resistor pull-up, garis data selalu kekal pada tahap VCC semasa mod idle. MCU perlu menurunkan voltan ini dari tinggi ke rendah untuk jangka masa minimum 18ms. Selama ini, sensor DHT11 mengesan isyarat mula dan mikrokontroler menjadikan garis data tinggi untuk 20-40us. Waktu 20-40us ini disebut sebagai tempoh menunggu di mana DHT11 mula memberi tindak balas. Selepas tempoh menunggu ini, DHT11 menghantar data ke unit mikrokontroler.
Format DATA Sensor DHT11
Data terdiri daripada bahagian perpuluhan dan integral yang digabungkan. Sensor mengikuti format data di bawah -
Data RH integral 8bit + data RH perpuluhan 8bit + data T integral 8bit + data T perpuluhan 8bit + checksum 8bit.
Seseorang dapat mengesahkan data dengan memeriksa nilai checksum dengan data yang diterima. Ini dapat dilakukan kerana, jika semuanya benar dan jika sensor telah mengirimkan data yang tepat, maka checksum haruslah merupakan jumlah dari "data RH integral 8bit + data RHdata 8bit + data T integral 8bit + data T desimal 8bit".
Komponen yang diperlukan
Untuk projek ini, perkara di bawah diperlukan -
- Persediaan pengaturcaraan mikrokontroler PIC (8bit).
- Papan roti
- Unit bekalan kuasa 5V 500mA.
- Perintang 4.7k 2pcs
- Perintang 1k
- PIC16F877A
- Kristal 20mHz
- Kapasitor 33pF 2 pcs
- LCD aksara 16x2
- Sensor DHT11
- Wayar pelompat
Skematik
Gambarajah litar untuk menghubungkan DHT11 dengan PIC16F877A ditunjukkan di bawah.
Kami telah menggunakan LCD 16x2 untuk memaparkan nilai suhu dan kelembapan yang kami ukur dari DHT11. LCD dihubungkan dalam mod 4-wayar dan kedua sensor dan LCD dikuasakan oleh bekalan kuasa luaran 5V. Saya telah menggunakan papan roti untuk membuat semua sambungan yang diperlukan dan telah menggunakan penyesuai 5V luaran. Anda juga boleh menggunakan papan bekalan kuasa papan roti ini untuk menghidupkan papan anda dengan 5V.
Setelah litar siap, yang harus kita lakukan ialah memuat naik kod yang diberikan di bahagian bawah halaman ini dan kita boleh mula membaca Suhu dan Kelembapan seperti yang ditunjukkan di bawah. Sekiranya anda ingin mengetahui bagaimana kod itu ditulis dan bagaimana ia berfungsi baca lebih lanjut. Anda juga boleh mendapatkan kerja lengkap projek ini dalam video yang diberikan di bahagian bawah halaman ini.
DHT11 dengan penjelasan PIC MPLABX Code
Kod tersebut ditulis menggunakan MPLABX IDE dan dikompilasi menggunakan penyusun XC8 yang kedua-duanya disediakan oleh Microchip itu sendiri dan bebas untuk memuat turun dan digunakan. Sila rujuk tutorial asas untuk memahami asas pengaturcaraan, hanya tiga fungsi penting yang diperlukan untuk berkomunikasi dengan sensor DHT11 yang dibincangkan di bawah. Fungsinya adalah -
batal dht11_init (); batal cari_response (); char read_dht11 ();
Fungsi pertama digunakan untuk isyarat permulaan dengan dht11. Seperti yang telah dibincangkan sebelumnya, setiap komunikasi dengan DHT11 dimulai dengan isyarat permulaan, di sini arah pin diubah pada mulanya untuk mengkonfigurasi pin data sebagai output dari mikrokontroler. Kemudian garis data ditarik rendah dan terus menunggu 18mS. Selepas itu sekali lagi garis dibuat tinggi oleh mikrokontroler dan terus menunggu hingga 30us. Setelah masa menunggu itu, pin data ditetapkan sebagai input ke mikrokontroler untuk menerima data.
batal dht11_init () { DHT11_Data_Pin_Direction = 0; // Konfigurasikan RD0 sebagai output DHT11_Data_Pin = 0; // RD0 menghantar 0 ke sensor __delay_ms (18); DHT11_Data_Pin = 1; // RD0 menghantar 1 ke sensor __delay_us (30); DHT11_Data_Pin_Direction = 1; // Konfigurasikan RD0 sebagai input }
Fungsi seterusnya digunakan untuk mengatur bit periksa bergantung pada status pin data. Ia digunakan untuk mengesan tindak balas dari sensor DHT11.
batal cari_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 membaca dht11; di sini data dibaca ke dalam format 8-bit di mana data dikembalikan menggunakan operasi peralihan bit bergantung pada status pin data.
char read_dht11 () { char data, for_count; untuk (for_count = 0; for_count <8; for_count ++) { sementara (! DHT11_Data_Pin); __delay_us (30); jika (DHT11_Data_Pin == 0) { data & = ~ (1 << (7 - untuk_kiraan)); // Clear bit (7-b) } lain { data- = (1 << (7 - untuk_kiraan)); // Tetapkan bit (7-b) semasa (DHT11_Data_Pin); } } mengembalikan data; }
Selepas itu, semuanya dilakukan ke fungsi utama. Pertama, inisialisasi sistem dilakukan di mana LCD diinisialisasi dan arah port pin LCD ditetapkan ke output. Aplikasi ini berjalan di dalam fungsi utama
kekosongan utama () { system_init (); sementara (1) { __delay_ms (800); dht11_init (); cari_response (); jika (Semak_bit == 1) { RH_byte_1 = read_dht11 (); RH_byte_2 = baca_dht11 (); Temp_byte_1 = baca_dht11 (); Temp_byte_2 = baca_dht11 (); Penjumlahan = baca_dht11 (); jika (Penjumlahan == ((RH_byte_1 + RH_byte_2 + Temp_byte_1 + Temp_byte_2) & 0XFF)) { Kelembapan = Temp_byte_1; RH = RH_byte_1; lcd_com (0x80); lcd_puts ("Temp:"); // lcd_puts (""); lcd_data (48 + ((Kelembapan / 10)% 10)); lcd_data (48 + (Kelembapan% 10)); lcd_data (0xDF); lcd_puts ("C"); lcd_com (0xC0); lcd_puts ("Kelembapan:"); // 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 ("Ralat !!!"); lcd_com (0xC0); lcd_puts ("Tiada Respons."); } __delay_ms (1000); } }
Komunikasi dengan sensor DHT11 dilakukan di dalam gelung sementara di mana isyarat permulaan diserahkan ke sensor. Selepas itu, fungsi find_response dicetuskan. Sekiranya Check_bit adalah 1, maka komunikasi selanjutnya dilakukan sebaliknya LCD akan menunjukkan dialog kesalahan.
Bergantung pada data 40bit, read_dht11 disebut 5 kali (5 kali x 8bit) dan menyimpan data mengikut format data yang disediakan dalam lembar data. Yang status checksum juga diperiksa dan jika kesilapan ditemui, ia juga akan memaklumkan di LCD. Akhirnya, data ditukar dan dihantar ke LCD watak 16x2.
Kod lengkap untuk pengukuran Suhu dan Kelembapan PIC ini boleh dimuat turun dari sini. Lihat juga video demonstrasi yang diberikan di bawah.
Harap anda memahami projek dan menikmati membina sesuatu yang berguna. Sekiranya anda mempunyai pertanyaan, tinggalkan di bahagian komen di bawah atau gunakan forum kami untuk pertanyaan teknikal yang lain.