อย่าไปสนหน้าตามันมาก แต่มันใช้งานได้ดีเวอร์! เราใช้ Arduino Nano เป็นบอร์ดโปรแกรมสำหรับโปรเจกต์นี้ โปรเจกต์นี้เหมาะสุดๆ สำหรับมือใหม่ที่อยากเรียนรู้การทำงานกับเซนเซอร์ตระกูล DHT และจัดการแสดงผลบน LCD โดยใช้โปรโตคอลสื่อสาร I2C
อุปกรณ์หลักที่ใช้
- Arduino Nano: บอร์ดไมโครคอนโทรลเลอร์เล็กแต่ทรงพลัง ให้ความยืดหยุ่นสูงสำหรับโปรเจกต์ฝังตัว
- เซนเซอร์ DHT11: เซนเซอร์ฮิต วัดทั้งความชื้นและอุณหภูมิ ส่งข้อมูลออกมาเป็นสัญญาณดิจิทัลแบบ single-bus
- จอ LCD 16x2 พร้อมโมดูล I2C: การใช้โมดูล I2C นี่สำคัญมาก เพราะมันลดสายลงได้เยอะเลย แทนที่จะต้องต่อ 6-10 สาย ก็เหลือแค่ 4 สาย (VCC, GND, SDA, SCL) ประหยัดเวลาและลดความผิดพลาดได้โข ถ้ายังไม่มีโมดูล I2C ไว้ใจพี่เลย น้องต้องซื้อมา จัดไปวัยรุ่น มันช่วยชีวิตได้จริงๆ
ตั้งค่าเวลาเริ่มต้นในโค้ด
สำหรับโปรเจกต์นี้ ระบบนาฬิกาทำงานในระดับซอฟต์แวร์ ดังนั้น ก่อนอัปโหลดโปรแกรมลงบอร์ด น้องต้องกำหนดเวลาเริ่มต้นให้กับตัวแปรในส่วนหัวของโค้ด เพื่อให้นาฬิกาเริ่มเดินจากเวลาปัจจุบันที่ต้องการ

รายละเอียดลึกและวิธีแก้ไขปัญหาเทคนิค
เราใช้ไลบรารี Simple DHT ซึ่งทำให้การทำงานกับเซนเซอร์ DHT11 ง่ายขึ้น โดยช่วยลดความซับซ้อนในการอ่านสัญญาณข้อมูลดิบและแปลงเป็นค่าตัวเลขที่ใช้ได้
การปรับเทียบนาฬิกา: ระหว่างทดสอบโปรแกรมบน Arduino Nano เราพบประเด็นน่าสนใจคือ นาฬิกาเดินเร็วเกินไป ประมาณ 1 วินาทีต่อรอบการทำงาน วิธีแก้ไขในซอฟต์แวร์คือเราปรับอัตราการเพิ่มขึ้นของวินาทีอย่างละเอียด เราเปลี่ยนอัตราการเพิ่มวินาทีเป็น 0.50 เพื่อให้สอดคล้องกับรอบการทำงานจริงบนบอร์ด Nano ของเรา เพราะตอนเซ็ตกับ Arduino Nano เสร็จ มันเริ่มเดินเร็วขึ้น 1 วินาที (ไม่รู้เหมือนกันว่าทำไม) การปรับนี้ทำให้เวลาที่แสดงผลมีความเสถียรและแม่นยำขึ้น

แผนภาพการต่อสาย
การต่อสายระหว่างอุปกรณ์ต่างๆ ค่อนข้างตรงไปตรงมา และสำหรับเรา การต่อสายร่วมกับ I2C นั้นง่ายมาก น้องสามารถแก้ไขโค้ดได้ถ้าอยากใช้จอ LCD แบบปกติ
1. การต่อเซนเซอร์ DHT11
สำหรับการต่อสาย เราใช้ DHT11 แบบ 4 ขา และนี่คือการจัดวางขา (Pinout) ของมัน:

- VCC: ต่อกับแหล่งจ่ายไฟ 5V ของบอร์ด Arduino
- GND: ต่อกับ Ground ของบอร์ด
- ขาข้อมูล (Data Pin): ต่อกับ Digital pin 11 (ตามที่กำหนดในโค้ด)
2. ต่อจอ LCD (ผ่านโมดูล I2C)
- VCC: ต่อเข้ากับ 5V ของ Arduino (ตัวเดียวกับเซ็นเซอร์ DHT11 เลยนะน้อง).
- GND: ต่อเข้ากับ GND ของ Arduino (ก็ตัวเดียวกับ DHT11 อีกแล้ว ง่ายดี).
- SCL (Serial Clock): ต่อเข้ากับขา A5 ของ Arduino Nano.
- SDA (Serial Data): ต่อเข้ากับขา A4 ของ Arduino Nano.
หมายเหตุ: ขา A4 กับ A5 นี่คือขาเฉพาะกิจสำหรับการสื่อสารแบบ I2C บนบอร์ด Arduino Nano (ATmega328P) จำให้แม่นเลย ตัวนี้!
จัดไปวัยรุ่น! โครงการนี้ก็จบแค่นี้แหละ นี่เป็นงานอัปโหลดชิ้นแรกของพี่ ขออภัยถ้ามีอะไรผิดพลาดไปบ้างนะน้อง
สรุปและคำพูดจากผู้พัฒนา (Developer's Comments)
โปรเจคนี้ถือเป็นก้าวแรกที่ดีมากๆ สำหรับการเรียนรู้ Embedded Systems สิ่งที่สำคัญที่สุดไม่ใช่แค่การต่อสายให้ถูกต้องนะ แต่คือการเข้าใจว่าแต่ละชิ้นส่วนสื่อสารกันยังไง เช่น ทำไมต้องใช้ I2C หรือการแก้ปัญหา Clock Drift จากซอฟต์แวร์แบบที่พี่เจอ
ในอนาคตพี่คิดว่าจะอัพเกรดมันเพิ่มอีกหน่อย เช่น เพิ่มโมดูลนาฬิกาจริงจัง (RTC) อย่าง DS3231 เข้าไป จะได้ตั้งเวลาแล้วเดินต่อได้เองแม้ไม่มีไฟเลี้ยง และอาจเพิ่มปุ่มกดสำหรับตั้งเวลาโดยไม่ต้องมานั่งแก้โค้ดใหม่
หวังว่าโปรเจคนี้จะมีประโยชน์และเป็นแรงบันดาลใจให้ทุกคนที่กำลังเริ่มต้นในโลกอิเล็กทรอนิกส์นะ สู้งานนะน้อง!