โปรเจ็กต์นี้ใช้ Raspberry Pi Zero W, Pimoroni Enviro+ และเซ็นเซอร์คุณภาพอากาศ Plantower เพื่อตรวจสอบ แสดง และรายงานเกี่ยวกับอนุภาคในอากาศ ก๊าซ อุณหภูมิ ความชื้น ความกดอากาศ ระดับแสง และระดับเสียง นอกจากนี้ยังมีตัวเลือกในการตรวจสอบระดับ eCO2 และ TVOC โดยการเพิ่มเซ็นเซอร์ SGP30 โค้ดนี้อิงตามตัวอย่างและไลบรารี Python จำนวนมากที่เผยแพร่โดย Pimoroni พร้อมด้วยการแก้ไขและการปรับปรุงที่หลากหลาย
เพิ่มฟังก์ชันพยากรณ์อากาศพื้นฐานตามระดับความกดอากาศและการเปลี่ยนแปลง
การแสดงระดับแสงในสภาพอากาศและแสงที่ยอดเยี่ยมได้เปลี่ยนเพื่อแสดงระดับคุณภาพอากาศ ตอนนี้เฉดสีพื้นหลังแสดงถึงระดับคุณภาพอากาศ และตอนนี้ตำแหน่งของดวงอาทิตย์จะแสดงผ่านไอคอนดวงอาทิตย์ที่มองเห็นได้ นอกจากนี้ยังให้ข้อมูลพยากรณ์อากาศ ระดับเสียง (หากเปิดใช้งาน) และมีการเปลี่ยนแปลงเล็กน้อยในตัวบ่งชี้ความชื้น
ฟังก์ชันรวมได้รับการแก้ไขเพื่อให้มองเห็นกราฟแต่ละกราฟได้ดีขึ้น สีกราฟจะขึ้นอยู่กับเกณฑ์ระดับสำหรับแต่ละพารามิเตอร์ และจะแสดงเฉพาะพารามิเตอร์ที่วัดแล้วเท่านั้น นอกจากนี้ วิธีการ 'display_everything' ยังได้รับการแก้ไขให้แสดงเฉพาะพารามิเตอร์คุณภาพอากาศ เพื่อปรับปรุงความสามารถในการอ่านข้อมูลของจอแสดงผล
ฟังก์ชัน All in One ได้รับการแก้ไขเพื่อให้สามารถหมุนเวียนผ่านฟังก์ชันทั้งหมดของ Enviro Monitor ได้
ความแม่นยำของการวัดอุณหภูมิและความชื้นได้รับการปรับปรุงโดยการทดสอบที่ครอบคลุมและการวิเคราะห์การถดถอย (ระหว่าง 0 ถึง 40 องศาเซลเซียส) เพื่อพัฒนาอัลกอริธึมการชดเชยที่มีประสิทธิภาพมากขึ้น อย่างไรก็ตาม ด้วยตัวเอง แม้แต่อัลกอริธึมที่ได้รับการปรับปรุงเหล่านี้ก็ยังให้ความแม่นยำไม่เพียงพอ และจำเป็นต้องใช้เคสที่พิมพ์แบบ 3 มิติเพื่อแยก Enviro+ ออกจาก Raspberry Pi Zero W และเชื่อมต่อผ่านสายแพ
นอกเหนือจากการปรับปรุงการวัดอุณหภูมิและความชื้นแล้ว ยังมีการทดสอบและการวิเคราะห์การถดถอยเพื่อชดเชยความคลาดเคลื่อน อุณหภูมิ ความชื้น และความดันอากาศตามเวลาสำหรับเซ็นเซอร์ก๊าซ Enviro+ อัลกอริธึมและการสอบเทียบอากาศสะอาดยังใช้เพื่อให้การอ่านค่าเซ็นเซอร์ก๊าซในหน่วย ppm อีกด้วย มีฟังก์ชันการบันทึกข้อมูลเพื่อรองรับการวิเคราะห์การถดถอย ต้องเปิดใช้งานไฟล์บันทึกสำหรับการวิเคราะห์นั้นและแปลงเป็นรูปแบบ json ที่ถูกต้องก่อนที่จะดำเนินการวิเคราะห์การถดถอยเพิ่มเติม
ความแม่นยำในการอ่านค่าความดันอากาศจะถูกส่งผ่านการชดเชยระดับความสูง ระดับความสูงถูกกำหนดโดยพารามิเตอร์ 'altitude' ในไฟล์ config.json
ตัวเรือนไม่กันน้ำและจำเป็นต้องได้รับการปกป้องจากสภาพอากาศ จำเป็นต้องใช้ฐานเฉพาะในกรณีที่ไม่ได้ติดตั้งยูนิตบนพื้นผิวแนวตั้ง มีเคสและฝาครอบหลายแบบสำหรับรุ่น Indoor Plus ที่ตรวจสอบระดับ eCO2 และ TVOC เคสรูปแบบนี้ให้พื้นที่และการไหลเวียนอากาศเพิ่มเติมสำหรับเซ็นเซอร์ SGP30
เคสนี้ยังมีตัวเลือกในการเพิ่มที่คลุมกันฝนเพื่อให้การปกป้องเพิ่มเติมจากองค์ประกอบต่างๆ เมื่อใช้หน้าปกนี้ จำเป็นต้องตั้งค่า "enable_display" ในไฟล์ config.json เป็น "false" ซึ่งจะจำกัดฟังก์ชันการแสดงผลให้เหลือเพียงเฉดสีและหมายเลขซีเรียลตามคุณภาพอากาศ ตลอดจนการเปลี่ยนตัวแปรการชดเชยอุณหภูมิและความชื้น เพื่อลดผลกระทบของฝาครอบที่มีต่อเซ็นเซอร์อุณหภูมิและความชื้น
มีการเพิ่มการวัดระดับเสียงโดยประมาณในเวอร์ชัน 6 ตามพื้นที่เก็บข้อมูลนี้ คุณสมบัตินี้ยังไม่ได้รับการปรับเทียบและไม่ได้ใช้เพื่อการวัดระดับเสียงที่แม่นยำ เวอร์ชัน 6.7 ได้ปรับปรุงการชดเชยความถี่ของฟังก์ชันการวัดระดับเสียง โดยใช้ฟังก์ชันนี้ แต่ยังต้องมีการทำงานและการสอบเทียบเพิ่มเติม ฟังก์ชันการวัดระดับเสียงนี้ต้องมีการตั้งค่าเพิ่มเติม (อธิบายไว้ด้านล่าง) และหลังจากการตั้งค่า จะต้องเปิดใช้งานในไฟล์การกำหนดค่า
รองรับ mqtt เพื่อให้สามารถใช้เซ็นเซอร์อุณหภูมิและความชื้นภายนอก (สำหรับการบันทึกข้อมูลและการวิเคราะห์การถดถอย) การทำงานร่วมกันระหว่าง Enviro Monitor และระบบอัตโนมัติภายในบ้าน และเพื่อรองรับการทำงานร่วมกันระหว่าง Enviro Monitor กลางแจ้งและในร่ม การทำงานร่วมกันดังกล่าวช่วยให้จอแสดงผล Enviro Monitor ในร่มสามารถวนระหว่างการอ่านค่าในร่มและกลางแจ้งได้
อีกทางเลือกหนึ่งนอกเหนือจากการใช้ Enviro Monitor ในร่มและกลางแจ้งที่เชื่อมโยง mqtt เพื่อรับการอ่านกลางแจ้งบน Enviro Monitor ในอาคาร คือการกำหนดค่า Enviro Monitor ภายในเพื่อบันทึกการอ่าน Luftdaten หรือฟีด Adafruit IO จาก Enviro Monitor อื่น
การทำงานระหว่างกันของ Luftdaten ได้รับการแก้ไขเพื่อรองรับการเพิ่มการอ่านระดับเสียงต่ำสุด สูงสุด และเฉลี่ย คุณสามารถส่งการอ่านระดับเสียงไปยัง Luftdaten ได้โดยการตั้งค่า "enable_luftdaten_noise" เป็นจริงในไฟล์ config.json โปรดทราบว่าปัจจุบัน Luftdaten ยังกำหนดค่าด้วยเซ็นเซอร์ 3 ตัวต่อโหนดไม่ได้ ดังนั้นการอ่านระดับเสียงจึงสามารถส่งไปยัง Luftdaten ได้ก็ต่อเมื่อปิด PM หรือการอ่านสภาพอากาศเท่านั้น ซึ่งสามารถทำได้โดยการตั้งค่า "disable_luftdaten_sensor_upload" ในไฟล์ config.json เป็น "Climate" หรือ "PM"
การตั้งค่า Enviro+ เดียวกันนี้ใช้เพื่อตั้งค่า Enviro Monitor และใช้พารามิเตอร์ไฟล์ config.json เพื่อปรับแต่งฟังก์ชันการทำงาน คำอธิบายพารามิเตอร์ของไฟล์ config.json อยู่ที่นี่
การตั้งค่าการวัดระดับเสียงต้องมีขั้นตอนเพิ่มเติมดังต่อไปนี้:
จำเป็นต้องดำเนินการตั้งค่านี้ให้สำเร็จก่อนที่จะเปิดใช้งานการวัดสัญญาณรบกวนในไฟล์กำหนดค่า
อัปเดต sudo apt-get
sudo apt-get อัปเกรด
curl -sSL https://get.pimoroni.com/enviroplus | ทุบตี
sudo python -m pip ถอนการติดตั้งอุปกรณ์เสียง
sudo pip3 ติดตั้ง sounddevice==0.3.15
สำหรับเวอร์ชัน 6.7 และใหม่กว่า ให้ทำดังนี้:
sudo apt-get ติดตั้ง python3-scipy
sudo pip3 ติดตั้ง git+https://github.com/endolith/waveform_analysis.git@master
จากนั้นทำตามคำแนะนำที่: https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test รวมถึง “การเพิ่ม Volume Control”
ใช้สิ่งต่อไปนี้แทนข้อความในเอกสารสำหรับ ~/.asoundrc:
สำหรับเวอร์ชันก่อนเวอร์ชัน 6.7:
ใช้ alsamixer เพื่อตั้งค่าระดับการจับ adau7002 เป็น 50
สำหรับเวอร์ชัน 6.7 และใหม่กว่า:
ใช้ alsamixer เพื่อตั้งค่าระดับการจับ adau7002 เป็น 10
คู่มือผู้ใช้ให้คำแนะนำเกี่ยวกับการใช้ Enviro Monitor
รองรับการสตรีมพยากรณ์อากาศ คุณภาพอากาศ อุณหภูมิ ความชื้น จุดน้ำค้าง ความดันอากาศ ความเข้มข้นของ PM ความเข้มข้นของก๊าซ ระดับแสง ระดับเสียงรบกวน และด้วยเซ็นเซอร์เสริม SGP30 ข้อมูล eCO2 และ TVOC ไปยัง Adafruit IO สามารถเปิดใช้งานและตั้งค่าได้ดังนี้:
ต้องเติมช่องต่อไปนี้ในไฟล์ config.json ของ Enviro Monitor เพื่อส่งข้อมูลไปยังฟีด Adafruit IO
"enable_adafruit_io": ตั้งค่าเป็น true เพื่อเปิดใช้งาน และตั้งค่า false เพื่อปิดใช้งานฟีด Adafruit IO
"aio_user_name": "ชื่อผู้ใช้ Adafruit IO ของคุณ",
"aio_key": "คีย์ Adafruit IO ของคุณ",
"aio_feed_window": ค่าระหว่าง 0 ถึง 9 ตั้งเวลาเริ่มต้นสำหรับหน้าต่างฟีดหนึ่งนาที (ดู Adafruit Throttling Control) ตั้งค่าเป็น 0 หากคุณมี Enviro Monitor เพียงอันเดียว
"aio_feed_sequence": ค่าระหว่าง 0 ถึง 3 ตั้งเวลาเริ่มต้นการอัปเดตฟีดภายในหน้าต่างอัปเดตฟีดหนึ่งนาที (ดูการควบคุมการควบคุมปริมาณของ Adafruit) ตั้งค่าเป็น 0 หากคุณมี Enviro Monitor เพียงอันเดียว
"aio_household_prefix": "คำนำหน้าคีย์ Adafruit IO สำหรับครอบครัวที่คุณกำลังติดตามดู (ดูแบบแผนการตั้งชื่อ Adafruit IO)",
"aio_location_prefix": "คำนำหน้าคีย์ Adafruit IO สำหรับตำแหน่งของ Enviro Monitor นี้โดยเฉพาะ ใช้ 'ในอาคาร' สำหรับจอภาพในอาคารหรือ 'กลางแจ้ง' สำหรับจอภาพกลางแจ้ง (ดูแบบแผนการตั้งชื่อของ Adafruit IO)",
"aio_package": ตั้งค่าเป็น "Premium Plus" หรือ "Premium Plus Noise" หรือ "Premium" หรือ "Premium Noise" หรือ "Basic Air" หรือ "Basic Combo"
คุณจะต้องมีบัญชี Adafruit IO+ เพื่อใช้แพ็คเกจ 'Premium Plus', 'Premium Plus Noise', 'Premium' หรือ 'Premium Noise' และ Enviro Monitor Indoor Plus (ติดตั้งเซ็นเซอร์ SGP30 eCO2/TVOC) สำหรับ ' แพ็คเกจ Premium Plus' หรือ 'Premium Plus Noise' (ดูแพ็คเกจ Adafruit IO)"
สคริปต์จะตั้งค่าฟีด Adafruit IO ของ Enviro Monitor แดชบอร์ด และบล็อกตามตัวอย่างนี้
สคริปต์สามารถตั้งค่าครัวเรือนและสถานที่หลายแห่งในการรันครั้งเดียว โดยเติมข้อมูลที่จำเป็นลงในพจนานุกรม aio_feed_prefix รูปแบบสำหรับ aio_feed_prefix คือ:
aio_feed_prefix = {'ชื่อครัวเรือน 1': {'key': 'household1key', 'แพ็คเกจ': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, 'การมองเห็น ': 'สาธารณะ' หรือ 'ส่วนตัว'}, 'ชื่อครัวเรือน 2': {'key': 'household2key', 'แพ็คเกจ': 'aio_package', 'สถานที่': {'Location1Name': 'location1key'}, 'การมองเห็น': 'สาธารณะ' หรือ 'ส่วนตัว'}}
ชื่อครัวเรือนและคีย์ครัวเรือนจะต้องสอดคล้องกับชื่อที่กำหนดไว้ในไฟล์ config.json ของ Enviro Monitors ที่เกี่ยวข้อง
ตัวอย่างเช่น หากคุณมี Enviro Monitor เพียงเครื่องเดียวสำหรับครอบครัวของคุณ และหากคุณได้ตั้งค่า "aio_household_prefix" เป็น "บ้าน", "aio_location_prefix" เป็น "กลางแจ้ง" และ "aio_package" เป็น "Premium" ในไฟล์ config.json ของคุณสำหรับ Enviro Monitor นั้น และหากคุณต้องการให้ฟีด แดชบอร์ด และบล็อกตั้งค่าการมองเห็นแบบส่วนตัว:
aio_feed_prefix = {'บ้าน': {'key': 'บ้าน', 'แพ็คเกจ': พรีเมี่ยม', 'สถานที่': {'กลางแจ้ง': 'กลางแจ้ง'}, 'การมองเห็น': 'ส่วนตัว'}}
หากคุณมี Enviro Monitor สองจอสำหรับครัวเรือนของคุณ และหากคุณได้ตั้งค่าไฟล์ config.json เป็น "aio_household_prefix" เป็น "home" สำหรับ Enviro Monitors ทั้งสองเครื่อง "aio_location_prefix" เป็น "outdoor" สำหรับจอภาพกลางแจ้งและ "indoor" สำหรับ จอภาพในอาคารของคุณ "aio_package" ถึง "Premium" สำหรับจอภาพกลางแจ้งของคุณและ "Premium Plus" สำหรับจอภาพในอาคารของคุณ และหากคุณต้องการฟีด แดชบอร์ด และ บล็อกที่ตั้งค่าให้สาธารณชนมองเห็นได้:
aio_feed_prefix = {'บ้าน': {'key': 'บ้าน', 'แพ็คเกจ': Premium Plus', 'สถานที่': {'กลางแจ้ง': 'กลางแจ้ง', 'ในอาคาร': 'ในอาคาร'}, 'การมองเห็น': 'สาธารณะ'}}
พจนานุกรมที่ผู้ใช้กำหนดอีกสองพจนานุกรมคือ aio_user_name และ aio_key สิ่งเหล่านี้จำเป็นต้องเติมด้วยชื่อผู้ใช้และคีย์เดียวกันกับที่คุณใช้ในไฟล์ config.json ของ Enviro Monitor
aio_user_name = "ชื่อผู้ใช้ Adafruit IO ของคุณ"
aio_key = "คีย์ Adafruit IO ของคุณ"
หากเปิดใช้งาน การอัปเดตฟีด Adafruit IO จะถูกสร้างขึ้นทุกๆ 10 นาที ตัวแปร aio_feed_window และ aio_feed_sequence ของไฟล์กำหนดค่าถูกใช้เพื่อลดข้อผิดพลาดในการควบคุมปริมาณของ Adafruit IO เมื่อรวบรวมฟีดจาก Enviro Monitors หลายตัว ตัวแปร aio_feed_window สามารถเป็นค่าระหว่าง 0 ถึง 9 เพื่อตั้งเวลาเริ่มต้นสำหรับหน้าต่างอัพเดตฟีดหนึ่งนาที 0 เปิดหน้าต่างที่ 0, 10, 20, 30, 40 และ 50 นาทีหลังจากชั่วโมง, 1 เปิดหน้าต่างที่ 1, 11, 21, 31, 41 และ 51 นาทีหลังจากชั่วโมง, 2 เปิดหน้าต่างที่ 2, 12, 22, 32, 42 และ 52 นาทีที่ผ่านมาเป็นชั่วโมง เป็นต้น ตัวแปร aio_feed_sequence สามารถเป็นค่าระหว่าง 0 ถึง 3 เพื่อตั้งเวลาเริ่มต้นการอัปเดตฟีดภายในหน้าต่างการอัปเดตฟีดหนึ่งนาที 0 เริ่มการอัปเดตฟีดทันทีหลังจากหน้าต่างเปิดขึ้น 1 หน่วงเวลาการเริ่มต้น 15 วินาที 2 x 30 วินาที และ 3 x 45 วินาที
รูปแบบการตั้งชื่อสำหรับฟีด แดชบอร์ด หรือบล็อก Adafruit IO ของ Enviro Monitor แต่ละรายการ คือการใช้ชื่อครัวเรือน ตามด้วยตำแหน่งของตำแหน่งของ Enviro Monitor ที่เกี่ยวข้องภายในครัวเรือนนั้น เพื่อเป็นคำนำหน้าสำหรับแต่ละฟีด แดชบอร์ด หรือบล็อก คุณเลือกชื่อที่เหมาะสมสำหรับ "aio_household_prefix" และ "aio_location_prefix" อาจเป็น "ในร่ม" หรือ "กลางแจ้ง" ก็ได้ ตัวอย่างเช่น การตั้งค่า “aio_household_prefix" เป็น “home” และ “aio_location_prefix” เป็น “outdoor” จะตั้งค่าคำนำหน้าชื่อฟีดแต่ละรายการเป็น “Home Outdoor “ และคำนำหน้าคีย์ของแต่ละฟีดเป็น “home-outdoor-“ ดังนั้น ฟีดอุณหภูมิจะมีชื่อ “Home Outdoor Temperature” และคีย์ “home-outdoor-temperature” บนแดชบอร์ดจะมีชื่อ “Home” และคีย์ “home” และบล็อกเกจวัดอุณหภูมิภายในนั้น แผงหน้าปัดจะมีชื่อ “เกจวัดอุณหภูมิภายนอก” และปุ่ม “วัดอุณหภูมิภายนอก”
มีตัวเลือกแพ็คเกจ Adafruit IO ให้เลือก 6 แบบ ได้แก่ "Premium" พร้อมฟีดข้อมูล 14 รายการต่อ Enviro, "Premium Noise" พร้อมฟีดข้อมูล 17 รายการต่อ Enviro, "Premium Plus" พร้อมฟีดข้อมูล 16 รายการต่อ Enviro (เช่น การเพิ่ม eCO2 และ TVOC ผ่านตัวเลือกเสริม เซ็นเซอร์ SGP30), "Premium Plus Noise" พร้อมฟีดข้อมูล 19 รายการต่อ Enviro ซึ่งทั้งหมดต้องมีบัญชี Adafruit IO+ "อากาศพื้นฐาน" พร้อมสตรีมข้อมูลคุณภาพอากาศ 5 สตรีม (ระดับคุณภาพอากาศ ข้อความคุณภาพอากาศ PM1, PM2.5 และ PM10) และ "Basic Combo" พร้อมสตรีมคุณภาพอากาศ/สภาพอากาศ 5 สตรีม (ระดับคุณภาพอากาศ ไอคอนพยากรณ์อากาศ อุณหภูมิ ความชื้นและความกดอากาศ)
การใช้แพ็คเกจ Adafruit IO "เสียงรบกวนระดับพรีเมียม" และ "เสียงรบกวนระดับพรีเมียม" จำเป็นต้องกำหนดค่าและเปิดใช้งานการวัดเสียงรบกวนใน Enviro โดยใช้คำแนะนำในการตั้งค่าที่เกี่ยวข้อง เวอร์ชัน 6.5 เปลี่ยนฟีดเสียงรบกวนและแดชบอร์ดเพื่อแสดงระดับเสียงสูงสุด ต่ำสุด และเฉลี่ยระหว่างการอัปเดตฟีด ในขณะที่เวอร์ชันก่อนหน้าแสดงเฉพาะระดับเสียงสูงสุดระหว่างการอัปเดตฟีด
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT - ดูรายละเอียดในไฟล์ LICENSE.md
พยากรณ์อากาศอ้างอิงจาก www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html โดย RJ Ellis