Dalam proyek ini kita akan merancang sirkuit untuk mengukur suhu. Sirkuit ini dikembangkan dengan menggunakan “ LM35 ”, sebuah sensor tegangan linier. Suhu biasanya diukur dalam "Celcius" atau "Faraheite". Sensor “LM35” memberikan keluaran berdasarkan skala celcius.
LM35 adalah transistor seperti tiga pin. Ini memiliki VCC, GND dan OUTPUT. Sensor ini memberikan tegangan variabel pada keluaran berdasarkan suhu.
Seperti yang ditunjukkan pada gambar di atas, untuk setiap kenaikan suhu +1 celcius akan ada output + 10mV lebih tinggi. Jadi jika suhu 0◦C maka keluaran sensor akan menjadi 0V, jika suhu 10◦C maka keluaran sensor akan menjadi + 100mV, jika suhu 25◦ Celcius keluaran sensor akan menjadi + 250mV.
Jadi untuk saat ini dengan LM35 kita mendapatkan temperatur dalam bentuk tegangan variabel. Tegangan tergantung suhu ini diberikan sebagai input ke ADC (Analog to Digital Converter) dari ATMEGA32A. Nilai digital setelah konversi diperoleh ditampilkan pada LCD 16x2 sebagai suhu.
Komponen Diperlukan
Perangkat keras: Mikrokontroler ATMEGA32, power supply (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), kapasitor 100uF (dua buah), kapasitor 100nF, Sensor Suhu LM35.
Perangkat lunak: Atmel studio 6.1, progisp atau flash magic.
Diagram Sirkuit dan Penjelasannya
Pada rangkaian tersebut, PORTB ATMEGA32 terhubung ke port data LCD. Di sini orang harus ingat untuk menonaktifkan komunikasi JTAG di PORTC atau ATMEGA dengan mengubah byte sekering, jika seseorang ingin menggunakan PORTC sebagai port komunikasi normal. Pada LCD 16x2 terdapat 16 pin seluruhnya jika ada lampu belakang, jika tidak ada lampu belakang akan ada 14 pin. Satu dapat memberi daya atau meninggalkan pin lampu belakang. Sekarang di 14 pin ada 8 data pin (7-14 atau D0-D7), 2 pin power supply (1 & 2 atau VSS & Vdd atau gnd & + 5V), 3 rd pin untuk kontrol kontras (VEE-kontrol seberapa tebal karakter harus ditampilkan), 3 pin kontrol (RS & RW & E).
Di sirkuit, Anda dapat mengamati bahwa saya hanya mengambil dua pin kontrol karena ini memberikan fleksibilitas pemahaman yang lebih baik. Bit kontras dan BACA / TULIS tidak sering digunakan sehingga dapat disingkat menjadi ground. Ini menempatkan LCD dalam kontras tertinggi dan mode baca. Kita hanya perlu mengontrol pin ENABLE dan RS untuk mengirim karakter dan data yang sesuai.
Koneksi yang dilakukan untuk LCD diberikan di bawah ini:
PIN1 atau VSS ------------------ ground
PIN2 atau VDD atau VCC ------------ + daya 5v
PIN3 atau VEE --------------- ground (memberikan kontras maksimum terbaik untuk pemula)
PIN4 atau RS (Daftar Pilihan) --------------- PD6 dari UC
PIN5 atau RW (Baca / Tulis) ----------------- ground (menempatkan LCD dalam mode baca memudahkan komunikasi untuk pengguna)
PIN6 atau E (Aktifkan) ------------------- PD5 dari UC
PIN7 atau D0 ----------------------------- PB0 dari UC
PIN8 atau D1 ----------------------------- PB1 dari UC
PIN9 atau D2 ----------------------------- PB2 dari UC
PIN10 atau D3 ----------------------------- PB3 dari UC
PIN11 atau D4 ----------------------------- PB4 dari UC
PIN12 atau D5 ----------------------------- PB5 dari UC
PIN13 atau D6 ----------------------------- PB6 dari UC
PIN14 atau D7 ----------------------------- PB7 dari UC
Pada rangkaian ini kita dapat melihat kita telah menggunakan komunikasi 8bit (D0-D7) namun ini tidak wajib, kita dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi agak rumit jadi saya telah memilih 8 bit komunikasi.
Jadi dari pengamatan dari tabel diatas kita menghubungkan 10 pin LCD ke controller dimana 8 pin adalah pin data dan 2 pin untuk kontrol. Output tegangan yang diberikan oleh sensor tidak sepenuhnya linier; itu akan menjadi salah satu yang berisik. Untuk menyaring kebisingan kapasitor perlu ditempatkan pada keluaran sensor seperti yang ditunjukkan pada gambar.
Sebelum melanjutkan kita perlu berbicara tentang ADC dari ATMEGA32A. Di ATMEGA32A, kita dapat memberikan input Analog ke salah satu dari delapan saluran PORTA, tidak masalah saluran mana yang kita pilih karena semuanya sama. Kami akan memilih saluran 0 atau PIN0 dari PORTA. Di ATMEGA32A, ADC memiliki resolusi 10 bit, sehingga pengontrol dapat mendeteksi perubahan minimum Vref / 2 ^ 10, jadi jika tegangan referensi 5V kita mendapatkan kenaikan keluaran digital untuk setiap 5/2 ^ 10 = 5mV. Jadi untuk setiap kenaikan 5mV dalam input, kami akan memiliki kenaikan satu pada output digital.
Sekarang kita perlu mengatur register ADC berdasarkan ketentuan berikut:
1. Pertama-tama kita perlu mengaktifkan fitur ADC di ADC.
2. Karena kita mengukur suhu ruangan, kita tidak benar-benar membutuhkan nilai lebih dari seratus derajat (keluaran 1000mV dari LM35). Jadi kita dapat mengatur nilai maksimum atau referensi ADC ke 2.5V.
3. Kontroler memiliki fitur konversi pemicu, yang berarti konversi ADC terjadi hanya setelah pemicu eksternal, karena kita tidak ingin perlu mengatur register untuk ADC agar berjalan dalam mode berjalan bebas berkelanjutan.
4. Untuk ADC apa pun, frekuensi konversi (Nilai analog ke nilai Digital) dan keakuratan keluaran digital berbanding terbalik. Jadi untuk akurasi keluaran digital yang lebih baik kita harus memilih frekuensi yang lebih rendah. Untuk jam ADC yang lebih kecil, kami menyetel presale ADC ke nilai maksimum (128). Karena kita menggunakan clock internal 1MHZ, clock ADC akan menjadi (1000000/128).
Inilah empat hal yang perlu kita ketahui untuk memulai ADC. Keempat fitur di atas diatur oleh dua register.
MERAH (ADEN): Bit ini harus disetel untuk mengaktifkan fitur ADC ATMEGA.
BIRU (REFS1, REFS0): Kedua bit ini digunakan untuk mengatur tegangan referensi (atau tegangan input maks yang akan kami berikan). Karena kami ingin memiliki tegangan referensi 2.56V, REFS0 dan REFS1 keduanya harus diatur, oleh tabel.
LIGHT GREEN (ADATE): Bit ini harus disetel agar ADC terus berjalan (mode berjalan bebas).
PINK (MUX0-MUX4): Lima bit ini untuk memberitahu saluran input. Karena kita akan menggunakan ADC0 atau PIN0, kita tidak perlu mengatur bit apa pun seperti pada tabel.
BROWN (ADPS0-ADPS2): ketiga bit ini untuk mengatur prescalar untuk ADC. Karena kita menggunakan prescalar 128, kita harus mengatur ketiga bit tersebut.
DARK GREEN (ADSC): bit ini diatur untuk ADC untuk memulai konversi. Bit ini dapat dinonaktifkan dalam program ketika kita perlu menghentikan konversi.
Untuk membuat proyek ini dengan Arduino, lihat tutorial ini: Termometer Digital menggunakan Arduino
Penjelasan Pemrograman
Cara kerja PENGUKURAN SUHU paling baik dijelaskan dalam langkah demi langkah kode C yang diberikan di bawah ini:
#include // header untuk mengaktifkan kontrol aliran data pada pin
#define F_CPU 1000000 // memberi tahu frekuensi kristal pengontrol terpasang
#include
#define E 5 // memberi nama "enable" pada pin ke 5 PORTD, karena terhubung ke pin pengaktifan LCD
#define RS 6 // memberi nama “registerselection” pada pin ke 6 PORTD, karena terhubung ke pin LCD RS
void send_a_command (perintah char unsigned);
void send_a_character (karakter karakter tidak bertanda);
batal send_a_string (char * string_of_characters);
int utama (kosong)
{
DDRB = 0xFF; // menempatkan portB dan portD sebagai pin keluaran
DDRD = 0xFF;
_delay_ms (50); // memberikan penundaan 50ms
DDRA = 0; // Mengambil portA sebagai input.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}