Introduction
เป้าหมายของโปรเจคนี้คือการออกแบบระบบโซลาร์เซลล์ขนาดใหญ่ที่สามารถปรับแผงให้หันตามดวงอาทิตย์ได้อัตโนมัติจ้า
ระบบของเราไม่หมุนรอบแกนตัวเองแบบที่อื่นเค้าทำกันนะ แต่จะเอียงแต่ละแกน (เหนือ-ใต้ และ ตะวันออก-ตะวันตก) แยกจากกันเลย วิธีนี้ทำให้เราสามารถใช้มอเตอร์แบบลิเนียร์ธรรมดาที่ราคาถูกกว่าแทนที่จะต้องใช้ Slewing Ring แพงๆ ได้ พลังงานที่ได้ก็จะถูกส่งเข้าไปเก็บในแบตเตอรี่ภายในบ้าน หรือถ้าแบตเต็มแล้วก็จะโยนเข้าสู่ระบบไฟฟ้าภายในบ้านแทน
ซอฟต์แวร์ของเราพัฒนาจากการคำนวณทางดาราศาสตร์ ซึ่งเราได้ทดสอบกับข้อมูลจริงระหว่างการพัฒนาด้วย หลักการทำงานควรใช้ได้ทุกที่บนโลก เพราะเราสามารถตั้งค่าพิกัดของสถานที่ได้เอง ส่วนข้อมูลเวลานั้นได้รับผ่าน NTP และเก็บไว้ใน RTC ภายในของ Arduino Opta
บทความนี้จะโฟกัสไปที่ฝั่งซอฟต์แวร์ของโปรเจคนะน้อง ส่วนไฟล์ CAD นั้นแนบไว้ในรูปแบบ .stp ท้ายบทความแล้ว
Functionalities of the program
ลูปหลักของโปรแกรมประกอบด้วย 6 ขั้นตอน:
- 1. คำนวณมุมแอซิมัท (Azimuth) และมุมเอเลเวชัน (Elevation) ของดวงอาทิตย์
- 2. คำนวณมุมที่มอเตอร์แต่ละตัว (เหนือ-ใต้, ตะวันออก-ตะวันตก) ต้องหมุนไป
- 3. พิมพ์ผลลัพธ์ออกทางคอนโซล
- 4. สั่งให้มอเตอร์หมุนไปยังมุมที่คำนวณได้
- 5. ซิงค์เวลาใน RTC ผ่านโปรโตคอล NTP
- 6. รอ 5 นาที
ระหว่างที่รอรอบถัดไป โปรแกรมจะอ่านค่าดิจิทัลจากพอร์ตพายุ (พอร์ต 7) ถ้าค่าที่อ่านได้เป็น HIGH ระบบจะถือว่ามีพายุและจะปรับแผงโซลาร์เซลล์ไปยังตำแหน่งตั้งต้น (แนวนอน) เป็นเวลา 30 นาที ตำแหน่งตั้งต้นนี้จะถูกใช้ในช่วงกลางคืนด้วย
Challenges
แนวทางแรกของซอฟต์แวร์คือการคำนวณมุมของดวงอาทิตย์ (แอซิมัทและเอเลเวชัน) จากเวลาทางดาราศาสตร์และตำแหน่งที่ตั้ง สูตรการคำนวณเหล่านี้หาได้จากแหล่งข้อมูลทางดาราศาสตร์ทั่วไป
จากนั้นเราก็นำข้อมูลนี้ไปคำนวณมุมของส่วนประกอบแกนเหนือ-ใต้และตะวันออก-ตะวันตกของระบบเราโดยใช้ฟังก์ชันตรีโกณมิติพื้นฐาน แต่มันไม่ง่ายอย่างนั้นน้า! เพราะเราไม่สามารถใช้ค่ามุมดวงอาทิตย์ตรงๆ ได้ เนื่องจากแผงโซลาร์เซลล์ของเราไม่ได้หันตรงไปยังดวงอาทิตย์ตลอดเวลา แต่จะหันหน้าไปทางทิศใต้เป็นหลัก
เราแก้ปัญหานี้ด้วย... ตรีโกณมิติพื้นฐานอีกแล้วว่ะ! ฮ่าๆ โดยใช้โมเดล 3D กระดาษ เราสร้างสูตรเพื่อคำนวณมุมสวิง (มุมแนวนอน) ระหว่างแผงที่หันใต้กับดวงอาทิตย์ และมุมเอียง (คล้ายเอเลเวชัน แต่เฉพาะในแนวทิศใต้) สูตรทั้งหมดสามารถดูได้ในฟังก์ชัน calculateMotorAngles
ตอนนี้ขั้นตอนของเราคือ: คำนวณแอซิมัทและเอเลเวชันของดวงอาทิตย์ก่อน -> จากนั้นคำนวณมุมที่มอเตอร์ต้องหมุน -> แล้วจึงคำนวณตำแหน่งของมอเตอร์เป็นหน่วยมิลลิเมตร ส่วนออฟเซ็ตของมุมมอเตอร์นั้นได้มาจากแบบก่อสร้าง
ตำแหน่งของมอเตอร์แต่ละตัวอ่านมาจากโพเทนชิโอมิเตอร์เป็นค่าอะนาล็อก แต่วัด... มันไม่แม่นยำพอ อาจจะเกี่ยวกับ Voltage Drift ในวงจรวัดก็ได้ วิธีแก้ปัญหาเร็วๆ ของเราคือใส่ Correction Factor เข้าไป ทำให้การวัดกลับมาใช้การได้ในระดับนึง
EXPANDED TECHNICAL DETAILS
โปรเจคระดับนี้ขยับขึ้นไปเป็นงานวิศวกรรมไฟฟ้าจริงจังแล้วนะน้อง ต้องจัดการกับกระแสและแรงดันสูงอย่างระมัดระวัง องค์ประกอบสำคัญอย่างหนึ่งคือระบบ Maximum Power Point Tracking (MPPT) ซึ่งทำหน้าที่เพิ่มประสิทธิภาพการเก็บพลังงานจากแผงโซลาร์เซลล์ให้ได้มากที่สุด
High-Amperage Telemetry (INA219)
ห้ามใช้พิน Analog มาตรฐานของ Arduino วัดแรงดันและกระแสสูงๆ ในระบบนี้โดยเด็ดขาด! เชื่อมตรงเข้าไป MCU ไหม้แน่นอน
- ระบบใช้วงจร Voltage Divider ที่มีตัวต้านทาน (Resistor) ค่ามากๆ เพื่อลดแรงดัน output จากแผงโซลาร์เซลล์ (~20V) ลงมาให้อยู่ในระดับที่ปลอดภัยสำหรับ ADC ของ Arduino
ลอจิกของ PWM Charge Controller
การต่อแผงโซลาร์เซลล์เข้ากับแบตเตอรี่โดยตรงน่ะอันตรายมากนะ! แรงดัน 20V ที่ไม่ได้ควบคุมจะทำให้แบตเตอรี่ 12V ชาร์จเกิน จนเดือด ปล่อยแก๊สไฮโดรเจนที่ระเบิดได้ และพังในที่สุด
- Arduino ของเราก็เลยทำหน้าที่เป็น Charge Controller อัจฉริยะ
- ฟังก์ชันหลัก
loop()จะคอยอ่านค่าแรงดันแบตเตอรี่อยู่ตลอดเวลา if (batteryVolts < 12.0)-> แบตเตอรี่กำลังอ่อนมาก Arduino จะสั่งให้ MOSFET แบบ P-Channel ตัวใหญ่ เปิดเต็มที่ผ่านสัญญาณ PWM (analogWrite(255)) เพื่อให้กระแสจากโซลาร์เซลล์ไหลเข้าไปชาร์จแบบเต็มที่ (Bulk Charge)if (batteryVolts >= 14.4)-> แบตเตอรี่เต็มแล้ว Arduino จะลดสัญญาณ PWM ลงเหลือแค่ระดับหยดน้ำ (เช่นanalogWrite(20)) เพื่อรักษาแรงดัน "Float" ที่ปลอดภัย ป้องกันการชาร์จเกินและทำลายแบตเตอรี่
ชิ้นส่วนระดับโรงงาน (Industrial Grid)
- Arduino Mega หรือ ESP32: ใช้ประมวลผลอัลกอริทึมติดตามแสงอาทิตย์ที่ซับซ้อน ขับจอแสดงผล และจัดการ Wi-Fi สำหรับบันทึกข้อมูล
- เซ็นเซอร์วัดกระแส/แรงดัน I2C แบบ High Side (INA219 หรือ INA226): สำหรับระบบวัดพลังงานที่แข็งแรงทนทาน
- MOSFET แบบ P-Channel ตัวใหญ่ (เช่น IRF4905): ติดตั้งบนฮีตซิงค์อลูมิเนียมขนาดใหญ่เพื่อระบายความร้อนมหาศาลที่เกิดจากการสวิตช์กระแสสูง
- แผงโซลาร์เซลล์โมโนคริสตัลไลน์ขนาด 50W ถึง 100W แรงดัน 18V
- แบตเตอรี่ SLA (Sealed Lead Acid) แบบ Deep Cycle 12V
คำเตือนด้านความปลอดภัย: ลอจิกของ Charge Controller ที่ผิดพลาดหรือ MOSFET พัง สามารถทำให้แบตเตอรี่ตะกั่วกรดปล่อยแก๊สระเบิดหรือลุกไหม้ได้ ต้องทดสอบและยืนยันสถานะลอจิกและฮาร์ดแวร์ทุกส่วนให้ดีก่อนนำไปใช้งานจริงนะจ๊ะน้อง
ผลลัพธ์ที่ได้
ผลงานของเราคือโรงไฟฟ้าขนาดพีค 3.15 กิโลวัตต์ และผลิตไฟฟ้าได้สูงสุดประมาณ 32 กิโลวัตต์-ชั่วโมงต่อวัน มันติดตามดวงอาทิตย์ได้แม่นยำ และผ่านการทดสอบในสนามมาแล้วกว่า 9 เดือน