สารบัญ:

Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7: 8 ขั้นตอน (พร้อมรูปภาพ)
Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: แนะนำ MQ-7 Gas Sensor Module (Carbon Monoxide Gas) 2024, กรกฎาคม
Anonim
Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7
Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7
Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7
Arduino CO Monitor โดยใช้เซ็นเซอร์ MQ-7

คำสองสามคำที่ถูกสร้างขึ้น: วันหนึ่งแม่ของแฟนฉันโทรมาหาเราตอนกลางดึกเพราะเธอรู้สึกไม่สบายจริงๆ - เธอมีอาการวิงเวียนศีรษะ หัวใจเต้นเร็ว คลื่นไส้ ความดันโลหิตสูง เธอเป็นลมโดยไม่ทราบสาเหตุ (อาจเป็นประมาณ ~5) นาที แต่ไม่มีทางบอกได้) ทั้งหมดโดยไม่มีเหตุผลชัดเจน เธออาศัยอยู่ในหมู่บ้านเล็กๆ ที่ห่างไกลจากโรงพยาบาล (60 กม. จากบ้านเรา 30 กม. ถึงโรงพยาบาลที่ใกล้ที่สุด 10 กม. โดยไม่มีถนนปกติระหว่างทาง) ดังนั้นเราจึงรีบไปหาเธอและไปถึงที่นั่นไม่นานหลังจากรถพยาบาล เธอเข้ารับการรักษาในโรงพยาบาลและในตอนเช้าเธอรู้สึกเกือบดีขึ้นแล้ว แต่แพทย์ไม่สามารถหาสาเหตุของอาการนี้ได้ วันรุ่งขึ้น เรามีไอเดียว่า มันอาจจะเป็นพิษจากคาร์บอนไดออกไซด์ก็ได้ เพราะมีหม้อต้มน้ำที่ใช้แก๊ส (ในรูป) และนั่งอยู่ใกล้ๆ กับมันตลอดทั้งคืนตอนที่มันเกิดขึ้น เราเพิ่งซื้อเซ็นเซอร์ CO MQ-7 แต่ไม่เคยมีเวลาประกอบแผนผังเลย ดังนั้นนี่จึงเป็นเวลาที่เหมาะสมที่สุดที่จะทำเช่นนั้น หลังจากค้นหาคำแนะนำใด ๆ ทางอินเทอร์เน็ตเป็นเวลาหนึ่งชั่วโมง ฉันพบว่าฉันไม่พบคำแนะนำใด ๆ ที่ทำตามคำแนะนำของผู้ผลิตเซ็นเซอร์ที่ให้ไว้ในแผ่นข้อมูลและอธิบายทุกอย่างในเวลาเดียวกัน (ตัวอย่างหนึ่งดูเหมือนจะมีรหัสที่ค่อนข้างดี แต่ ไม่ชัดเจนว่าจะนำไปใช้อย่างไร ส่วนอื่นๆ นั้นเรียบง่ายเกินไปและใช้งานไม่ได้ผล) ดังนั้นเราจึงใช้เวลาประมาณ 12 ชั่วโมงในการพัฒนาแผนผัง การสร้างและพิมพ์เคส 3 มิติ การทดสอบและการปรับเทียบเซ็นเซอร์ และวันรุ่งขึ้นก็ไปที่หม้อไอน้ำที่น่าสงสัย ปรากฎว่าระดับ CO นั้นสูงมากและอาจถึงแก่ชีวิตได้หากเวลาในการสัมผัส CO นานขึ้น ดังนั้นฉันเชื่อว่าใครก็ตามที่มีสถานการณ์คล้ายกัน (เช่น หม้อต้มก๊าซหรือการเผาไหม้อื่น ๆ ที่เกิดขึ้นภายในพื้นที่อยู่อาศัย) ควรได้รับเซ็นเซอร์ดังกล่าวเพื่อป้องกันไม่ให้สิ่งเลวร้ายเกิดขึ้น

ทั้งหมดที่เกิดขึ้นเมื่อสองสัปดาห์ก่อน ตั้งแต่นั้นมา ฉันได้ปรับปรุงแผนผังและโปรแกรมค่อนข้างมาก และตอนนี้ดูเหมือนว่าจะดีพอสมควรและค่อนข้างง่าย (ไม่ใช่ 3-line-of-code ง่าย แต่ยังคง) แม้ว่าฉันหวังว่าผู้ที่มีเครื่องวัด CO ที่แม่นยำจะให้ข้อเสนอแนะเกี่ยวกับการสอบเทียบเริ่มต้นที่ฉันใส่ไว้ในแบบร่าง แต่ฉันสงสัยว่ามันไม่ดีนัก นี่คือคำแนะนำฉบับสมบูรณ์พร้อมข้อมูลการทดลองบางส่วน

ขั้นตอนที่ 1: รายการวัสดุ

บิลวัสดุ
บิลวัสดุ

คุณจะต้อง:0 บอร์ด Arduino. ฉันชอบ Arduino Nano โคลนของจีนในราคาที่โดดเด่นที่ $3 แต่ Arduino 8 บิตใดๆ จะทำงานที่นี่ Sketch ใช้การทำงานของตัวจับเวลาขั้นสูง และได้รับการทดสอบบนไมโครคอนโทรลเลอร์ atmega328 เท่านั้น แม้ว่าจะใช้งานได้ดีกับรุ่นอื่นๆ ด้วยเช่นกัน1 เซ็นเซอร์ CO MQ-7 โดยทั่วไปแล้วโมดูลเซ็นเซอร์ Flying Fish จะมีให้ใช้งานโดยส่วนใหญ่ โดยจะต้องดำเนินการผ่านการดัดแปลงเล็กน้อย รายละเอียดในขั้นตอนต่อไป หรือคุณสามารถใช้เซ็นเซอร์ MQ-7 แยกต่างหากได้

2. ทรานซิสเตอร์สองขั้ว NPN แทบทุกทรานซิสเตอร์ NPN ที่สามารถรองรับ 300 mA ขึ้นไปจะทำงานที่นี่ ทรานซิสเตอร์ PNP จะไม่ทำงานกับโมดูล Flying Fish ที่กล่าวถึง (เพราะมีพินฮีทเตอร์ที่บัดกรีกับเอาต์พุตของเซ็นเซอร์) แต่สามารถใช้กับเซ็นเซอร์ MQ-7 แบบแยกส่วนได้

3. ตัวต้านทาน: 2 x 1k (จาก 0.5k ถึง 1.2k จะทำงานได้ดี) และ 1 x 10k (อันนั้นควรแม่นยำที่สุด - แม้ว่าคุณจะต้องใช้ค่าอื่นโดยสิ้นเชิง ให้ปรับตัวแปร reference_resistor_kOhm ในแบบร่างตามนั้น)

4. ตัวเก็บประจุ: 2 x 10uF หรือมากกว่า จำเป็นต้องใช้แทนทาลัมหรือเซรามิก อิเล็กโทรไลต์จะทำงานได้ไม่ดีเนื่องจากมี ESR สูง (ไม่สามารถให้กระแสไฟเพียงพอต่อการกระเพื่อมของกระแสไฟสูงที่ราบรื่น)5. ไฟ LED สีเขียวและสีแดงเพื่อระบุระดับ CO ปัจจุบัน (คุณยังสามารถใช้ LED สองสีเดียวกับ 3 ขั้ว ตามที่เราใช้ในต้นแบบกล่องสีเหลืองของเรา)6. Piezo buzzer เพื่อระบุระดับ CO สูง7. เขียงหั่นขนมและสายไฟ (คุณยังสามารถประสานทุกอย่างกับพิน Nano หรือบีบลงในซ็อกเก็ต Uno ได้ แต่วิธีนี้ทำผิดพลาดได้ง่าย)

ขั้นตอนที่ 2: การปรับเปลี่ยนโมดูลหรือการเดินสายเซนเซอร์แบบไม่ต่อเนื่อง

การปรับเปลี่ยนโมดูลหรือการเดินสายเซนเซอร์แบบไม่ต่อเนื่อง
การปรับเปลี่ยนโมดูลหรือการเดินสายเซนเซอร์แบบไม่ต่อเนื่อง

สำหรับโมดูล คุณต้องมีตัวต้านทาน desolder และตัวเก็บประจุ ดังแสดงในรูปภาพ คุณสามารถถอดแยกชิ้นส่วนได้ทุกอย่างหากต้องการ - โมดูลอิเล็กทรอนิกส์ไม่มีประโยชน์โดยสิ้นเชิง เราใช้มันเป็นตัวยึดสำหรับเซ็นเซอร์เท่านั้น แต่ส่วนประกอบทั้งสองนี้จะป้องกันไม่ให้คุณอ่านค่าที่ถูกต้อง

หากคุณใช้เซ็นเซอร์แยก ให้ติดหมุดฮีตเตอร์ (H1 และ H2) เข้ากับ 5V และตัวสะสมทรานซิสเตอร์ตามลำดับ แนบด้านการตรวจจับหนึ่งด้าน (พิน A ใดๆ) กับ 5V อีกด้านหนึ่งของการตรวจจับ (พิน B ใดๆ) กับตัวต้านทาน 10k เช่นเดียวกับพินอะนาล็อกของโมดูลในแผนผัง

ขั้นตอนที่ 3: หลักการทำงาน

หลักการทำงาน
หลักการทำงาน
หลักการทำงาน
หลักการทำงาน

เหตุใดเราจึงต้องการความยุ่งยากทั้งหมดนี้ ทำไมไม่แนบ 5V กราวด์ และเพียงแค่อ่านค่า แต่คุณจะไม่ได้รับประโยชน์อะไรด้วยวิธีนี้ น่าเสียดาย ตามเอกสารข้อมูล MQ-7 เซ็นเซอร์ต้องทำงานผ่านระดับสูง- และรอบความร้อนต่ำเพื่อให้ได้การวัดที่เหมาะสม ในช่วงอุณหภูมิต่ำ CO จะถูกดูดซับบนจาน ทำให้เกิดข้อมูลที่มีความหมาย ในระหว่างเฟสที่มีอุณหภูมิสูง CO ที่ดูดซับและสารประกอบอื่นๆ จะระเหยออกจากแผ่นเซ็นเซอร์ เพื่อทำความสะอาดสำหรับการวัดครั้งต่อไป

ดังนั้น การใช้งานทั่วไปจึงเป็นเรื่องง่าย:

1. ใช้ 5V เป็นเวลา 60 วินาที อย่าใช้การอ่านเหล่านี้สำหรับการวัด CO

2. ใช้ 1.4V เป็นเวลา 90 วินาที ใช้การอ่านเหล่านี้สำหรับการวัด CO

3. ไปที่ขั้นตอนที่ 1

แต่นี่คือปัญหา: Arduino ไม่สามารถให้พลังงานเพียงพอที่จะเรียกใช้เซ็นเซอร์นี้จากพินของมัน - ฮีตเตอร์ของเซ็นเซอร์ต้องการ 150 mA ในขณะที่พิน Arduino สามารถจ่ายได้ไม่เกิน 40 mA ดังนั้นหากต่อโดยตรง ขา Arduino จะไหม้และเซ็นเซอร์ยังคงชนะ ไม่ทำงาน ดังนั้นเราจึงต้องใช้แอมพลิฟายเออร์กระแสไฟบางชนิดที่ใช้กระแสอินพุตขนาดเล็กเพื่อควบคุมกระแสไฟขาออกขนาดใหญ่ ปัญหาอื่นคือการได้รับ 1.4V วิธีเดียวที่จะได้รับค่านี้อย่างน่าเชื่อถือโดยไม่ต้องแนะนำส่วนประกอบแอนะล็อกจำนวนมากคือการใช้แนวทาง PWM (Pulse Width Modulation) พร้อมข้อเสนอแนะที่จะควบคุมแรงดันเอาต์พุต

ทรานซิสเตอร์ NPN แก้ปัญหาทั้งสองอย่าง: เมื่อเปิดเครื่องตลอดเวลา แรงดันไฟฟ้าข้ามเซ็นเซอร์จะอยู่ที่ 5V และให้ความร้อนสำหรับเฟสที่มีอุณหภูมิสูง เมื่อเราใช้ PWM กับอินพุต กระแสจะเต้นเป็นจังหวะ จากนั้นตัวเก็บประจุจะถูกปรับให้เรียบ และแรงดันไฟฟ้าเฉลี่ยจะคงที่ หากเราใช้ PWM ความถี่สูง (ในสเก็ตช์มีความถี่ 62.5KHz) และอ่านค่าอนาล็อกโดยเฉลี่ยเป็นจำนวนมาก (ในภาพร่างเราอ่านค่าเฉลี่ยมากกว่า ~ 1,000 ครั้ง) ผลลัพธ์ก็ค่อนข้างน่าเชื่อถือ

การเพิ่มตัวเก็บประจุตามแผนผังเป็นสิ่งสำคัญ รูปภาพในที่นี้แสดงให้เห็นถึงความแตกต่างของสัญญาณที่มีและไม่มีตัวเก็บประจุ C2: หากไม่มีมัน จะมองเห็นการกระเพื่อมของ PWM ได้อย่างชัดเจนและบิดเบือนการอ่านอย่างมาก

ขั้นตอนที่ 4: แผนผังและเขียงหั่นขนม

แผนผังและเขียงหั่นขนม
แผนผังและเขียงหั่นขนม
แผนผังและเขียงหั่นขนม
แผนผังและเขียงหั่นขนม
แผนผังและเขียงหั่นขนม
แผนผังและเขียงหั่นขนม

นี่คือแผนผังและการประกอบเขียงหั่นขนม

คำเตือน! จำเป็นต้องมีการปรับเปลี่ยนโมดูลฝ่าวงล้อมมาตรฐาน! หากไม่มีการปรับเปลี่ยนโมดูลจะไร้ประโยชน์ การปรับเปลี่ยนได้อธิบายไว้ในขั้นตอนที่สอง

สิ่งสำคัญคือต้องใช้พิน D9 และ D10 สำหรับ LED เนื่องจากเรามีเอาต์พุตของฮาร์ดแวร์ Timer1 ซึ่งช่วยให้เปลี่ยนสีได้อย่างราบรื่น พิน D5 และ D6 ใช้สำหรับออด เนื่องจาก D5 และ D6 เป็นเอาต์พุตของ Timer0 ของฮาร์ดแวร์ เราจะกำหนดค่าให้เป็นแบบผกผันซึ่งกันและกัน ดังนั้นจะสลับระหว่างสถานะ (5V, 0V) และ (0V, 5V) ทำให้เกิดเสียงบนออด คำเตือน: สิ่งนี้ส่งผลต่อการขัดจังหวะการจับเวลาหลักของ Arduino ดังนั้นฟังก์ชันที่ขึ้นกับเวลาทั้งหมด (เช่น millis()) จะไม่ให้ผลลัพธ์ที่ถูกต้องในภาพร่างนี้ (เพิ่มเติมในเรื่องนี้ในภายหลัง) Pin D3 มีเอาต์พุต Timer2 ของฮาร์ดแวร์เชื่อมต่ออยู่ (รวมถึง D11 - แต่การใส่สายไฟบน D11 ไม่สะดวกกว่า D3) - ดังนั้นเราจึงใช้มันเพื่อจัดหา PWM สำหรับทรานซิสเตอร์ควบคุมแรงดันไฟฟ้าตัวต้านทาน R1 ใช้เพื่อควบคุมความสว่างของ LED สามารถอยู่ที่ใดก็ได้ตั้งแต่ 300 ถึง 3000 โอห์ม 1k ค่อนข้างเหมาะสมในด้านความสว่าง/การใช้พลังงาน ตัวต้านทาน R2 ใช้เพื่อจำกัดกระแสฐานของทรานซิสเตอร์ ไม่ควรต่ำกว่า 300 โอห์ม (เพื่อไม่ให้เกินพิน Arduino) และไม่เกิน 1500 โอห์ม 1k มีทางเลือกที่ปลอดภัย

ตัวต้านทาน R3 ใช้ในซีรีส์ร่วมกับเพลตของเซนเซอร์เพื่อสร้างตัวแบ่งแรงดันไฟ แรงดันไฟฟ้าที่เอาต์พุตของเซ็นเซอร์เท่ากับ R3 / (R3 + Rs) * 5V โดยที่ Rs คือความต้านทานของเซ็นเซอร์ปัจจุบัน ความต้านทานของเซ็นเซอร์ขึ้นอยู่กับความเข้มข้นของ CO ดังนั้นแรงดันไฟฟ้าจึงเปลี่ยนไปตามนั้น Capacitor C1 ใช้เพื่อป้อนแรงดันไฟฟ้า PWM ที่ราบรื่นบนเซ็นเซอร์ MQ-7 ยิ่งความจุสูงก็ยิ่งดี แต่ยังต้องมี ESR ต่ำ เช่น เซรามิก (หรือแทนทาลัม) ตัวเก็บประจุเป็นที่ต้องการที่นี่ ตัวเก็บประจุแบบอิเล็กโทรไลต์จะทำงานได้ไม่ดี

Capacitor C2 ใช้เพื่อปรับเอาท์พุตแอนะล็อกของเซ็นเซอร์ให้ราบเรียบ (แรงดันเอาต์พุตขึ้นอยู่กับแรงดันไฟฟ้าขาเข้า - และเรามี PWM กระแสไฟที่ค่อนข้างสูงที่นี่ ซึ่งส่งผลต่อแผนผังทั้งหมด ดังนั้นเราจึงต้องการ C2) วิธีแก้ปัญหาที่ง่ายที่สุดคือใช้ตัวเก็บประจุตัวเดียวกับทรานซิสเตอร์ C1. NPN ซึ่งจะนำกระแสตลอดเวลาเพื่อให้กระแสไฟสูงบนฮีตเตอร์ของเซ็นเซอร์ หรือทำงานในโหมด PWM ซึ่งจะช่วยลดกระแสความร้อนได้

ขั้นตอนที่ 5: โปรแกรม Arduino

โปรแกรม Arduino
โปรแกรม Arduino

คำเตือน: เซ็นเซอร์ต้องการการปรับเทียบด้วยตนเองสำหรับการใช้งานจริงใดๆ โดยไม่ต้องสอบเทียบ ขึ้นอยู่กับพารามิเตอร์ของเซ็นเซอร์เฉพาะของคุณ SKETCH นี้อาจเปิดสัญญาณเตือนในอากาศบริสุทธิ์หรือตรวจไม่พบความเข้มข้นของคาร์บอนมอนอกไซด์ที่ร้ายแรง

การปรับเทียบได้อธิบายไว้ในขั้นตอนต่อไปนี้ การสอบเทียบแบบหยาบนั้นง่ายมาก ความแม่นยำค่อนข้างซับซ้อน

ในระดับทั่วไป โปรแกรมค่อนข้างง่าย:

ขั้นแรก เราปรับเทียบ PWM ของเราเพื่อสร้างความเสถียร 1.4V ที่เซ็นเซอร์ต้องการ (ความกว้างของ PWM ที่เหมาะสมขึ้นอยู่กับพารามิเตอร์จำนวนมาก เช่น ค่าตัวต้านทานที่แน่นอน ความต้านทานของเซ็นเซอร์โดยเฉพาะ เส้นโค้ง VA ของทรานซิสเตอร์ ฯลฯ เป็นต้น - ดังนั้นวิธีที่ดีที่สุดคือลองใช้ค่าต่างๆ และใช้อันที่เหมาะที่สุด) จากนั้น เราดำเนินการตามรอบการให้ความร้อน 60 วินาทีและการวัด 90 วินาทีอย่างต่อเนื่อง ในการใช้งานจะค่อนข้างซับซ้อน เราต้องใช้ตัวจับเวลาฮาร์ดแวร์เพราะทุกอย่างที่เรามีในที่นี้ต้องการ PWM ที่มีความถี่สูงที่เสถียรเพื่อให้ทำงานได้อย่างถูกต้อง มีการแนบโค้ดไว้ที่นี่และสามารถดาวน์โหลดได้จาก GitHub ของเรา รวมถึงแหล่งแผนผังใน Fritzing ในโปรแกรมจะมี 3 ฟังก์ชันที่จัดการตัวจับเวลา: setTimer0PWM, setTimer1PWM, setTimer2PWM แต่ละตัวตั้งเวลาในโหมด PWM ด้วยพารามิเตอร์ที่กำหนด (แสดงความคิดเห็นในโค้ด) และตั้งค่าความกว้างพัลส์ตามค่าอินพุตเฟสการวัดจะเปลี่ยนโดยใช้ฟังก์ชัน startMeasurementPhase และ startHeatingPhase พวกเขา จัดการทุกอย่างภายใน และตั้งค่าตัวจับเวลาที่เหมาะสมสำหรับการสลับระหว่างการทำความร้อน 5V และ 1.4V สถานะ LED ถูกตั้งค่าโดยฟังก์ชั่น setLED ซึ่งยอมรับความสว่างสีเขียวและสีแดงบนอินพุต (ในสเกล 1-100 เชิงเส้น) และแปลงเป็นการตั้งค่าตัวจับเวลาที่สอดคล้องกัน

สถานะ Buzzer ถูกควบคุมโดยใช้ฟังก์ชัน buzz_on, buzz_off, buzz_beep ฟังก์ชันเปิด/ปิด เปิดและปิดเสียง ฟังก์ชันบี๊บจะสร้างลำดับเสียงบี๊บเฉพาะโดยมีระยะเวลา 1.5 วินาทีหากมีการเรียกเป็นระยะ (ฟังก์ชันนี้จะกลับทันทีเพื่อไม่ให้โปรแกรมหลักหยุดชั่วคราว แต่คุณต้องเรียกซ้ำแล้วซ้ำอีก เพื่อสร้างรูปแบบเสียงบี๊บ)

โปรแกรมรันฟังก์ชัน pwm_adjust ก่อน ซึ่งจะค้นหาความกว้างของวงจร PWM ที่เหมาะสมเพื่อให้ได้ 1.4V ระหว่างเฟสการวัด จากนั้นจะส่งเสียงบี๊บสองสามครั้งเพื่อระบุว่าเซ็นเซอร์พร้อม เปลี่ยนเป็นเฟสการวัด และเริ่มลูปหลัก

ในลูปหลัก โปรแกรมจะตรวจสอบว่าเราใช้เวลาเพียงพอในเฟสปัจจุบันหรือไม่ (90 วินาทีสำหรับเฟสการวัด 60 วินาทีสำหรับเฟสความร้อน) และถ้าใช่ จะเปลี่ยนเฟสปัจจุบัน นอกจากนี้ยังอัปเดตการอ่านเซ็นเซอร์อย่างต่อเนื่องโดยใช้การปรับให้เรียบแบบเอ็กซ์โปเนนเชียล: new_value = 0.999*old_value + 0.001*new_reading ด้วยพารามิเตอร์และรอบการวัดดังกล่าว ค่าเฉลี่ยของสัญญาณในช่วง 300 มิลลิวินาทีล่าสุด คำเตือน: เซ็นเซอร์ต้องการการปรับเทียบด้วยตนเองสำหรับการใช้งานจริงใดๆ โดยไม่ต้องสอบเทียบ ขึ้นอยู่กับพารามิเตอร์ของเซ็นเซอร์เฉพาะของคุณ SKETCH นี้อาจเปิดสัญญาณเตือนในอากาศบริสุทธิ์หรือตรวจไม่พบความเข้มข้นของคาร์บอนมอนอกไซด์ที่ร้ายแรง

ขั้นตอนที่ 6: เรียกใช้ครั้งแรก: สิ่งที่คาดหวัง

เรียกใช้ครั้งแรก: สิ่งที่คาดหวัง
เรียกใช้ครั้งแรก: สิ่งที่คาดหวัง

หากคุณประกอบทุกอย่างอย่างถูกต้อง หลังจากรัน Sketch คุณจะเห็นสิ่งนี้ใน Serial monitor:

ปรับ PWM w=0, V=4.93

ปรับ PWM w=17, V=3.57PWM ผล: กว้าง 17, แรงดันไฟฟ้า 3.57

จากนั้นชุดตัวเลขที่แทนค่าที่อ่านได้ของเซ็นเซอร์ในปัจจุบัน ส่วนนี้เป็นการปรับความกว้างของ PWM เพื่อสร้างแรงดันฮีตเตอร์ของเซ็นเซอร์ให้ใกล้เคียงกับ 1.4V มากที่สุด แรงดันที่วัดได้จะถูกหักออกจาก 5V ดังนั้นค่าที่วัดได้ในอุดมคติของเราคือ 3.6V หากกระบวนการนี้ไม่สิ้นสุดหรือสิ้นสุดหลังจากขั้นตอนเดียว (ส่งผลให้มีความกว้างเท่ากับ 0 หรือ 254) แสดงว่ามีบางอย่างผิดปกติ ตรวจสอบว่าทรานซิสเตอร์ของคุณเป็น NPN จริง ๆ และเชื่อมต่ออย่างถูกต้องหรือไม่ (ตรวจสอบให้แน่ใจว่าคุณใช้ฐาน ตัวสะสม หมุดอีซีแอล - ฐานไปที่ D3 ตัวสะสมไปที่ MQ-7 และตัวปล่อยลงกราวด์ อย่านับมุมมองเขียงหั่นขนม Fritzing - มันเป็น ผิดสำหรับทรานซิสเตอร์บางตัว) และตรวจสอบให้แน่ใจว่าคุณเชื่อมต่ออินพุตของเซ็นเซอร์กับอินพุต A1 ของ Arduino หากทุกอย่างเรียบร้อย คุณควรเห็นใน Serial Plotter จาก Arduino IDE บางอย่างที่คล้ายกับรูปภาพ รอบการให้ความร้อนและการวัดที่ความยาว 60 และ 90 วินาทีทำงานต่อกัน โดยมีการวัด CO ppm และอัปเดตเมื่อสิ้นสุดแต่ละรอบ คุณสามารถนำเปลวไฟเข้าใกล้เซ็นเซอร์เมื่อรอบการวัดใกล้เสร็จแล้ว และดูว่ามันจะส่งผลต่อการอ่านอย่างไร (ขึ้นอยู่กับชนิดของเปลวไฟ มันสามารถให้ความเข้มข้นของ CO สูงถึง 2,000 ppm ในที่โล่ง - ดังนั้นแม้ว่าจะมีเพียงส่วนเล็ก ๆ ของ มันจะเข้าสู่เซ็นเซอร์จริง ๆ แต่ก็ยังเปิดการเตือนและจะไม่ดับจนกว่าจะสิ้นสุดรอบถัดไป) ฉันแสดงมันบนภาพ รวมถึงการตอบสนองต่อไฟจากไฟแช็ก

ขั้นตอนที่ 7: การปรับเทียบเซ็นเซอร์

การสอบเทียบเซ็นเซอร์
การสอบเทียบเซ็นเซอร์
การสอบเทียบเซ็นเซอร์
การสอบเทียบเซ็นเซอร์

ตามเอกสารข้อมูลของผู้ผลิต เซ็นเซอร์ควรทำงานรอบการทำความร้อนและความเย็นเป็นเวลา 48 ชั่วโมงติดต่อกันก่อนที่จะทำการสอบเทียบ และคุณควรทำเช่นนี้หากต้องการใช้งานเป็นเวลานาน: ในกรณีของฉัน การอ่านค่าเซ็นเซอร์ในอากาศบริสุทธิ์จะเปลี่ยนแปลงไปประมาณ 30% ในระยะเวลา 10 ชั่วโมง หากคุณไม่คำนึงถึงสิ่งนี้ คุณจะได้ผลลัพธ์ 0 ppm โดยที่ CO จริง ๆ แล้วมี 100 ppm หากคุณไม่ต้องการรอเป็นเวลา 48 ชั่วโมง คุณสามารถตรวจสอบเอาต์พุตของเซ็นเซอร์เมื่อสิ้นสุดรอบการวัด เมื่อผ่านไปหนึ่งชั่วโมง มันจะไม่เปลี่ยนแปลงมากกว่า 1-2 จุด คุณสามารถหยุดความร้อนที่นั่นได้

การสอบเทียบแบบหยาบ:

หลังจากรันสเก็ตช์เป็นเวลาอย่างน้อย 10 ชั่วโมงในอากาศบริสุทธิ์ ให้นำค่าเซ็นเซอร์ดิบเมื่อสิ้นสุดรอบการวัด 2-3 วินาทีก่อนเริ่มเฟสการให้ความร้อน และเขียนลงในตัวแปร sensor_reading_clean_air (บรรทัดที่ 100) แค่นั้นแหละ. โปรแกรมจะประมาณค่าพารามิเตอร์เซ็นเซอร์อื่นๆ ซึ่งอาจไม่แม่นยำนัก แต่น่าจะเพียงพอที่จะแยกแยะความเข้มข้นระหว่าง 10 ถึง 100 ppm

การสอบเทียบที่แม่นยำ:

ฉันขอแนะนำอย่างยิ่งให้หาเครื่องวัด CO ที่ปรับเทียบแล้ว สร้างตัวอย่าง CO 100 ppm (สามารถทำได้โดยใส่ก๊าซไอเสียลงในหลอดฉีดยา - ความเข้มข้นของ CO สามารถอยู่ในช่วงหลายพัน ppm ได้อย่างง่ายดาย - และค่อยๆ ใส่ลงในขวดปิดด้วย เครื่องวัดที่ปรับเทียบแล้วและเซ็นเซอร์ MQ-7) ให้อ่านค่าเซ็นเซอร์ดิบที่ความเข้มข้นนี้แล้วใส่ลงในตัวแปร sensor_reading_100_ppm_CO หากไม่มีขั้นตอนนี้ การวัด ppm ของคุณอาจผิดพลาดได้หลายครั้งในทิศทางใดทิศทางหนึ่ง (ยังคงใช้ได้ หากคุณต้องการแจ้งเตือนความเข้มข้นของ CO ที่เป็นอันตรายที่บ้าน ซึ่งปกติแล้วไม่ควรมี CO เลย แต่ไม่ดีสำหรับการใช้งานในอุตสาหกรรมใดๆ)

เนื่องจากฉันไม่มีเครื่องวัด CO ฉันจึงใช้วิธีที่ซับซ้อนกว่านี้ ขั้นแรก ฉันเตรียม CO ที่มีความเข้มข้นสูงโดยใช้การเผาไหม้ในปริมาตรที่แยกออกมา (รูปแรก) ในบทความนี้ ฉันพบข้อมูลที่มีประโยชน์ที่สุด ซึ่งรวมถึงผลผลิต CO สำหรับเปลวไฟประเภทต่างๆ - ข้อมูลนี้ไม่ได้อยู่ในภาพถ่าย แต่การทดลองสุดท้ายใช้การเผาไหม้ก๊าซโพรเพนด้วยการตั้งค่าเดียวกัน ส่งผลให้มีความเข้มข้นของ CO ประมาณ 5,000 ppm จากนั้นจึงเจือจาง 1:50 เพื่อให้ได้ 100 ppm ดังที่แสดงในภาพที่สอง และใช้เพื่อกำหนดจุดอ้างอิงของเซ็นเซอร์

ขั้นตอนที่ 8: ข้อมูลทดลองบางส่วน

ข้อมูลการทดลองบางส่วน
ข้อมูลการทดลองบางส่วน

ในกรณีของฉัน เซ็นเซอร์ทำงานค่อนข้างดี - เซ็นเซอร์ไม่ไวมากสำหรับความเข้มข้นต่ำจริงๆ แต่ดีพอสำหรับการตรวจจับสิ่งใดๆ ที่สูงกว่า 50ppm ฉันพยายามเพิ่มความเข้มข้นทีละน้อย ทำการวัด และสร้างชุดแผนภูมิ มีเส้น 0ppm สองชุด - สีเขียวบริสุทธิ์ก่อนสัมผัส CO และสีเขียวเหลืองหลัง ดูเหมือนว่าเซนเซอร์จะเปลี่ยนแปลงความต้านทานอากาศบริสุทธิ์เล็กน้อยหลังจากการเปิดรับแสง แต่ผลกระทบนี้มีน้อย ดูเหมือนว่าจะไม่สามารถแยกแยะความเข้มข้นระหว่าง 8 ถึง 15, 15 และ 26, 26 และ 45 ppm ได้อย่างชัดเจน - แต่แนวโน้มนั้นชัดเจนมาก จึงสามารถบอกได้ว่าความเข้มข้นอยู่ในช่วง 0-20 หรือ 40-60 ppm. สำหรับการพึ่งพาความเข้มข้นที่สูงขึ้นนั้นมีความโดดเด่นกว่ามาก - เมื่อสัมผัสกับไอเสียของเปลวไฟแบบเปิด เส้นโค้งจะสูงขึ้นตั้งแต่เริ่มต้นโดยไม่ลงไปเลย และไดนามิกของมันแตกต่างไปจากเดิมอย่างสิ้นเชิง ดังนั้นสำหรับความเข้มข้นสูง ไม่ต้องสงสัยเลยว่ามันทำงานได้อย่างน่าเชื่อถือ แม้ว่าฉันจะไม่สามารถยืนยันความแม่นยำของมันได้เนื่องจากฉันไม่มีเครื่องวัด CO ใด ๆ ก็ตาม นอกจากนี้ การทดลองชุดนี้ทำโดยใช้ตัวต้านทานโหลด 20k - และหลังจากนั้นฉันก็ตัดสินใจ หากต้องการแนะนำ 10k เป็นค่าเริ่มต้น วิธีนี้ควรมีความละเอียดอ่อนมากกว่านี้ แค่นั้นเอง หากคุณมีเครื่องวัด CO ที่เชื่อถือได้และจะประกอบบอร์ดนี้ โปรดแบ่งปันความคิดเห็นเกี่ยวกับความแม่นยำของเซ็นเซอร์ - การรวบรวมสถิติจากเซ็นเซอร์ต่างๆ และปรับปรุงสมมติฐานการร่างเริ่มต้นจะเป็นการดี

แนะนำ: