สวัสดีน้องๆ ทุกคน! กลับมาพบกับรุ่นพี่อีกแล้ว กับทิปเล็กๆ น้อยๆ เรื่อง Arduino คร้าบบบ
วันนี้เราจะมาสร้าง สถานีตรวจอากาศจิ๋วแต่แจ๋ว กัน โดยใช้เซ็นเซอร์ DHT11 กับจอ OLED มาดูกันว่าเราจะทำยังไง!
ไมโครคอนโทรลเลอร์ที่ใช้ในโปรเจกต์นี้คือ Arduino Uno R3 ตัวเก่งของเรานั่นเอง
โปรเจกต์พื้นฐานนี้จะรวมสองสถาปัตยกรรมการเก็บข้อมูลเข้าด้วยกัน และต้องจัดรูปแบบผลลัพธ์เพื่อแสดงผลให้ดูดี
Analog vs. Digital Sensor Protocols
น้องห้ามใช้ analogRead() กับเซ็นเซอร์ DHT11 นะจ๊ะ! เพราะชิ้นส่วนในระบบนี้ใช้วิธีการสื่อสารคนละแบบกันเลย
เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT11: นี่คือเซ็นเซอร์ดิจิทัลที่มีโปรเซสเซอร์ในตัว มันส่งสตรีมข้อมูล 40 บิตที่แทนค่าที่อ่านได้
- น้อง ต้อง ใช้ไลบรารี
<DHT.h>เพื่อสื่อสารกับมัน - อ่านข้อมูลด้วยคำสั่งเฉพาะของไลบรารี:
float temperature = dht.readTemperature();และfloat humidity = dht.readHumidity();
- น้อง ต้อง ใช้ไลบรารี
ตัวต้านทานไวแสง (LDR): นี่คือชิ้นส่วนทางกายภาพแบบอนาล็อกล้วนๆ ความต้านทานของมันเปลี่ยนไปตามความเข้มของแสง
- มัน ต้อง ถูกใช้ในวงจรแบ่งแรงดัน (Voltage Divider) ร่วมกับตัวต้านทานค่าคงที่ (เช่น 10K โอห์ม)
- Arduino อ่านมันเป็นแรงดันอนาล็อกธรรมดา:
int lightValue = analogRead(A0);(ให้ค่าตั้งแต่0 ถึง 1023)
การจัดรูปแบบข้อมูลสำหรับการแสดงผล
ไมโครคอนโทรลเลอร์อ่านค่ามาได้ประมาณ temperature = 25.0 และ humidity = 60.0 จอแสดงผลตัวอักษรมีพื้นที่จำกัด ดังนั้นต้องจัดระเบียบข้อมูลให้ดี
- จอ LCD แบบตัวอักษร 16x2 (โดยเฉพาะแบบที่มี I2C backpack เพื่อลดสายให้ง่ายขึ้น) มีตำแหน่งตัวอักษรพอดี 32 ตำแหน่ง
- การทำงาน: น้องต้องควบคุมตำแหน่งเคอร์เซอร์ให้แม่นยำเพื่อจัดรูปแบบผลลัพธ์:
lcd.setCursor(0, 0); // เริ่มที่จุดเริ่มต้นของบรรทัดแรก lcd.print("T: "); lcd.print(temperature); lcd.print("C"); lcd.setCursor(0, 1); // ย้ายไปจุดเริ่มต้นของบรรทัดที่สอง lcd.print("H: "); lcd.print(humidity); lcd.print("%"); - ถ้าอยากแสดงข้อมูลเพิ่มเติม (เช่นจาก LDR) บนจอเล็กๆ อันเดียวกัน น้องสามารถสร้างระบบเปลี่ยนหน้า (pagination) แบบง่ายๆ ได้ ใช้
delay(3000); lcd.clear();เพื่อล้างหน้าจอทุกๆ สองสามวินาที แล้วสลับไปแสดงข้อมูลหน้าต่างๆ
ชิ้นส่วนมาตรฐานสำหรับสถานีอากาศ
- Arduino Uno R3 / Nano (ให้ความเร็วการทำงานและพอร์ต I/O แบบมาตรฐาน)
- เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT11 (DHT22 เป็นตัวเลือกที่แม่นยำกว่า ให้ค่าทศนิยม)
- ตัวต้านทานไวแสง (LDR)
- จอแสดงผลตัวอักษร LCD 16x2 + I2C Backpack (อินเทอร์เฟซ I2C ลดจำนวนสายเชื่อมต่อจาก 16 เส้นเหลือแค่ 4 เส้นอย่างฮวบฮาบ)
น้องๆ สามารถปรับแต่งระบบนี้ได้ตามใจชอบ เพราะมันค่อนข้างยืดหยุ่น [ท้าทายนิดนึง: ลองทำให้ระบบเล็กสุดๆ ดู ;) ]
สู้งานนะน้อง!