Isi kandungan:

Monitor Arduino CO Menggunakan Sensor MQ-7: 8 Langkah (dengan Gambar)
Monitor Arduino CO Menggunakan Sensor MQ-7: 8 Langkah (dengan Gambar)

Video: Monitor Arduino CO Menggunakan Sensor MQ-7: 8 Langkah (dengan Gambar)

Video: Monitor Arduino CO Menggunakan Sensor MQ-7: 8 Langkah (dengan Gambar)
Video: how to make CO Detector with mq-7 and Arduino (mq-7 sensor Arduino) 2024, Julai
Anonim
Monitor Arduino CO Menggunakan Sensor MQ-7
Monitor Arduino CO Menggunakan Sensor MQ-7
Monitor Arduino CO Menggunakan Sensor MQ-7
Monitor Arduino CO Menggunakan Sensor MQ-7

Beberapa perkataan mengapa arahan ini dibuat: suatu hari ibu teman wanita saya menelefon kami di tengah malam kerana dia merasa sangat sakit - dia mengalami pening, takikardia, mual, tekanan darah tinggi, dia bahkan pingsan untuk waktu yang tidak diketahui (mungkin ~ 5 minit, tetapi tidak ada cara untuk memberitahu), semuanya tanpa alasan yang jelas. Dia tinggal di sebuah kampung kecil yang jauh dari hospital (60 km dari tempat kami, 30 km ke hospital terdekat, 10 km tanpa jalan biasa di antara mereka), jadi kami bergegas ke sana dan segera sampai di sana setelah ambulans. Dia dimasukkan ke hospital dan pada waktu pagi dia merasa hampir sihat, tetapi doktor tidak dapat menemui penyebabnya. Keesokan harinya kami mempunyai idea: mungkin keracunan CO, kerana dia mempunyai dandang air gas (di foto), dan duduk di dekatnya sepanjang malam ketika ia berlaku. Kami baru-baru ini membeli sensor MQ-7 CO, tetapi tidak sempat mengumpulkan skema untuk itu, jadi ini adalah masa yang tepat untuk melakukannya. Setelah sejam mencari di internet untuk mendapatkan sebarang arahan, saya menyedari bahawa saya tidak dapat mencari panduan yang pada masa yang sama mengikuti arahan pengeluar sensor yang disediakan dalam lembar datanya dan menjelaskan apa sahaja (satu contoh nampaknya mempunyai kod yang cukup baik, tetapi tidak jelas bagaimana menerapkannya, yang lain disederhanakan dan tidak berfungsi dengan baik). Oleh itu, kami menghabiskan kira-kira 12 jam untuk mengembangkan skema, membuat dan mencetak casing 3d, menguji dan menentukur sensor, dan keesokan harinya pergi ke dandang yang mencurigakan. Ternyata tahap CO di sana sangat tinggi, dan boleh membawa maut jika waktu pendedahan CO lebih lama. Oleh itu, saya percaya sesiapa yang mempunyai keadaan yang serupa (seperti dandang gas atau pembakaran lain yang berlaku di dalam ruang tamu) harus mendapatkan sensor sedemikian untuk mengelakkan sesuatu yang buruk berlaku.

Semua yang berlaku dua minggu yang lalu, sejak itu saya banyak memperbaiki skema dan program, dan sekarang nampaknya cukup bagus dan agak mudah (bukan 3 baris-kod sederhana, tetapi tetap). Walaupun saya berharap seseorang yang mempunyai meter CO tepat akan memberi saya maklum balas mengenai penentukuran lalai yang saya masukkan dalam lakaran - saya mengesyaki ia jauh dari baik. Berikut adalah panduan lengkap dengan beberapa data eksperimen.

Langkah 1: Bil Bahan

Bil bahan
Bil bahan

Anda memerlukan: 0. Papan Arduino. Saya lebih suka klon Cina Arduino Nano dengan harganya yang luar biasa $ 3, tetapi mana-mana arduino 8-bit akan berfungsi di sini. Sketsa menggunakan beberapa operasi pemasa lanjutan, dan hanya diuji pada mikrokontroler atmega328 - walaupun mungkin ia akan berfungsi dengan baik pada orang lain juga. Sensor MQ-7 CO. Paling umum tersedia dengan modul sensor Flying Fish ini, ia harus melalui pengubahsuaian kecil, perincian pada langkah berikutnya, atau anda dapat menggunakan MQ-7sensor yang dipisahkan.

2. Transistor bipolar NPN. Hampir semua transistor NPN yang dapat menangani 300 mA atau lebih akan berfungsi di sini. Transistor PNP tidak akan berfungsi dengan modul Flying Fish yang disebutkan (kerana ia memiliki pin pemanas yang disolder ke output sensor), tetapi dapat digunakan dengan sensor MQ-7 yang diskrit.

3. Perintang: 2 x 1k (dari 0.5k hingga 1.2k akan berfungsi dengan baik), dan 1 x 10k (yang terbaik disimpan tepat - walaupun jika anda benar-benar mesti menggunakan nilai yang berbeza, sesuaikan pemboleh ubah referensi_resistor_kOhm dalam lakaran dengan sewajarnya).

4. Kapasitor: 2 x 10uF atau lebih. Tantalum atau seramik diperlukan, elektrolit tidak berfungsi dengan baik kerana ESR tinggi (mereka tidak akan dapat memberikan arus yang mencukupi untuk melancarkan riak arus tinggi).5. LED hijau dan merah untuk menunjukkan tahap CO semasa (anda juga dapat menggunakan LED dua warna tunggal dengan 3 terminal, seperti yang kami gunakan dalam prototaip kotak kuning kami).6. Piezo buzzer untuk menunjukkan tahap CO tinggi.7. Papan roti dan wayar (anda juga boleh menyolder semuanya ke pin Nano atau memasukkan ke soket Uno, tetapi dengan mudah melakukan kesalahan dengan cara ini).

Langkah 2: Pengubahsuaian Modul atau Pendawaian Sensor Diskrit

Pengubahsuaian Modul atau Pendawaian Sensor Diskrit
Pengubahsuaian Modul atau Pendawaian Sensor Diskrit

Untuk modul, anda mesti menahan resistor dan kapasitor, seperti yang ditunjukkan pada foto. Anda boleh memecahkan semuanya pada dasarnya jika anda mahu - elektronik modul sama sekali tidak berguna, kami menggunakannya hanya sebagai pemegang untuk sensor itu sendiri, tetapi kedua-dua komponen ini akan menghalang anda daripada mendapat bacaan yang betul, Sekiranya anda menggunakan sensor diskrit, pasangkan pin pemanas (H1 dan H2) ke pengumpul 5V dan transistor. Pasang satu sisi penginderaan (mana-mana pin A) ke 5V, sebelah penderia lain (mana-mana pin B) ke perintang 10k, sama seperti pin analog modul dalam skema.

Langkah 3: Prinsip Operasi

Prinsip Operasi
Prinsip Operasi
Prinsip Operasi
Prinsip Operasi

Mengapa kita memerlukan semua komplikasi ini, mengapa tidak melampirkan 5V, tanah, dan hanya membaca? Nah, anda tidak akan mendapat apa-apa yang berguna dengan cara ini, sayangnya. Menurut datasheet MQ-7, sensor harus berjalan melalui dan kitaran pemanasan rendah untuk mendapatkan ukuran yang tepat. Semasa fasa suhu rendah, CO diserap pada plat, menghasilkan data yang bermakna. Semasa fasa suhu tinggi, CO yang diserap dan sebatian lain menguap dari plat sensor, membersihkannya untuk pengukuran seterusnya.

Oleh itu, secara amnya operasi mudah:

1. Terapkan 5V selama 60 saat, jangan gunakan bacaan ini untuk pengukuran CO.

2. Terapkan 1.4V selama 90 saat, gunakan bacaan ini untuk pengukuran CO.

3. Pergi ke langkah 1.

Tetapi inilah masalahnya: Arduino tidak dapat memberikan kekuatan yang cukup untuk menjalankan sensor ini dari pinnya - pemanas sensor memerlukan 150 mA, sementara pin Arduino dapat memberikan tidak lebih dari 40 mA, jadi jika terpasang secara langsung, pin Arduino akan terbakar dan sensor masih menang tidak berfungsi. Oleh itu, kita mesti menggunakan beberapa jenis penguat arus yang mengambil arus input kecil untuk mengawal arus keluaran yang besar. Masalah lain ialah mendapatkan 1.4V. Satu-satunya cara untuk mendapatkan nilai ini dengan pasti tanpa memperkenalkan banyak komponen analog adalah dengan menggunakan pendekatan PWM (Pulse Width Modulation) dengan maklum balas yang akan mengawal voltan output.

Transistor NPN menyelesaikan kedua-dua masalah: apabila sentiasa dihidupkan, voltan di seluruh sensor adalah 5V dan pemanasan untuk fasa suhu tinggi. Apabila kita menerapkan PWM ke inputnya, arus berdenyut, kemudian dilancarkan oleh kapasitor, dan voltan rata-rata tetap stabil. Sekiranya kita menggunakan PWM frekuensi tinggi (dalam lakaran ia mempunyai frekuensi 62.5KHz) dan rata-rata banyak bacaan analog (dalam lakaran kita rata-rata melebihi ~ 1000 bacaan), maka hasilnya cukup dapat dipercayai.

Sangat penting untuk menambahkan kapasitor mengikut skema. Imej di sini menggambarkan perbezaan isyarat dengan dan tanpa kapasitor C2: tanpanya, riak PWM dapat dilihat dengan jelas dan ia mengubah bacaan dengan ketara.

Langkah 4: Skema dan Papan Roti

Skematik dan Papan Roti
Skematik dan Papan Roti
Skematik dan Papan Roti
Skematik dan Papan Roti
Skematik dan Papan Roti
Skematik dan Papan Roti

Berikut adalah pemasangan skema dan papan roti.

AMARAN! Pengubahsuaian modul pelarian standard diperlukan! Tanpa modifikasi modul tidak berguna. Pengubahsuaian dijelaskan pada langkah kedua

Penting untuk menggunakan pin D9 dan D10 untuk LED, kerana di sana kita mempunyai output perkakasan Timer1, ia akan memungkinkan untuk menukar warna mereka dengan lancar. Pin D5 dan D6 digunakan untuk buzzer, kerana D5 dan D6 adalah output perkakasan Timer0. Kami akan mengkonfigurasinya agar terbalik satu sama lain, sehingga mereka akan beralih antara keadaan (5V, 0V) dan (0V, 5V), sehingga menghasilkan bunyi pada bel. Amaran: ini mempengaruhi gangguan waktu utama Arduino, jadi semua fungsi yang bergantung pada masa (seperti milis ()) tidak akan menghasilkan hasil yang betul dalam lakaran ini (lebih lanjut mengenai ini kemudian). Pin D3 mempunyai perkakasan output Timer2 yang terhubung dengannya (serta D11 - tetapi kurang senang memasang wayar pada D11 daripada pada D3) - jadi kami menggunakannya untuk menyediakan PWM untuk voltan yang mengawal transistor. Resistor R1 digunakan untuk mengawal kecerahan LED. Ia boleh berada di mana saja dari 300 hingga 3000 Ohm, 1k agak optimum dalam penggunaan kecerahan / kuasa. Resistor R2 digunakan untuk mengehadkan arus asas transistor. Ia tidak boleh lebih rendah dari 300 Ohms (untuk tidak memuatkan pin Arduino berlebihan), dan tidak lebih tinggi dari 1500 Ohms. 1k ada pilihan yang selamat.

Resistor R3 digunakan secara bersiri dengan plat sensor untuk membuat pembahagi voltan. Voltan pada output sensor sama dengan R3 / (R3 + Rs) * 5V, di mana Rs adalah rintangan sensor semasa. Rintangan sensor bergantung pada kepekatan CO, jadi voltan berubah sesuai. Kapasitor C1 digunakan untuk melancarkan voltan PWM input pada sensor MQ-7, semakin tinggi kapasitinya semakin baik, tetapi juga harus mempunyai ESR rendah - jadi seramik (atau tantalum) kapasitor lebih disukai di sini, elektrolit tidak akan berfungsi dengan baik.

Kapasitor C2 digunakan untuk melancarkan output analog sensor (voltan output bergantung pada voltan input - dan kita mempunyai PWM arus yang cukup tinggi di sini, yang mempengaruhi semua skema, jadi kita memerlukan C2). Penyelesaian paling mudah adalah menggunakan kapasitor yang sama dengan transistor C1. NPN sama ada mengalirkan arus sepanjang masa untuk memberikan arus tinggi pada pemanas sensor, atau berfungsi dalam mod PWM sehingga mengurangkan arus pemanasan.

Langkah 5: Program Arduino

Program Arduino
Program Arduino

AMARAN: SENSOR MEMERLUKAN KALIBRASI MANUAL UNTUK SETIAP PENGGUNAAN PRAKTIKAL. TANPA KALIBRASI, TERHADAP PARAMETER SENSOR PESERTA ANDA, LARANGAN INI MUNGKIN MENGHIDUPKAN ALARM DI DALAM AIR BERSIH ATAU TIDAK MENENTUKAN KONSENTRASI MONOXIDE KARBON LETHAL

Penentukuran dijelaskan dalam langkah-langkah berikut. Penentukuran kasar sangat mudah, tepat cukup kompleks.

Pada peringkat umum, program agak mudah:

Mula-mula kita mengkalibrasi PWM kita untuk menghasilkan 1.4V stabil yang diperlukan oleh sensor (lebar PWM yang betul bergantung pada banyak parameter seperti nilai perintang yang tepat, rintangan sensor ini, lengkung VA transistor dan lain-lain - jadi cara terbaik adalah mencuba pelbagai nilai dan gunakan yang paling sesuai). Oleh itu, kami terus menjalani kitaran pemanasan 60 saat dan pengukuran 90 saat. Dalam pelaksanaannya, ia menjadi agak rumit. Kita mesti menggunakan pemasa perkakasan kerana semua yang kita ada di sini memerlukan PWM stabil frekuensi tinggi agar dapat berfungsi dengan baik. Kod ini dilampirkan di sini dan boleh dimuat turun dari github kami, serta sumber skema di Fritzing. Dalam program ini terdapat 3 fungsi yang mengendalikan pemasa: setTimer0PWM, setTimer1PWM, setTimer2PWM. Setiap dari mereka menetapkan pemasa dalam mod PWM dengan parameter yang diberikan (dikomentari dalam kod), dan menetapkan lebar nadi mengikut nilai input. Fasa pengukuran ditukar menggunakan fungsi startMeasurementPhase dan startHeatingPhase, mereka mengendalikan semua yang ada di dalamnya. dan tetapkan nilai pemasa yang tepat untuk beralih antara pemanasan 5V dan 1.4V. Keadaan LED ditentukan oleh fungsi setLED yang menerima kecerahan hijau dan merah pada inputnya (dalam skala linear 1-100) dan mengubahnya menjadi tetapan pemasa yang sesuai.

Keadaan buzzer dikendalikan menggunakan fungsi buzz_on, buzz_off, buzz_beep. Fungsi hidup / mati menghidupkan dan mematikan suara, fungsi bip menghasilkan urutan bip yang spesifik dengan jangka masa 1.5 saat jika dipanggil secara berkala (fungsi ini kembali dengan segera sehingga tidak menghentikan program utama - tetapi anda harus memanggilnya berulang kali untuk menghasilkan corak bip).

Program pertama menjalankan fungsi pwm_adjust yang mengetahui lebar kitaran PWM yang betul untuk mencapai 1.4V semasa fasa pengukuran. Kemudian berbunyi bip beberapa kali untuk menunjukkan bahawa sensor sudah siap, beralih ke fasa pengukuran, dan memulakan gelung utama.

Dalam gelung utama, program memeriksa apakah kita menghabiskan cukup waktu dalam fasa semasa (90 saat untuk fasa pengukuran, 60 saat untuk fasa pemanasan) dan jika ya, maka mengubah fasa semasa. Juga sentiasa mengemas kini bacaan sensor menggunakan pelicinan eksponensial: new_value = 0.999 * old_value + 0.001 * new_reading. Dengan parameter dan kitaran pengukuran tersebut, rata-rata memberi isyarat lebih kurang 300 milisaat terakhir. PERINGATAN: SENSOR MEMERLUKAN KALIBRASI MANUAL UNTUK PENGGUNAAN PRAKTIKAL. TANPA KALIBRASI, TERHADAP PARAMETER SENSOR PESERTA ANDA, LARANGAN INI MUNGKIN MENGHIDUPKAN ALARM DI DALAM AIR BERSIH ATAU TIDAK MENENTUKAN KONSENTRASI MONOXIDE KARBON LETHAL.

Langkah 6: Larian Pertama: Apa Yang Harus Diharapkan

Larian Pertama: Apa Yang Harus Diharapkan
Larian Pertama: Apa Yang Harus Diharapkan

Sekiranya anda mengumpulkan semuanya dengan betul, setelah menjalankan sketsa, anda akan melihat sesuatu seperti ini di Monitor bersiri:

menyesuaikan PWM w = 0, V = 4.93

menyesuaikan PWM w = 17, V = 3.57PWM hasil: lebar 17, voltan 3.57

dan kemudian satu siri nombor yang mewakili bacaan sensor semasa. Bahagian ini menyesuaikan lebar PWM untuk menghasilkan voltan pemanas sensor sedekat mungkin dengan 1.4V, voltan yang diukur ditolak dari 5V, jadi nilai pengukuran ideal kami ialah 3.6V. Sekiranya proses ini tidak pernah berakhir atau berakhir setelah satu langkah (menghasilkan lebar sama dengan 0 atau 254) - maka ada yang tidak kena. Periksa sama ada transistor anda benar-benar NPN dan disambungkan dengan betul (pastikan anda menggunakan asas, pengumpul, pin pemancar ke kanan - pangkalan menuju ke D3, pemungut ke MQ-7 dan pemancar ke tanah, jangan bergantung pada paparan papan roti Fritzing - itu adalah salah untuk beberapa transistor) dan pastikan anda menyambungkan input sensor ke input A1 Arduino. Sekiranya semuanya baik-baik saja, anda harus melihat dalam Serial Plotter dari Arduino IDE sesuatu yang serupa dengan gambar. Kitaran pemanasan dan pengukuran sepanjang 60 dan 90 saat berjalan satu demi satu, dengan CO ppm diukur dan dikemas kini pada akhir setiap kitaran. Anda boleh mengambil api terbuka dekat dengan sensor apabila kitaran pengukuran hampir selesai dan melihat bagaimana pengaruhnya akan mempengaruhi pembacaan (bergantung pada jenis nyalaan, ia dapat menghasilkan kepekatan CO hingga 2000 ppm di udara terbuka - jadi walaupun hanya sebahagian kecil dari ia benar-benar masuk ke sensor, ia masih akan menghidupkan penggera, dan tidak akan mati sehingga akhir kitaran seterusnya). Saya menunjukkannya pada gambar, dan juga tindak balas terhadap api dari pemetik api.

Langkah 7: Penentukuran Sensor

Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor
Penentukuran Sensor

Menurut lembar data pengeluar, sensor harus menjalankan kitaran pemanasan-penyejukan selama 48 jam berturut-turut sebelum dapat dikalibrasi. Dan anda harus melakukannya sekiranya anda berhasrat untuk menggunakannya dalam jangka masa yang lama: dalam kes saya, bacaan sensor di udara bersih berubah sekitar 30% selama 10 jam. Sekiranya anda tidak mengambil kira ini, anda dapat memperoleh hasil 0 ppm di mana sebenarnya terdapat 100 ppm CO. Jika anda tidak mahu menunggu selama 48 jam, anda dapat memantau output sensor pada akhir kitaran pengukuran. Bila lebih dari satu jam ia tidak akan berubah lebih dari 1-2 mata - anda boleh berhenti pemanasan di sana.

Penentukuran kasar:

Setelah menjalankan lakaran sekurang-kurangnya 10 jam di udara bersih, ambil nilai sensor mentah pada akhir kitaran pengukuran, 2-3 saat sebelum fasa pemanasan dimulakan, dan tuliskan ke pemboleh ubah sensor_reading_clean_air (baris 100). Itu sahaja. Program akan menganggarkan parameter sensor lain, tidak tepat, tetapi cukup untuk membezakan antara kepekatan 10 dan 100 ppm.

Penentukuran tepat:

Saya sangat mengesyorkan untuk mencari meter CO yang dikalibrasi, membuat sampel CO 100 ppm (ini dapat dilakukan dengan memasukkan sedikit gas buang ke dalam jarum suntik - kepekatan CO dapat dengan mudah dalam julat beberapa ribu ppm - dan perlahan-lahan memasukkannya ke dalam balang tertutup dengan meter dikalibrasi dan sensor MQ-7), ambil bacaan sensor mentah pada kepekatan ini dan masukkan ke pemboleh ubah sensor_reading_100_ppm_CO. Tanpa langkah ini, pengukuran ppm anda mungkin salah beberapa kali ke arah mana pun (masih ok jika anda memerlukan penggera untuk kepekatan CO berbahaya di rumah, di mana biasanya tidak ada CO sama sekali, tetapi tidak baik untuk aplikasi industri apa pun).

Oleh kerana saya tidak mempunyai meter CO, saya menggunakan pendekatan yang lebih canggih. Mula-mula saya menyediakan kepekatan CO yang tinggi menggunakan pembakaran dalam jumlah terpencil (foto pertama). Dalam makalah ini saya dapati data yang paling berguna, termasuk hasil CO untuk jenis api yang berlainan - itu bukan dalam foto, tetapi eksperimen terakhir menggunakan pembakaran gas propana, dengan persediaan yang sama, menghasilkan ~ 5000 ppm kepekatan CO. Kemudian dicairkan 1:50 untuk mencapai 100 ppm, seperti yang digambarkan pada foto kedua, dan digunakan untuk menentukan titik rujukan sensor.

Langkah 8: Beberapa Data Eksperimen

Beberapa Data Eksperimen
Beberapa Data Eksperimen

Dalam kes saya, sensor berfungsi dengan baik - tidak terlalu sensitif untuk kepekatan yang sangat rendah, tetapi cukup baik untuk mengesan sesuatu yang lebih tinggi daripada 50 ppm. Saya cuba meningkatkan kepekatan secara beransur-ansur, mengambil ukuran, dan membina satu set carta. Terdapat dua set garis 0ppm - hijau tulen sebelum pendedahan CO dan hijau kuning selepasnya. Sensor nampaknya sedikit mengubah rintangan udara bersihnya setelah terdedah, tetapi kesannya kecil. Nampaknya tidak dapat membezakan dengan jelas antara kepekatan 8 dan 15, 15 dan 26, 26 dan 45 ppm - tetapi trennya sangat jelas, sehingga dapat mengetahui apakah kepekatan berada dalam julat 0-20 atau 40-60 ppm. Untuk kepekatan yang lebih tinggi, pergantungan jauh lebih berbeza - apabila terkena api terbuka, lengkung naik dari awal tanpa turun sama sekali, dan dinamika sama sekali berbeza. Jadi untuk kepekatan tinggi tidak ada keraguan bahawa ia berfungsi dengan baik, walaupun saya tidak dapat mengesahkan ketepatannya kerana saya tidak mempunyai meter CO yang dinilai. Juga, set eksperimen ini dilakukan dengan menggunakan perintang beban 20k - dan selepas itu saya memutuskan untuk mengesyorkan 10k sebagai nilai lalai, semestinya lebih sensitif dengan cara ini. Itu sahaja. Sekiranya anda mempunyai meter CO yang boleh dipercayai dan telah memasang papan ini, sila kongsi beberapa maklum balas mengenai ketepatan sensor - sangat bagus untuk mengumpulkan statistik pelbagai sensor dan memperbaiki andaian lakaran lalai.

Disyorkan: