Daftar Isi:

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

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

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

Beberapa kata mengapa instruksi ini dibuat: suatu hari ibu pacar saya menelepon kami di tengah malam karena dia merasa sangat sakit - dia pusing, takikardia, mual, tekanan darah tinggi, dia bahkan pingsan untuk waktu yang tidak diketahui (mungkin ~5 menit, tetapi tidak ada cara untuk mengetahuinya), semua tanpa alasan yang jelas. Dia tinggal di sebuah desa kecil yang jauh dari rumah sakit (60 km dari tempat kami, 30 km ke rumah sakit terdekat, 10 km tanpa jalan normal di antaranya), jadi kami bergegas menemuinya dan tiba di sana segera setelah ambulans. Dia dirawat di rumah sakit dan di pagi hari dia merasa hampir sehat, tetapi dokter tidak dapat menemukan penyebabnya. Hari berikutnya kami mendapat ide: itu bisa saja keracunan CO, karena dia memiliki boiler air gas (di foto), dan duduk di dekatnya sepanjang malam ketika itu terjadi. Kami baru saja membeli sensor CO MQ-7, tetapi tidak pernah punya waktu untuk merakit skema untuk itu, jadi ini adalah waktu yang tepat untuk melakukannya. Setelah satu jam mencari di internet untuk instruksi apa pun, saya menyadari bahwa saya tidak dapat menemukan panduan apa pun yang pada saat yang sama mengikuti instruksi pabrikan sensor yang disediakan dalam lembar datanya dan menjelaskan apa pun (satu contoh tampaknya memiliki kode yang cukup bagus, tetapi itu tidak jelas bagaimana menerapkannya, yang lain terlalu disederhanakan dan tidak akan berfungsi dengan baik). Jadi kami menghabiskan sekitar 12 jam untuk mengembangkan skema, membuat dan mencetak kasing 3d, menguji dan mengkalibrasi sensor, dan hari berikutnya pergi ke boiler yang mencurigakan. Ternyata kadar CO di sana sangat tinggi, dan bisa berakibat fatal jika waktu pemaparan CO lebih lama. Jadi saya percaya siapa pun yang memiliki situasi serupa (seperti boiler gas atau pembakaran lain yang terjadi di dalam ruang hidup) harus mendapatkan sensor tersebut untuk mencegah sesuatu yang buruk terjadi.

Semua itu terjadi dua minggu yang lalu, sejak itu saya meningkatkan skema dan program cukup banyak, dan sekarang tampaknya cukup bagus dan relatif sederhana (bukan 3-baris-kode sederhana, tapi tetap saja). Meskipun saya berharap seseorang dengan pengukur CO yang tepat akan memberi saya beberapa umpan balik tentang kalibrasi default yang saya masukkan ke dalam sketsa - saya menduga itu jauh dari baik. Berikut adalah panduan lengkap dengan beberapa data eksperimen.

Langkah 1: Daftar Bahan

Bill of material
Bill of material

Anda akan membutuhkan:0. papan Arduino. Saya lebih suka tiruan Arduino Nano Cina karena harganya yang luar biasa $ 3, tetapi arduino 8-bit apa pun akan berfungsi di sini. Sketch menggunakan beberapa operasi pengatur waktu tingkat lanjut, dan hanya diuji pada mikrokontroler atmega328 - meskipun mungkin akan bekerja dengan baik pada yang lain juga.1. Sensor CO MQ-7. Paling umum tersedia dengan modul sensor Ikan Terbang ini, modul ini harus dijalankan melalui sedikit modifikasi, detail di langkah berikutnya, atau Anda dapat menggunakan sensor MQ-7 yang terpisah.

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

3. Resistor: 2 x 1k (dari 0,5k hingga 1,2k akan berfungsi dengan baik), dan 1 x 10k (yang satu ini paling baik dijaga presisinya - meskipun jika Anda benar-benar harus menggunakan nilai yang berbeda, sesuaikan variabel reference_resistor_kOhm dalam sketsa yang sesuai).

4. Kapasitor: 2 x 10uF atau lebih. Tantalum atau keramik diperlukan, elektrolit tidak akan bekerja dengan baik karena ESR tinggi (mereka tidak akan mampu memberikan arus yang cukup untuk menghaluskan riak arus tinggi).5. LED hijau dan merah untuk menunjukkan level CO saat ini (Anda juga dapat menggunakan LED dua warna tunggal dengan 3 terminal, seperti yang kami gunakan dalam prototipe kotak kuning kami).6. Piezo buzzer untuk menunjukkan level CO yang tinggi.7. Papan tempat memotong roti dan kabel (Anda juga dapat menyolder semuanya ke pin Nano atau menekan ke soket Uno, tetapi mudah untuk membuat kesalahan dengan cara ini).

Langkah 2: Modifikasi Modul atau Pengkabelan Sensor Diskrit

Modifikasi Modul atau Pengkabelan Sensor Diskrit
Modifikasi Modul atau Pengkabelan Sensor Diskrit

Untuk modul, Anda harus melepas resistor dan kapasitor, seperti yang ditunjukkan pada foto. Pada dasarnya Anda dapat mensolder semuanya jika Anda mau - modul elektronik sama sekali tidak berguna, kami menggunakannya hanya sebagai dudukan untuk sensor itu sendiri, tetapi kedua komponen ini akan mencegah Anda mendapatkan pembacaan yang benar, Jika Anda menggunakan sensor diskrit, pasang pin pemanas (H1 dan H2) ke 5V dan kolektor transistor secara bersamaan. Pasang satu sisi penginderaan (salah satu pin A) ke 5V, sisi penginderaan lain (salah satu pin B) ke resistor 10k, seperti pin analog modul dalam skema.

Langkah 3: Prinsip Operasi

Prinsip Operasi
Prinsip Operasi
Prinsip Operasi
Prinsip Operasi

Mengapa kita membutuhkan semua komplikasi ini, mengapa tidak memasang 5V, ground, dan hanya mendapatkan pembacaan? Sayangnya, Anda tidak akan mendapatkan sesuatu yang berguna dengan cara ini. Menurut datasheet MQ-7, sensor harus berjalan melalui high- dan siklus pemanasan rendah untuk mendapatkan pengukuran yang tepat. Selama fase suhu rendah, CO diserap di piring, menghasilkan data yang berarti. Selama fase suhu tinggi, CO yang diserap dan senyawa lain menguap dari pelat sensor, membersihkannya untuk pengukuran berikutnya.

Jadi secara umum operasi sederhana:

1. Terapkan 5V selama 60 detik, jangan gunakan pembacaan ini untuk pengukuran CO.

2. Terapkan 1.4V selama 90 detik, gunakan pembacaan ini untuk pengukuran CO.

3. Pergi ke langkah 1.

Tapi inilah masalahnya: Arduino tidak dapat menyediakan daya yang cukup untuk menjalankan sensor ini dari pinnya - pemanas sensor membutuhkan 150 mA, sedangkan pin Arduino dapat menyediakan tidak lebih dari 40 mA, jadi jika dipasang langsung, pin Arduino akan menyala dan sensor masih menang tidak bekerja. Jadi kita harus menggunakan semacam penguat arus yang mengambil arus masukan kecil untuk mengontrol arus keluaran yang besar. Masalah lain adalah mendapatkan 1.4V. Satu-satunya cara untuk mendapatkan nilai ini secara andal tanpa memasukkan banyak komponen analog adalah dengan menggunakan pendekatan PWM (Pulse Width Modulation) dengan umpan balik yang akan mengontrol tegangan output.

Transistor NPN memecahkan kedua masalah: ketika terus dihidupkan, tegangan melintasi sensor adalah 5V dan memanas untuk fase suhu tinggi. Ketika kita menerapkan PWM ke inputnya, arus berdenyut, kemudian dihaluskan oleh kapasitor, dan tegangan rata-rata dijaga konstan. Jika kami menggunakan PWM frekuensi tinggi (dalam sketsa memiliki frekuensi 62.5KHz) dan rata-rata banyak pembacaan analog (dalam sketsa kami rata-rata lebih dari ~1000 pembacaan), maka hasilnya cukup dapat diandalkan.

Sangat penting untuk menambahkan kapasitor sesuai dengan skema. Gambar di sini mengilustrasikan perbedaan sinyal dengan dan tanpa kapasitor C2: tanpanya, riak PWM terlihat jelas dan secara signifikan mendistorsi pembacaan.

Langkah 4: Skema dan Breadboard

Skema dan papan tempat memotong roti
Skema dan papan tempat memotong roti
Skema dan papan tempat memotong roti
Skema dan papan tempat memotong roti
Skema dan papan tempat memotong roti
Skema dan papan tempat memotong roti

Berikut adalah skema dan perakitan papan tempat memotong roti.

PERINGATAN! Modifikasi modul breakout standar diperlukan! Tanpa modul modifikasi tidak ada gunanya. Modifikasi dijelaskan pada langkah kedua

Penting untuk menggunakan pin D9 dan D10 untuk LED, karena di sana kami memiliki output dari Timer1 perangkat keras, ini akan memungkinkan untuk mengubah warnanya dengan lancar. Pin D5 dan D6 digunakan untuk buzzer, karena D5 dan D6 adalah keluaran dari Timer0 perangkat keras. Kami akan mengonfigurasinya menjadi terbalik satu sama lain, sehingga mereka akan beralih antara status (5V, 0V) dan (0V, 5V), sehingga menghasilkan suara pada buzzer. Peringatan: ini mempengaruhi interupsi waktu utama Arduino, jadi semua fungsi yang bergantung pada waktu (seperti milis()) tidak akan menghasilkan hasil yang benar dalam sketsa ini (lebih lanjut tentang ini nanti). Pin D3 memiliki output Timer2 perangkat keras yang terhubung dengannya (serta D11 - tapi itu kurang nyaman untuk menempatkan kabel di D11 daripada di D3) - jadi kami menggunakannya untuk menyediakan PWM untuk transistor pengontrol tegangan. Resistor R1 digunakan untuk mengontrol kecerahan LED. Itu bisa di mana saja dari 300 hingga 3000 Ohm, 1k agak optimal dalam kecerahan / konsumsi daya. Resistor R2 digunakan untuk membatasi arus basis transistor. Seharusnya tidak lebih rendah dari 300 Ohm (agar tidak membebani pin Arduino), dan tidak lebih tinggi dari 1500 Ohm. 1k ada pilihan yang aman.

Resistor R3 digunakan secara seri dengan pelat sensor untuk membuat pembagi tegangan. Tegangan pada keluaran sensor sama dengan R3 / (R3 + Rs) * 5V, di mana Rs adalah resistansi sensor arus. Resistansi sensor tergantung pada konsentrasi CO, sehingga tegangan berubah sesuai. Kapasitor C1 digunakan untuk memuluskan tegangan input PWM pada sensor MQ-7, semakin tinggi kapasitansinya semakin baik, tetapi juga harus memiliki ESR rendah - jadi keramik (atau tantalum) kapasitor lebih disukai di sini, yang elektrolitik tidak akan berkinerja baik.

Kapasitor C2 digunakan untuk menghaluskan output analog sensor (tegangan output tergantung pada tegangan input - dan kami memiliki PWM arus yang cukup tinggi di sini, yang mempengaruhi semua skema, jadi kami membutuhkan C2). Solusi paling sederhana adalah dengan menggunakan kapasitor yang sama dengan transistor C1. NPN baik melakukan arus sepanjang waktu untuk memberikan arus tinggi pada pemanas sensor, atau bekerja dalam mode PWM sehingga mengurangi arus pemanasan.

Langkah 5: Program Arduino

Program Arduino
Program Arduino

PERINGATAN: SENSOR MEMBUTUHKAN KALIBRASI MANUAL UNTUK PENGGUNAAN PRAKTIS APAPUN. TANPA KALIBRASI, TERGANTUNG PARAMETER SENSOR TERTENTU ANDA, SKETSA INI MUNGKIN MENGHIDUPKAN ALARM DI UDARA BERSIH ATAU TIDAK MENDETEKSI KONSENTRASI KARBON MONOKSIDA YANG MEMATIKAN

Kalibrasi dijelaskan dalam langkah-langkah berikut. Kalibrasi kasar sangat sederhana, presisi cukup rumit.

Pada tingkat umum, program ini agak sederhana:

Pertama kita mengkalibrasi PWM kita untuk menghasilkan 1.4V stabil yang dibutuhkan oleh sensor (lebar PWM yang tepat tergantung pada banyak parameter seperti nilai resistor yang tepat, resistansi sensor tertentu, kurva VA transistor, dll. - jadi cara terbaik adalah mencoba berbagai nilai dan gunakan salah satu yang paling cocok). Kemudian, kami terus menjalankan siklus pemanasan 60 detik dan pengukuran 90 detik. Dalam implementasinya menjadi agak rumit. Kami harus menggunakan timer perangkat keras karena semua yang kami miliki di sini membutuhkan PWM stabil frekuensi tinggi agar berfungsi dengan baik. Kode terlampir di sini dan dapat diunduh dari github kami, serta sumber skema di Fritzing. Dalam program ada 3 fungsi yang menangani timer: setTimer0PWM, setTimer1PWM, setTimer2PWM. Masing-masing dari mereka mengatur timer dalam mode PWM dengan parameter yang diberikan (dikomentari dalam kode), dan mengatur lebar pulsa sesuai dengan nilai input. Fase pengukuran diaktifkan menggunakan fungsi startMeasurementPhase dan startHeatingPhase, mereka menangani segala sesuatu di dalam. dan mengatur nilai pengatur waktu yang tepat untuk beralih antara pemanasan 5V dan 1.4V. Status LED diatur oleh fungsi setLED yang menerima kecerahan hijau dan merah pada inputnya (dalam skala 1-100 linier) dan mengubahnya menjadi pengaturan pengatur waktu yang sesuai.

Status buzzer dikontrol menggunakan fungsi buzz_on, buzz_off, buzz_beep. Fungsi on/off menghidupkan dan mematikan suara, fungsi bip menghasilkan urutan bip tertentu dengan periode 1,5 detik jika dipanggil secara berkala (fungsi ini segera kembali sehingga tidak menghentikan program utama - tetapi Anda harus memanggilnya lagi dan lagi untuk menghasilkan pola bip).

Program pertama-tama menjalankan fungsi pwm_adjust yang menemukan lebar siklus PWM yang tepat untuk mencapai 1.4V selama fase pengukuran. Kemudian berbunyi bip beberapa kali untuk menunjukkan bahwa sensor siap, beralih ke fase pengukuran, dan memulai loop utama.

Di loop utama, program memeriksa apakah kita menghabiskan cukup waktu dalam fase saat ini (90 detik untuk fase pengukuran, 60 detik untuk fase pemanasan) dan jika ya, maka ubah fase saat ini. Juga secara konstan memperbarui pembacaan sensor menggunakan pemulusan eksponensial: new_value = 0,999*old_value + 0,001*new_reading. Dengan parameter dan siklus pengukuran seperti itu, sinyal rata-rata selama kira-kira 300 milidetik terakhir. PERINGATAN: SENSOR MEMBUTUHKAN KALIBRASI MANUAL UNTUK PENGGUNAAN PRAKTIS APA PUN. TANPA KALIBRASI, TERGANTUNG PARAMETER SENSOR TERTENTU ANDA, SKETSA INI MUNGKIN MENGHIDUPKAN ALARM DI UDARA BERSIH ATAU TIDAK MENDETEKSI KONSENTRASI KARBON MONOKSIDA YANG MEMATIKAN.

Langkah 6: Jalankan Pertama: Apa yang Diharapkan

Jalankan Pertama: Apa yang Diharapkan
Jalankan Pertama: Apa yang Diharapkan

Jika Anda merakit semuanya dengan benar, setelah menjalankan sketsa Anda akan melihat sesuatu seperti ini di monitor Serial:

menyesuaikan PWM w = 0, V = 4,93

menyesuaikan PWM w = 17, V = 3.57 hasil PWM: lebar 17, tegangan 3,57

dan kemudian serangkaian angka yang mewakili pembacaan sensor saat ini. Bagian ini menyesuaikan lebar PWM untuk menghasilkan tegangan pemanas sensor sedekat mungkin dengan 1.4V, tegangan terukur dikurangi dari 5V, jadi nilai pengukuran ideal kami adalah 3.6V. Jika proses ini tidak pernah berakhir atau berakhir setelah satu langkah (menghasilkan lebar sama dengan 0 atau 254) - maka ada sesuatu yang salah. Periksa apakah transistor Anda benar-benar NPN dan terhubung dengan benar (pastikan Anda menggunakan pin basis, kolektor, emitor dengan benar - basis masuk ke D3, kolektor ke MQ-7 dan emitor ke ground, jangan mengandalkan tampilan papan tempat memotong roti Fritzing - itu adalah salah untuk beberapa transistor) dan pastikan Anda menghubungkan input sensor ke input A1 Arduino. Jika semuanya baik-baik saja, Anda akan melihat di Serial Plotter dari Arduino IDE sesuatu yang mirip dengan gambar. Siklus pemanasan dan pengukuran berdurasi 60 dan 90 detik berjalan satu demi satu, dengan CO ppm diukur dan diperbarui pada akhir setiap siklus. Anda dapat mengambil beberapa nyala api terbuka dekat dengan sensor ketika siklus pengukuran hampir selesai dan melihat bagaimana hal itu akan mempengaruhi pembacaan (tergantung pada jenis nyala api, dapat menghasilkan hingga 2000 ppm CO konsentrasi di udara terbuka - jadi meskipun hanya sebagian kecil dari itu benar-benar masuk ke sensor, itu masih akan menyalakan alarm, dan tidak akan mati sampai akhir siklus berikutnya). Saya menunjukkannya pada gambar, serta respons terhadap api dari pemantik.

Langkah 7: Kalibrasi Sensor

Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor
Kalibrasi Sensor

Menurut lembar data pabrikan, sensor harus menjalankan siklus pemanasan-pendinginan selama 48 jam berturut-turut sebelum dapat dikalibrasi. Dan Anda harus melakukannya jika Anda ingin menggunakannya untuk waktu yang lama: dalam kasus saya, pembacaan sensor di udara bersih berubah sekitar 30% selama 10 jam. Jika Anda tidak memperhitungkan ini, Anda bisa mendapatkan hasil 0 ppm di mana sebenarnya ada 100 ppm CO. Jika Anda tidak ingin menunggu selama 48 jam, Anda dapat memantau keluaran sensor di akhir siklus pengukuran. Ketika lebih dari satu jam tidak akan berubah lebih dari 1-2 poin - Anda dapat berhenti memanaskan di sana.

Kalibrasi kasar:

Setelah menjalankan sketsa minimal 10 jam di udara bersih, ambil nilai sensor mentah di akhir siklus pengukuran, 2-3 detik sebelum fase pemanasan dimulai, dan tuliskan ke variabel sensor_reading_clean_air (baris 100). Itu dia. Program akan memperkirakan parameter sensor lainnya, mereka tidak akan tepat, tetapi harus cukup untuk membedakan antara konsentrasi 10 dan 100 ppm.

Kalibrasi yang tepat:

Saya sangat merekomendasikan untuk menemukan pengukur CO yang terkalibrasi, membuat sampel CO 100 ppm (ini dapat dilakukan dengan memasukkan beberapa gas buang ke dalam jarum suntik - konsentrasi CO di sana dapat dengan mudah berada di kisaran beberapa ribu ppm - dan perlahan-lahan memasukkannya ke dalam stoples tertutup dengan meter terkalibrasi dan sensor MQ-7), ambil pembacaan sensor mentah pada konsentrasi ini dan masukkan ke variabel sensor_reading_100_ppm_CO. Tanpa langkah ini, pengukuran ppm Anda bisa salah beberapa kali di kedua arah (masih ok jika Anda memerlukan alarm untuk konsentrasi CO berbahaya di rumah, di mana biasanya seharusnya tidak ada CO sama sekali, tetapi tidak baik untuk aplikasi industri apa pun).

Karena saya tidak memiliki pengukur CO, saya menggunakan pendekatan yang lebih canggih. Pertama saya menyiapkan CO konsentrasi tinggi menggunakan pembakaran dalam volume terisolasi (foto pertama). Dalam makalah ini saya menemukan data yang paling berguna, termasuk hasil CO untuk jenis api yang berbeda - tidak ada di foto, tetapi percobaan terakhir menggunakan pembakaran gas propana, dengan pengaturan yang sama, menghasilkan konsentrasi CO ~ 5000 ppm. Kemudian diencerkan 1:50 untuk mencapai 100 ppm, seperti diilustrasikan pada foto kedua, dan digunakan untuk menentukan titik referensi sensor.

Langkah 8: Beberapa Data Eksperimental

Beberapa Data Eksperimental
Beberapa Data Eksperimental

Dalam kasus saya, sensor bekerja cukup baik - tidak terlalu sensitif untuk konsentrasi yang sangat rendah, tetapi cukup baik untuk mendeteksi sesuatu yang lebih tinggi dari 50ppm. Saya mencoba meningkatkan konsentrasi secara bertahap, melakukan pengukuran, dan membuat satu set grafik. Ada dua set garis 0ppm - hijau murni sebelum paparan CO dan kuning hijau setelahnya. Sensor tampaknya sedikit mengubah hambatan udara bersihnya setelah terpapar, tetapi efek ini kecil. Tampaknya tidak dapat dengan jelas membedakan antara konsentrasi 8 dan 15, 15 dan 26, 26 dan 45 ppm - tetapi trennya sangat jelas, sehingga dapat membedakan apakah konsentrasi berada dalam kisaran 0-20 atau 40-60 ppm. Untuk ketergantungan konsentrasi yang lebih tinggi jauh lebih khas - ketika terkena knalpot api terbuka, kurva naik dari awal tanpa turun sama sekali, dan dinamikanya sama sekali berbeda. Jadi untuk konsentrasi tinggi tidak ada keraguan bahwa ia bekerja dengan andal, meskipun saya tidak dapat memastikan ketepatannya karena saya tidak memiliki pengukur CO terukur. Juga, rangkaian percobaan ini dilakukan menggunakan resistor beban 20k - dan setelah itu saya memutuskan untuk merekomendasikan 10k sebagai nilai default, seharusnya lebih sensitif dengan cara ini. Itu saja. Jika Anda memiliki pengukur CO yang andal dan akan merakit papan ini, silakan bagikan umpan balik tentang presisi sensor - akan sangat bagus untuk mengumpulkan statistik berbagai sensor dan meningkatkan asumsi sketsa default.

Direkomendasikan: