โปรเจกต์ Arduino Nano ใช้ Median Filter เพื่อแสดงผล DHT22 และ RTC
Despike และทำให้ข้อมูลจาก DHT22 เรียบขึ้นด้วย Median Filter และแสดงผลบน OLED ขนาด 0.96 inch พร้อมวันและเวลาจาก DS3231 real-time clock!
Despike และทำให้ข้อมูลจาก DHT22 เรียบขึ้นด้วย Median Filter และแสดงผลบน OLED ขนาด 0.96 inch พร้อมวันและเวลาจาก DS3231 real-time clock!
โปรเจกต์นี้ใช้ median filter เพื่อปรับข้อมูลให้เรียบและกำจัดค่าที่กระโดด (de-spike) จาก DHT22 Temperature and Humidity Sensor นอกจากนี้ยังใช้ DS3231 Real-time Clock Module (AT24C32) เพื่อแสดงวันที่/เวลาบนหน้าจอ 0.96 inch Yellow/Blue IIC OLED I2c 128x64 display
ฮาร์ดแวร์ทั้งหมดติดตั้งอยู่บน breadboard เพียงอันเดียว และใช้พลังงานผ่าน USB interface หรือเลือกใช้ external power supply ภายนอก (โดยทั่วไปจะเป็น wall wart ที่จ่ายไฟให้กับ breadboard power supply module)
ผมเลือกใช้ median filter เพื่อกำจัดสัญญาณรบกวน (jitter) จาก DHT22 ซึ่งอาจไม่จำเป็นสำหรับงานส่วนใหญ่เนื่องจาก DHT22 มีความเสถียรอยู่แล้ว แต่ตัวกรองนี้ใช้งานง่ายและช่วยกำจัดค่าที่กระโดด (spikes) ได้ จากประสบการณ์พบว่ามันสามารถกำจัด noise ได้เกือบทั้งหมดโดยส่งผลกระทบต่อ response time ของ Sensor น้อยมาก ความกว้าง (width) ของตัวกรองจะมีผลในจุดนี้และสามารถปรับเปลี่ยนได้ใน Sketch โดยค่าความกว้างต้องเป็นเลขคี่ ซึ่งค่า 5 หรือ 7 ดูเหมือนจะทำงานได้ดี ยิ่งตัวกรองกว้างเท่าไร ก็ยิ่งกำจัดค่า spikes ได้มีประสิทธิภาพมากขึ้นเท่านั้น แต่ข้อเสียคือตัวกรองที่กว้างจะทำให้ response time ลดลง
RTC ที่ใช้คือ DS3231 มาตรฐาน คุณต้องตั้งค่าเวลาและวันที่เริ่มต้นด้วย SetTime sketch ใน DS1307RTC library คุณสามารถหา library นั้นได้ที่นี่:
https://github.com/PaulStoffregen/DS1307RTC
หากคุณติดตั้งแบตเตอรี่ CR2032 เสริมใน Clock Module มันจะเก็บรักษาเวลาไว้ได้นานหลายปี ดังนั้นขั้นตอนนี้จึงทำเพียงครั้งเดียว ยกเว้นกรณีที่คุณต้องการใช้ DST คุณจะต้องรัน SetTime sketch ทุกช่วงฤดูใบไม้ผลิและฤดูใบไม้ร่วง
ผมใช้ U8glib library เพื่อขับหน้าจอ OLED display คุณสามารถดาวน์โหลดได้ที่นี่:
https://github.com/olikraus/u8glib
คุณสามารถปรับแต่ง Fonts, ปรับขนาด และอื่นๆ ได้ตามที่อธิบายไว้ที่นี่:
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้