สารบัญ:

การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4: 15 ขั้นตอน (พร้อมรูปภาพ)
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4: 15 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4: 15 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4: 15 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: IoT Based Air Pollution Detecting System in Vehicles using Raspberry Pi Pico 2024, กรกฎาคม
Anonim
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4
การตรวจสอบคุณภาพอากาศ IoT ราคาประหยัดโดยใช้ RaspberryPi 4

ซันติอาโก ประเทศชิลี ระหว่างภาวะฉุกเฉินด้านสิ่งแวดล้อมในฤดูหนาว มีโอกาสได้ใช้ชีวิตในประเทศที่สวยงามที่สุดแห่งหนึ่งของโลก แต่น่าเสียดายที่ดอกกุหลาบนั้นไม่ใช่ดอกกุหลาบทั้งหมด ชิลีในช่วงฤดูหนาวประสบปัญหาการปนเปื้อนในอากาศเป็นอย่างมาก สาเหตุหลักมาจากวัสดุที่เป็นอนุภาค เช่น ฝุ่นและหมอกควัน

เนื่องจากสภาพอากาศหนาวเย็น ในภาคใต้ การปนเปื้อนของอากาศส่วนใหญ่เกิดจากปัจจัยที่ทำด้วยไม้ และในซันติอาโก (เมืองหลวงหลักในตอนกลางของประเทศ) ซึ่งปะปนกันจากอุตสาหกรรม รถยนต์ และสถานการณ์ทางภูมิศาสตร์ที่เป็นเอกลักษณ์ระหว่างเทือกเขาขนาดใหญ่ 2 แห่ง

ทุกวันนี้ มลพิษทางอากาศเป็นปัญหาใหญ่ทั่วโลก และในบทความนี้ เราจะสำรวจวิธีพัฒนาเครื่องตรวจสอบคุณภาพอากาศแบบโฮมเมดที่ราคาไม่แพง โดยใช้ Raspberry Pi หากคุณสนใจที่จะทำความเข้าใจเพิ่มเติมเกี่ยวกับคุณภาพอากาศ โปรดไปที่โครงการ “ดัชนีคุณภาพอากาศโลก”

เสบียง

  • ราสเบอร์รี่ Pi 4
  • 1SDS011 - เลเซอร์ความแม่นยำสูง pm2.5 เซ็นเซอร์ตรวจจับคุณภาพอากาศ
  • กล่องพลาสติก

ขั้นตอนที่ 1: ฝุ่นละออง (PM): มันคืออะไร? มันเข้าสู่อากาศได้อย่างไร?

ฝุ่นละออง (PM): มันคืออะไร? มันเข้าสู่อากาศได้อย่างไร?
ฝุ่นละออง (PM): มันคืออะไร? มันเข้าสู่อากาศได้อย่างไร?

ดังนั้น เพื่อให้เข้าใจมลภาวะหรือการปนเปื้อนในอากาศ เราต้องศึกษาอนุภาคที่เกี่ยวข้องกับสิ่งนั้น ซึ่งเรียกอีกอย่างว่าอนุภาค เมื่อดูกราฟในส่วนที่แล้ว เราจะสังเกตได้ว่าพวกเขากล่าวถึง PM2.5 และ PM10 ให้ภาพรวมโดยย่อของสิ่งนั้น

PM ย่อมาจากฝุ่นละออง (เรียกอีกอย่างว่ามลพิษของอนุภาค): คำสำหรับส่วนผสมของอนุภาคของแข็งและละอองของเหลวที่พบในอากาศ อนุภาคบางอย่าง เช่น ฝุ่น สิ่งสกปรก เขม่า หรือควัน มีขนาดใหญ่หรือมืดพอที่จะมองเห็นได้ด้วยตาเปล่า บางชนิดมีขนาดเล็กมากจนสามารถตรวจจับได้โดยใช้กล้องจุลทรรศน์อิเล็กตรอนเท่านั้น อนุภาคมีหลายขนาด อนุภาคที่มีเส้นผ่านศูนย์กลางน้อยกว่าหรือเท่ากับ 10 ไมโครเมตรมีขนาดเล็กมากจนสามารถเข้าไปในปอดได้ ซึ่งอาจก่อให้เกิดปัญหาสุขภาพร้ายแรงได้ สิบไมโครเมตรนั้นน้อยกว่าความกว้างของเส้นผมมนุษย์เพียงเส้นเดียว

มลภาวะของอนุภาครวมถึงอนุภาคฝุ่นหยาบ (PM10): อนุภาคที่หายใจเข้าไปได้ โดยมีเส้นผ่านศูนย์กลางโดยทั่วไปคือ 10 ไมโครเมตรหรือเล็กกว่า แหล่งที่มารวมถึงการบดหรือบดและฝุ่นละอองที่เกิดจากยานพาหนะบนท้องถนน อนุภาคละเอียด (PM2.5): อนุภาคละเอียดที่หายใจเข้าไปได้ โดยมีเส้นผ่านศูนย์กลางโดยทั่วไปคือ 2.5 ไมโครเมตรหรือเล็กกว่า อนุภาคละเอียดผลิตจากการเผาไหม้ทุกประเภท รวมถึงยานยนต์ โรงไฟฟ้า การเผาไม้ในที่พักอาศัย ไฟป่า การเผาไหม้ทางการเกษตร และกระบวนการทางอุตสาหกรรมบางอย่าง คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับอนุภาคได้ที่ไซต์ EPA: สำนักงานคุ้มครองสิ่งแวดล้อมแห่งสหรัฐอเมริกา

ขั้นตอนที่ 2: เหตุใดจึงสำคัญที่ต้องดูแลเรื่องฝุ่นละอองเหล่านั้น

เหตุใดจึงสำคัญที่ต้องดูแลเรื่องฝุ่นละอองเหล่านั้น
เหตุใดจึงสำคัญที่ต้องดูแลเรื่องฝุ่นละอองเหล่านั้น

ตามที่อธิบายโดย GERARDO ALVARADO Z. ในงานของเขาที่มหาวิทยาลัยชิลี การศึกษาตอนของมลพิษทางอากาศสูงในหุบเขามิวส์ (เบลเยียม) ในปี 2473 โดโนรา (เพนซิลเวเนีย) ในปี 2491 และลอนดอนในปี 2495 เป็นแหล่งข้อมูลแรกที่เกี่ยวข้องกับการตาย ด้วยการปนเปื้อนของอนุภาค (Préndez, 1993). ความก้าวหน้าในการตรวจสอบผลกระทบของมลพิษทางอากาศต่อสุขภาพของประชาชนได้กำหนดว่าความเสี่ยงต่อสุขภาพเกิดจากอนุภาคที่สูดดมได้ ขึ้นอยู่กับการแทรกซึมและการสะสมในส่วนต่างๆ ของระบบทางเดินหายใจ และการตอบสนองทางชีวภาพต่อวัสดุที่สะสม

อนุภาคที่หนาที่สุดประมาณ 5 ไมโครเมตร ถูกกรองโดยการทำงานร่วมกันของตาของช่องจมูกและเยื่อเมือกที่ปกคลุมโพรงจมูกและหลอดลม อนุภาคที่มีเส้นผ่านศูนย์กลางระหว่าง 0.5 ถึง 5 ไมโครเมตรสามารถสะสมไว้ในหลอดลมและแม้กระทั่งในถุงลมในปอด อย่างไรก็ตาม พวกมันจะถูกกำจัดโดย cilia ของ bronchi และ bronchioles หลังจากผ่านไปสองสามชั่วโมง อนุภาคที่มีขนาดเล็กกว่า 0.5 ไมโครเมตรสามารถเจาะลึกได้จนกว่าจะสะสมในถุงลมในปอด ซึ่งคงเหลือตั้งแต่สัปดาห์จนถึงหลายปี เนื่องจากไม่มีกลไกการลำเลียงเมือกที่อำนวยความสะดวกในการกำจัด รูปต่อไปนี้แสดงการแทรกซึมของอนุภาคในระบบทางเดินหายใจขึ้นอยู่กับขนาดของอนุภาค

ดังนั้นการสังเกตอนุภาคทั้งสองประเภท (PM2.5 และ PM10) จึงมีความสำคัญมาก และข่าวดีก็คือว่า SDS011 เซ็นเซอร์ทั้งแบบธรรมดาและราคาไม่แพงสามารถอ่านได้

ขั้นตอนที่ 3: เซ็นเซอร์อนุภาค - SDS011

เซ็นเซอร์อนุภาค - SDS011
เซ็นเซอร์อนุภาค - SDS011
เซ็นเซอร์อนุภาค - SDS011
เซ็นเซอร์อนุภาค - SDS011

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

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

ในบทความนี้เราจะเน้นไปที่เซ็นเซอร์อนุภาคที่สามารถตรวจจับปริมาณฝุ่นในอากาศได้ ในขณะที่รุ่นแรกสามารถตรวจจับปริมาณความทึบได้ แต่เซ็นเซอร์ล่าสุดในชื่อ SDS011 จาก INOVAFIT ซึ่งแยกออกมาจาก University of Jinan (ในมณฑลซานตง) สามารถตรวจจับ PM2.5 และ PM10 ได้แล้ว

ด้วยขนาดของมัน SDS011 จึงน่าจะเป็นเซ็นเซอร์ที่ดีที่สุดตัวหนึ่งในแง่ของความแม่นยำและราคา (น้อยกว่า USD40.00)

  • ค่าที่วัดได้: PM2.5, PM10
  • ช่วง: 0–999.9 ไมโครกรัม /ลบ.ม
  • แรงดันไฟจ่าย: 5V (4.7–5.3V)
  • การใช้พลังงาน (งาน): 70mA±10mA
  • การใช้พลังงาน (เลเซอร์โหมดสลีปและพัดลม): < 4mA
  • อุณหภูมิในการจัดเก็บ: -20 ถึง +60C
  • อุณหภูมิในการทำงาน: -10 ถึง +50C
  • ความชื้น (การจัดเก็บ): สูงสุด. 90%
  • ความชื้น (งาน): สูงสุด. 70% (การควบแน่นของไอน้ำทำให้อ่านค่าผิดพลาด)
  • ความแม่นยำ: 70% สำหรับ0.3μmและ 98% สำหรับ0.5μm
  • ขนาด: 71x70x23 mm
  • การรับรอง: CE, FCC, RoHS

SD011 ใช้ PCB เป็นด้านหนึ่งของเคส จึงช่วยลดต้นทุนได้ ไดโอดตัวรับถูกติดตั้งที่ด้าน PCB (ซึ่งจำเป็นเนื่องจากควรหลีกเลี่ยงสัญญาณรบกวนระหว่างไดโอดและ LNA) เลเซอร์อีซีแอลจะติดตั้งอยู่บนกล่องพลาสติกและเชื่อมต่อกับ PCB ผ่านลวดที่มีความยืดหยุ่น

กล่าวโดยย่อ Nova Fitness SDS011 เป็นเซ็นเซอร์เลเซอร์ฝุ่นแบบมืออาชีพ พัดลมที่ติดตั้งบนเซ็นเซอร์จะดูดอากาศโดยอัตโนมัติ เซ็นเซอร์ใช้หลักการกระเจิงของแสงเลเซอร์* เพื่อวัดค่าของฝุ่นละอองที่ลอยอยู่ในอากาศ เซ็นเซอร์ให้การอ่านค่า PM2.5 และ PM10 ที่แม่นยำและเชื่อถือได้ การเปลี่ยนแปลงใดๆ ในสภาพแวดล้อมสามารถสังเกตได้ในเวลาตอบสนองสั้น ๆ เกือบจะในทันทีที่ต่ำกว่า 10 วินาที เซ็นเซอร์ในโหมดมาตรฐานจะรายงานการอ่านโดยมีช่วงเวลา 1 วินาที

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

ขั้นตอนที่ 4: แต่ SDS011 สามารถจับอนุภาคเหล่านั้นได้อย่างไร

แต่ SDS011 สามารถจับอนุภาคเหล่านั้นได้อย่างไร?
แต่ SDS011 สามารถจับอนุภาคเหล่านั้นได้อย่างไร?
แต่ SDS011 สามารถจับอนุภาคเหล่านั้นได้อย่างไร?
แต่ SDS011 สามารถจับอนุภาคเหล่านั้นได้อย่างไร?

ดังที่ได้กล่าวไว้ก่อนหน้านี้ หลักการที่ใช้โดย SDS011 คือการกระเจิงของแสงหรือดีกว่า Dynamic Light Scattering (DLS) ซึ่งเป็นเทคนิคทางฟิสิกส์ที่สามารถใช้ในการกำหนดโปรไฟล์การกระจายขนาดของอนุภาคขนาดเล็กในสารแขวนลอยหรือโพลีเมอร์ในสารละลาย ในขอบเขตของ DLS ความผันผวนของเวลามักจะถูกวิเคราะห์โดยใช้ความเข้มหรือฟังก์ชันโฟตอนสหสัมพันธ์อัตโนมัติ (หรือที่เรียกว่าโฟตอนสหสัมพันธ์สเปกโทรสโกปี ในการวิเคราะห์โดเมนเวลา ฟังก์ชันสหสัมพันธ์อัตโนมัติ (ACF) มักจะสลายตัวโดยเริ่มจากเวลาหน่วงเป็นศูนย์ และไดนามิกที่เร็วขึ้นเนื่องจากอนุภาคขนาดเล็กกว่าจะนำไปสู่การเพิ่มความสัมพันธ์ที่รวดเร็วขึ้นของการติดตามความเข้มที่กระจัดกระจาย แสดงให้เห็นว่าความเข้มของ ACF คือการแปลงฟูริเยร์ของสเปกตรัมกำลัง ดังนั้นการวัด DLS จึงสามารถดำเนินการได้ดีเท่ากันในโดเมนสเปกตรัม

เหนือการกระเจิงแสงแบบไดนามิกสมมุติของตัวอย่างสองตัวอย่าง: อนุภาคขนาดใหญ่ (เช่น PM10) ที่ด้านบนและอนุภาคขนาดเล็ก (เช่น PM2.5) ที่ด้านล่าง และเมื่อมองเข้าไปในเซ็นเซอร์ของเรา เราจะเห็นได้ว่าหลักการกระเจิงของแสงถูกนำไปใช้อย่างไร

สัญญาณไฟฟ้าที่จับบนไดโอดจะไปที่เครื่องขยายสัญญาณรบกวนต่ำ จากนั้นจะถูกแปลงเป็นสัญญาณดิจิตอลผ่าน ADC และไปภายนอกผ่าน UART

หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ SDS011 จากประสบการณ์ทางวิทยาศาสตร์ที่แท้จริง โปรดดูงาน 2018 ของ Konstantinos et al การพัฒนาและการทดสอบภาคสนามของระบบพกพาราคาประหยัดสำหรับการตรวจสอบความเข้มข้น PM2.5

ขั้นตอนที่ 5: เวลาฉาย

เวลาแสดง!
เวลาแสดง!
เวลาแสดง!
เวลาแสดง!

มาหยุดพักในทฤษฎีทั้งหมดนี้และมุ่งเน้นไปที่วิธีการวัดอนุภาคโดยใช้ Raspberry Pi และเซ็นเซอร์ SDS011

การเชื่อมต่อ HW นั้นง่ายมาก เซ็นเซอร์จำหน่ายพร้อมอะแดปเตอร์ USB เพื่อเชื่อมต่อข้อมูลเอาต์พุตจาก UART 7 พินกับขั้วต่อ USB มาตรฐานของ RPi

SDS011 พินเอาต์:

  • พิน 1 - ไม่ได้เชื่อมต่อ
  • ขา 2 - PM2.5: 0–999μg/m³; เอาต์พุต PWM
  • พิน 3-5V
  • ขา 4 - PM10: 0–999 ไมโครกรัม/ลบ.ม.; เอาต์พุต PWM
  • พิน 5 - GND
  • ขา 6 - RX UART (TTL) 3.3V
  • ขา 7 - TX UART (TTL) 3.3V

สำหรับบทช่วยสอนนี้ ฉันใช้ Raspberry-Pi 4 ใหม่เอี่ยมเป็นครั้งแรก แต่แน่นอนว่า รุ่นก่อนหน้าใดๆ ก็ใช้ได้ดีเช่นกัน

ทันทีที่คุณเชื่อมต่อเซ็นเซอร์กับพอร์ต RPi USB ช่องใดพอร์ตหนึ่ง คุณจะเริ่มฟังเสียงของพัดลมโดยอัตโนมัติ เสียงรบกวนค่อนข้างน่ารำคาญ ดังนั้นคุณควรถอดปลั๊กออกและรอจนกว่าคุณจะตั้งค่า SW ทั้งหมด

การสื่อสารระหว่างเซ็นเซอร์และ RPi จะผ่านโปรโตคอลแบบอนุกรม รายละเอียดเกี่ยวกับโปรโตคอลนี้สามารถพบได้ที่นี่: Laser Dust Sensor Control Protocol V1.3 แต่สำหรับโปรเจ็กต์นี้ วิธีที่ดีที่สุดคือการใช้อินเทอร์เฟซแบบหลามเพื่อทำให้โค้ดที่พัฒนาง่ายขึ้น คุณสามารถสร้างอินเทอร์เฟซของคุณเองหรือใช้บางส่วนที่มีอยู่ในอินเทอร์เน็ตเช่น Frank Heuer หรือ Ivan Kalchev เราจะใช้อันสุดท้ายซึ่งง่ายมากและทำงานได้ดี (คุณสามารถดาวน์โหลดสคริปต์ sds011.py จาก GitHub หรือของฉันได้)

ไฟล์ sds011.py ต้องอยู่ในไดเร็กทอรีเดียวกับที่คุณสร้างสคริปต์

ในระหว่างขั้นตอนการพัฒนา ฉันจะใช้ Jupyter Notebook แต่คุณสามารถใช้ IDE ใดก็ได้ที่คุณชอบ (เช่น Thonny หรือ Geany ซึ่งเป็นส่วนหนึ่งของแพ็คเกจ Raspberry Pi Debian ทั้งคู่ก็ดีมาก)

เริ่มนำเข้า sds011 และสร้างอินสแตนซ์เซ็นเซอร์ของคุณ SDS011 ให้วิธีการอ่านจากเซ็นเซอร์โดยใช้ UART

จากการนำเข้า sds011 *

เซ็นเซอร์ = SDS011("/dev/ttyUSB0")

คุณสามารถเปิดหรือปิดเซ็นเซอร์ด้วยคำสั่ง sleep:

pmt_2_5, pmt_10 = sensor.query()

รออย่างน้อย 10 วินาทีเพื่อให้เสถียรก่อนทำการวัดและอย่างน้อย 2 วินาทีเพื่อเริ่มการวัดใหม่ (ดูโค้ดด้านบน)

และนี่คือทั้งหมดที่คุณต้องรู้ในแง่ของ SW เพื่อใช้เซ็นเซอร์ แต่มาเจาะลึกเรื่องการควบคุมคุณภาพอากาศกัน! ในตอนต้นของบทความนี้ หากคุณได้สำรวจเว็บไซต์ที่ให้ข้อมูลว่าอากาศดีหรือไม่ดี คุณควรตระหนักว่าสีมีความเกี่ยวข้องกับค่าเหล่านี้ แต่ละสีเป็นดัชนี ที่รู้จักกันมากที่สุดคือ AQI (ดัชนีคุณภาพอากาศ) ที่ใช้ในสหรัฐอเมริกาและอีกหลายประเทศ

ขั้นตอนที่ 6: ดัชนีคุณภาพอากาศ - AQI

ดัชนีคุณภาพอากาศ - AQI
ดัชนีคุณภาพอากาศ - AQI
ดัชนีคุณภาพอากาศ - AQI
ดัชนีคุณภาพอากาศ - AQI
ดัชนีคุณภาพอากาศ - AQI
ดัชนีคุณภาพอากาศ - AQI

AQI เป็นดัชนีสำหรับการรายงานคุณภาพอากาศรายวัน โดยจะบอกคุณว่าอากาศของคุณสะอาดหรือเป็นมลภาวะอย่างไร และผลกระทบด้านสุขภาพที่เกี่ยวข้องกันที่อาจทำให้คุณกังวลใจ AQI มุ่งเน้นไปที่ผลกระทบต่อสุขภาพที่คุณอาจพบภายในไม่กี่ชั่วโมงหรือไม่กี่วันหลังจากหายใจเอาอากาศเสียเข้าไป

ตัวอย่างเช่น EPA (หน่วยงานคุ้มครองสิ่งแวดล้อมแห่งสหรัฐอเมริกา) คำนวณ AQI ไม่เพียงแต่สำหรับมลภาวะของอนุภาค (PM2.5 และ PM10) แต่ยังรวมถึงมลพิษทางอากาศที่สำคัญอื่นๆ ที่ควบคุมโดยพระราชบัญญัติอากาศสะอาด: โอโซนระดับพื้นดิน คาร์บอนมอนอกไซด์ ซัลเฟอร์ไดออกไซด์ และไนโตรเจนไดออกไซด์ สำหรับมลพิษเหล่านี้ EPA ได้กำหนดมาตรฐานคุณภาพอากาศแห่งชาติเพื่อปกป้องสุขภาพของประชาชน ดูภาพด้านบนที่มีค่า AQI สีและข้อความเกี่ยวกับสุขภาพที่เกี่ยวข้อง

ตามที่ได้แสดงความคิดเห็นไว้ก่อนหน้านั้น ค่า AQI และสีจะสัมพันธ์กับสารก่อมลพิษแต่ละชนิด แต่จะเชื่อมโยงค่าที่สร้างโดยเซ็นเซอร์กับค่าเหล่านี้ได้อย่างไร ตารางเพิ่มเติมเชื่อมต่อทั้งหมดดังที่แสดงด้านบน

แต่แน่นอนว่ามันไม่สมเหตุสมผลเลยที่จะใช้ประโยชน์จากตารางดังกล่าว ในที่สุดมันเป็นอัลกอริธึมทางคณิตศาสตร์อย่างง่ายที่ทำการคำนวณ สำหรับสิ่งนั้น เราจะนำเข้าไลบรารีเพื่อแปลงระหว่างค่า AQI และความเข้มข้นของสารก่อมลพิษ (µg/m³): python-aqi

ติดตั้งไลบรารีโดยใช้ PIP และทำการทดสอบ (ดูโค้ดด้านบน)

pip ติดตั้ง python-aqi

แล้วชิลีล่ะ?

ในชิลีมีการใช้ดัชนีที่คล้ายกัน ICAP: ดัชนีคุณภาพอากาศสำหรับอนุภาคที่ระบายอากาศได้ พระราชกฤษฎีกาสูงสุด 59 ลงวันที่ 16 มีนาคม พ.ศ. 2541 ของเลขาธิการกระทรวงประธานาธิบดีแห่งสาธารณรัฐ กำหนดไว้ในมาตรา 1 ตัวอักษร g) ว่าระดับที่กำหนด ICA สำหรับวัสดุอนุภาคที่ระบายอากาศได้ ICAP

ค่าจะแปรผันเป็นเส้นตรงระหว่างส่วนต่างๆ ค่า 500 จะสอดคล้องกับค่าขีดจำกัดที่จะมีความเสี่ยงสำหรับประชากรเมื่อสัมผัสกับความเข้มข้นเหล่านี้ ตามค่าของ ICAP หมวดหมู่ต่างๆ ได้กำหนดระดับความเข้มข้นของ MP10 ที่ผู้คนได้รับสัมผัส

ขั้นตอนที่ 7: การบันทึกข้อมูลในเครื่อง

การบันทึกข้อมูลในเครื่อง
การบันทึกข้อมูลในเครื่อง
การบันทึกข้อมูลในเครื่อง
การบันทึกข้อมูลในเครื่อง
การบันทึกข้อมูลในเครื่อง
การบันทึกข้อมูลในเครื่อง

ณ จุดนี้ เรามีเครื่องมือทั้งหมดในการเก็บข้อมูลจากเซ็นเซอร์และแปลงเป็น "ค่าที่อ่านได้" มากขึ้น นั่นคือดัชนี AQI

มาสร้างฟังก์ชันเพื่อเก็บค่าเหล่านั้นกัน เราจะจับค่า 3 ค่าตามลำดับโดยใช้ค่าเฉลี่ยจากค่าเหล่านี้:

def get_data(n=3):

sensor.sleep(sleep=False) pmt_2_5 = 0 pmt_10 = 0 time.sleep(10) สำหรับฉันในช่วง (n): x = sensor.query() pmt_2_5 = pmt_2_5 + x[0] pmt_10 = pmt_10 + x[1] time.sleep(2) pmt_2_5 = รอบ (pmt_2_5/n, 1) pmt_10 = รอบ (pmt_10/n, 1) sensor.sleep(sleep=True) time.sleep(2) กลับ pmt_2_5, pmt_10 ด้านบนคุณจะเห็นผลการทดสอบ มาทำฟังก์ชันเพื่อแปลงค่าตัวเลขของ PM ในดัชนี AQI กันเถอะ

def conv_aqi (pmt_2_5, pmt_10):

aqi_2_5 = aqi.to_iaqi(aqi. POLLUTANT_PM25, str(pmt_2_5)) aqi_10 = aqi.to_iaqi(aqi. POLLUTANT_PM10, str(pmt_10)) ส่งคืน aqi_2_5, aqi_10 เหนือผลการทดสอบที่มีทั้งสองฟังก์ชัน แต่จะทำอย่างไรกับพวกเขา? คำตอบที่ง่ายที่สุดคือการสร้างฟังก์ชันเพื่อบันทึกข้อมูลที่บันทึกไว้ บันทึกลงในไฟล์ในเครื่อง

def save_log():

ด้วย open("YOUR PATH HERE/air_quality.csv", "a") เป็นบันทึก: dt = datetime.now() log.write("{}, {}, {}, {}, {}\n" รูปแบบ (dt, pmt_2_5, aqi_2_5, pmt_10, aqi_10)) log.close() ด้วยลูปเดียว คุณสามารถบันทึกข้อมูลที่ฐานปกติในไฟล์ในเครื่องของคุณ เช่น ในแต่ละนาที

ในขณะที่ (จริง):

pmt_2_5, pmt_10 = get_data() aqi_2_5, aqi_10 = conv_aqi(pmt_2_5, pmt_10) ลอง: save_log() ยกเว้น: พิมพ์ ("[INFO] ล้มเหลวในการบันทึกข้อมูล") time.sleep(60) ทุกๆ 60 วินาที การประทับเวลารวมกับข้อมูลจะถูก "ผนวก" กับไฟล์นี้ ดังที่เราเห็นด้านบน

ขั้นตอนที่ 8: การส่งข้อมูลไปยังบริการคลาวด์

การส่งข้อมูลไปยังบริการคลาวด์
การส่งข้อมูลไปยังบริการคลาวด์

ณ จุดนี้ เราได้เรียนรู้วิธีบันทึกข้อมูลจากเซ็นเซอร์แล้ว โดยบันทึกไว้ในไฟล์ CSV ในเครื่อง ถึงเวลาดูวิธีส่งข้อมูลเหล่านั้นไปยังแพลตฟอร์ม IoT ในบทช่วยสอนนี้ เราจะใช้ ThingSpeak.com

“ThingSpeak เป็นแอปพลิเคชั่นโอเพนซอร์ส Internet of Things (IoT) สำหรับจัดเก็บและดึงข้อมูลจากสิ่งต่าง ๆ โดยใช้ REST และ MQTT API ThingSpeak ช่วยให้สามารถสร้างแอปพลิเคชันการบันทึกเซ็นเซอร์ แอปพลิเคชันติดตามตำแหน่ง และเครือข่ายโซเชียลของสิ่งต่างๆ ด้วยการอัพเดตสถานะ”

ขั้นแรก คุณต้องมีบัญชีที่ ThinkSpeak.com ถัดไป ทำตามคำแนะนำเพื่อสร้างช่อง โดยจดรหัสช่องและเขียนคีย์ API

เมื่อสร้างช่อง คุณต้องกำหนดด้วยว่าข้อมูลใดที่จะอัปโหลดไปยังแต่ละช่องจาก 8 ช่องดังที่แสดงด้านบน (ในกรณีของเราจะใช้เพียง 4 ช่องเท่านั้น)

ขั้นตอนที่ 9: โปรโตคอล MQTT และการเชื่อมต่อ ThingSpeak

โปรโตคอล MQTT และการเชื่อมต่อ ThingSpeak
โปรโตคอล MQTT และการเชื่อมต่อ ThingSpeak

MQTT เป็นสถาปัตยกรรมการเผยแพร่/สมัครรับข้อมูลที่พัฒนาขึ้นเพื่อเชื่อมต่อแบนด์วิดท์และอุปกรณ์ที่จำกัดพลังงานผ่านเครือข่ายไร้สายเป็นหลัก เป็นโปรโตคอลที่เรียบง่ายและมีน้ำหนักเบาซึ่งทำงานผ่านซ็อกเก็ต TCP/IP หรือ WebSockets MQTT ผ่าน WebSockets สามารถรักษาความปลอดภัยด้วย SSL สถาปัตยกรรมการเผยแพร่/สมัครรับข้อมูลช่วยให้ส่งข้อความไปยังอุปกรณ์ไคลเอ็นต์โดยที่อุปกรณ์ไม่จำเป็นต้องสำรวจเซิร์ฟเวอร์อย่างต่อเนื่อง

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

ThingSpeak™ มีโบรกเกอร์ MQTT อยู่ที่ URL mqtt.thingspeak.com และพอร์ต 1883 โบรกเกอร์ ThingSpeak รองรับทั้งการเผยแพร่ MQTT และการสมัครรับข้อมูล MQTT

ในกรณีของเรา เราจะใช้ MQTT Publish

ขั้นตอนที่ 10: MQTT เผยแพร่

MQTT Publish
MQTT Publish

สำหรับการเริ่มต้น ให้ติดตั้งไลบรารีไคลเอ็นต์ Eclipse Paho MQTT Python ที่ใช้เวอร์ชัน 3.1 และ 3.1.1 ของโปรโตคอล MQTT

sudo pip ติดตั้ง paho-mqtt

ต่อไป มานำเข้าห้องสมุด paho:

นำเข้า paho.mqtt.publish เป็น publish

และเริ่มช่อง Thingspeak และโปรโตคอล MQTT วิธีการเชื่อมต่อนี้เป็นวิธีที่ง่ายที่สุดและต้องการทรัพยากรระบบน้อยที่สุด:

channelID = "รหัสช่องของคุณ"

apiKey = "Your WRITE KEY" หัวข้อ = "channels/" + channelID + "/publish/" + apiKey mqttHost = "mqtt.thingspeak.com" ตอนนี้เราต้องกำหนด "น้ำหนักบรรทุก" ของเรา

tPayload = "field1=" + str(pmt_2_5)+ "&field2=" + str(aqi_2_5)+ "&field3=" + str(pmt_10)+ "&field4=" + str(aqi_10)

และนั่นแหล่ะ! เราพร้อมที่จะเริ่มส่งข้อมูลไปยังคลาวด์แล้ว! มาเขียนฟังก์ชันวนซ้ำก่อนหน้านี้เพื่อรวมส่วนของ ThingSpeak ไว้ด้วย

# ส่งข้อมูลทั้งหมดไปที่ ThingSpeak ทุก 1 นาที

ในขณะที่(จริง): pmt_2_5, pmt_10 = get_data() aqi_2_5, aqi_10 = conv_aqi(pmt_2_5, pmt_10) tPayload = "field1=" + str(pmt_2_5)+ "&field2=" + str(aqi_2_5)+ "&field3=" + str (pmt_10)+ "&field4=" + str(aqi_10) ลอง: publish.single(topic, payload=tPayload, hostname=mqttHost, port=tPort, tls=tTLS, transport=tTransport) save_log() ยกเว้น: พิมพ์ ("[INFO] การส่งข้อมูลล้มเหลว") time.sleep(60) หากทุกอย่างเรียบร้อย คุณต้องดูข้อมูลปรากฏบนช่องของคุณที่ thingspeak.com ดังที่แสดงด้านบนด้วย

ขั้นตอนที่ 11: สคริปต์สุดท้าย

สิ่งสำคัญคือต้องชี้ให้เห็นว่า Jupyter Notebook เป็นเครื่องมือที่ดีมากสำหรับการพัฒนาและรายงาน แต่ไม่มีการสร้างรหัสเพื่อนำไปใช้จริง สิ่งที่คุณควรทำตอนนี้คือใช้ส่วนที่เกี่ยวข้องของโค้ด และสร้างสคริปต์.py และเรียกใช้บนเทอร์มินัลของคุณ

ตัวอย่างเช่น “ts_air_quality_logger.py” ที่คุณควรเรียกใช้ด้วยคำสั่ง:

หลาม 3 ts_air_quality_logger.py

สคริปต์นี้รวมถึง Jupyter Notebook และ sds011.py สามารถพบได้ในที่เก็บของฉันที่ RPi_Air_Quality_Sensor

โปรดทราบว่าสคริปต์นี้ใช้ได้สำหรับการทดสอบเท่านั้น ทางที่ดีที่สุดคืออย่าใช้การหน่วงเวลาในลูปสุดท้าย (ซึ่งใส่โค้ดใน "หยุดชั่วคราว") แต่ให้ใช้ตัวจับเวลาแทน หรือสำหรับแอปพลิเคชันจริง สิ่งที่ดีที่สุดคือไม่ใช้ลูป โดยให้ Linux ตั้งโปรแกรมให้รันสคริปต์เป็นประจำด้วย crontab

ขั้นตอนที่ 12: นำจอภาพออกไปด้านนอก

การนำจอภาพออกไปด้านนอก
การนำจอภาพออกไปด้านนอก
การนำจอภาพออกไปด้านนอก
การนำจอภาพออกไปด้านนอก
การนำจอภาพออกไปภายนอก
การนำจอภาพออกไปภายนอก
การนำจอภาพออกไปภายนอก
การนำจอภาพออกไปภายนอก

เมื่อจอภาพคุณภาพอากาศ Raspberry Pi ของฉันทำงาน ฉันก็ประกอบ RPi ไว้ในกล่องพลาสติก โดยเก็บเซ็นเซอร์ไว้ด้านนอกและวางไว้นอกบ้าน

สองประสบการณ์ถูกสร้างขึ้น

ขั้นตอนที่ 13: การเผาไหม้ของเครื่องยนต์เบนซิน

การเผาไหม้ของเครื่องยนต์เบนซิน
การเผาไหม้ของเครื่องยนต์เบนซิน
การเผาไหม้ของเครื่องยนต์เบนซิน
การเผาไหม้ของเครื่องยนต์เบนซิน

เซ็นเซอร์ถูกวางห่างจากช่องเก็บก๊าซของ Lambretta ประมาณ 1 เมตร และมอเตอร์ของเซ็นเซอร์ก็เปิดขึ้น มอเตอร์ทำงานสองสามนาทีแล้วดับลง จากไฟล์บันทึกด้านบน ผลลัพธ์ที่ได้ น่าสนใจยืนยันว่า PM2.5 เป็นอนุภาคที่อันตรายที่สุดที่เกิดจากมอเตอร์

ขั้นตอนที่ 14: การเผาไม้

การเผาไหม้ไม้
การเผาไหม้ไม้
การเผาไหม้ไม้
การเผาไหม้ไม้

เมื่อดูที่ล็อกไฟล์ เราทราบดีว่าข้อมูลเซ็นเซอร์นั้น "อยู่นอกขอบเขต" ชั่วขณะ และไม่ได้ถูกบันทึกโดยไลบรารีการแปลง AQI อย่างดี ดังนั้นฉันจึงเปลี่ยนโค้ดก่อนหน้าเพื่อจัดการกับมัน:

def conv_aqi (pmt_2_5, pmt_10):

ลอง: aqi_2_5 = aqi.to_iaqi(aqi. POLLUTANT_PM25, str(pmt_2_5)) aqi_10 = aqi.to_iaqi(aqi. POLLUTANT_PM10, str(pmt_10)) ส่งคืน aqi_2_5, aqi_10 ยกเว้น: ส่งคืน 600, 600 สถานการณ์นี้สามารถเกิดขึ้นได้ในสนามซึ่งก็โอเค โปรดจำไว้ว่า ที่จริงแล้ว คุณควรใช้ค่าเฉลี่ยเคลื่อนที่เพื่อให้ได้ AQI จริงๆ (อย่างน้อยทุกชั่วโมง แต่โดยปกติแล้วจะเป็นรายวัน)

ขั้นตอนที่ 15: บทสรุป

บทสรุป
บทสรุป

และเช่นเคย ฉันหวังว่าโครงการนี้จะช่วยให้ผู้อื่นค้นพบหนทางสู่โลกที่น่าตื่นเต้นของอิเล็กทรอนิกส์และวิทยาศาสตร์ข้อมูล!

สำหรับรายละเอียดและรหัสสุดท้าย โปรดไปที่ศูนย์ฝาก GitHub ของฉัน: RPi_Air_Quality_Sensor

Saludos จากทางใต้ของโลก!

เจอกันที่คำสั่งครั้งต่อไปของฉัน!

ขอขอบคุณ, มาร์เซโล

แนะนำ: