- Komponen yang Dibutuhkan:
- Diagram Sirkuit:
- Mengukur Suhu dengan LM35 menggunakan 8051:
- LCD 16x2:
- IC ADC0804:
- Sensor Suhu LM35:
- Penjelasan kode:
Terkadang orang kesulitan membaca suhu dari termometer analog karena fluktuasi. Jadi disini kita akan membuat termometer digital sederhana dengan menggunakan mikrokontroler 8051 dimana sensor LM35 digunakan untuk mengukur suhu. Kami juga telah menggunakan LM35 untuk membuat termometer digital menggunakan Arduino, NodeMCU, PIC, Raspberry Pi, dan mikrokontroler lainnya.
Proyek ini juga akan berfungsi sebagai antarmuka yang tepat dari ADC0804 dengan 8051 dan LCD 16 * 2 dengan mikrokontroler 8051.
Komponen yang Dibutuhkan:
- 8.051 papan pengembangan
- Papan ADC0804
- Layar LCD 16 * 2
- Sensor LM35
- Potensiometer
- Kabel jumper
Diagram Sirkuit:
Diagram rangkaian untuk Rangkaian Termometer Digital menggunakan LM35 diberikan di bawah ini:
Mengukur Suhu dengan LM35 menggunakan 8051:
Mikrokontroler 8051 adalah mikrokontroler 8 bit yang memiliki RAM on chip 128 byte, ROM on chip 4K byte, dua timer, satu port serial dan empat port 8bit. Mikrokontroler 8052 merupakan perpanjangan dari mikrokontroler. Tabel di bawah ini menunjukkan perbandingan 8.051 anggota keluarga.
Fitur |
8051 |
8052 |
ROM (dalam byte) |
4K |
8K |
RAM (byte) |
128 |
256 |
Timer |
2 |
3 |
Pin I / O |
32 |
32 |
Port serial |
1 |
1 |
Sumber interupsi |
6 |
8 |
LCD 16x2:
16 * 2 LCD adalah layar yang banyak digunakan untuk aplikasi tertanam. Berikut adalah penjelasan singkat tentang pin dan cara kerja layar LCD 16 * 2. Ada dua register yang sangat penting di dalam LCD. Mereka adalah register data dan register perintah. Register perintah digunakan untuk mengirim perintah seperti clear display, cursor di home dll, register data digunakan untuk mengirim data yang akan ditampilkan pada LCD 16 * 2. Tabel di bawah ini menunjukkan deskripsi pin 16 * 2 lcd.
Pin |
Simbol |
I / O |
Deskripsi |
1 |
Vss |
- |
Tanah |
2 |
Vdd |
- |
+ Catu daya 5V |
3 |
Vee |
- |
Catu daya untuk mengontrol kontras |
4 |
RS |
saya |
RS = 0 untuk register perintah, RS = 1 untuk register data |
5 |
RW |
saya |
R / W = 0 untuk menulis, R / W = 1 untuk membaca |
6 |
E |
I / O |
Memungkinkan |
7 |
D0 |
I / O |
Bus data 8-bit (LSB) |
8 |
D1 |
I / O |
Bus data 8-bit |
9 |
D2 |
I / O |
Bus data 8-bit |
10 |
D3 |
I / O |
Bus data 8-bit |
11 |
D4 |
I / O |
Bus data 8-bit |
12 |
D5 |
I / O |
Bus data 8-bit |
13 |
D6 |
I / O |
Bus data 8-bit |
14 |
D7 |
I / O |
Bus data 8-bit (MSB) |
15 |
SEBUAH |
- |
+ 5V untuk lampu latar |
16 |
K |
- |
Tanah |
Tabel di bawah ini menunjukkan kode perintah LCD yang sering digunakan.
Kode (hex) |
Deskripsi |
01 |
Hapus tampilan layar |
06 |
Kursor kenaikan (shift kanan) |
0A |
Tampilan mati, kursor hidup |
0C |
Tampilan hidup, kursor mati |
0F |
Tampilan aktif, kursor berkedip |
80 |
Memaksa kursor ke awal 1 st baris |
C0 |
Memaksa kursor ke awal 2 nd baris |
38 |
2 baris dan matriks 5 * 7 |
IC ADC0804:
The ADC0804 IC adalah paralel ADC 8-bit di keluarga seri ADC0800 dari National Semiconductor. Ia bekerja dengan +5 volt dan memiliki resolusi 8bits. Ukuran langkah dan kisaran Vin bervariasi untuk nilai Vref / 2 yang berbeda. Tabel di bawah ini menunjukkan hubungan antara rentang Vref / 2 dan Vin.
Vref / 2 (V) |
Vin (V) |
Ukuran langkah (mV) |
Buka |
0 sampai 5 |
19.53 |
2.0 |
0 sampai 4 |
15.62 |
1.5 |
0 sampai 3 |
11.71 |
1.28 |
0 hingga 2,56 |
10 |
Dalam kasus kami Vref / 2 terhubung ke 1,28 volt, jadi ukuran langkahnya adalah 10mV. Untuk ADC0804 ukuran langkah dihitung sebagai (2 * Vref / 2) / 256.
Rumus berikut digunakan untuk menghitung tegangan keluaran:
Dout = Vin / ukuran langkah
Dimana Dout adalah keluaran data digital dalam desimal, Vin = tegangan masukan analog dan ukuran langkah (resolusi) adalah perubahan terkecil. Pelajari lebih lanjut tentang ADC0804 di sini, periksa juga antarmuka ADC0808 dengan 8051.
Sensor Suhu LM35:
LM35 adalah sensor suhu yang tegangan keluarannya berbanding lurus dengan suhu Celcius. LM35 sudah dikalibrasi sehingga tidak memerlukan kalibrasi eksternal. Ini menghasilkan 10mV untuk setiap derajat suhu Celcius.
Sensor LM35 menghasilkan tegangan yang sesuai dengan suhu. Tegangan ini diubah menjadi digital (0 hingga 256) oleh ADC0804 dan diumpankan ke mikrokontroler 8.051. Mikrokontroler 8051 mengubah nilai digital ini menjadi suhu dalam derajat Celcius. Kemudian suhu ini diubah menjadi bentuk ascii yang cocok untuk ditampilkan. Nilai ascii ini diumpankan ke LCD 16 * 2 yang menampilkan suhu di layarnya. Proses ini diulangi setelah interval yang ditentukan.
Berikut adalah gambar pengaturan Termometer Digital LM35 dengan menggunakan 8051:
Anda dapat menemukan semua termometer digital berbasis LM35 di sini.
Penjelasan kode:
Program C lengkap untuk Termometer Digital ini menggunakan LM35 diberikan di akhir proyek ini. Kode tersebut dibagi menjadi beberapa bagian kecil yang berarti dan dijelaskan di bawah ini.
Untuk interface LCD 16 * 2 dengan mikrokontroler 8051, kita harus menentukan pin dimana LCD 16 * 2 dihubungkan dengan mikrokontroler 8051. Pin RS dari LCD 16 * 2 terhubung ke P2.7, pin RW 16 * 2 lcd terhubung ke P2.6 dan pin E 16 * 2 lcd terhubung ke P2.5. Pin data dihubungkan ke port 0 mikrokontroler 8.051.
sbit rs = P2 ^ 7; // Register Select (RS) pin 16 * 2 lcd sbit rw = P2 ^ 6; // Baca / Tulis (RW) pin 16 * 2 lcd sbit en = P2 ^ 5; // Aktifkan (E) pin 16 * 2 lcd
Demikian pula untuk ADC0804 interfacing dengan mikrokontroler 8051, kita harus menentukan pin yang dihubungkan ke mikrokontroler ADC0804 8051. Pin RD ADC0804 terhubung ke P3.0, pin WR ADC0804 terhubung ke P3.1 dan pin INTR ADC0804 terhubung ke P3.2. Pin data dihubungkan ke port 1 mikrokontroler 8.051.
sbit rd_adc = P3 ^ 0; // Baca (RD) pin ADC0804 sbit wr_adc = P3 ^ 1; // Tulis (WR) pin ADC0804 sbit intr_adc = P3 ^ 2; // Pin Interrupt (INTR) dari ADC0804
Selanjutnya kita harus mendefinisikan beberapa fungsi yang digunakan dalam program. Fungsi Delay digunakan untuk membuat waktu tunda yang ditentukan, fungsi c mdwrt digunakan untuk mengirim perintah ke layar lcd 16 * 2, fungsi datawrt digunakan untuk mengirim data ke layar lcd 16 * 2 dan fungsi convert_display digunakan untuk mengubah data ADC menjadi suhu dan untuk menampilkannya pada layar lcd 16 * 2.
batal penundaan (unsigned int); // fungsi untuk membuat cmdwrt penundaan void (unsigned char); // fungsi untuk mengirimkan perintah ke 16 * 2 layar lcd void datawrt (unsigned char); // berfungsi untuk mengirim data ke layar lcd 16 * 2 void convert_display (unsigned char); // berfungsi untuk mengubah nilai ADC menjadi temperatur dan menampilkannya pada layar lcd 16 * 2
Di bawah bagian kode, kami mengirimkan perintah ke 16 * 2 lcd. Perintah seperti tampilan yang jelas, kursor kenaikan, memaksa kursor ke awal 1 st baris dikirim ke layar satu 16 * 2 lcd oleh salah satu setelah beberapa ditentukan waktu tunda.
for (i = 0; i <5; i ++) // kirim perintah ke 16 * 2 layar lcd satu perintah dalam satu waktu {cmdwrt (cmd); // panggilan fungsi untuk mengirim perintah ke penundaan tampilan lcd 16 * 2 (1); }
Di bagian kode ini, kami mengirimkan data ke LCD 16 * 2. Data yang akan ditampilkan pada layar lcd 16 * 2 dikirim untuk ditampilkan satu per satu setelah beberapa waktu tunda.
for (i = 0; i <12; i ++) // mengirim data ke layar LCD 16 * 2 satu karakter pada satu waktu {datawrt (data1); // panggilan fungsi untuk mengirim data ke penundaan tampilan lcd 16 * 2 (1); } Pada bagian kode ini kita mengubah tegangan analog yang dihasilkan oleh sensor LM35 menjadi data digital kemudian diubah menjadi temperatur dan ditampilkan pada layar lcd 16 * 2. Untuk ADC0804 untuk memulai konversi kita harus mengirim pulsa rendah ke tinggi pada pin WR ADC0804, kemudian kita harus menunggu konversi berakhir. INTR menjadi rendah di akhir konversi. Setelah INTR menjadi rendah, RD dibuat rendah untuk menyalin data digital ke port 0 dari 8051 mikrokontroler. Setelah penundaan waktu yang ditentukan, siklus berikutnya dimulai. Proses ini berulang selamanya.
while (1) // ulangi selamanya {wr_adc = 0; // kirim pulsa RENDAH ke TINGGI pada penundaan pin WR (1); wr_adc = 1; sementara (intr_adc == 1); // tunggu Akhir Konversi rd_adc = 0; // buat RD = 0 untuk membaca data dari ADC0804 value = P1; // salin data ADC convert_display (nilai); // panggilan fungsi untuk mengubah data ADC menjadi suhu dan menampilkannya pada penundaan tampilan LCD 16 * 2 (1000); // interval antara setiap siklus rd_adc = 1; // buat RD = 1 untuk siklus berikutnya}
Di bawah bagian kode, kami mengirimkan perintah ke layar lcd 16 * 2. Perintah tersebut disalin ke port 0 dari 8051 mikrokontroler. RS dibuat rendah untuk penulisan perintah. RW dibuat rendah untuk operasi tulis. Pulsa tinggi ke rendah diterapkan pada pin pengaktifan (E) untuk memulai operasi penulisan perintah.
batal cmdwrt (unsigned char x) {P0 = x; // kirim perintah ke Port 0 di mana LCD 16 * 2 terhubung rs = 0; // buat RS = 0 untuk perintah rw = 0; // buat RW = 0 untuk operasi tulis en = 1; // kirim pulsa TINGGI ke RENDAH pada pin Aktifkan (E) untuk memulai penundaan operasi penulisan perintah (1); en = 0; }
Pada bagian kode ini, kami mengirimkan data ke layar lcd 16 * 2. Data tersebut disalin ke port 0 dari 8051 mikrokontroler. RS dibuat tinggi untuk penulisan perintah. RW dibuat rendah untuk operasi tulis. Pulsa tinggi ke rendah diterapkan pada pin pengaktifan (E) untuk memulai operasi penulisan data.
batal datawrt (unsigned char y) {P0 = y; // kirim data ke Port 0 di mana LCD 16 * 2 terhubung rs = 1; // buat RS = 1 untuk perintah rw = 0; // buat RW = 0 untuk operasi tulis en = 1; // kirim pulsa TINGGI ke RENDAH pada pin Aktifkan (E) untuk memulai penundaan operasi penulisan data (1); en = 0; }
Pada bagian kode ini, kami mengubah data digital menjadi suhu dan menampilkannya pada layar lcd 16 * 2.
void convert_display (unsigned char value) {unsigned char x1, x2, x3; cmdwrt (0xc6); // perintah untuk mengatur kursor ke posisi ke-6 dari baris ke-2 pada 16 * 2 lcd x1 = (nilai / 10); // bagi nilainya dengan 10 dan simpan hasil bagi dalam variabel x1 x1 = x1 + (0x30); // konversikan variabel x1 ke ascii dengan menambahkan 0x30 x2 = nilai% 10; // bagi nilainya dengan 10 dan simpan sisanya dalam variabel x2 x2 = x2 + (0x30); // konversikan variabel x2 ke ascii dengan menambahkan 0x30 x3 = 0xDF; // nilai ascii derajat (°) simbol datawrt (x1); // menampilkan suhu pada 16 * 2 layar lcd datawrt (x2); datawrt (x3); datawrt ('C'); }
Juga, periksa termometer lain menggunakan LM35 dengan mikrokontroler berbeda:
- Termometer Digital menggunakan Arduino dan LM35
- Pengukuran Suhu menggunakan Mikrokontroler LM35 dan AVR
- Pengukuran Suhu Ruangan dengan Raspberry Pi