- المواد المطلوبة لمقياس الطاقة ESP32
- مقياس الكفاءة المستند إلى Arduino و ESP32 - مخطط الدائرة
- تصميم ثنائي الفينيل متعدد الكلور لمقياس الكفاءة المستند إلى Arduino و ESP32
- مقياس الكفاءة المستند إلى Arduino و ESP32 - كود
- اختبار مقياس الكفاءة المستند إلى Arduino و ESP32
- مزيد من التحسينات
ندرك جميعًا مقياس الفولتميتر الأساسي ، ومقياس التيار الكهربائي ، ومقاييس الواط ، وهي الأشياء الأساسية الثلاثة التي تحتاجها لقياس القيم في أي مشاريع أو دوائر إلكترونية. يمكن أن يكون قياس الجهد والتيار بمساعدة مقياس متعدد طريقة جيدة للبدء ، ولكن إحدى أكبر المشكلات التي أواجهها أثناء اختبار الدائرة هي قياس كفاءة الطاقة. لذلك ، سنقوم اليوم بحل هذه المشكلة من خلال بناء مقياس كفاءة يعتمد على Arduino و ESP32 يمكنه قياس جهد الدخل ، تيار الإدخال ، جهد الخرج ، وتيار الإخراج. وبالتالي ، يمكنه قياس طاقة الإدخال وطاقة الخرج في نفس الوقت ، وباستخدام هذه القيم ، يمكننا قياس الكفاءة بسهولة. في السابق ، قمنا أيضًا بعمل شيء مشابه جدًا في مشروع Wattmeter القائم على Arduino ، ولكن هنا سنقوم بقياس كل من طاقة الإدخال وطاقة الإخراج إلى حساب كفاءة الطاقة.
بدلاً من شراء أربعة أمتار للوظيفة ، سنكون قادرين على حل هذه المشكلة من خلال دمج قدرات الأمتار الأربعة جميعها في متر واحد. لا يؤدي بناء العداد الرقمي إلى تقليل التكلفة فحسب ، بل يمنحك أيضًا مساحة كبيرة للترقيات والتحسينات. نظرًا لأننا نستخدم ESP32 لبناء هذا المشروع ، يمكننا بسهولة تمكين هذا العداد IoT وتسجيل البيانات عبر الويب ، وهو موضوع المشروع المستقبلي. مع مسح كل الأساسيات ، دعنا ندخلها مباشرة.
ملاحظة: مقياس الطاقة هذا مصمم لدارات التيار المستمر. إذا كنت تبحث عن قياس تيار التيار المتردد لكفاءة طاقة التيار المتردد المحسوبة ، يمكنك التحقق من عداد طاقة الكهرباء القائم على إنترنت الأشياء ومشاريع عداد الطاقة المدفوعة مسبقًا.
المواد المطلوبة لمقياس الطاقة ESP32
توضح الصورة أدناه المواد المستخدمة لبناء الدائرة. نظرًا لأن هذا مصنوع من مكونات عامة جدًا ، يجب أن تكون قادرًا على العثور على جميع المواد المدرجة في متجر الهوايات المحلي.
لقد أدرجت أيضًا المكونات أدناه مع الكمية المطلوبة. إذا كنت تقوم ببناء الدائرة بنفسك ، يوصى بشدة بالحصول على جميع المواد من القائمة أدناه.
- لوحة ESP32 - 1
- 128 × 64 أوليد - 1
- ACS712-20 IC - 2
- جاك برميل DC - 1
- 100 فائق التوهج مكثف - 2
- 104pF - 2
- 102pF - 2
- 10 آلاف ، 1٪ - 4
- 68 ألف ، 1٪ - 2
- 6.8 ك ، 1٪ - 2
مقياس الكفاءة المستند إلى Arduino و ESP32 - مخطط الدائرة
يتم عرض التخطيطي لمقياس الكفاءة المستند إلى Arduino و ESP32 أدناه. يعد إنشاء هذه الدائرة أمرًا بسيطًا للغاية ويستخدم مكونات عامة.
تشغيل الدائرة بسيط للغاية. سنقوم بقياس الجهد والتيار في هذا المشروع ولكن بطريقة فريدة. نحن نقيس الجهد والتيار لكل من المدخلات والمخرجات ، وبالتالي يمكننا أن نرى كفاءة الدائرة. هذا مفيد جدًا لبعض المشاريع. مثال على ذلك يمكن أن يكون محول DC إلى DC حيث يصبح قياس الكفاءة إلزاميًا. يتم وصف طريقة عمل هذه الدائرة أدناه.
ACS712 مستشعر التيار IC:
كما ترون في الصورة أعلاه ، نحن نستخدم ACS712 Current Sensor IC لقياس التيار. هذا IC مثير للاهتمام للغاية لأنه يستخدم تأثير هول لقياس التيار ، وهناك ثلاثة متغيرات من هذا IC يمكن العثور عليها في السوق f (أو 5A و 20 A و 30 A). نحن نستخدم متغير 20A لهذا ويطلق عليه اسم ACS712-20.
توصي ورقة البيانات ACS712 بنطاق جهد من 4.5 - 5.5 للعمل بسلاسة. وبما أننا سنقوم بقياس التيار باستخدام ESP32 ، فهو يتحمل 3.3 فولت فقط ، ولهذا السبب استخدمت مقسم جهد بمقاومين 10 ك لخفض جهد الخرج الخاص بـ ACS712 IC. عندما لا يتدفق تيار عبر IC ، فإنه يخرج 2.5V ، وعندما يتدفق مقدار من التيار عبر IC ، فإنه إما يخفض الجهد أو يزيد الجهد اعتمادًا على اتجاه التدفق الحالي. لقد استخدمنا اثنين من هذه الدوائر المتكاملة لقياس المدخلات والمخرجات الحالية. تحقق من مشاريعنا السابقة (أدناه) التي استخدمنا فيها هذا المستشعر ACS712.
- عداد طاقة الكهرباء المعتمد على إنترنت الأشياء باستخدام وحدة Wi-Fi و ESP8266 من Arduino
- دارة مقياس التيار الرقمي باستخدام متحكم PIC و ACS712
حيث ناقشنا عمل هذه المجسات بالتفصيل. يمكنك التحقق من هؤلاء إذا كنت تريد معرفة المزيد عن هذه المستشعرات.
مقسم الجهد:
لقياس جهد الدخل والخرج ، لدينا مقسمان للجهد على جانب الإدخال والإخراج للدائرة. أقصى جهد يمكن للدائرة قياسه هو 35 فولت ، ولكن يمكن تغييره بسهولة عن طريق تغيير قيم المقاوم لمقسم الجهد.
منظم الجهد:
يتم استخدام منظم الجهد العام LM7805 لتشغيل الدوائر المتكاملة ESP32 و OLED و ACS712. نظرًا لأننا نقوم بتشغيلها بقوة نظيفة إلى حد ما ، لا يتم استخدام مكثفات فصل ، لكننا استخدمنا مكثفات 100 فائق التوهج في كل من المدخلات والمخرجات لتحقيق الاستقرار في IC.
ESP32 IC وشاشة OLED:
لقد استخدمنا ESP32 باعتباره المعالج الرئيسي ، وهو المسؤول عن جميع القراءات والحسابات والمدخلات والمخرجات. أيضًا ، استخدمنا شاشة OLED بحجم 128 × 64 لمعرفة القيم.
تصميم ثنائي الفينيل متعدد الكلور لمقياس الكفاءة المستند إلى Arduino و ESP32
تم تصميم PCB لمقياس الكفاءة المستند إلى Arduino و ESP32 على لوحة من جانب واحد. لقد استخدمت Eagle لتصميم ثنائي الفينيل متعدد الكلور ولكن يمكنك استخدام أي برنامج تصميم من اختيارك. الصورة ثنائية الأبعاد لتصميم لوحي موضحة أدناه.
يتم استخدام أثر أرضي كافٍ لإجراء اتصالات أرضية مناسبة بين جميع المكونات. أيضًا ، حرصنا على استخدام آثار 5V و 3.3V مناسبة لتقليل الضوضاء وتحسين الكفاءة.
- قم بتنزيل ملفات تصميم PCB و GERBER Arduino و ESP32 Based ESP32
PCB اليدوية:
للراحة والاختبار ، لقد صنعت نسختي اليدوية من ثنائي الفينيل متعدد الكلور وهو موضح أدناه. في الإصدار الأول ، ارتكبت بعض الأخطاء التي قمت بتصحيحها باستخدام بعض أسلاك التوصيل. لكن في الإصدار الأخير ، قمت بإصلاحها ، يمكنك فقط تنزيل الملفات واستخدامها.
مقياس الكفاءة المستند إلى Arduino و ESP32 - كود
الآن ، بعد أن أصبح لدينا فهم جيد لجانب الأجهزة للأشياء ، يمكننا فتح Arduino IDE وبدء الترميز الخاص بنا. الغرض من الكود هو قراءة الجهد التناظري من الدبوس 35 و 33 من لوحة ESP32. نقرأ أيضًا الجهد من 32 ، و 34 دبوس وهي القيمة الحالية. بمجرد القيام بذلك ، يمكننا ضرب هؤلاء للحصول على طاقة الإدخال وإخراج الطاقة ، ووضعها في صيغة الكفاءة ، يمكننا الحصول على الكفاءة.
أخيرًا ، نعرضه على شاشة LCD. يتم تقديم البرنامج الكامل لفعل الشيء نفسه في النهاية ، والذي يمكن استخدامه على هذا النحو للأجهزة التي تمت مناقشتها أعلاه. علاوة على ذلك ، يتم تقسيم الكود إلى قصاصات صغيرة وشرحها.
كما أننا نستخدم شاشة OLED 128X64، نحن بحاجة إلى مكتبة Adafruit_GFX و مكتبة Adafruit_SSD1306 على التواصل مع العرض. يمكنك تنزيل كلاهما من محطة مدير اللوحة الافتراضية في Arduino ؛ إذا كنت تواجه أي مشكلات مع جزء مدير اللوحة ، فيمكنك أيضًا تنزيل المكتبات وتضمينها من مستودع GitHub المرتبط به ، والذي يرد أدناه.
- قم بتنزيل مكتبة Adafruit_GFX
- قم بتنزيل مكتبة Adafruit_SSD1306
كالعادة ، نبدأ الكود الخاص بنا من خلال تضمين جميع المكتبات المطلوبة. ثم نحدد جميع الدبابيس والمتغيرات الضرورية والتي تظهر جميعها أدناه.
#تضمن
و SCREEN_WIDTH و SCREEN_HEIGHT تستخدم تعريفات لتحديد حجم الشاشة. بعد ذلك ، حددنا جميع المسامير الضرورية ، والتي من خلالها سنقوم بقياس الجهد والتيار. بعد ذلك ، حددنا قيم المقاوم المستخدمة في الأجهزة كما ترون من التخطيطي. إذا لم يكن لديك هذه القيم أو إذا كنت تريد تغيير نطاق جهاز القياس ، يمكنك تغيير هذه القيم ، سيعمل الرمز بشكل جيد.
نظرًا لأننا نستخدم ACS712 لقياس التيار ، فنحن بحاجة إلى قيمة mVperAmp لحساب التيار من الجهد. نظرًا لأنني أستخدم وحدة 20A ACS712 ، فإن قيمة mV / A هي 100 كما هو موضح في ورقة البيانات. ولكن نظرًا لأننا نستخدم ESP32 ومقسم جهد ، سيكون لدينا نصف القيمة وهي 50 ، ولهذا السبب وضعنا قيمة mV / AMP.
ACSoffset هو الإزاحة المطلوبة لحساب التيار من الجهد. نظرًا لأن ACS712 IC تعمل بالطاقة من 5 فولت ، فإن جهد الإزاحة هو 2.5 فولت. ولكن نظرًا لأننا نستخدم مقسم جهد ، فإنه ينخفض إلى 1.25 فولت. قد تعرف بالفعل ADC السيء لـ ESP32 ، لذلك كان علي استخدام القيمة 1136. إذا كنت تواجه مشكلات في المعايرة ، فيمكنك تعديل القيم والتعويض عن ADC.
أخيرًا ، ننتهي من هذا القسم عن طريق إنشاء كائن عرض لفئة Adafruit_SSD1306 وتمرير عرض الشاشة والارتفاع وتكوين I 2 C واستخدام المعلمة -1 الأخيرة لتحديد وظيفة إعادة التعيين. إذا لم يكن لشاشتك دبوس إعادة تعيين خارجي (وهو بالتأكيد لشاشتي) ، فعليك استخدام -1 للوسيطة الأخيرة.
إعداد باطل () {Serial.begin (115200) ؛ if (! display.begin (SSD1306_SWITCHCAPVCC، 0x3C)) {// العنوان 0x3D لـ 128x64 Serial.println (F ("فشل تخصيص SSD1306")) ؛ إلى عن على (؛؛)؛ } display.clearDisplay ()؛ display.setRotation (2) ؛ display.setTextSize (1) ، تأخير (100) ؛ }
بعد ذلك ، لدينا قسم الإعداد () . في هذا القسم ، نقوم بتمكين المسلسل لتصحيح الأخطاء ، ونتحقق مما إذا كانت شاشة I 2 C متوفرة أم لا بمساعدة طريقة البداية لكائن العرض. أيضًا ، قمنا بتعيين عنوان I 2 C. بعد ذلك ، نقوم بمسح الشاشة باستخدام طريقة clearDisplay () . أيضًا ، نقوم بتدوير الشاشة باستخدام طريقة setRotation ، وذلك لأنني أفسدت تصميم ثنائي الفينيل متعدد الكلور. بعد ذلك ، نضع تأخيرًا قدره 100 مللي ثانية حتى تصبح الوظائف سارية المفعول. بمجرد الانتهاء من ذلك ، يمكننا الآن الانتقال إلى وظيفة الحلقة. ولكن قبل الانتقال إلى وظيفة حلقة، ونحن بحاجة لمناقشة اثنين وظائف الأخرى التي return_voltage_value () ، و return_current_value () .
ضعف return_voltage_value (int pin_no) {double tmp = 0 ؛ مزدوج ADCVoltage = 0 ؛ إدخال مزدوج الجهد = 0 ؛ ضعف متوسط = 0 ؛ لـ (int i = 0 ؛ i <150 ؛ i ++) {tmp = tmp + analogRead (pin_no) ؛ } متوسط = tmp / 150 ؛ ADCVoltage = ((متوسط * 3.3) / (4095)) + 0.138 ؛ inputVoltage = ADCVoltage / (R2_VOLTAGE / (R1_VOLTAGE + R2_VOLTAGE)) ؛ // صيغة لحساب الجهد في أي GND عودة المدخلات الجهد ؛ }
و return_voltage_value () يتم استخدام الدالة لقياس الجهد المقبلة في ADC، ويأخذ pin_no كحجة. في هذه الوظيفة ، نبدأ بالإعلان عن بعض المتغيرات ، وهي tmp و ADCVoltage و inputVoltage و avg. يتم استخدام المتغير tmp لتخزين قيمة ADC المؤقتة التي نحصل عليها من دالة analogRead () ، ثم نقوم بتوسيطها 150 مرة في حلقة for ، ونخزن القيمة في متغير يسمى avg. ثم نحسب ADCVoltage من الصيغة المعطاة ، وأخيراً نحسب جهد الدخل ونعيد القيم. قيمة +0.138 التي تراها هي قيمة المعايرة التي استخدمتها لمعايرة مستوى الجهد ، والتلاعب بهذه القيمة إذا كنت تحصل على أي أخطاء.
Return_current_value مزدوجة (int pin_no) {double tmp = 0 ؛ ضعف متوسط = 0 ؛ مزدوج ADCVoltage = 0 ؛ أمبير مزدوج = 0 ؛ لـ (int z = 0 ؛ z <150 ؛ z ++) {tmp = tmp + analogRead (pin_no) ؛ } متوسط = tmp / 150 ؛ ADCVoltage = ((avg / 4095.0) * 3300) ؛ // تحصل على mV Amps = ((ADCVoltage - ACSoffset) / mVperAmp) ؛ عودة الأمبير }
بعد ذلك ، لدينا وظيفة return_current_value () . تأخذ هذه الوظيفة أيضًا pin_no كوسيطة. في هذه الوظيفة أيضًا لدينا أربعة متغيرات. tmp و avg و ADCVoltage و Amps
بعد ذلك ، قرأنا الدبوس بوظيفة analogRead () وقمنا بتوسيطه 150 مرة ، وبعد ذلك نستخدم الصيغة لحساب ADCvoltage ، وبذلك نحسب التيار ونعيد القيمة. مع ذلك ، يمكننا الانتقال إلى قسم الحلقة.
حلقة باطلة () {float input_voltage = abs (return_voltage_value (INPUT_VOLTAGE_SENSE_PIN)) ؛ float input_current = abs (return_current_value (INPUT_CURRENT_SENSE_PIN)) ، تعويم output_voltage = القيمة المطلقة (return_voltage_value (OUTPUT_VOLTAGE_SENSE_PIN)) ؛ float output_current = abs ((return_current_value (OUTPUT_CURRENT_SENSE_PIN))) ؛ input_current = input_current - 0.025 ؛ Serial.print ("جهد الإدخال:") ؛ Serial.print (input_voltage) ؛ Serial.print ("- تيار الإدخال:") ؛ Serial.print (input_current) ؛ Serial.print ("- جهد الإخراج:") ؛ Serial.print (output_voltage) ؛ Serial.print ("- إخراج التيار:") ؛ Serial.println (output_current) ؛ تأخير (300) ؛ display.clearDisplay () ، display.setCursor (0، 0) ؛ display.print ("I / PV:") ؛ display.setCursor (37، 0) ؛ display.print (input_voltage) ؛ display.setCursor (70، 0) ؛ عرض.طباعة ("V") ؛ }
نبدأ قسم الحلقة بالتصريح وتحديد بعض المتغيرات العائمة في جميع المتغيرات الأربعة. نسمي الدوال المعنية ، ونمرر pin_no كوسيطة ، حيث يمكن لوحدة ACS712 إرجاع القيم الحالية في صورة سالبة. نستخدم دالة abs () لمكتبة الرياضيات لجعل القيمة السالبة موجبة. بعد ذلك ، نقوم بطباعة جميع قيم التصحيح بشكل تسلسلي. بعد ذلك ، نقوم بمسح الشاشة وتعيين المؤشر وطباعة القيم. نقوم بذلك لجميع الشخصيات المعروضة على الشاشة. الذي يمثل نهاية وظيفة الحلقة والبرنامج.
اختبار مقياس الكفاءة المستند إلى Arduino و ESP32
كما ترون إعداد الاختبار الخاص بي في الصورة أعلاه. لدي محول 30 فولت كمدخل ، ولدي جهاز القياس الخاص بي موصول بلوحة الاختبار. أنا أستخدم لوحة محول باك تعتمد على LM2596 وللتحميل وأنا أستخدم ثلاثة مقاومات 10 أوم ، بالتوازي.
كما ترون في الصورة أعلاه ، لقد قمت بالاتصال بأمتار متعددة للتحقق من جهد الدخل والإخراج. ينتج المحول 32 فولت تقريبًا ويبلغ ناتج محول باك 3.95 فولت.
تُظهر الصورة هنا تيار الخرج المقاس بواسطة مقياس الكفاءة الخاص بي والمقياس المتعدد. كما ترون ، يظهر جهاز القياس المتعدد.97 أمبير ، وإذا قمت بالتكبير قليلاً ، فإنه يظهر 1.0A ، فهو متوقف قليلاً بسبب عدم الخطية الموجودة في وحدة ACS712 ولكن هذا يخدم غرضنا. للحصول على شرح مفصل واختبار ، يمكنك مشاهدة الفيديو في قسم الفيديو الخاص بنا.
مزيد من التحسينات
بالنسبة لهذا العرض التوضيحي ، تم صنع الدائرة على لوحة PCB مصنوعة يدويًا ولكن يمكن بناء الدائرة بسهولة في ثنائي الفينيل متعدد الكلور عالي الجودة. في تجربتي ، حجم ثنائي الفينيل متعدد الكلور كبير حقًا نظرًا لحجم المكون ، ولكن في بيئة الإنتاج ، يمكن تقليله باستخدام مكونات SMD رخيصة. لا تحتوي الدائرة أيضًا على أي ميزة حماية مدمجة ، لذا فإن تضمين دائرة حماية سيؤدي إلى تحسين جانب الأمان العام للدائرة. أيضًا ، أثناء كتابة الكود ، لاحظت أن ADC الخاص بـ ESP32 ليس بهذه الروعة. سيؤدي تضمين ADC خارجي مثل وحدة ADS1115 إلى زيادة الاستقرار والدقة بشكل عام.
أتمنى أن تكون قد أحببت هذه المقالة وتعلمت شيئًا جديدًا منها. إذا كان لديك أي شك ، يمكنك أن تسأل في التعليقات أدناه أو يمكنك استخدام منتدياتنا لمناقشة مفصلة.