- اختيار المكونات الصحيحة لمراقب الطاقة الشمسية الذي يدعم إنترنت الأشياء
- مخطط دائرة لمراقبة الطاقة الشمسية القائمة على إنترنت الأشياء
- إعداد ThingSpeak
- كود اردوينو لمراقبة الطاقة الشمسية باستخدام ESP32
- بيانات الاختبار والمراقبة
في مجال الطاقة المتجددة ، تحتل الطاقة الشمسية موقع الصدارة ، لأن إنتاج الطاقة باستخدام طاقة الشمس هو أسهل طريقة مجدية تجاريًا للطاقة المتجددة. عند الحديث عن الألواح الشمسية ، يجب مراقبة الطاقة الناتجة من إخراج الألواح الشمسية من أجل الحصول على خرج الطاقة الأمثل من الألواح. هذا هو السبب في ضرورة وجود نظام مراقبة في الوقت الحقيقي. في محطة طاقة شمسية كبيرة ، يمكن استخدامه أيضًا لمراقبة خرج الطاقة من كل لوحة مما يساعد على تحديد تراكم الغبار. كما أنه يمنع أي حالات خطأ أثناء وقت التشغيل. في بعض مقالاتنا السابقة ، قمنا ببناء بعض المشاريع المتعلقة بالطاقة الشمسية مثل شاحن الهاتف الخلوي الذي يعمل بالطاقة الشمسية ودائرة العاكس الشمسية ، وما إلى ذلك. يمكنك التحقق من ذلك إذا كنت تبحث عن المزيد من المشاريع المتعلقة بالطاقة الشمسية.
في هذا المشروع ، سنقوم بإنشاء نظام مراقبة الطاقة الشمسية القائم على إنترنت الأشياء من خلال دمج تقنية شحن البطارية المعتمدة على MPPT (Maximum Power Point Tracker) ، والتي ستساعد على تقليل وقت الشحن وتحسين الكفاءة. أيضًا ، سنقوم بقياس درجة حرارة اللوحة ، والجهد الناتج ، والتيار لتحسين جانب الأمان في الدائرة. أخيرًا ، وفوق كل ذلك ، سنستخدم خدمات ThingSpeak السحابية لمراقبة بيانات المخرجات من أي مكان حول العالم. لاحظ أن هذا المشروع هو استمرار لمشروع MPPT Solar Charge Controller الذي أنشأناه سابقًا. هنا ، سنراقب جهد الخرج والتيار وقوة اللوحة باستخدام لوحة تطوير ESP32 IoT.
اختيار المكونات الصحيحة لمراقب الطاقة الشمسية الذي يدعم إنترنت الأشياء
باستخدام شاشة تعمل بالطاقة الشمسية ، يصبح من السهل جدًا مراقبة واكتشاف الأعطال في أي نظام شمسي. هذا هو السبب في أن اختيار المكونات يصبح جزءًا مهمًا جدًا عند تصميم مثل هذا النظام. فيما يلي قائمة الأجزاء التي استخدمناها.
- لوحة تطوير ESP32
- دائرة MPPT (يمكن أن تكون أي دائرة شمسية)
- مقاوم تحويل (على سبيل المثال 1 أوم 1 واط - مناسب لما يصل إلى 1 أمبير من التيار)
- بطارية ليثيوم (يفضل 7.4 فولت).
- اتصال Wi-Fi نشط
- مستشعر درجة الحرارة للوحة الشمسية
- دائرة مقسم الجهد (انظر الوصف)
مجلس التطوير Esp32:
بالنسبة للتطبيقات التي تدعم إنترنت الأشياء ، من الضروري اختيار النوع المناسب من لوحة التطوير التي ستكون قادرة على معالجة البيانات من المسامير التناظرية الخاصة بها وإرسال البيانات عبر أي نوع من بروتوكول الاتصال مثل Wi-Fi أو إلى السحابة الخادم. لقد اخترنا على وجه التحديد ESP32 لأنه متحكم منخفض التكلفة مع الكثير من الميزات. أيضًا ، يحتوي على راديو Wi-Fi مدمج يمكننا من خلاله الاتصال بالإنترنت بسهولة بالغة.
الدائرة الشمسية:
دائرة الشحن بالطاقة الشمسية عبارة عن دائرة تحصل على جهد أعلى من اللوحة الشمسية وتحولها إلى جهد شحن بحيث يمكنها شحن البطارية بكفاءة. بالنسبة لهذا المشروع ، سنستخدم لوحة دائرة التحكم في الشحن MPPT القائمة على LT3562 والتي قمنا بإنشائها بالفعل في أحد مشاريعنا السابقة. ولكن إذا كنت ترغب في تضمين مراقبة تمكين إنترنت الأشياء ، يمكنك استخدام أي نوع من الدوائر الشمسية. لقد اخترنا هذا اللوح لأن الدائرة مجهزة بتتبع أقصى نقطة للطاقة (MPPT) وهو مفيد لمشاريع الألواح الشمسية منخفضة الطاقة. إنها طريقة فعالة لشحن بطارية ليثيوم صغيرة من لوحة شمسية.
المقاوم تحويلة:
أي مقاوم يتبع قانون أوم مما يعني أنه إذا كان هناك قدر معين من التيار يتدفق عبر المقاوم ، فسوف تظهر كمية معينة من انخفاض الجهد. لا تعد مقاومات التحويل استثناءً من ذلك ، وهي تستخدم خصيصًا لقياس التدفق الحالي. ومع ذلك ، اعتمادًا على تدفق التيار الاسمي عبر اللوحة الشمسية ، اختر مقاوم تحويل ينتج كمية كافية من الجهد يمكن قياسه بواسطة وحدة التحكم الدقيقة. ولكن ، في نفس الوقت ، تعتبر القوة الكهربائية للمقاوم أمرًا مهمًا أيضًا. من المهم أيضًا اختيار القوة الكهربائية لمقاوم التحويل.
يمكن حساب انخفاض الجهد باستخدام الصيغة الواردة أدناه. يُعرف هذا باسم قانون أوم-
الخامس = أنا س ص
V هو الجهد الذي سيتم إنتاجه خلال "I" ، أي مقدار التدفق الحالي عبر كمية المقاوم "R". على سبيل المثال ، سوف ينتج المقاوم 1 أوم انخفاضًا في الجهد بمقدار 1 فولت عندما يتدفق 1A من التيار خلاله.
بالنسبة لقوة المقاومة الكهربائية ، يمكن استخدام الصيغة الواردة أدناه-
ف = أنا 2 ص
حيث I هو الحد الأقصى لتدفق التيار ، و R هي قيمة المقاوم. بالنسبة ل 1 أمبير من التيار بمقاوم 1 أوم ، فإن 1 واط كافٍ لتبديد الطاقة. ومع ذلك ، يعد هذا مفيدًا لمشاريع الألواح الشمسية الصغيرة ولكنه ليس مناسبًا على الإطلاق للتطبيقات المتعلقة بالشبكة الشمسية. في مثل هذه الحالة ، فإن تقنية قياس التيار غير الغازية هي في الواقع ما يجب استخدامه. في مثل هذه الحالة ، يمكن قياس التدفق الحالي بدقة حيث يمكن قياس كمية منخفضة جدًا من التيار ، بالإضافة إلى كمية عالية جدًا من التيار.
بطارية ليثيوم:
يعد اختيار بطارية الليثيوم جزءًا أساسيًا من أي مشروع يتضمن الألواح الشمسية. لأن وحدة الميكروكونترولر التي تظل دائمًا تعمل وتتحقق باستمرار من البيانات وترسلها تتطلب على الأقل مائة مللي أمبير من التيار لتشغيل مستقر.
يجب أن تكون سعة البطارية شيئًا يمكنه تشغيل وحدة التحكم الدقيقة لمدة 4-5 أيام على الأقل عندما لا تكون الشمس مشرقة بسبب الرياح الموسمية. من المهم أيضًا أن يكون تيار الشحن أكبر من تيار الحمل من منظور البطارية. من غير المعتاد تمامًا أن يقوم شخص ما بتوصيل 100 مللي أمبير من الحمولة ببطارية ويوفر تيار شحن أقل من ذلك. لكي نكون في الجانب الأكثر أمانًا ، يجب أن يكون لدينا تيار شحن أكبر بخمس مرات على الأقل من تيار الحمل.
من ناحية أخرى ، يجب أن يكون جهد البطارية أعلى من أي جهد دخل عادي لمنظم الجهد الذي يتطلبه المتحكم الدقيق. على سبيل المثال ، يمكن توصيل بطارية ليثيوم 7.4 فولت عبر منظم الجهد الخطي 3.3 فولت و 5.0 فولت (حيث يتطلب المنظم الخطي جهد تسرب أعلى من LDO والتبديل.)
في مشروعنا ، استخدمنا بطارية 4000 مللي أمبير مع تصنيف 7.4 فولت. استخدمنا منظمًا بجهد 5.0 فولت يوفر خرجًا كافيًا من التيار والجهد لـ ESP32.
مقسم الفولت:
يعتبر مقسم الجهد جزءًا أساسيًا من قياس جهد اللوحة الشمسية. يجب على المرء أن يختار مقسم جهد يقسم الجهد حسب مدخلات الجهد I / O المتحكم.
اختر المقاومات المذكورة أعلاه بحيث لا يجب أن يتجاوز جهد خرج مقسم الجهد الحد الأقصى لجهد الإدخال / الإخراج للمتحكم الدقيق (3.3 فولت لـ ESP32). ومع ذلك ، يُنصح باستخدام مقياس الجهد لأنه سيوفر المرونة لاختيار أي لوحة شمسية أعلى أو أقل تصنيف الجهد ويمكن بسهولة ضبط الجهد باستخدام مقياس متعدد.
في حالتنا ، لدينا مقياس جهد في دائرة لوحة MPPT يعمل كمقسم جهد. قمنا بتعيين مقسم الجهد بعامل تقسيم 6 فولت. لقد قمنا بتوصيل مترين متعددين ، أحدهما في الإدخال والآخر في إخراج القدر ، وقمنا بتعيين القيمة أنه عندما يكون جهد الدخل 18 فولت ، سيكون الناتج 3 فولت لأن جهد الخرج الاسمي للوحة الشمسية هو 18 فولت.
مستشعر درجة الحرارة للوحة الشمسية:
خرج طاقة الألواح الشمسية له اتصال مباشر بدرجة حرارة الألواح الشمسية. لماذا ا؟ لأنه عندما تبدأ درجة حرارة اللوحة الشمسية في زيادة تيار الخرج من اللوحة الشمسية يزداد بشكل كبير بينما يبدأ خرج الجهد في الانخفاض خطيًا.
وفقًا لصيغة الطاقة ، فإن القوة الكهربائية Wattage تساوي الجهد مضروبًا في التيار (W = V x A) ، كما أن تقليل جهد الخرج يقلل أيضًا من طاقة خرج الألواح الشمسية حتى بعد زيادة تدفق التيار. الآن ، السؤال التالي الذي يتبادر إلى أذهاننا هو ، كيف نقيس درجة حرارة الشمس؟ حسنًا ، من المثير للاهتمام أن الألواح الشمسية تتعرض عمومًا لبيئة الحرارة لأنها تتعرض لأشعة الشمس المباشرة ولأسباب واضحة. أفضل طريقة لقياس درجة حرارة الألواح الشمسية هي باستخدام مستشعر درجة حرارة السطح المسطح. يُقترح أيضًا استخدام مزدوج حراري من النوع K يتم وضعه مباشرة في اللوحة الشمسية.
لتطبيقنا ، استخدمنا وحدة استشعار درجة الحرارة القائمة على الثرمستور ، كما هو موضح أدناه.
مخطط دائرة لمراقبة الطاقة الشمسية القائمة على إنترنت الأشياء
يظهر أدناه مخطط الدائرة الكاملة لشاشة IoT Enabled Solar Power Monitor. التخطيطي بسيط. لوحة نقطة شرطة حمراء هي لوحة MPPT التي استخدمناها لهذا المشروع.
إعداد ThingSpeak
قم بإنشاء حساب مع ThingSpeak وانتقل إلى خيار "قناتي" ، ثم انقر فوق القناة الجديدة.
قم بإنشاء قناة جديدة بأسماء الحقول.
الآن بعد تعيين الحقل ، انتقل إلى حقل مفاتيح API حيث يتوفر مفتاح API للكتابة. يجب توفير هذا المفتاح في الكود بالإضافة إلى معرف القناة.
يمكن العثور على عنوان ThingSpeak في نفس الصفحة.
باتباع الخطوات المذكورة أعلاه ، يمكنك إعداد ThingSpeak بسهولة بالغة. إذا كنت ترغب في معرفة المزيد حول ThingSpeak وعملية الإعداد الخاصة به ، فيمكنك الاطلاع على مقالاتنا السابقة حول هذا الموضوع.
كود اردوينو لمراقبة الطاقة الشمسية باستخدام ESP32
يمكن العثور على كود مراقبة الطاقة الشمسية ESP32 الكامل في أسفل هذه الصفحة. يبدأ الكود بتعريف SSID وكلمة المرور وبعض المعلمات الثابتة الأخرى كما هو موضح أدناه.
// تعريف WiFi SSID و PWD للوصلة الصاعدة. #define WLAN_SSID "xxxx" #define WLAN_PASS "xxxxxxxxxx"
// المقاومة عند 25 درجة مئوية # تعريف THERMISTORNOMINAL 10000 // temp. للمقاومة الاسمية (دائمًا 25 درجة مئوية) # تعريف TEMPERATURENOMINAL 25 // معامل بيتا للثرمستور (عادةً 3000-4000) # تعريف BCOEFFICIENT 3950 // قيمة المقاوم "الآخر" # تعريف SERIESRESISTOR 10000
يتم توفير الأوم الاسمي للثرمستور عند درجة الحرارة الاسمية. قم بتعيين هذه القيمة بناءً على ورقة بيانات الثرمستور. ضع معامل بيتا وقيمة المقاوم المتسلسل للثرمستور.
// تعريف التناظرية للتيار والجهد الثابت الحالي Curr_an_pin = 35 ؛ const int volt_an_pin = 34 ؛ const int ntc_temp_an_pin = 33 ؛
يتم تعريف أرقام التعريف الشخصية هنا.
#define thingSpeakAddress "xxxxxxxxx" #define channelID xxxxx #define writeFeedAPIKey "xxxxxxx" #define readFeedAPIKey "xxxxxxx" #define readFieldAPIKey "xxxxxxxx" #define readStatusAPIKey "xxxxxxx"
ضع ثيمسبيكادريس ، معرف القناة ، كتابة مفتاح واجهة برمجة تطبيقات التغذية. باقي الأشياء غير مطلوبة ولكنها لا تزال مفيدة إذا كانت هناك حاجة إلى تلقي البيانات من الويب.
إعداد باطل () { // ضع رمز الإعداد هنا ، للتشغيل مرة واحدة: // اضبط المنفذ التسلسلي على 115200 Serial.begin (115200) ؛ // تهيئة التأخير التسلسلي (1000) ؛ WiFi.mode (WIFI_STA) ؛ ThingSpeak.begin (العميل) ؛ // تهيئة ThingSpeak // todo: أنشئ مهمة لقراءة دبوس للحصول على التيار والجهد وحساب واط ودرجة حرارة اللوحة الشمسية xTaskCreate ( wifi_task ، / * وظيفة المهمة. * / "wifi_task" ، / * سلسلة باسم المهمة. * / 1024 * 2، / * حجم المكدس بالبايت. * / NULL، / * تم تمرير المعلمة كمدخل للمهمة * / 5، / * أولوية المهمة. * / NULL) ؛ / * مقبض المهمة. * / Serial.print ("قراءة البيانات") ؛ }
في الكود أعلاه ، تمت تهيئة خادم ThingSpeak وإنشاء مهمة ستحصل على البيانات المتعلقة باللوحة الشمسية.
في الحلقة الرئيسية ، يتم استشعار التيار والجهد الشمسي عبر دبوس تمثيلي ويتم عمل المتوسط.
تعويم solar_curr_adc_val = 0 ؛ تعويم solar_volt_adc_val = 0 ؛ ل(ط = 0؛ ط <NUMSAMPLES، وأنا ++) { curr_samples = analogRead (curr_an_pin)؛ volt_samples = analogRead (volt_an_pin) ؛ temp_samples = analogRead (ntc_temp_an_pin) ؛ تأخير (10) ؛ } // متوسط جميع العينات الخارجة من نوع float cur_avg = 0 ؛ تعويم volt_avg = 0 ؛ تعويم temp_avg = 0 ؛ ل(ط = 0؛ ط <NUMSAMPLES، وأنا ++) { curr_avg + = curr_samples. volt_avg + = volt_samples ؛ temp_avg + = temp_samples ؛ } urr_avg / = NUMSAMPLES ؛ volt_avg / = NUMSAMPLES ؛ temp_avg / = NUMSAMPLES ؛ //Serial.print("ADC VALUE = ") ؛ //Serial.println(ADC_VALUE) ، // تحويل قيمة adc إلى الفولتية للحصول على التيار والجهد الفعلي. تعويم solar_curr = (urr_avg * 3.3) / (4095) ؛ تعويم solar_volt = (volt_avg * 3.3) / (4095) ؛ // باستخدام مقسم الجهد ، ننزل الجهد الفعلي. // لهذا السبب نضرب الرقم 6 بمتوسط الجهد للحصول على الجهد الفعلي للوحة الشمسية. solar_volt * = 6 ؛
يتم إرسال الجهد الشمسي بضربه في 6 حيث أنشأنا مقسم الجهد الذي سيقسم جهد الدخل بمقدار 6 مرات.
يتم إنشاء درجة الحرارة من الثرمستور باستخدام تشكيل لوغاريتمي.
// تحويل القيمة إلى مقاومة temp_avg = 4095 / temp_avg - 1 ؛ temp_avg = SERIESRESISTOR / temp_avg ، //Serial.print(" مقاومة الثيرمستور ") ؛ //Serial.println(temp_avg) ؛ تعويم شتاينهارت Steinhart = temp_avg / THERMISTORNOMINAL ؛ // (R / Ro) شتاينهارت = سجل (شتاينهارت) ؛ // ln (R / Ro) شتاينهارت / = BCOEFFICIENT ؛ // 1 / B * ln (R / Ro) شتاينهارت + = 1.0 / (TEMPERATURENOMINAL + 273.15) ؛ // + (1 / إلى) steinhart = 1.0 / steinhart ؛ // عكس شتاينهارت - = 273.15 ؛ // تحويل درجة الحرارة المطلقة إلى C.
تتم قراءة البيانات كل 15 ثانية.
تأخير (1000) ؛ العد ++ ؛ Serial.print (".") ؛ إذا (العد> = 15) { عدد = 0 ؛ Serial.println ("============================================= ============================= ") ؛ Serial.print ("الجهد الشمسي =") ؛ Serial.println (solar_volt) ؛ Serial.print ("التيار الشمسي =") ؛ Serial.println (solar_curr) ؛ تعويم solar_watt = solar_volt * solar_curr ؛ Serial.print ("الطاقة الشمسية =") ؛ Serial.println (solar_watt) ؛ Serial.print ("درجة حرارة الشمس =") ؛ Serial.println (شتاينهارت) ؛ Serial.println ("============================================= ============================= ") ؛
يتم إرسال بيانات الحقول المعنية باستخدام الوظيفة Thing.Speak.setField ()؛ عندما تكون شبكة WiFi متصلة.
if (WiFi.status () == WL_CONNECTED) { ThingSpeak.setField (1، solar_volt) ؛ ThingSpeak.setField (2، solar_curr) ؛ ThingSpeak.setField (3 ، solar_watt) ؛ ThingSpeak.setField (4 ، ستينهارت) ؛ // الكتابة إلى قناة ThingSpeak int x = ThingSpeak.writeFields (channelID، writeFeedAPIKey) ؛ إذا (x == 200) { Serial.println ("تم تحديث القنوات بنجاح.") ؛ } else { Serial.println ("مشكلة في تحديث القناة. رمز خطأ HTTP" + String (x))؛ } } else { Serial.println ("\ r \ n ##################################### ####################### ") ؛ Serial.println ("فشل تحديث البيانات إلى خادم thingSpeak.") ؛ Serial.println ("WiFi غير متصل…") ؛ Serial.println ("############################################# ############### \ r \ n ")؛ } Serial.print ("قراءة البيانات") ؛ } }
تم إنشاء مهمة Wi-Fi في مقتطف الرمز أدناه-
باطل wifi_task (باطل * معلمة) { while (1) { if (WiFi.status ()! = WL_CONNECTED) { Serial.print ("محاولة الاتصال بـ SSID:") ؛ Serial.println (WLAN_SSID) ، while (WiFi.status ()! = WL_CONNECTED) { WiFi.begin (WLAN_SSID، WLAN_PASS) ، // الاتصال بشبكة WPA / WPA2. قم بتغيير هذا الخط إذا كنت تستخدم شبكة مفتوحة أو شبكة WEP Serial.print (".") ؛ تأخير (5000) ؛ } Serial.println ("\ n متصل.")؛ Serial.println () ، Serial.println ("متصل بشبكة WiFi") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ } vTaskDelay (1000 / portTICK_PERIOD_MS) ، } vTaskDelete (NULL) ، }
بيانات الاختبار والمراقبة
اللوحة الشمسية متصلة بالدائرة وتوضع في ضوء الشمس للاختبار كما هو موضح أدناه.
يتم عرض العمل الكامل في الفيديو أدناه. تمكنت دائرتنا من قراءة جهد الخرج والتيار والطاقة من اللوحة وتحديثها مباشرة على قناة الأشياء كما هو موضح أدناه.
كما نرى ، يتم عرض بيانات 15 دقيقة في الرسم البياني أعلاه. نظرًا لأن هذا مشروع تشغيل خارجي ، يجب استخدام ثنائي الفينيل متعدد الكلور المناسب مع صندوق مغلق. يجب أن يتم صنع العلبة بحيث تظل الدائرة مقاومة للماء في المطر. لتعديل هذه الدائرة أو لمناقشة جوانب أخرى من هذا المشروع ، يرجى استخدام المنتدى النشط لـ Circuit Digest. آمل أن تكون قد استمتعت بالبرنامج التعليمي وتعلمت شيئًا مفيدًا.