Bu projede ATMEGA8 mikrodenetleyicisi ve yangın sensörü kullanarak Yangın Alarm Sistemi yapacağız. Yangın sensörü herhangi bir türde olabilir, ancak biz IR (Kızılötesi) tabanlı Yangın Sensörü kullanıyoruz. IR tabanlı Yangın Sensörleri, çoğunlukla yanlışlık gibi bazı dezavantajlara sahip olsa da, yangını tespit etmenin en ucuz ve en kolay yoludur.
IR Tabanlı Yangın sensörleri daha az algılama görüşüne sahiptir, bu nedenle yangın sensörünü bir servo motora monte edeceğiz. Servo 180 derece sarkaç dönüşü yapacak. Üzerine monte edilen Yangın sensörü ile 270+ derece yangın algılama görüşü elde ediyoruz. Servo sürekli olarak dönecek ve böylece eksiksiz bir oda yangın alarm sistemi verecektir. Daha fazla doğruluk için sisteme bir duman sensörü ekleyebiliriz. Bununla daha yüksek doğruluk elde edebiliriz.
Devre Bileşenleri
Donanım: + 5v güç kaynağı, Servo motor (sg90), ATMEGA8, BUZZER, Düğme, 10KΩ direnç, 1KΩ direnç, 220Ω direnç, 100nF kapasitör, AVR-ISP PROGRAMMER.
Yazılım: Atmel studio 6.1, progisp veya flash magic.
Devre Şeması ve Çalışma
Servo şaftın tamamen sola doğru hareket etmesi için 1/18 oranında rasyon vermemiz, şaftın tamamen sola dönmesi için ise 2/18 oranında PWM vermemiz gerekir. ATMEGA8'i, servo şaftı 180'e ve ardından belirli bir gecikmeden sonra 0'a döndürecek bir PWM sinyali verecek şekilde programlayacağız.
Tam süre boyunca Yangın Sensörü açık olacak ve kontrol cihazı tam alarm verecektir. Bir yangın varsa, sensör, kontrolör tarafından algılandığında bu darbe yüksek bir darbe sağlar ve alarm verir. Alarm, kendisine bağlı bir sıfırlama düğmesine basılarak kapatılacaktır.
Üç PWM kanalı için atmega8'de, üç pim belirledik. Sadece bu pinlerde sadece PWM çıkışı alabiliyoruz. Biz PWM1 kullandığımız için biz OC1A pin (PORTB 1 PWM sinyalini almalı st PIN). Devre şemasında gösterildiği gibi servo sinyalini OC1A pinine bağlıyoruz. Burada başka bir şey üç PWM kanalı üzerindedir, ikisi 8 bit PWM kanalı ve bir 16 bit PWM kanalı. Burada 16 bitlik bir PWM kanalı kullanacağız.
ATMEGA'da PWM oluşturmanın birkaç yolu vardır, bunlar
1. Faz doğru PWM.
2. Hızlı PWM.
Burada her şeyi basit tutacağız, bu yüzden PWM sinyalini oluşturmak için FAST PWM yöntemini kullanacağız.
İlk önce PWM frekansını seçmek, bu genellikle uygulamaya bağlıdır, bir LED için 50Hz'den büyük herhangi bir frekans bunu yapacaktır. Bu nedenle 1MHZ sayaç saatini seçiyoruz, bu yüzden hiçbir prescalar seçmiyoruz. Prescalar, daha düşük bir sayaç saati elde etmek için bu şekilde seçilen bir sayıdır. Örneğin, osilatör saati 8Mhz ise, sayaç için 1MHz'lik bir saat elde etmek için bir '8' ön katmanı seçebiliriz. Prescalar, frekansa göre seçilir. Daha fazla zaman periyodu darbesi istiyorsak, daha yüksek preskalar seçmeliyiz.
Şimdi ATMEGA'dan FAST PWM 50Hz saatini almak için, " TCCR1B " yazmacındaki uygun bitleri etkinleştirmemiz gerekiyor.
Buraya, CS10, CS11, CS12 (SARI) - sayaç saati seçmek için ön katmanı seçin. Uygun preskalar için tablo aşağıdaki tabloda gösterilmektedir. Yani birini önceden ölçeklendirmek için (osilatör saati = karşı saat).
yani CS10 = 1, diğer iki bit sıfırdır.
KIRMIZI (WGM10-WGM13): Hızlı PWM için aşağıdaki tabloya dayalı olarak dalga formu oluşturma modlarını seçmek için değiştirilir. WGM11, WGM12 ve WGM12 1 olarak ayarlandık.
Artık PWM'nin farklı görev oranına veya farklı AÇMA KAPAMA sürelerine sahip bir sinyal olduğunu biliyoruz. Şimdiye kadar PWM'nin sıklığını ve türünü seçtik. Bu bölümün ana teması bu bölümde yatmaktadır. Farklı görev oranı elde etmek için 0 ile 255 (8 bit nedeniyle 2 ^ 8) arasında bir değer seçeceğiz. Sayaç 0'dan saymaya başladığında ve 180 değerine ulaştığında, 180 değerini seçtiğimizi varsayalım, çıkış yanıtı tetiklenebilir. Bu tetikleyici ters dönebilir veya tersine çevrilemez. Yani çıktının sayıma ulaşıldığında yukarı çekilmesi söylenebilir veya sayıma ulaşıldığında aşağı çekilmesi söylenebilir.
YEŞİL (COM1A1, COM1A0): Bu yukarı veya aşağı çekme seçimi CM1A0 ve CM1A1 bitleri tarafından seçilir.
Tabloda gösterildiği gibi, karşılaştırmada çıkışın yüksek olması ve çıkışın maksimum değere kadar yüksek kalması için. Bunu yapmak için ters çevirme modunu seçmeliyiz, yani COM1A0 = 1; COM1A1 = 1.
Aşağıdaki şekilde gösterildiği gibi, OCR1A (Çıkış Karşılaştırma Kaydı 1A), kullanıcının seçtiği değeri depolayan bayttır. Dolayısıyla, OCR1A = 180'i değiştirirsek, denetleyici, sayaç 0'dan 180'e ulaştığında değişikliği (yüksek) tetikler.
OCR1A, 180 derece için 19999-600 ve 0 derece için 19999-2400 olmalıdır.