Digital Barometer
เรื่องราว
ผมต้องการสร้าง barometer ที่มีสเกลความละเอียดสูง จึงใช้ 10-led bar array สิบชุด รวมเป็น 100 leds สเกลเต็มตั้งแต่ 950 - 1050 mBar
ผมยังรวมฟังก์ชันวัดอุณหภูมิและความชื้นไว้ด้วย
และมี leds จำนวน 22 ดวง (2x11) เพื่อระบุสเกล
ช่วงอุณหภูมิคือ 0 - 50 องศาเซลเซียส และช่วงความชื้นคือ 0 - 100 % relative humidity (hygrometer)
ผมยังได้รวมจอแสดงผล TFT สี ILI9341 (320x200 pixels) เพื่อแสดงสเกลและค่าที่วัดได้จาก sensor ผมใช้ BMP280 สำหรับความดัน และ SHT31 สำหรับอุณหภูมิและความชื้น ในการควบคุม leds 100 ดวง ผมใช้ shiftregisters SN74595 จำนวน 4 ตัว
ความดันอากาศบนจอแสดงผลเป็นสีเขียว อุณหภูมิเป็นสีแดง และความชื้นเป็นสีน้ำเงิน
และผมใช้หน่วยความจำเสริม (EEPROM) ขนาด 32kByte เพื่อเก็บค่าที่อ่านได้จาก sensors โปรแกรมจะอ่านค่าจาก sensors ทุก 30 วินาที และทุก 15 นาที ข้อมูลจะถูกบันทึกใน EEPROM ดังนั้นจึงมีจุดข้อมูล 96 จุดภายใน 24 ชั่วโมง ข้อมูลจะถูกเลื่อนเข้า โดยเก็บข้อมูลเพียง 24 ชั่วโมงล่าสุด เพื่อให้คุณสามารถดูแนวโน้มของ barometer, thermometer หรือ hygrometer ในช่วง 24 ชั่วโมงที่ผ่านมาได้


ในภาพด้านบน (ภาพรวมระยะใกล้) : Temp = อุณหภูมิ (temperature), LV = ความชื้น (humidity) (ภาษาดัตช์ Lucht Vochtigheid) และ Atm = ความดันอากาศ (air pressure) (Atm = atmosphere)
โปรแกรมจะตรวจสอบสถานะของสวิตช์สี่ตัว ด้วยสวิตช์สี่ตัวนี้ จะมี 16 ฟังก์ชัน ฟังก์ชันต่างๆ ได้แก่:
ฟังก์ชัน 0000:
จอแสดงผลและ led bar ว่างเปล่า
ฟังก์ชัน 0001:
Led bar: ว่างเปล่า
จอแสดงผล: ค่าจาก sensors (ดูภาพด้านบน: ภาพรวมระยะใกล้)
ฟังก์ชัน 0010: ความดันอากาศ (Air pressure)
Led bar: แสดงความดันอากาศในหน่วย mBar
จอแสดงผล: ช่วง 950 - 1050 mBar,
ความดันอากาศปัจจุบัน
สเกล = 10 mBar ( 1 led = 1 mBar)
ฟังก์ชัน 0011: อุณหภูมิ (Temperature)
Led bar: แสดงอุณหภูมิในหน่วยองศาเซลเซียส
จอแสดงผล: ช่วง 0 - 50 องศาเซลเซียส
อุณหภูมิปัจจุบัน
สเกล = 5 องศาเซลเซียส (1 led = 0.5 องศา)
ฟังก์ชัน 0100: ความชื้น (Humidity)
Led bar: แสดงความชื้นเป็น %
จอแสดงผล: ช่วง 0 - 100 % relative humidity
ความชื้นปัจจุบัน
สเกล = 10 % (1 led = 1 % relative humidity)
ฟังก์ชัน 0101:
Led bar: แสดงความดันอากาศในหน่วย mBar
จอแสดงผล: แนวโน้มความดันอากาศในช่วง 24 ชั่วโมงที่ผ่านมา
ฟังก์ชัน 0110:
Led bar: แสดงอุณหภูมิในหน่วยองศาเซลเซียส
จอแสดงผล: แนวโน้มอุณหภูมิในช่วง 24 ชั่วโมงที่ผ่านมา
0111:
Led bar: แสดง relative humidity เป็น %
จอแสดงผล: แนวโน้ม relative humidity ในช่วง 24 ชั่วโมงที่ผ่านมา
ฟังก์ชัน 1000:
Led bar: ว่างเปล่า
จอแสดงผล: ค่าสูงสุดและต่ำสุดของความดันอากาศ,
แนวโน้ม 3, 6, 12 และ 24 ชั่วโมง
ฟังก์ชัน 1001:
Led bar: ว่างเปล่า
จอแสดงผล: ค่าสูงสุดและต่ำสุดของอุณหภูมิและความชื้น
ค่าเหล่านี้จะถูกรีเซ็ตทุก 24 ชั่วโมง
ฟังก์ชัน 1010: ความดันอากาศ (Airpressure)
เหมือนกับฟังก์ชัน 0010 แต่ led bar จะแสดงในโหมดจุด
ฟังก์ชัน 1011: อุณหภูมิ (Temperature)
เหมือนกับฟังก์ชัน 0011 แต่ led bar จะแสดงในโหมดจุด
ฟังก์ชัน 1100: ความชื้น (Hygro)
เหมือนกับฟังก์ชัน 0100 แต่ led bar จะแสดงในโหมดจุด
ฟังก์ชัน 1101: ซูมความดันอากาศ (Airpressure zoom)
เหมือนกับฟังก์ชัน 0010 แต่สเกลจะถูกซูม 10 เท่า
สเกล = 1 mBar ( 10 led = 1 mBar)
ฟังก์ชัน 1110: ซูมอุณหภูมิ (Temperature zoom)
เหมือนกับฟังก์ชัน 0011 แต่สเกลจะถูกซูม 5 เท่า
สเกล = 1 องศาเซลเซียส (10 led = 1 องศา)
ฟังก์ชัน 1100: ซูมความชื้น (Hygro zoom)
เหมือนกับฟังก์ชัน 0100 แต่สเกลจะถูกซูม 10 เท่า
สเกล = 1 % (10 led = 1 % relative humidity)
รายละเอียดทางเทคนิคเพิ่มเติม
การวินิจฉัยความดันบรรยากาศ
โปรเจกต์นี้เป็นเครื่องมือบันทึกดิจิทัลความแม่นยำสูงสำหรับการติดตามระดับความสูงและการเปลี่ยนแปลงสภาพอากาศในท้องถิ่นโดยอิงจากความดันอากาศ
- การรวม BME280/BMP180: เชื่อมต่อกับ sensor ของ Bosch โดยเฉพาะผ่าน I2C bus sensor เหล่านี้สามารถตรวจจับการเปลี่ยนแปลงความดันได้เล็กน้อยถึง 1 Pa (Pascals) ทำให้ Arduino สามารถคำนวณการเปลี่ยนแปลงระดับความสูงด้วยความละเอียดเพียง 1 เมตร
- การปรับเทียบระดับน้ำทะเล: firmware มีตัวแปรการปรับเทียบสำหรับ Sea-Level Pressure ในท้องถิ่น (hPa/inHg) ช่วยให้มั่นใจว่าระดับความสูงที่คำนวณได้ยังคงแม่นยำตลอดทั้งวัน
แดชบอร์ดแสดงผล
- การแสดงข้อมูลแบบวนซ้ำ: ความดันปัจจุบัน (hPa), ระดับความสูง (m) และอุณหภูมิ (°C) จะถูกแสดงผลแบบวนซ้ำบน I2C OLED screen โค้ดมีตัวบ่งชี้ "แนวโน้ม" 24 ชั่วโมง (เพิ่มขึ้น/คงที่/ลดลง) เพื่อช่วยคาดการณ์ระบบพายุที่กำลังจะมาถึง