เอาเข้าจริงๆ พี่ก็ทำ Weather Station มาหลายตัวแล้ว ทั้งแบบแสดงค่าจากเซ็นเซอร์ตรงๆ และแบบดึงข้อมูลจากเน็ตมาโชว์ อยากดูก็ไปหาดูเอาเองนะวัยรุ่น (ล้อเล่นน่า)
คราวนี้พี่จะพาน้องไปดูวิธีทำ Weather Station แบบตั้งโต๊ะเจ๋งๆ อีกแบบนึง ที่แสดงค่าพารามิเตอร์อากาศพื้นฐานสามอย่าง คือ ความดันบรรยากาศ, ความชื้นในอากาศ, และอุณหภูมิ บนจอ OLED แยกกันสามจอ ไอเดียคืออยากให้มันดูคลาสสิกเหมือนสถานีอากาศรุ่นเก่า ที่มีเครื่องวัดแยกเป็นสามอันเลย

เพราะจอเล็กและอ่านง่ายไง นี่เลยเป็นแกดเจ็ตติดโต๊ะที่ทั้งเจ๋งและมีประโยชน์สุดๆ
ส่วนวิธีทำนั้นง่ายมากกก เหมาะกับน้องมือใหม่หัดเล่นสุดๆ
อุปกรณ์ที่ใช้มีประมาณนี้:

- ด้านหลังมีช่องเสียบไฟ, สวิตช์ และโมดูลเซ็นเซอร์ BME280
- Arduino Nano
- จอ OLED แบบ SSD1306 ที่สื่อสารผ่าน I2C สามจอ
- และโมดูลมัลติเพล็กเซอร์ TCA9548a

Multi-Screen Dashboards: Classic Weather Station
โปรเจค Arduino ส่วนใหญ่ชอบยัดข้อมูลทุกอย่างลงจอเดียว จนอ่านไม่รู้เรื่อง Classic Style Weather Station ตัวนี้พี่ได้แรงบันดาลใจมาจากหน้าปัดเครื่องบินรุ่นเก่าๆ แบบอนาล็อก โดยใช้ระบบที่เรียกว่า I2C bus addressing ส่งสัญญาณข้อมูลสิ่งแวดล้อมแยกสายกันไปยังจอ OLED สามจอที่แยกจากกันโดยสมบูรณ์
มาควบคุม I2C Multiplexer (TCA9548A) กันดีกว่า
จอ OLED ขนาด 0.96 นิ้ว ทุกจอมักมี Address I2C เฉพาะตัว (ฮาร์ดโค้ด) เหมือนกันเป๊ะ (ส่วนใหญ่จะเป็น 0x3C)
- ปัญหาความขัดแย้ง: ถ้าน้องเสียบจอ OLED สามจอเข้าที่ขา SDA/SCL ของ Arduino Uno พอ Arduino ส่งคำว่า "Temperature" ไป ทั้งสามจอจะแสดงคำว่า "Temperature" พร้อมกันเลย น้องคุยกับมันแยกกันไม่ได้
- ทางแก้ด้วยฮาร์ดแวร์: น้องต้องต่อ I2C Multiplexer (TCA9548A) ระหว่าง Arduino กับจอ OLED
- ตัวมัลติเพล็กเซอร์นี่ทำงานเหมือนพนักงานสับรางรถไฟ มันมีช่องทางออก (Channel) ถึง 8 ช่อง
- การทำงานในโค้ด C++:
tcaselect(0); display1.print(Temperature);— ชิปตัวนี้จะปิดการเชื่อมต่อทางไฟฟ้ากับจอที่ 2 และ 3 ชั่วคราว บังคับให้ข้อมูลวิ่งเข้าไปที่จอที่ 1 เท่านั้น!
จริงๆ แล้ว พี่ทำอุปกรณ์นี้ขึ้นมาก็เพื่อโชว์การทำงานของมัลติเพล็กเซอร์แบบนี้นี่แหละ เพราะ Arduino Nano มีขา I2C (A4 กับ A5) แค่ชุดเดียว เวลาจะต่อจอ I2C เราเลยถูกจำกัดให้ใช้ได้แค่จอเดียว ในกรณีพิเศษที่จอมีตัวเลือกให้เปลี่ยน Address I2C ได้ เราอาจต่อได้สูงสุดสองจอ แต่ในเคสแบบนี้ที่ต้องการจอมากกว่านั้น การใช้โมดูลมัลติเพล็กเซอร์ตัวนี้จึงเป็นทางที่ practical ที่สุด เพราะมันสามารถต่ออุปกรณ์ I2C ได้ถึง 8 ตัวเข้าไปที่ไมโครคอนโทรลเลอร์ตัวเดียว

การแยกข้อมูลสภาพแวดล้อม (BME280)
ถ้าอยากได้ข้อมูลสภาพแวดล้อมสามแบบจากเซ็นเซอร์ตัวเดียวแบบจัดเต็ม เราก็ต้องใช้ตัวเทพประจำวงการอย่าง เซ็นเซอร์ BME280 ตัวนี้แหละ
- เซ็นเซอร์ BME280 วัดอุณหภูมิ ความชื้น และความกดอากาศแบบแม่นยำได้หมดในชิปตัวเดียว
- Arduino ของเราก็แค่ส่งคำสั่งไปถามข้อมูลจากชิปนี้
- แล้วก็แปลงข้อมูลมาแสดงผลบนจอสามตัวแบบนี้:
- จอที่ 1: วาดไอคอนเทอร์โมมิเตอร์ตัวเบิ้ม พร้อมตัวเลข
24°C - จอที่ 2: วาดรูปหยดน้ำ พร้อมตัวเลข
65% Hum - จอที่ 3: วาดหน้าปัดอัลติมิเตอร์ พร้อมตัวเลข
1013 hPa
- จอที่ 1: วาดไอคอนเทอร์โมมิเตอร์ตัวเบิ้ม พร้อมตัวเลข
รายการอะไหล่สำหรับสร้างสถานีอากาศ (Meteorological Build Manifest)
- Arduino Nano (ตัวเล็กพริกขี้หนู เอาไปแปะหลังแผงไม้ได้พอดี)
- จอ OLED ขนาด 0.96 นิ้ว แบบ SSD1306 (สามตัว)
- บอร์ด TCA9548A I2C Multiplexer Breakout (ตัวจัดการจอหลายตัว)
- โมดูลเซ็นเซอร์ BME280
- โครงหรือเบรลสำหรับยึดจอ ทำจากไม้มะฮอกกานีหรือพิมพ์ 3D มาให้จอสามตัวเรียงรายสวยงาม

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

ถ้าเราอยากแสดงค่าความดันบรรยากาศสัมพัทธ์ (Relative value) ที่ปรับแล้วสำหรับพื้นที่ที่เราอยู่ (เช่น ระดับความสูงจากน้ำทะเล) เราต้องไปแก้ไขในส่วนของโค้ดนี้
pressure = bme.seaLevelForAltitude(700.0, bme.readPressure())/100.0;
โดยเปลี่ยนค่า 700.0 เป็นระดับความสูงของพื้นที่เราจริงๆ (ตัวอย่างนี้ใช้ 700 เมตร) ตัวพี่ยังทำโค้ดอีกเวอร์ชันนึงที่แสดงตัวเลขใหญ่ๆ แต่ไม่มีทศนิยมด้วย เอาไว้เลือกใช้ตามสไตล์

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