กลับไปหน้ารวมไฟล์
full-sized-photovoltaic-system-0e8e1c.md

Introduction

เป้าหมายของโปรเจคนี้คือการออกแบบระบบโซลาร์เซลล์ขนาดใหญ่ที่สามารถปรับแผงให้หันตามดวงอาทิตย์ได้อัตโนมัติจ้า

ระบบของเราไม่หมุนรอบแกนตัวเองแบบที่อื่นเค้าทำกันนะ แต่จะเอียงแต่ละแกน (เหนือ-ใต้ และ ตะวันออก-ตะวันตก) แยกจากกันเลย วิธีนี้ทำให้เราสามารถใช้มอเตอร์แบบลิเนียร์ธรรมดาที่ราคาถูกกว่าแทนที่จะต้องใช้ Slewing Ring แพงๆ ได้ พลังงานที่ได้ก็จะถูกส่งเข้าไปเก็บในแบตเตอรี่ภายในบ้าน หรือถ้าแบตเต็มแล้วก็จะโยนเข้าสู่ระบบไฟฟ้าภายในบ้านแทน

ซอฟต์แวร์ของเราพัฒนาจากการคำนวณทางดาราศาสตร์ ซึ่งเราได้ทดสอบกับข้อมูลจริงระหว่างการพัฒนาด้วย หลักการทำงานควรใช้ได้ทุกที่บนโลก เพราะเราสามารถตั้งค่าพิกัดของสถานที่ได้เอง ส่วนข้อมูลเวลานั้นได้รับผ่าน NTP และเก็บไว้ใน RTC ภายในของ Arduino Opta

บทความนี้จะโฟกัสไปที่ฝั่งซอฟต์แวร์ของโปรเจคนะน้อง ส่วนไฟล์ CAD นั้นแนบไว้ในรูปแบบ .stp ท้ายบทความแล้ว

มุมมองด้านข้างของโรงไฟฟ้าโซลาร์เซลล์

Functionalities of the program

ลูปหลักของโปรแกรมประกอบด้วย 6 ขั้นตอน:

  1. 1. คำนวณมุมแอซิมัท (Azimuth) และมุมเอเลเวชัน (Elevation) ของดวงอาทิตย์
  2. 2. คำนวณมุมที่มอเตอร์แต่ละตัว (เหนือ-ใต้, ตะวันออก-ตะวันตก) ต้องหมุนไป
  3. 3. พิมพ์ผลลัพธ์ออกทางคอนโซล
  4. 4. สั่งให้มอเตอร์หมุนไปยังมุมที่คำนวณได้
  5. 5. ซิงค์เวลาใน RTC ผ่านโปรโตคอล NTP
  6. 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 ไหม้แน่นอน

  1. ระบบใช้วงจร Voltage Divider ที่มีตัวต้านทาน (Resistor) ค่ามากๆ เพื่อลดแรงดัน output จากแผงโซลาร์เซลล์ (~20V) ลงมาให้อยู่ในระดับที่ปลอดภัยสำหรับ ADC ของ Arduino
  • สำหรับการวัดกระแสที่แม่นยำ มันใช้ เซ็นเซอร์วัดกระแส I2C แบบ INA219
  • สายไฟกระแสสูงจากแผงโซลาร์เซลล์จะถูกต่อผ่านชิป INA219 โดยตรงเลย
  • ชิปตัวนี้จะวัดแรงดันตกคร่อมที่เกิดขึ้นบนตัวต้านทานชันต์ (Shunt Resistor) กำลังสูงที่อยู่ข้างใน จากนั้นก็คำนวณหาค่ากระแส (แอมป์) และกำลังไฟฟ้า (วัตต์) ที่ไหลเข้าแบตเตอรี่ได้อย่างแม่นยำและรวดเร็ว
  • ลอจิกของ 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 เดือน

    มุมมองจากด้านล่างของโรงไฟฟ้าโซลาร์เซลล์
    ลายตารางหมากรุกนี้พิสูจน์ว่าแผงโซลาร์เซลล์เรียงตัวถูกต้องตามดวงอาทิตย์

    ข้อมูล Frontmatter ดั้งเดิม

    apps:
      - "1x Autodesk Inventor"
      - "1x Arduino IDE 2.0"
    author: "arduinojacky"
    category: "Sensors & Environment"
    components:
      - "1x Arduino Opta Lite"
    description: "Micro-Grid Infrastructure! Engineer a terrifyingly complex, large-scale solar array architecture utilizing INA219 sensors to track raw kilowatt harvesting and manipulate heavy 12V lead-acid battery charge curves."
    difficulty: "Intermediate"
    documentationLinks: []
    downloadableFiles:
      - "https://projects.arduinocontent.cc/ed70efe9-4797-4e4a-896d-035121fa2fff.ino"
    encryptedPayload: "U2FsdGVkX19WqHP2idvGHyWbU8HfUml98O//Q8hGvXgm1dZr401eEWIAZWjGgDoVP4lEsqx+g8xYcXv8KCsxqY2QkGxXXhP+Qhh0QM8XlliV/v/R8tY2ZZPrR1AIP4KZ"
    heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/full-sized-photovoltaic-system-0e8e1c_cover.png"
    lang: "en"
    likes: 15
    passwordHash: "25c59edb460ea8a729f1dd4a29750c67d8e8af9b9693cf7d2dc58a0d8b456de6"
    price: 4500
    seoDescription: "Full-sized photovoltaic system that automatically adjusts panel angles based on time and location for maximum efficiency."
    tags:
      - "Embedded"
      - "Greener Planet"
      - "Home Automation"
      - "Weather"
      - "Clocks"
      - "Energy Efficiency"
    title: "โซลาร์ฟาร์มเทพๆ ตั้งท่าเองได้ แบบจัดเต็ม!"
    tools: []
    videoLinks: []
    views: 15757