Dalam projek ini kita akan merancang litar untuk mengukur suhu. Litar ini dikembangkan menggunakan " LM35 ", sensor voltan linier. Suhu biasanya diukur dalam "Centigrade" atau "Faraheite". Sensor "LM35" memberikan output berdasarkan skala selsius.
LM35 adalah transistor tiga pin seperti peranti. Ia mempunyai VCC, GND dan OUTPUT. Sensor ini memberikan voltan berubah pada output berdasarkan suhu.
Seperti yang ditunjukkan dalam gambar di atas, untuk setiap kenaikan suhu +1 celcius akan ada + 10mV output yang lebih tinggi. Jadi jika suhu 0◦ celcius output sensor akan 0V, jika suhu 10◦ celcius output sensor akan + 100mV, jika suhu 25◦ celcius output sensor akan + 250mV.
Jadi buat masa ini dengan LM35 kita mendapat suhu dalam bentuk voltan berubah. Voltan bergantung pada suhu ini diberikan sebagai input kepada ADC (Analog to Digital Converter) ATMEGA32A. Nilai digital setelah penukaran yang diperoleh ditunjukkan dalam LCD 16x2 sebagai suhu.
Komponen Diperlukan
Perkakasan: ATMEGA32 Mikrokontroler, bekalan kuasa (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), kapasitor 100uF (dua keping), kapasitor 100nF, Sensor Suhu LM35.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Rajah dan Penjelasan Litar
Di litar, PORTB ATMEGA32 disambungkan ke port data LCD. Di sini kita harus ingat untuk mematikan komunikasi JTAG di PORTC atau ATMEGA dengan menukar bait fius, jika seseorang ingin menggunakan PORTC sebagai port komunikasi biasa. Dalam LCD 16x2 terdapat 16 pin di atas semua jika ada lampu belakang, jika tidak ada lampu belakang akan ada 14 pin. Seseorang boleh menghidupkan atau meninggalkan pin lampu belakang. Sekarang dalam 14 pin terdapat 8 data pin (7-14 atau D0-D7), 2 pin bekalan kuasa (1 & 2 atau VSS & VDD atau GND & + 5V), 3 rd pin untuk kawalan kontras (VEE-kawalan berapa tebal watak-watak perlu ditunjukkan), 3 pin kawalan (RS & RW & E).
Di litar, anda dapat melihat bahawa saya hanya mengambil dua pin kawalan kerana ini memberikan fleksibiliti pemahaman yang lebih baik. Bit kontras dan BACA / MENULIS tidak sering digunakan sehingga boleh dipendekkan ke tanah. Ini meletakkan LCD dalam mod kontras dan baca tertinggi. Kita hanya perlu mengawal pin ENABLE dan RS untuk menghantar watak dan data yang sesuai.
Sambungan yang dilakukan untuk LCD diberikan di bawah:
PIN1 atau VSS ------------------ landasan
PIN2 atau VDD atau VCC ------------ + 5v power
PIN3 atau VEE --------------- ground (memberikan kontras maksimum terbaik untuk pemula)
PIN4 atau RS (Pemilihan Daftar) --------------- PD6 dari uC
PIN5 atau RW (Baca / Tulis) ----------------- tanah (meletakkan LCD dalam mod 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
Di litar anda dapat melihat kami telah menggunakan komunikasi 8bit (D0-D7) namun ini bukan suatu yang wajib, kami dapat menggunakan komunikasi 4bit (D4-D7) tetapi dengan program komunikasi 4 bit menjadi sedikit rumit jadi saya telah memilih 8 bit komunikasi.
Oleh itu, dari pemerhatian dari jadual di atas, kita menyambungkan 10 pin LCD ke pengawal di mana 8 pin adalah pin data dan 2 pin untuk kawalan. Output voltan yang disediakan oleh sensor tidak linear sepenuhnya; ia akan menjadi bising. Untuk menyaring kebisingan, kapasitor perlu diletakkan pada output sensor seperti yang ditunjukkan pada gambar.
Sebelum melangkah ke hadapan, kita perlu membincangkan ADC ATMEGA32A. Di ATMEGA32A, kita dapat memberikan input Analog ke salah satu daripada lapan saluran PORTA, tidak kira saluran mana yang kita pilih kerana semuanya sama. Kami akan memilih saluran 0 atau PIN0 PORTA. Di ATMEGA32A, ADC beresolusi 10 bit, jadi pengawal dapat mengesan perubahan Vref / 2 ^ 10 minimum, jadi jika voltan rujukan adalah 5V, kita mendapat kenaikan output digital untuk setiap 5/2 ^ 10 = 5mV. Oleh itu, untuk setiap kenaikan 5mV input, kita akan mendapat kenaikan satu pada output digital.
Sekarang kita perlu menetapkan daftar ADC berdasarkan syarat berikut:
1. Pertama sekali kita perlu mengaktifkan ciri ADC di ADC.
2. Oleh kerana kita mengukur suhu bilik, kita tidak benar-benar memerlukan nilai melebihi ratus darjah (output 1000mV LM35). Oleh itu, kita boleh menetapkan nilai maksimum atau rujukan ADC hingga 2.5V.
3. Pengawal mempunyai ciri penukaran pemicu, itu bermaksud penukaran ADC hanya berlaku setelah pemicu luaran, kerana kita tidak mahu bahawa kita perlu menetapkan daftar agar ADC berjalan dalam mod bebas berjalan berterusan.
4. Untuk mana-mana ADC, kekerapan penukaran (Nilai analog ke nilai Digital) dan ketepatan output digital berkadar songsang. Oleh itu, untuk ketepatan output digital yang lebih baik, kita harus memilih frekuensi yang lebih rendah. Untuk jam ADC yang lebih rendah, kami menetapkan nilai tambah ADC ke nilai maksimum (128). Oleh kerana kita menggunakan jam dalaman 1MHZ, jam ADC akan menjadi (1000000/128).
Ini adalah satu-satunya empat perkara yang perlu kita ketahui untuk memulakan ADC. Semua empat ciri di atas ditetapkan oleh dua daftar.
MERAH (ADEN): Bit ini harus ditetapkan untuk mengaktifkan ciri ADC ATMEGA.
BLUE (REFS1, REFS0): Kedua-dua bit ini digunakan untuk menetapkan voltan rujukan (atau voltan masukan maksimum yang akan kita berikan). Oleh kerana kita ingin mempunyai voltan rujukan 2.56V, REFS0 dan REFS1 keduanya harus ditetapkan, mengikut jadual.
LIGHT GREEN (ADATE): Bit ini mesti ditetapkan agar ADC dapat berjalan berterusan (mod berjalan percuma).
PINK (MUX0-MUX4): Lima bit ini adalah untuk memberitahu saluran input. Oleh kerana kita akan menggunakan ADC0 atau PIN0, kita tidak perlu menetapkan bit seperti pada jadual.
BROWN (ADPS0-ADPS2): ketiga-tiga bit ini adalah untuk menetapkan preskalar untuk ADC. Contohnya kita menggunakan prescalar 128, kita harus menetapkan ketiga-tiga bit.
DARK GREEN (ADSC): bit ini ditetapkan untuk ADC memulakan penukaran. Bit ini boleh dilumpuhkan dalam program apabila kita perlu menghentikan penukaran.
Untuk membuat projek ini dengan Arduino, lihat tutorial ini: Termometer Digital menggunakan Arduino
Penjelasan Pengaturcaraan
Cara kerja PENGUKURAN TEMPARATUR dijelaskan dengan langkah demi langkah kod C yang diberikan di bawah:
#include // header untuk membolehkan kawalan aliran data ke atas pin
#define F_CPU 1000000 // memberitahu frekuensi kristal pengawal dilampirkan
#sertakan
#define E 5 // memberikan nama "aktifkan" ke pin ke- 5 PORTD, kerana disambungkan ke LCD mengaktifkan pin
#definisi RS 6 // memberikan nama "registerelection" ke pin ke- 6 PORTD, kerana disambungkan ke pin LCD RS
batal send_a_command (perintah char yang tidak ditandatangani);
batal send_a_character (watak char yang tidak ditandatangani);
batal send_a_string (char * string_of_characters);
int utama (tidak sah)
{
DDRB = 0xFF; // meletakkan portB dan portD sebagai pin output
DDRD = 0xFF;
_delay_ms (50); // memberikan kelewatan 50ms
DDRA = 0; // Mengambil portA sebagai input.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}