جدول المحتويات:

عداد طاقة اردوينو: 10 خطوات (بالصور)
عداد طاقة اردوينو: 10 خطوات (بالصور)

فيديو: عداد طاقة اردوينو: 10 خطوات (بالصور)

فيديو: عداد طاقة اردوينو: 10 خطوات (بالصور)
فيديو: مشروع أردوينو لقياس النبضات واكسجة الدم والحرارة 2024, يوليو
Anonim
Image
Image
اردوينو عداد الطاقة
اردوينو عداد الطاقة
اردوينو عداد الطاقة
اردوينو عداد الطاقة

[شغل الفيديو]

أنتمي إلى قرية أوديشا بالهند حيث يكون انقطاع التيار الكهربائي المتكرر أمرًا شائعًا للغاية. إنه يعيق حياة كل فرد. خلال أيام طفولتي ، كان استمرار الدراسة بعد الغسق يمثل تحديًا حقيقيًا. بسبب هذه المشكلة ، صممت نظامًا شمسيًا لمنزلي على أساس تجريبي. لقد استخدمت لوحة شمسية بقوة 10 وات و 6 فولت لإضاءة عدد قليل من المصابيح الساطعة. بعد مواجهة الكثير من المصاعب ، نجح المشروع. ثم قررت مراقبة الجهد والتيار والطاقة والطاقة المتضمنة في النظام. جلب هذا فكرة تصميم عداد الطاقة ، لقد استخدمت ARDUINO كقلب لهذا المشروع لأنه من السهل جدًا كتابة الكود في IDE الخاص به وهناك عدد كبير من المكتبات مفتوحة المصدر المتاحة على الإنترنت والتي يمكن استخدامها وفقًا لـ لقد جربت المشروع لنظام شمسي صغير جدًا (10 وات) ولكن يمكن تعديله بسهولة لاستخدامه في نظام تصنيف أعلى.

يمكنك العثور على جميع مشاريعي على:

الميزة: مراقبة الطاقة بواسطة شاشة 1. LCD 2. عبر الإنترنت (تحميل Xively) 3. تسجيل البيانات في بطاقة SD

يمكنك أن ترى جهاز التحكم الجديد في ARDUINO MPPT SOLAR CHARGE CONTROLLER (الإصدار 3.0)

يمكنك أيضًا رؤية إرشاداتي الأخرى على

وحدة التحكم في الشحن بالطاقة الشمسية من أردوينو (الإصدار 2.0)

جهاز التحكم في الشحن بالطاقة الشمسية من اردوينو (الإصدار 1)

الخطوة 1: الأجزاء المطلوبة:

الأجزاء المطلوبة
الأجزاء المطلوبة

1. أردوينو أونو (أمازون) 2. درع أردوينو إيثرنت (أمازون)

3. شاشة LCD ذات أحرف 16 × 2 (أمازون)

4. ACS 712 CURRENT SENSOR (أمازون) 4. المقاومات (10 كيلو ، 330 أوم) (أمازون) 5. 10K POTENTIOMETER (Amazon) 6. أسلاك الطائر (أمازون) 7. كابل إيثرنت (أمازون) 8. لوح الخبز (أمازون)

الخطوة الثانية: القوة والطاقة

الطاقة: الطاقة هي نتاج الجهد (فولت) والتيار (أمبير) P = VxI وحدة الطاقة هي واط أو KW الطاقة: الطاقة هي نتاج الطاقة (واط) والوقت (ساعة) E = Pxt وحدة الطاقة هي وات ساعة أو كيلووات ساعة (كيلوواط ساعة) من الصيغة أعلاه ، من الواضح أنه لقياس الطاقة نحتاج إلى ثلاث معلمات 1. الجهد 2. التيار 3. الوقت

الخطوة الثالثة: قياس الجهد

قياس الجهد
قياس الجهد
قياس الجهد
قياس الجهد
قياس الجهد
قياس الجهد

يتم قياس الجهد بمساعدة دائرة مقسم الجهد ، نظرًا لأن جهد إدخال الدبوس التناظري ARDUINO يقتصر على 5 فولت ، فقد صممت مقسم الجهد بحيث يكون جهد الخرج منه أقل من 5 فولت. تم تصنيف الطاقة من الألواح الشمسية 6 فولت ، 5.5 أمبير ، لذلك يجب أن أتخلى عن هذا 6.5 فولت إلى جهد أقل من 5 فولت. لقد استخدمت R1 = 10k و R2 = 10K. يمكن أن تكون قيمة R1 و R2 أقل ولكن المشكلة هي أنه عندما تكون المقاومة منخفضة ، فإن تدفق تيار أعلى من خلالها نتيجة لذلك يتبدد قدر كبير من الطاقة (P = I ^ 2R) على شكل حرارة. لذلك يمكن اختيار قيمة مقاومة مختلفة ولكن يجب توخي الحذر لتقليل فقد الطاقة عبر المقاومة. Vout = R2 / (R1 + R2) * Vbat Vbat = 6.5 عند الشحن الكامل R1 = 10k و R2 = 10k Vout = 10 / (10 + 10) * 6.5 = 3.25 فولت وهو أقل من 5 فولت ومناسب لدبوس ARDUINO التناظري ملاحظة I أظهرت بطارية 9 فولت في دائرة اللوح العاري ، على سبيل المثال فقط لتوصيل الأسلاك ، لكن البطارية الفعلية التي استخدمتها هي بطارية حمض الرصاص بقوة 6 فولت و 5.5 أمبير. معايرة الجهد: عندما تكون البطارية مشحونة بالكامل (6.5 فولت) سنحصل عليها Vout = 3.25 فولت وقيمة أقل لجهد بطارية منخفض آخر. يقوم AEDUINO ADC بتحويل الإشارة التناظرية إلى التقريب الرقمي المقابل. عندما يكون جهد البطارية 6.5 فولت ، حصلت على 3.25 فولت من مقسم الجهد والعينة 1 = 696 في الشاشة التسلسلية ، حيث تكون قيمة ADC هي 3.25 فولت لفهم أفضل ، لقد أرفقت محاكاة الوقت الحقيقي بواسطة 123D دائرة لقياس الجهد معايرة: 3.25 فولت ما يعادل 696 1 ما يعادل 3.25 / 696 = 4.669 مللي فولت Vout = (4.669 * sample1) / 1000 فولت جهد البطارية الفعلي = (2 * Vout) رمز voltARDUINO: // أخذ 150 عينة من مقسم الجهد بفاصل 2 ثانية ثم متوسط بيانات العينات التي تم جمعها لـ (int i = 0 ؛ i <150 ؛ i ++) {sample1 = sample1 + analogRead (A2) ؛ // قراءة الجهد من تأخير دارة المقسم (2) ؛ } sample1 = sample1 / 150 ؛ الجهد = 4.669 * 2 * عينة 1/1000 ؛

الخطوة 4: القياس الحالي

القياس الحالي
القياس الحالي
القياس الحالي
القياس الحالي

بالنسبة للقياس الحالي ، استخدمت مستشعر تيار ACS 712 (20 A) من Hall Effect. يوجد مستشعر تيار مختلف ACS712 متوفر في السوق ، لذا اختر وفقًا لمتطلباتك. في الرسم التخطيطي للوحة الخبز ، لقد أظهرت LED كحمل ولكن الحمل الفعلي مختلف. مجال مغناطيسي عمودي على التيار. لمعرفة المزيد عن مستشعر Hall Effect ، انقر هنا توجد ورقة بيانات مستشعر ACS 712 هنا من ورقة البيانات 1. يقيس ACS 712 الموجب والسالب 20 أمبير في الثانية ، وهو ما يقابل الإخراج التناظري 100mV / A 2. لا يوجد اختبار حالي من خلال جهد الخرج VCC / 2 = 5v / 2 = 2.5V المعايرة: القراءة التناظرية تنتج قيمة من 0-1023 ، تعادل 0v إلى 5v لذا قراءة النظير 1 = (5/1024) V = 4.89mv القيمة = (4.89 * قيمة القراءة التناظرية) / 1000 فولت ولكن وفقًا لإزاحة أوراق البيانات 2.5 فولت (عندما يكون الصفر الحالي ، ستحصل على 2.5 فولت من خرج المستشعر) القيمة الفعلية = (القيمة 2.5) فولت التيار في أمبير = القيمة الفعلية * 10ARDUINO CODE: // أخذ 150 عينة من أجهزة استشعار بفاصل زمني 2 ثانية ثم متوسط بيانات العينات التي تم جمعها من أجل (int i = 0 ؛ i <150 ؛ i ++) {sample2 + = analogRead (A3) ؛ // قراءة التيار من تأخير المستشعر (2) ؛ } sample2 = sample2 / 150 ؛ val = (5.0 * sample2) /1024.0 ؛ الفعلي = val-2.5 ؛ // جهد الإزاحة 2.5 فولت أمبير = القيمة الفعلية * 10 ؛

الخطوة الخامسة: قياس الوقت

لقياس الوقت ، ليست هناك حاجة إلى أي جهاز خارجي ، حيث أن ARDUINO نفسها مزودة بجهاز ضبط وقت يحمل في ثناياه عوامل. ترجع الدالة millis () عدد المللي ثانية منذ أن بدأت لوحة Arduino في تشغيل البرنامج الحالي. ARDUINO CODE: long milisec = millis ()؛ // حساب الوقت بالمللي ثانية وقت طويل = ميليسيك / 1000 ؛ // تحويل ميلي ثانية إلى ثوان

الخطوة 6: كيف يحسب أردوينو الطاقة والطاقة

توتامبس = توتامبس + أمبير ؛ // حساب إجمالي الأمبيرات avgamps = totamps / الوقت ؛ // متوسط أمبير أمبير = (متوسط * الوقت) / 3600 ؛ // أمبير ساعة واط = الجهد * أمبير ؛ // الطاقة = الجهد * الطاقة الحالية = (واط * الوقت) / 3600 ؛ يتم تحويل Watt-sec مرة أخرى إلى Watt-Hr عن طريق قسمة ساعة واحدة (3600 ثانية) // الطاقة = (وات * الوقت) / (1000 * 3600) ؛ للقراءة بالكيلووات ساعة

الخطوة 7: الإخراج المرئي

الإخراج المرئي
الإخراج المرئي

يمكن تصور جميع النتائج في الشاشة التسلسلية أو باستخدام شاشة LCD. لقد استخدمت شاشة LCD مقاس 16 × 2 حرفًا لعرض جميع النتائج التي تم الحصول عليها في الخطوات السابقة. للحصول على مخططات ، انظر دائرة لوحة الخبز الموضحة أعلاه. قم بتوصيل شاشة LCD مع ARDUINO كما هو موضح أدناه: LCD -> Arduino 1. VSS -> Arduino GND 2. VDD - > Arduino + 5v 3. VO -> Arduino GND pin + Resistor or Potentiometer 4. RS -> Arduino pin 8 5. RW -> Arduino pin 7 6. E -> Arduino pin 6 7. D0 -> Arduino - غير متصل 8 D1 -> Arduino - غير متصل 9. D2 -> Arduino - غير متصل 10. D3 -> Arduino - غير متصل 11. D4 -> Arduino pin 5 12. D5 -> Arduino pin 4 13. D6 -> Arduino pin 3 14. D7 -> Arduino pin 2 15. A -> Arduino Pin 13 + Resistor (طاقة الإضاءة الخلفية) 16. K -> Arduino GND (أرض الإضاءة الخلفية) كود ARDUINO: للمراقب التسلسلي:

Serial.print ("VOLTAGE:") ؛ Serial.print (الجهد) ؛ Serial.println ("فولت") ؛ Serial.print ("CURRENT:") ؛ Serial.print (أمبير) ؛ Serial.println ("أمبير") ؛ Serial.print ("POWER:") ؛ Serial.print (واط) ؛ Serial.println ("واط") ؛ Serial.print ("الطاقة المستهلكة:") ؛ Serial.print (طاقة) ؛ Serial.println ("وات ساعة") ؛ Serial.println ("") ؛ // اطبع المجموعات التالية من المعلمات بعد تأخير سطر فارغ (2000) ؛ بالنسبة لشاشة LCD: بالنسبة لشاشة LCD ، يجب عليك أولاً استيراد مكتبة "LiquidCrystal" في الكود. لمعرفة المزيد حول مكتبة LequidCrystal ، انقر هنا للحصول على برنامج تعليمي لشاشات الكريستال السائل ، انقر هنا. الكود التالي هو تنسيق لعرض جميع حسابات الطاقة والطاقة في شاشة LCD ، بما في ذلك شاشات الكريستال السائل (8 ، 7 ، 6 ، 5 ، 4 ، 3 ، 2) ؛ int backLight = 9 ؛ إعداد باطل () {pinMode (backLight، OUTPUT)؛ // تعيين دبوس 9 كإخراج analogWrite (إضاءة خلفية ، 150) ؛ // يتحكم في شدة الإضاءة الخلفية 0-254 lcd.begin (16 ، 2) ؛ // أعمدة الصفوف. حجم شاشة العرض lcd.clear () ؛ // clear the screen} void loop () {lcd.setCursor (16، 1)؛ / / ضع المؤشر خارج شاشة العد lcd.print ("") ؛ // تأجيل طباعة الأحرف الفارغة (600) ؛ //////////////////////////////////////////// طباعة الطاقة والطاقة إلى شاشة LCD / ///////////////////////////////////////////////// lcd.setCursor (1 ، 0) ؛ / / اضبط المؤشر على طباعة شاشة LCD للصف الأول والعام الأول (واط) ؛ lcd.print ("W") ؛ lcd.print (الجهد) ؛ lcd.print ("V") ؛ lcd.setCursor (1 ، 1) ؛ // اضبط المؤشر على طباعة شاشة LCD للصف الأول والثاني (طاقة) ؛ lcd.print ("WH") ؛ lcd.print (أمبير) ؛ lcd.print ("أ") ؛ }

الخطوة 8: تحميل البيانات إلى Xively.com

تحميل البيانات إلى Xively.com
تحميل البيانات إلى Xively.com
تحميل البيانات إلى Xively.com
تحميل البيانات إلى Xively.com
تحميل البيانات إلى Xively.com
تحميل البيانات إلى Xively.com

ارجع إلى لقطات الشاشة أعلاه للحصول على وضع أفضل. لتحميل البيانات إلى xively.com ، يجب تنزيل المكتبة التالية أولاً HttpClient: انقر هنا X بشكل مباشر: انقر هنا SPI: استيراد من arduino IDE (رسم تخطيطي -> مكتبة استيراد …) Ethernet: استيراد من arduino IDE ((رسم -> مكتبة استيراد…..) افتح حسابًا على https://xively.com (المعروف سابقًا باسم pachube.com و cosm.com) اشترك للحصول على حساب مطور مجاني على

اختر اسم مستخدم وكلمة مرور وحدد عنوانك ومنطقتك الزمنية وما إلى ذلك. ستتلقى رسالة تأكيد بالبريد الإلكتروني ؛

ثم اضغط على رابط التفعيل لتفعيل حسابك. بعد فتح الحساب بنجاح سيتم تحويلك إلى صفحة تطوير الأجهزة

  • انقر فوق مربع + إضافة جهاز
  • أعط اسمًا ووصفًا لجهازك (مثل مراقبة الطاقة) ·
  • اختر بيانات خاصة أو عامة (أختار خاصة) ·
  • انقر فوق إضافة جهاز

بعد إضافة الجهاز ، يتم تحويلك إلى صفحة جديدة بها العديد من المعلومات المهمة

  • معرف المنتج ، وسر المنتج ، والرقم التسلسلي ، ورمز التنشيط ·
  • معرف الخلاصة ، FeedURL ، نقطة نهاية API (يتم استخدام معرف الخلاصة في كود ARDUINO)
  • أضف قنوات (اختر الطاقة والطاقة ، ولكن يمكنك الاختيار وفقًا لاختيارك) أعط وحدة ورمزًا للمعامل ·
  • أضف موقعك
  • مفاتيح API (مستخدمة في كود ARDUINO ، تجنب مشاركة هذا الرقم) ·
  • المشغلات (صفحة ping aweb عند وقوع حدث ، مثل عندما يتجاوز استهلاك الطاقة حدًا معينًا)

الخطوة 9: Xively و ARDUINO Code

أرفقت هنا الكود الكامل (إصدار تجريبي) لمقياس الطاقة باستثناء تسجيل بيانات بطاقة SD المرفقة بشكل منفصل في الخطوة التالية. / ** تحميل بيانات مراقبة الطاقة إلى xively ** / #include #include #include #include #define API_KEY "xxxxxxxx" // أدخل مفتاح واجهة برمجة التطبيقات Xively #define FEED_ID xxxxxxxxx // أدخل معرف الخلاصة Xively الخاص بك // عنوان MAC الخاص بك بايت درع Ethernet mac = {0xDE، 0xAD، 0xBE، 0xEF، 0xFE، 0xED}؛ // الدبوس التناظري الذي نراقبه (يستخدم 0 و 1 بواسطة درع Ethernet) int sensorPin = 2 ؛ غير موقعة long lastConnectionTime = 0 ؛ // آخر مرة اتصلنا فيها بـ Cosm const غير موقعة long connectionInterval = 15000 ؛ // التأخير بين الاتصال بـ Cosm بالمللي ثانية // تهيئة مكتبة Cosm // تحديد السلسلة لمعرف datastream الخاص بنا char sensorId = "POWER" ؛ char sensorId2 = "الطاقة" ؛ XivelyDatastream datastreams = {XivelyDatastream (sensorId ، strlen (sensorId) ، DATASTREAM_FLOAT) ، XivelyDatastream (sensorId2 ، strlen (sensorId2) ، DATASTREAM_FLOAT) ، DATASTREAM_FLOAT) ،} ؛ // لف داتاستريم في خلاصة XivelyFeed (FEED_ID ، datastreams ، 2 / * عدد datastreams * /) ؛ عميل إيثرنت XivelyClient xivelyclient (العميل) ؛ إعداد باطل () {Serial.begin (9600) ؛ Serial.println ("تهيئة الشبكة") ؛ while (Ethernet.begin (mac)! = 1) {Serial.println ("خطأ في الحصول على عنوان IP عبر DHCP ، حاول مرة أخرى …") ؛ تأخير (15000) ؛ } Serial.println ("الشبكة مهيأة") ؛ Serial.println () ، } حلقة فارغة () {if (millis () - lastConnectionTime> connectionInterval) {sendData () ؛ // إرسال البيانات إلى xively getData () ؛ // اقرأ داتاستريم مرة أخرى من xively lastConnectionTime = millis () ؛ // تحديث وقت الاتصال حتى ننتظر قبل الاتصال مرة أخرى}} إرسال بيانات باطلة () {int sensor1 = watt؛ حساس int2 = طاقة ؛ داتاستريمز [0].setFloat (sensor1) ؛ // دارات قيمة الطاقة [1].setFloat (sensor2) ؛ // قيمة الطاقة Serial.print ("قراءة الطاقة") ؛ Serial.println (datastreams [0].getFloat ()) ؛ Serial.print ("قراءة الطاقة") ؛ Serial.println (datastreams [1].getFloat ()) ؛ Serial.println ("تحميل إلى Xively") ؛ int ret = xivelyclient.put (feed، API_KEY) ؛ Serial.print ("كود إرجاع PUT:") ؛ Serial.println (ret) ؛ Serial.println () ، } // احصل على قيمة datastream من xively ، وطباعة القيمة التي تلقيناها void getData () {Serial.println ("قراءة البيانات من Xively") ؛ int ret = xivelyclient.get (feed، API_KEY) ؛ Serial.print ("GET return code:")؛ Serial.println (ret) ؛ إذا (ret> 0) {Serial.print ("Datastream is:")؛ Serial.println (تغذية [0]) ؛ Serial.print ("قيمة الطاقة هي:") ؛ Serial.println (feed [0].getFloat ()) ؛ Serial.print ("Datastream is:") ؛ Serial.println (تغذية [1]) ؛ Serial.print ("قيمة الطاقة هي:") ؛ Serial.println (feed [1].getFloat ()) ؛ } Serial.println () ،

الخطوة 10: تسجيل البيانات في بطاقة SD

لتخزين البيانات في بطاقة SD ، يجب عليك استيراد مكتبة SD للحصول على برنامج تعليمي انقر هنا لمعرفة المزيد عن مكتبة SD انقر هنا رمز تخزين البيانات في بطاقة SD مكتوب بشكل منفصل حيث لا أمتلك ذاكرة كافية في ARDUINO UNO الخاص بي بعد كتابة التعليمات البرمجية لشاشة LCD وتحميل البيانات على xively.com. لكني أحاول تحسين كود الإصدار التجريبي بحيث يمكن أن يحتوي رمز واحد على جميع الميزات (شاشة LCD ، تحميل البيانات Xively وتخزين البيانات في بطاقة SD) ، يتم إرفاق رمز تسجيل البيانات أدناه. أفضل كود عن طريق تعديل الكود الخاص بي ، يرجى مشاركته معي ، هذا هو أول تعليمات فنية لي ، إذا وجد أي شخص أي خطأ فيه ، فلا تتردد في التعليق.. حتى أتمكن من تحسين نفسي. إذا وجدت مجالات تحسين في هذا المشروع ، يرجى التعليق أو أرسل لي رسالة ، لذا سيكون المشروع أكثر قوة وأعتقد أنه سيكون مفيدًا للآخرين وكذلك لي.

مسابقة دوائر 123D
مسابقة دوائر 123D
مسابقة دوائر 123D
مسابقة دوائر 123D

الجائزة الثالثة في مسابقة دوائر 123D

موصى به: