Dalam projek ini, kami akan membuat Sistem Peringatan Kebakaran menggunakan mikrokontroler ATMEGA8 dan sensor kebakaran. Sensor kebakaran boleh menjadi jenis apa pun, namun kami menggunakan Fire Sensor berdasarkan IR (Infrared). Walaupun Sensor Kebakaran berasaskan IR mempunyai beberapa keburukan yang kebanyakannya adalah ketidaktepatan, itu adalah kaedah paling murah dan paling mudah untuk mengesan kebakaran.
Sensor Kebakaran Berbasis IR mempunyai penglihatan penginderaan yang lebih rendah, jadi kami akan memasang sensor api pada motor servo. Servo akan membuat putaran pendulum 180 darjah. Dengan sensor Api yang terpasang di atasnya, kita dapat melihat penglihatan api 270+ darjah. Servo akan berputar secara berterusan sehingga memberikan sistem amaran kebakaran bilik yang lengkap. Untuk lebih tepatnya kita dapat menambahkan sensor asap ke sistem. Dengan itu kita dapat memperoleh ketepatan yang lebih tinggi.
Komponen Litar
Perkakasan: Bekalan kuasa + 5v, Motor servo (sg90), ATMEGA8, BUZZER, Butang, perintang 10KΩ, perintang 1KΩ, perintang 220Ω, kapasitor 100nF, PROGRAMMER AVR-ISP.
Perisian: Atmel studio 6.1, progisp atau flash magic.
Diagram Litar & Bekerja
Agar poros servo bergerak ke kiri jauh kita perlu memberi 1/18 menghidupkan catuan, dan untuk poros berputar sepanjang jalan ke kiri, kita perlu memberi PWM dengan jatah tugas 2/18. Kami akan memprogram ATMEGA8 untuk memberikan isyarat PWM yang akan memutar poros servo ke 180 dan kemudian ke 0 setelah kelewatan tertentu.
Sepanjang masa yang lengkap, Sensor Kebakaran akan menyala dan pengawal akan berjaga-jaga. Sekiranya terdapat kebakaran, sensor memberikan denyut nadi yang tinggi ini apabila dikesan oleh pengawal, ia menetapkan penggera. Penggera akan dimatikan dengan menekan butang reset yang disambungkan kepadanya.
Di atmega8 untuk tiga saluran PWM, kami telah menetapkan tiga pin. Kami hanya dapat mengambil output PWM pada pin ini sahaja. Oleh kerana kita menggunakan PWM1 kita harus mengambil isyarat PWM pada pin OC1A (PORTB 1 st PIN). Seperti yang ditunjukkan dalam rajah litar, kami menyambungkan isyarat servo ke pin OC1A. Di sini perkara lain ialah lebih daripada tiga saluran PWM, dua saluran PWM 8-bit dan satu saluran PWM 16-bit. Kami akan menggunakan saluran PWM 16-bit di sini.
Di ATMEGA terdapat beberapa cara untuk menghasilkan PWM, seperti itu
1. Fasa PWM yang betul.
2. PWM pantas.
Di sini kita akan memastikan semuanya mudah, Oleh itu, kita akan menggunakan kaedah FAST PWM untuk menghasilkan isyarat PWM.
Pertama untuk memilih frekuensi PWM, Ini bergantung pada aplikasi biasanya, untuk LED frekuensi lebih besar daripada 50Hz akan berlaku. Oleh itu, kami memilih jam kaunter 1MHZ. Oleh itu, kami tidak memilih preskalar. Prescalar adalah nombor yang dipilih sedemikian rupa untuk mendapatkan jam kaunter yang lebih rendah. Sebagai contoh jika jam pengayun adalah 8Mhz, kita dapat memilih preskalar '8' untuk mendapatkan jam 1MHz untuk pembilang. Preskalar dipilih berdasarkan kekerapan. Sekiranya kita mahukan lebih banyak denyutan jangka masa, kita harus memilih prescalar yang lebih tinggi.
Sekarang untuk mengeluarkan PWM CEPAT 50Hz dari ATMEGA, kita perlu mengaktifkan bit yang sesuai dalam daftar " TCCR1B ".
Di sini, CS10, CS11, CS12 (KUNING) - pilih prescalar untuk memilih jam kaunter. Jadual untuk prescalar yang sesuai ditunjukkan dalam jadual di bawah. Jadi untuk prescaling satu (jam pengayun = jam kaunter).
jadi CS10 = 1, dua bit lain adalah sifar.
MERAH (WGM10-WGM13): diubah untuk memilih mod penjanaan bentuk gelombang, berdasarkan jadual di bawah, untuk PWM cepat. Kami mempunyai WGM11, WGM12 dan WGM12 ditetapkan ke 1.
Sekarang kita tahu bahawa PWM adalah isyarat dengan catuan tugas yang berbeza atau masa Pusing AKTIF yang berbeza. Sehingga kini kami telah memilih frekuensi dan jenis PWM. Tema utama bab ini terdapat di bahagian ini. Untuk mendapatkan jatah tugas yang berbeza, Kami akan memilih nilai antara 0 dan 255 (2 ^ 8 kerana 8 bit). Katakan kita memilih nilai 180, kerana penghitung mula menghitung dari 0 dan mencapai nilai 180, tindak balas output mungkin akan dipicu. Pencetus ini mungkin terbalik atau tidak terbalik. Itu adalah output yang dapat diberitahu untuk berhenti ketika mencapai hitungan, atau dapat dikatakan untuk menarik ketika mencapai hitungan.
HIJAU (COM1A1, COM1A0): Pilihan menarik atau turun ini dipilih oleh bit CM1A0 dan CM1A1.
Seperti yang ditunjukkan dalam jadual, untuk output menjadi tinggi dibandingkan dan output akan tetap tinggi sehingga nilai maksimum. Kita mesti memilih mod terbalik untuk melakukannya, jadi COM1A0 = 1; COM1A1 = 1.
Seperti ditunjukkan dalam gambar di bawah, OCR1A (Output Bandingkan Register 1A) adalah bait yang menyimpan nilai yang dipilih pengguna. Oleh itu, jika kita menukar OCR1A = 180, pengawal mencetuskan perubahan (tinggi) apabila pembilang mencapai 180 dari 0.
OCR1A mestilah 19999-600 untuk 180 darjah dan 19999-2400 untuk 0 darjah.