Menghubungkan Model Sensor CO2 MH-Z19B Menggunakan Output Analog Vo

Saya menyambut semua orang yang tertarik dengan kualitas udara dalam ruangan dan ingin mengontrol dan mengelolanya.

Saya sendiri menjadi tertarik dengan masalah ini baru-baru ini dan memutuskan untuk merasakan sensor CO2 MH-Z19 B dengan tangan saya sendiri. Saya terinspirasi oleh banyak artikel, misalnya sisi Gelap MH-Z19 .



Namun, tidak ada tempat (bahkan dalam instruksi) saya tidak menemukan cara bekerja dengan pin Vo ...

Saya menarik perhatian pada ini: dalam artikel Tinjauan tentang sensor CO2 inframerah MH-Z19 , poin ini disebutkan:

  • Vo - tegangan output 3.3V, tidak lebih dari 10mA

Beberapa toko online, seperti " Sensor Karbon Dioksida CO2 MH-Z19B, " memberikan informasi serupa:

  • Vo - tegangan output 3.3V, tidak lebih dari 10mA

(sebagai salinan karbon)

Tetapi instruksi (di sini ) menunjukkan sedikit lebih banyak:

  • Output Analog Vo (0,4 ~ 2 V) atau (0 ~ 2.5V)

Dan jika Anda menggali lebih banyak, maka instruksi (di sini ) menunjukkan lebih detail:

  • Vo (Pin2) - Output analog (0,4 ~ 2 V) (rentang 0 ~ 3V dapat disesuaikan)

Saya segera mencari di Google dan ... tidak menemukan apa pun tentang jalan keluar ini! Aneh, pikir Stirlitz, dengan cepat menghubungkan output ini ke input analog ESP8266 (untuk Arduino, ini juga relevan) dan mulai meneliti.

Kesimpulan:

  1. Tegangan pada output analog bervariasi dari 0,4xx hingga 2,002v.
  2. Output analog mengulangi tegangan sinyal ppm digital.
  3. Ketika perintah UART mengubah rentang ppm 2k, 5k, 10k, rentang konversi Vo berubah.
  4. Nilai maksimum Vo = 2,001v tidak berubah tergantung pada rentang, karena rentang konversi yang Anda butuhkan untuk menetapkan nilai maksimum dalam ppm (2/5 / 10k).
  5. Nilai minimum Vo bervariasi tergantung pada kisaran (?), Dan kisaran itu sendiri dimulai pada 400ppm.
  6. Jika Anda memilih nilai aktual dari kontroler ADC, Anda bisa mendapatkan kecocokan yang layak antara level tegangan dan ppm. Dalam rentang hingga 2k, kesalahan antara sinyal UART digital dan konversi Vo analog tidak melebihi beberapa unit ppm.
  7. Anda dapat mengkonfigurasi sensor terlebih dahulu menggunakan konverter USB-TTL atau menggunakan Arduino + (nonaktifkan kalibrasi otomatis dan alihkan 400 ... 2000ppm ke rentang "rumah") dan kemudian bekerja dengannya seperti sinyal analog.

Bagaimana saya mengonversi:

[...] const word cADC00v = 3; // ADC = 3 .  0.0v const word cADC04v2k = 235; // ADC = 235 .  400ppm @2k const word cADC04v5k = 174; // ADC = 174 .  400ppm @5k const word cADC04v1k = 153; // ADC = 153 .  400ppm @10k const word cADC20v = 646; // ADC = 646 6.  2.0v word ADC = analogRead(A0); //  10  ADC 0...1023 long Vin = map(ADC, cADC00v, cADC20v, 0, 2001); //  0..3,3v  ,   2,001v long ppm_2k_04_2 = map(ADC, cADC04v2k,cADC20v, 400, 2000); //  Vo  ppm   2k long ppm_5k_04_2 = map(ADC, cADC04v5k,cADC20v, 400, 5000); //  Vo  ppm   5k long ppm_10k_04_2 = map(ADC, cADC04v1k,cADC20v, 400,10000); //  Vo  ppm   10k [...] 

Angka "Ajaib" diangkat secara eksperimental. Itu terjadi lebih cepat dan lebih akurat. Ketika mencoba menghitung dengan sangat akurat, secara matematis, kesalahan besar benar-benar terjadi.

Mengapa ini bekerja untuk saya (0.4 ... 2.0v dan bukan 0 ... 2.5v) Saya tidak tahu. Sensor itu dibeli beberapa hari yang lalu, produksi 26 September 2019. Kisaran hingga 5 k ppm timbul pada kasus ini.

Mengapa saya membutuhkannya? (jawaban untuk "jadi saya akan melakukan kesalahan ...")

Yah ... ada orang yang suka memegang setrika di tangan mereka, tetapi mereka tidak berteman dengan pengontrol. Bagi mereka, output analog setidaknya menghidupkan / mematikan kipas, dan pada kontrol maksimum - kelancaran kecepatan knalpot / intake / recuperator.

Khususnya, bagi saya: di kamar sebelah, sistem ventilasi telah bekerja selama 2 tahun, yang saya buat pada pengontrol industri yang dapat diprogram secara bebas. Karena pengontrolnya adalah industri, maka sistem pemrogramannya spesifik, saya tidak yakin Anda dapat menulis protokol pertukaran UART Anda sendiri di situ. Ya, ada port serial RS484 yang berfungsi dengan baik di ModBus, tetapi port ini ditempati oleh sistem pengiriman.

Tetapi ada input analog gratis yang dapat diatur ke 0-10V. Dan dengan hanya memiliki sekitar $ 30, Anda dapat meningkatkan sistem ventilasi untuk menghemat energi cerdas (hanya ventilasi jika diperlukan, dan persis sebanyak yang Anda butuhkan).

PS: kode SoftSerial.readBytes (mhzBuffer, 9); pada ESP8266 saya menolak untuk bekerja. Dia membunuh sekitar lima jam dari hidupnya. Mereka membahasnya di sini , tetapi saya membacanya nanti. Saya menulis fungsi saya dengan gaya if (SoftSerial.available() { x=SoftSerial.read(); } .

Source: https://habr.com/ru/post/id483826/


All Articles