İçindekiler:

MQ-7 Sensör Kullanan Arduino CO Monitörü: 8 Adım (Resimlerle)
MQ-7 Sensör Kullanan Arduino CO Monitörü: 8 Adım (Resimlerle)

Video: MQ-7 Sensör Kullanan Arduino CO Monitörü: 8 Adım (Resimlerle)

Video: MQ-7 Sensör Kullanan Arduino CO Monitörü: 8 Adım (Resimlerle)
Video: how to make mq-7 sensor Detector with Arduino 2024, Temmuz
Anonim
MQ-7 Sensörü Kullanan Arduino CO Monitörü
MQ-7 Sensörü Kullanan Arduino CO Monitörü
MQ-7 Sensörü Kullanan Arduino CO Monitörü
MQ-7 Sensörü Kullanan Arduino CO Monitörü

Bu talimatın neden oluşturulduğuna dair birkaç kelime: bir gün kız arkadaşımın annesi gecenin bir yarısı bizi gerçekten hasta hissettiği için aradı - baş dönmesi, taşikardi, mide bulantısı, yüksek tansiyon vardı, hatta bilinmeyen bir zamanda bayıldı (muhtemelen ~5 dakika, ama söylemenin bir yolu yok), hepsi görünürde bir sebep olmadan. Hastanelerden uzakta küçük bir köyde yaşıyor (bizim yerimize 60 km, en yakın hastaneye 30 km, arada normal yol yokken 10 km), bu yüzden ona koştuk ve ambulanstan hemen sonra oraya gittik. Hastaneye kaldırıldı ve sabah kendini neredeyse iyi hissetti, ancak doktorlar bunun nedenini bulamadılar. Ertesi gün aklımıza bir fikir geldi: CO zehirlenmesi olabilirdi, çünkü gazlı su kazanı var (fotoğrafta) ve olay olduğunda bütün akşam yanında oturuyordu. Geçenlerde MQ-7 CO sensörü aldık, ama bunun için bir şema oluşturmaya hiç vaktim olmadı, bu yüzden bunu yapmak için mükemmel bir zamandı. Herhangi bir talimat için internette bir saat arama yaptıktan sonra, aynı zamanda sensör üreticisinin veri sayfasında verilen talimatlarını izleyen ve herhangi bir şeyi açıklayan herhangi bir kılavuz bulamadığımı fark ettim (bir örnek oldukça iyi koda sahip görünüyordu, ancak nasıl uygulanacağı net değildi, diğerleri aşırı basitleştirildi ve iyi çalışmadı). Bu yüzden şemaları geliştirmek, 3 boyutlu kasa yapmak ve yazdırmak, sensörü test etmek ve kalibre etmek için yaklaşık 12 saat harcadık ve ertesi gün şüpheli kazana gittik. Oradaki CO seviyelerinin son derece yüksek olduğu ve CO'ya maruz kalma süresi daha uzun olursa ölümcül olabileceği ortaya çıktı. Bu nedenle, benzer bir duruma sahip olan herkesin (gaz kazanı veya bir yaşam alanında meydana gelen diğer yanmalar gibi) kötü bir şeyin olmasını önlemek için böyle bir sensör alması gerektiğine inanıyorum.

Bütün bunlar iki hafta önce oldu, o zamandan beri şemaları ve programları oldukça geliştirdim ve şimdi oldukça iyi ve nispeten basit görünüyor (3 satır kod basit değil, ama yine de). Her ne kadar hassas CO ölçere sahip birisinin çizime koyduğum varsayılan kalibrasyon hakkında bana bazı geri bildirimler sağlayacağını umsam da - bunun iyi olmaktan çok uzak olduğunu düşünüyorum. İşte bazı deneysel verilerle birlikte eksiksiz bir kılavuz.

Adım 1: Malzeme Listesi

Malzeme Listesi
Malzeme Listesi

İhtiyacınız olacak: 0. Arduino kurulu. 3 $ 'lık olağanüstü fiyatı için Çin Arduino Nano klonunu tercih ederim, ancak herhangi bir 8-bit arduino burada çalışacaktır. Sketch, bazı gelişmiş zamanlayıcı işlemlerini kullanır ve yalnızca atmega328 mikro denetleyicide test edilmiştir - muhtemelen başkalarında da iyi çalışacaktır.1. MQ-7 CO sensörü. Bu Uçan Balık sensör modülü ile en yaygın olarak bulunan, küçük bir değişiklik, sonraki adımda ayrıntıların geçmesi gerekir veya ayrı bir MQ-7 sensörü kullanabilirsiniz.

2. NPN bipolar transistör. 300 mA veya daha fazlasını işleyebilen neredeyse tüm NPN transistörleri burada çalışacaktır. PNP transistörü bahsedilen Uçan Balık modülüyle çalışmaz (çünkü sensörün çıkışına lehimlenmiş ısıtıcı pimi vardır), ancak ayrı bir MQ-7 sensörüyle kullanılabilir.

3. Dirençler: 2 x 1k (0,5k'dan 1,2k'ye kadar iyi çalışır) ve 1 x 10k (bu en iyi şekilde kesin tutulur - ancak kesinlikle farklı bir değer kullanmanız gerekiyorsa, çizimde referans_direnç_kOhm değişkenini buna göre ayarlayın).

4. Kondansatörler: 2 x 10uF veya daha fazla. Tantal veya seramik olanlar gereklidir, yüksek ESR nedeniyle elektrolitik iyi çalışmaz (yüksek akım dalgalanmasını yumuşatmak için yeterli akımı sağlayamazlar).5. Mevcut CO seviyesini gösteren yeşil ve kırmızı LED'ler (sarı kutu prototipimizde kullandığımız gibi 3 terminalli tek bir çift renkli LED de kullanabilirsiniz).6. Yüksek CO seviyesini belirtmek için Piezo buzzer.7. Breadboard ve teller (ayrıca her şeyi Nano pinlere lehimleyebilir veya Uno soketlerine sıkıştırabilirsiniz, ancak bu şekilde hata yapmak kolaydır).

Adım 2: Modül Modifikasyonu veya Ayrık Sensör Kablolaması

Modül Modifikasyonu veya Ayrık Sensör Kablolaması
Modül Modifikasyonu veya Ayrık Sensör Kablolaması

Modül için fotoğrafta gösterildiği gibi rezistör ve kapasitörü sökmeniz gerekir. Temel olarak isterseniz her şeyi sökebilirsiniz - modül elektroniği tamamen işe yaramaz, onu sadece sensörün kendisi için tutucu olarak kullanıyoruz, ancak bu iki bileşen doğru okumaları almanızı engelleyecektir, Ayrık sensör kullanıyorsanız, ısıtıcı pimleri (H1 ve H2) 5V'a ve buna uygun olarak transistörün kollektörüne takın. Bir algılama tarafını (A pinlerinden herhangi birini) 5V'a, diğer algılama tarafını (B pinlerinden herhangi birini) 10k dirence bağlayın, tıpkı şemalarda modülün analog pini gibi.

Adım 3: Çalışma Prensibi

Çalışma Prensibi
Çalışma Prensibi
Çalışma Prensibi
Çalışma Prensibi

Neden tüm bu komplikasyonlara ihtiyacımız var, neden 5V, toprak bağlamıyoruz ve sadece okumalar almıyorsunuz? Eh, bu şekilde ne yazık ki faydalı bir şey elde edemezsiniz. MQ-7 veri sayfasına göre, sensörün yüksek hızda çalışması gerekiyor. ve uygun ölçümler elde etmek için düşük ısıtma döngüleri. Düşük sıcaklık fazı sırasında, CO plaka üzerinde emilir ve anlamlı veriler üretilir. Yüksek sıcaklık aşamasında, absorbe edilen CO ve diğer bileşikler sensör plakasından buharlaşarak sonraki ölçüm için temizlenir.

Yani genel olarak işlem basittir:

1. 60 saniye boyunca 5V uygulayın, bu okumaları CO ölçümü için kullanmayın.

2. 90 saniye boyunca 1.4V uygulayın, bu okumaları CO ölçümü için kullanın.

3. 1. adıma gidin.

Ama sorun şu: Arduino bu sensörü pinlerinden çalıştırmak için yeterli gücü sağlayamıyor - sensörün ısıtıcısı 150 mA gerektirirken Arduino pini 40 mA'dan fazlasını sağlayamaz, bu nedenle doğrudan takılırsa Arduino pini yanar ve sensör yine de kazanır çalışma. Bu yüzden büyük çıkış akımını kontrol etmek için küçük giriş akımı alan bir tür akım yükselticisi kullanmalıyız. Diğer bir problem 1.4V almaktır. Çok fazla analog bileşen eklemeden bu değeri güvenilir bir şekilde elde etmenin tek yolu, çıkış voltajını kontrol edecek geri beslemeli PWM (Darbe Genişliği Modülasyonu) yaklaşımını kullanmaktır.

NPN transistörü her iki sorunu da çözer: sürekli açıldığında sensör üzerindeki voltaj 5V'tur ve yüksek sıcaklık fazı için ısınır. Girişine PWM uyguladığımızda akım darbelidir, ardından kondansatör tarafından düzleştirilir ve ortalama voltaj sabit tutulur. Yüksek frekanslı PWM kullanırsak (taslakta 62.5KHz frekansı vardır) ve ortalama çok sayıda analog okuma (taslakta ~1000 okumanın üzerinde ortalama alıyoruz), o zaman sonuç oldukça güvenilirdir.

Şemalara göre kapasitör eklemek çok önemlidir. Buradaki resimler, C2 kapasitörlü ve kapasitörsüz sinyaldeki farkı göstermektedir: onsuz, PWM dalgalanması açıkça görülebilir ve okumaları önemli ölçüde bozar.

Adım 4: Şemalar ve Breadboard

Şemalar ve Breadboard
Şemalar ve Breadboard
Şemalar ve Breadboard
Şemalar ve Breadboard
Şemalar ve Breadboard
Şemalar ve Breadboard

İşte şematik ve breadboard montajı.

UYARI! Standart bir koparma modülünün değiştirilmesi gerekiyor! Modifikasyon modülü olmadan işe yaramaz. Modifikasyon ikinci adımda açıklanmıştır

LED'ler için D9 ve D10 pinlerini kullanmak önemlidir, çünkü orada donanım Timer1 çıkışlarımız olduğundan renklerini sorunsuz bir şekilde değiştirmeye izin verecektir. D5 ve D6 pinleri buzzer için kullanılır, çünkü D5 ve D6 donanım Timer0'ın çıkışlarıdır. Bunları birbirine ters olacak şekilde yapılandıracağız, böylece (5V, 0V) ve (0V, 5V) durumları arasında geçiş yapacaklar, böylece buzzer'da ses üretecekler. Uyarı: Bu, Arduino'nun ana zamanlama kesmesini etkiler, bu nedenle zamana bağlı tüm işlevler (milis() gibi) bu çizimde doğru sonuçlar vermez (bundan sonra daha fazlası). Pin D3'ün kendisine bağlı donanım Timer2 çıkışı vardır (ayrıca D11 - ancak D11'e kablo koymak D3)'e göre daha az uygundur - bu yüzden onu voltaj kontrol transistörü için PWM sağlamak için kullanıyoruz. Direnç R1 LED'lerin parlaklığını kontrol etmek için kullanılır. 300 ila 3000 Ohm arasında herhangi bir yerde olabilir, 1k parlaklık/güç tüketimi açısından oldukça optimaldir. Direnç R2, transistörün temel akımını sınırlamak için kullanılır. 300 Ohm'dan düşük (Arduino pinine aşırı yüklenmemek için) ve 1500 Ohm'dan yüksek olmamalıdır. 1k güvenli bir seçim var.

Direnç R3, voltaj bölücü oluşturmak için sensör plakası ile seri olarak kullanılır. Sensör çıkışındaki voltaj, R3 / (R3 + Rs) * 5V'ye eşittir, burada Rs, mevcut sensörün direncidir. Sensör direnci CO konsantrasyonuna bağlıdır, bu nedenle voltaj buna göre değişir. Kapasitör C1, MQ-7 sensöründeki giriş PWM voltajını yumuşatmak için kullanılır, kapasitansı ne kadar yüksek olursa o kadar iyidir, ancak aynı zamanda düşük ESR'ye sahip olması gerekir - yani seramik (veya tantal) burada kapasitör tercih edilir, elektrolitik olan iyi performans göstermez.

Kondansatör C2, sensörün analog çıkışını yumuşatmak için kullanılır (çıkış voltajı giriş voltajına bağlıdır - ve burada tüm şemaları etkileyen oldukça yüksek bir akım PWM'miz var, bu yüzden C2'ye ihtiyacımız var). En basit çözüm, C1. NPN transistörü ile aynı kondansatörü kullanmaktır, ya sensörün ısıtıcısına yüksek akım sağlamak için her zaman akım iletir ya da PWM modunda çalışarak ısıtma akımını azaltır.

Adım 5: Arduino Programı

Arduino Programı
Arduino Programı

UYARI: SENSÖR HERHANGİ BİR PRATİK KULLANIM İÇİN MANUEL KALİBRASYON GEREKTİRİR. KALİBRASYON OLMADAN, BELİRLİ SENSÖRÜNÜZÜN PARAMETRELERİNE BAĞLI OLARAK BU RESİM TEMİZ HAVADA ALARMI AÇABİLİR VEYA ÖLÜMCÜL KARBONMONOKSİT KONSANTRASYONUNU ALGILAMAYABİLİR

Kalibrasyon aşağıdaki adımlarda açıklanmıştır. Kaba kalibrasyon çok basittir, kesinlik ise oldukça karmaşıktır.

Genel düzeyde, program oldukça basittir:

İlk önce, sensörün gerektirdiği kararlı 1.4V'yi üretmek için PWM'mizi kalibre ediyoruz (uygun PWM genişliği, kesin direnç değerleri, bu özel sensörün direnci, transistörün VA eğrisi vb. gibi birçok parametreye bağlıdır - bu nedenle en iyi yol çeşitli değerleri denemektir. ve en uygun olanı kullanın). Ardından, sürekli olarak 60 saniyelik ısıtma ve 90 saniyelik ölçüm döngüsünden geçiyoruz. Uygulamada biraz karmaşıklaşıyor. Donanım zamanlayıcıları kullanmak zorundayız çünkü burada sahip olduğumuz her şeyin düzgün çalışması için yüksek frekanslı kararlı PWM'ye ihtiyacı var. Kod buraya eklenmiştir ve github'ımızdan ve ayrıca Fritzing'deki şema kaynağından indirilebilir. Programda Zamanlayıcıları işleyen 3 fonksiyon: setTimer0PWM, setTimer1PWM, setTimer2PWM. Her biri verilen parametrelerle (kodda yorumlanmıştır) zamanlayıcıyı PWM modunda ayarlar ve giriş değerlerine göre darbe genişliğini ayarlar. Ölçüm fazları startMeasurementFase ve startHeatingPhase fonksiyonları kullanılarak değiştirilir, bunlar içindeki her şeyi halledin. ve 5V ile 1.4V ısıtma arasında geçiş yapmak için uygun zamanlayıcı değerlerini ayarlayın. LED'lerin durumu, girişinde yeşil ve kırmızı parlaklığı kabul eden (lineer 1-100 ölçeğinde) ve ilgili zamanlayıcı ayarına dönüştüren fonksiyon setLED'leri tarafından belirlenir.

Buzzer durumu buzz_on, buzz_off, buzz_beep işlevleri kullanılarak kontrol edilir. Açma/kapama işlevleri sesi açar ve kapatır, bip işlevi, periyodik olarak çağrılırsa 1,5 saniyelik belirli bir bip dizisi üretir (bu işlev hemen döner, böylece ana programı duraklatmaz - ancak tekrar tekrar çağırmanız gerekir. bip deseni üretmek için).

Program ilk olarak, ölçüm aşamasında 1.4V elde etmek için uygun PWM çevrim genişliğini bulan pwm_adjust fonksiyonunu çalıştırır. Ardından sensörün hazır olduğunu belirtmek için birkaç kez bip sesi verir, ölçüm aşamasına geçer ve ana döngüyü başlatır.

Ana döngüde program, mevcut fazda yeterince zaman geçirip geçirmediğimizi (ölçüm fazı için 90 saniye, ısıtma fazı için 60 saniye) kontrol eder ve evet ise mevcut fazı değiştirir. Ayrıca, üstel yumuşatma kullanarak sensör okumalarını sürekli olarak günceller: yeni_değer = 0.999*eski_değer + 0.001*yeni_okuma. Bu tür parametreler ve ölçüm döngüsü ile yaklaşık olarak son 300 milisaniye üzerinden sinyalin ortalamasını alır. UYARI: SENSÖR HERHANGİ BİR PRATİK KULLANIM İÇİN MANUEL KALİBRASYON GEREKTİRİR. KALİBRASYON OLMADAN, BELİRLİ SENSÖRÜNÜZÜN PARAMETRELERİNE BAĞLI OLARAK BU RESİM TEMİZ HAVADA ALARMI AÇABİLİR VEYA ÖLÜMCÜL KARBONMONOKSİT KONSANTRASYONUNU ALGILAMAYABİLİR.

Adım 6: İlk Çalıştırma: Ne Beklemeli?

İlk Çalıştırma: Ne Beklemeli?
İlk Çalıştırma: Ne Beklemeli?

Her şeyi düzgün bir şekilde bir araya getirdiyseniz, çizimi çalıştırdıktan sonra Seri monitörde şöyle bir şey göreceksiniz:

PWM'yi ayarlama w=0, V=4.93

ayar PWM w=17, V=3.57PWM sonuç: genişlik 17, voltaj 3.57

ve ardından mevcut sensör okumalarını temsil eden bir dizi sayı. Bu kısım, sensörün ısıtıcı voltajını mümkün olduğunca 1.4V'a yakın üretmek için PWM genişliğini ayarlıyor, ölçülen voltaj 5V'dan düşülür, bu nedenle ideal ölçüm değerimiz 3.6V'dir. Bu işlem tek bir adımdan sonra hiç bitmiyor veya bitmiyorsa (0 veya 254'e eşit genişlikle sonuçlanır) - o zaman bir sorun var demektir. Transistörünüzün gerçekten NPN olup olmadığını ve doğru şekilde bağlanıp bağlanmadığını kontrol edin (taban, toplayıcı, emitör pinlerini doğru kullandığınızdan emin olun - taban D3'e, toplayıcı MQ-7'ye ve emitör toprağa gider, Fritzing devre tahtası görünümüne güvenmeyin - bu bazı transistörler için yanlış) ve sensör girişini Arduino'nun A1 girişine bağladığınızdan emin olun. Her şey yolundaysa, Arduino IDE'den Seri Plotter'da görüntüye benzer bir şey görmelisiniz. 60 ve 90 saniye uzunluğundaki ısıtma ve ölçüm döngüleri, CO ppm ölçümü ve her döngü sonunda güncellenmesi ile birbiri ardına yürütülmektedir. Ölçüm döngüsü bitmek üzereyken sensörün yakınına bir miktar açık alev alabilir ve okumaları nasıl etkileyeceğini görebilirsiniz (alev tipine bağlı olarak, açık havada 2000 ppm'ye kadar CO konsantrasyonu üretebilir - bu nedenle yalnızca küçük bir kısmı olsa bile). aslında sensöre girer, yine de alarmı açar ve bir sonraki döngünün sonuna kadar kapanmaz). Çakmaktan ateşe verdiği tepkinin yanı sıra görselde de gösterdim.

Adım 7: Sensör Kalibrasyonu

Sensör Kalibrasyonu
Sensör Kalibrasyonu
Sensör Kalibrasyonu
Sensör Kalibrasyonu

Üreticinin veri sayfasına göre, sensör kalibre edilmeden önce 48 saat arka arkaya ısıtma-soğutma döngüleri çalıştırmalıdır. Ve bunu uzun süre kullanmayı düşünüyorsanız yapmalısınız: Benim durumumda temiz havada sensör okuması 10 saatin üzerinde yaklaşık %30 değişti. Bunu dikkate almazsanız, aslında 100 ppm CO olduğu yerde 0 ppm sonucunu alabilirsiniz. 48 saat beklemek istemiyorsanız, ölçüm döngüsünün sonunda sensör çıkışını izleyebilirsiniz. Bir saatten fazla olduğunda 1-2 noktadan fazla değişmez - orada ısıtmayı durdurabilirsiniz.

Kaba kalibrasyon:

Çizimi temiz havada en az 10 saat çalıştırdıktan sonra, ölçüm döngüsünün sonunda, ısıtma aşamasının başlamasından 2-3 saniye önce ham sensör değerini alın ve sensor_reading_clean_air değişkenine (satır 100) yazın. Bu kadar. Program diğer sensör parametrelerini tahmin edecek, kesin olmayacaklar, ancak 10 ile 100 ppm konsantrasyon arasında ayrım yapmak için yeterli olmalıdır.

Hassas kalibrasyon:

Kalibre edilmiş bir CO ölçer bulmanızı, 100 ppm CO numunesi almanızı şiddetle tavsiye ederim (bu, şırıngaya bir miktar baca gazı alarak yapılabilir - CO konsantrasyonu kolayca birkaç bin ppm aralığında olabilir - ve yavaşça kapalı kavanoza koyarak yapılabilir. kalibre edilmiş sayaç ve MQ-7 sensörü), bu konsantrasyonda ham sensör okumasını alın ve sensor_reading_100_ppm_CO değişkenine koyun. Bu adım olmadan, ppm ölçümünüz her iki yönde de birkaç kez yanlış olabilir (normalde hiç CO olmaması gereken, ancak herhangi bir endüstriyel uygulama için iyi olmayan evde tehlikeli CO konsantrasyonu için alarma ihtiyacınız varsa yine de sorun olmaz).

CO ölçerim olmadığı için daha sofistike bir yaklaşım kullandım. İlk önce izole hacimde yanma kullanarak yüksek konsantrasyonda CO hazırladım (ilk fotoğraf). Bu yazıda, farklı alev türleri için CO verimi de dahil olmak üzere en faydalı verileri buldum - bu fotoğrafta yok, ancak son deneyde propan gazı yanması kullanıldı, aynı kurulumla ~5000 ppm CO konsantrasyonu elde edildi. Daha sonra ikinci fotoğrafta gösterildiği gibi 100 ppm'ye ulaşmak için 1:50 oranında seyreltildi ve sensörün referans noktasını belirlemek için kullanıldı.

Adım 8: Bazı Deneysel Veriler

Bazı Deneysel Veriler
Bazı Deneysel Veriler

Benim durumumda, sensör oldukça iyi çalıştı - gerçekten düşük konsantrasyonlar için çok hassas değil, ancak 50ppm'den yüksek herhangi bir şeyi algılamak için yeterince iyi. Konsantrasyonu kademeli olarak artırmaya çalıştım, ölçümler yaptım ve bir dizi çizelge oluşturdum. İki set 0ppm çizgisi vardır - CO'ya maruz kalmadan önce saf yeşil ve sonra sarı yeşil. Sensör, maruz kaldıktan sonra temiz hava direncini biraz değiştiriyor gibi görünüyor, ancak bu etki küçük. 8 ve 15, 15 ve 26, 26 ve 45 ppm konsantrasyonları arasında net bir ayrım yapamıyor gibi görünüyor - ancak eğilim çok açık, bu nedenle konsantrasyonun 0-20 veya 40-60 ppm aralığında olup olmadığını söyleyebilir.. Daha yüksek konsantrasyonlar için bağımlılık çok daha belirgindir - bir açık alevin egzozuna maruz kaldığında, eğri hiç düşmeden baştan yukarı çıkar ve dinamikleri tamamen farklıdır. Bu nedenle, yüksek konsantrasyonlar için güvenilir bir şekilde çalıştığına şüphe yok, ancak herhangi bir dereceli CO ölçerim olmadığı için hassasiyetini onaylayamam. Ayrıca, bu deney seti 20k yük direnci kullanılarak yapıldı - ve bundan sonra karar verdim. varsayılan değer olarak 10k önermek için bu şekilde daha hassas olması gerekir. İşte bu kadar. Güvenilir bir CO ölçüm cihazınız varsa ve bu kartı monte edecekseniz, lütfen sensör hassasiyeti hakkında bazı geri bildirimler paylaşın - çeşitli sensörler üzerinden istatistik toplamak ve varsayılan çizim varsayımlarını iyileştirmek harika olurdu.

Önerilen: