- مخطط كتلة عداد الطاقة الذكي Raspberry Pi
- المكونات المطلوبة
- تحضير Pi
- مخطط حلبة عداد الطاقة Pi
- كود Python لمقياس الطاقة Pi
- تجريبي
توفر شاشات الطاقة ، سواء كانت تغطي الشقة بأكملها أو تم نشرها لمراقبة جهاز واحد فقط ، طريقة لتتبع استهلاكك وإجراء التعديلات اللازمة. في حين أنها أصبحت متاحة بشكل متزايد في السوق ، لا يزال الصانع في داخلي يشعر أنه سيكون فكرة رائعة لبناء نسخة DIY يمكن تصميمها لتلبية متطلبات شخصية محددة. على هذا النحو ، في البرنامج التعليمي اليوم ، سنقوم ببناء جهاز مراقبة استهلاك طاقة Raspberry Pi قادر على الحصول على استهلاك الطاقة وتحميله إلى Adafruit.io.
يمكنك أيضًا التحقق من IoT Energy Meter القائم على Arduino ومقياس طاقة GSM المدفوع مسبقًا الذي قمنا ببنائه سابقًا.
مخطط كتلة عداد الطاقة الذكي Raspberry Pi
يظهر أدناه مخطط كتلة يوضح كيفية عمل النظام.
لاختيار الوحدات واحدة تلو الأخرى ؛
وحدة الاستشعار الحالية: تتكون وحدة الاستشعار الحالية من مستشعر التيار SCT -013 الذي يمكنه قياس ما يصل إلى 100 أمبير ، اعتمادًا على الإصدار الذي تشتريه. يقوم المستشعر بتحويل التيار المار عبر السلك الذي يتم تثبيته عليه إلى تيار صغير يتم تغذيته بعد ذلك في ADC عبر شبكة من فواصل الجهد.
وحدة استشعار الجهد: بينما لم أتمكن من وضع يدي على وحدة استشعار الجهد ، سنقوم ببناء جهاز استشعار الجهد غير المحول الذي يقيس الجهد باستخدام مبدأ فواصل الجهد. يتضمن مستشعر الجهد الكهربائي DIY مرحلة مقسم الجهد حيث يتم تحويل الجهد العالي إلى قيمة مناسبة للإدخال في ADC.
وحدة المعالجة: تتكون وحدة المعالجة من ADC و Raspberry pi. تأخذ ADC الإشارة التناظرية وترسلها إلى raspberry pi ، والتي تحسب بعد ذلك المقدار الدقيق للطاقة التي يتم استهلاكها وترسلها إلى سحابة جهاز معين. لغرض هذا البرنامج التعليمي ، سنستخدم Adafruit.io باعتباره سحابة الجهاز الخاصة بنا. نحن أيضا بنينا أخرى
إخلاء المسؤولية: قبل أن نبدأ ، من المهم أن نذكر أن هذا المشروع يتضمن الاتصال بمصدر تيار متردد وهو أمر خطير ، ويمكن أن يكون قاتلاً إذا لم يتم التعامل معه بأمان. تأكد من أن لديك خبرة في العمل حول مكيف الهواء قبل محاولة ذلك.
جاهز؟ دعنا نتعمق.
المكونات المطلوبة
المكونات التالية مطلوبة لبناء هذا المشروع ؛
- Raspberry Pi 3 أو 4 (يجب أن تكون العملية مماثلة لـ RPI2 مع WiFi Dongle)
- ADS1115 16 بت I2C ADC
- YHDC SCT-013-000
- 2.5A 5V محول طاقة MicroUSB
- 2 واط 10 كيلو المقاوم (1)
- 1 / 2W 10K المقاوم (2)
- 33 اوم المقاوم (1)
- 2 واط 3.3 كيلو المقاوم (1)
- IN4007 ديود (4)
- 3.6 فولت زينر ديود (1)
- 10k مقياس الجهد (أو محدد مسبقًا) (1)
- 50 فولت 1 فائق التوهج مكثف
- 50 فولت 10 فائق التوهج مكثف (2)
- اللوح
- سلك الطائر
- ملحقات أخرى لاستخدام Raspberry Pi.
إلى جانب مكونات الأجهزة المذكورة أعلاه ، يتطلب المشروع أيضًا بعض تبعيات البرامج والمكتبات التي سنقوم بتثبيتها مع تقدمنا.
بينما سيعمل هذا البرنامج التعليمي بغض النظر عن نظام التشغيل raspberry pi المستخدم ، سأستخدم نظام Raspberry Pi buster OS الذي يعمل على Pi 3 (يجب أن يعمل أيضًا على Pi 4) وسأفترض أنك على دراية بإعداد Raspberry Pi باستخدام نظام التشغيل Raspbian Buster (إلى حد كبير نفس العملية مثل الإصدارات السابقة) ، وأنت تعرف كيفية إدخال SSH فيه باستخدام برنامج طرفي مثل hyper. إذا كانت لديك مشاكل مع أي من هذا ، فهناك الكثير من دروس Raspberry Pi التعليمية على هذا الموقع والتي يمكن أن تساعدك
تحضير Pi
قبل أن نبدأ في توصيل المكونات والتشفير ، هناك بعض المهام البسيطة التي نحتاج إلى تنفيذها على raspberry pi للتأكد من استعدادنا للانطلاق.
الخطوة 1: تمكين Pi I2C
في صميم مشروع اليوم ليس فقط التوت باي ولكن ADS1115 16bit I2C القائم على ADC. يسمح لنا ADC بتوصيل المستشعرات التناظرية بـ Raspberry Pi نظرًا لأن Pi نفسه لا يحتوي على ADC داخلي. يأخذ البيانات من خلال ADC الخاص به ويرسلها إلى Raspberry Pi عبر I2C. على هذا النحو ، نحتاج إلى تمكين اتصال I2C على Pi حتى يتمكن من التواصل معه.
يمكن تمكين أو تعطيل ناقل Pi I2C عبر صفحة تكوين raspberry Pi. لتشغيله ، انقر فوق رمز Pi على سطح المكتب وحدد التفضيلات متبوعة بتكوين Raspberry pi.
هذا يجب أن يفتح صفحة التكوين. تحقق من زر الاختيار الممكّن لـ I2C وانقر فوق موافق لحفظه وإعادة تشغيل Pi لإحداث التغييرات.
إذا كنت تقوم بتشغيل Pi في وضع بدون رأس ، فيمكن الوصول إلى صفحة تكوين Raspbian عن طريق تشغيل sudo raspi-config.
الخطوة 2: تثبيت مكتبة ADS11xx من Adafruit
الشيء الثاني الذي يتعين علينا القيام به هو تثبيت مكتبة بيثون ADS11xx التي تحتوي على وظائف وإجراءات تجعل من السهل علينا كتابة برنامج نصي بيثون لجلب القيم من ADC.
اتبع الخطوات أدناه للقيام بذلك.
- تحديث بي الخاص بك عن طريق التشغيل ؛ sudo apt-get update متبوعًا بـ sudo apt-get Upgrade سيؤدي ذلك إلى تحديث pi لضمان عدم وجود مشكلات توافق لأي برنامج جديد تختار تثبيته.
- بعد ذلك ، قم بتشغيل الأمر cd ~ للتأكد من أنك في الدليل الرئيسي.
- بعد ذلك ، قم بتثبيت أساسيات البناء عن طريق التشغيل ؛ sudo apt-get install build-basic python-dev python-smbus git
- بعد ذلك ، قم باستنساخ مجلد Adafruit الذي يحتوي على مكتبة ADS عن طريق التشغيل ؛ استنساخ بوابة https://github.com/adafruit/Adafruit_Python_ADS1x15.git
- غيّر إلى دليل الملف المستنسخ وقم بتشغيل ملف الإعداد باستخدام ؛ cd Adafruit_Python_ADS1x1z متبوعًا sudo python setup.py install
بعد الانتهاء من ذلك ، يجب أن يكون التثبيت قد اكتمل الآن.
يمكنك اختبار تثبيت المكتبة عن طريق توصيل ADS1115 كما هو موضح في قسم المخططات أدناه وتشغيل نموذج التعليمات البرمجية التي جاءت مع المكتبة أولاً ، بالتغيير إلى مجلدها باستخدام ؛ أمثلة على القرص المضغوط وتشغيل المثال باستخدام ؛ بيثون أبسط
الخطوة 3: تثبيت Adafruit.IO Python Module
كما ذكرنا خلال المقدمات ، سننشر قراءات من مستشعرات الجهد والتيار إلى Adafruit IO Cloud التي يمكن مشاهدتها من جميع أنحاء العالم أو الاتصال بـ IFTTT لأداء أي إجراءات تريدها.
تحتوي وحدة Adafruit.IO python على إجراءات فرعية ووظائف سنستفيد منها ، لتدفق البيانات بسهولة إلى السحابة. اتبع الخطوات أدناه لتثبيت الوحدة.
- قم بتشغيل cd ~ للعودة إلى الدليل الرئيسي.
- بعد ذلك ، قم بتشغيل الأمر ؛ sudo pip3 تثبيت adafruit-io . يجب تثبيت وحدة Adafruit IO python.
الخطوة 4: قم بإعداد حساب Adafruit.io الخاص بك
لاستخدام Adafruit IO ، ستحتاج بالتأكيد أولاً إلى إنشاء حساب والحصول على مفتاح AIO. سيتم استخدام مفتاح AIO هذا مع اسم المستخدم الخاص بك بواسطة برنامج Python النصي للوصول إلى خدمة Adafruit IO السحابية. لإنشاء حساب ، قم بزيارة ؛ https://io.adafruit.com/ ، انقر فوق زر البدء مجانًا واملأ جميع المعلمات المطلوبة. مع اكتمال التسجيل ، يجب أن ترى زر عرض مفتاح AIO على يمين صفحتك الرئيسية.
انقر فوقه للحصول على مفتاح AIO الخاص بك.
مع نسخ المفتاح ، نحن على استعداد للذهاب. ومع ذلك ، لتسهيل عملية إرسال البيانات إلى الخدمة السحابية ، يمكنك أيضًا إنشاء الخلاصات التي سيتم إرسال البيانات إليها. (يمكن العثور على مزيد من المعلومات حول موجز AIO هنا). نظرًا لأننا سنرسل بشكل أساسي استهلاك الطاقة ، فسننشئ موجزًا للطاقة. لإنشاء موجز ويب ، انقر فوق "موجز ويب" أعلى صفحة AIO وانقر فوق إضافة موجز جديد.
أعطه أي اسم تريده ولكن لتبسيط الأمور ، سأطلق عليه اسم استهلاك الطاقة. يمكنك أيضًا أن تقرر إنشاء موجزات للجهد والتيار وتكييف الكود لنشر البيانات عليها.
مع وضع كل هذا في مكانه الصحيح ، نحن الآن جاهزون لبدء بناء المشروع.
مخطط حلبة عداد الطاقة Pi
تعتبر المخططات الخاصة بمشروع Raspberry Pi Energy Monitor معقدة نسبيًا وتتضمن التوصيل بجهد تيار متردد كما ذكرنا سابقًا ، يرجى التأكد من اتخاذ جميع الاحتياطات اللازمة لتجنب الصدمات الكهربائية. إذا لم تكن معتادًا على التعامل مع جهد التيار المتردد بأمان ، فدع متعة تنفيذ هذا على لوح التجارب ، دون تشغيله ، تكون مرضية.
تتضمن المخططات توصيل وحدة مستشعرات الجهد والتيار بـ ADC والتي ترسل بعد ذلك البيانات من المستشعرات إلى Raspberry Pi. لتسهيل متابعة الاتصالات ، يتم تقديم المخططات الخاصة بكل وحدة بمفردها.
مخطط الاستشعار الحالي
قم بتوصيل مكونات المستشعر الحالي كما هو موضح في المخططات أدناه.
المحول الحالي المستخدم في هذا المشروع موضح ادناه كما ترى لدينا ثلاث اسلاك منه ارضي وكوت و 3.3 فولت
مخططات استشعار الجهد
قم بتوصيل مكونات مستشعر الجهد كما هو موضح في المخططات أدناه.
معالجة مخططات وحدة
قم بتوصيل كل شيء مع ADC (ADS1115) المتصل بـ raspberry pi وإخراج مستشعرات التيار والجهد المتصلة بالطرف A0 و A1 من ADS1115 على التوالي.
تأكد من توصيل دبابيس GND لوحدتي الاستشعار بـ GND الخاص بـ ADC أو raspberry pi.
لجعل الأشياء أقل اهتزازًا ، قمت بتطبيق مستشعرات الجهد والتيار على لوح Protoboard. أيضًا ، لا يُنصح ببناء دائرة تيار متردد على اللوح. إذا فعلت الشيء نفسه ، فقد يبدو الإعداد النهائي الخاص بك مثل الصورة أدناه ؛
مع اكتمال الاتصالات ، نحن الآن جاهزون لكتابة رمز المشروع.
كود Python لمقياس الطاقة Pi
كالعادة مع مشاريع raspberry pi الخاصة بنا ، سنقوم بتطوير الكود الخاص بالمشروع باستخدام Python. انقر فوق رمز raspberry pi على سطح المكتب ، وحدد البرمجة وابدأ تشغيل أي إصدار من Python تريد استخدامه. سأستخدم Python 3 وقد لا تعمل بعض الوظائف في Python 3 مع Python 2.7. لذلك قد تكون هناك حاجة لإجراء بعض التغييرات المهمة على الكود إذا كنت تريد استخدام python 2.7. سأقوم بتفصيل الكود إلى مقتطفات صغيرة ومشاركة الكود الكامل معك في النهاية.
جاهز؟ رائع.
الخوارزمية وراء الكود بسيطة. يستعلم نص Python الخاص بنا عن ADS1115 (فوق I2C) لقراءات الجهد والتيار. يتم تلقي القيمة التناظرية المستلمة وأخذ عينات منها ويتم الحصول على القيمة التربيعية للمتوسط الجذري للجهد والتيار. يتم حساب الطاقة بالكيلوواط وإرسالها إلى تغذية Adafruit IO بعد فترات زمنية محددة.
نبدأ البرنامج النصي بتضمين جميع المكتبات التي سنستخدمها. يتضمن ذلك مكتبات مدمجة مثل مكتبة الوقت والرياضيات والمكتبات الأخرى التي قمنا بتثبيتها مسبقًا.
وقت الاستيراد استيراد Adafruit_ADS1x15 من Adafruit_IO import * import math
بعد ذلك ، نقوم بإنشاء مثيل لمكتبة ADS1115 والذي سيتم استخدامه لمعالجة ADC المادية من الآن فصاعدًا.
# إنشاء مثيل ADS1115 ADC (16 بت).. adc1 = Adafruit_ADS1x15.ADS1115 ()
بعد ذلك ، أدخل اسم مستخدم adafruit IO ومفتاح "AIO".
username = 'أدخل اسم المستخدم الخاص بك بين هذه الاقتباسات' AIO_KEY = 'your aio key' aio = Client (username، AIO_KEY)
يرجى الاحتفاظ بالمفتاح آمنًا. يمكن استخدامه للوصول إلى حساب adafruit io الخاص بك دون إذنك.
بعد ذلك ، نقوم بإنشاء بعض المتغيرات مثل كسب ADC ، وعدد العينات التي نريدها وتعيين التقريب وهو بالتأكيد ليس بالغ الأهمية.
GAIN = 1 # انظر وثائق ads1015 / 1115 للقيم المحتملة. العينات = 200 # عدد العينات المأخوذة من أماكن ads1115 = int (2) # مجموعة التقريب
بعد ذلك ، نقوم بإنشاء حلقة while لمراقبة التيار والجهد وإرسال البيانات إلى Adafruit io على فترات. تبدأ الحلقة while بوضع جميع المتغيرات على صفر.
بينما صحيح: # إعادة تعيين المتغيرات العد = int (0) datai = datav = maxIValue = 0 # القيمة الحالية القصوى ضمن العينة maxValue = 0 # قيمة الجهد الأقصى ضمن العينة IrmsA0 = 0 # متوسط الجذر التربيعي الحالي VrmsA1 = 0 # جذر متوسط الجهد التربيعي أمبير A0 = 0 # فولت الذروة الحالية A1 = 0 # كيلووات الجهد = تعويم (0)
نظرًا لأننا نعمل مع دوائر التيار المتردد ، فإن ناتج SCT-013 ومستشعر الجهد سيكون موجة جيبية ، وبالتالي من أجل حساب التيار والجهد من الموجة الجيبية ، سنحتاج إلى الحصول على قيم الذروة. للحصول على قيم الذروة ، سنأخذ عينات من الجهد والتيار (200 عينة) ، ونجد أعلى القيم (قيم الذروة).
للعد في النطاق (العينات): datai.insert (العد ، (abs (adc1.read_adc (0 ، الكسب = GAIN)))) datav.insert (العد ، (abs (adc1.read_adc (1 ، كسب = GAIN)))) # معرفة ما إذا كان لديك طباعة maxValue جديدة (datai) إذا كانت datai> maxIValue: maxIValue = datai if datav> maxVValue: maxVValue = datav
بعد ذلك ، نقوم بتوحيد القيم عن طريق التحويل من قيم ADC إلى القيمة الفعلية وبعد ذلك نستخدم معادلة الجذر التربيعي لإيجاد جهد RMS والتيار.
# حساب التيار باستخدام البيانات التي تم أخذ عينات منها # يتم معايرة sct-013 المستخدمة لإخراج 1000mV @ 30A. IrmsA0 = تعويم (maxIValue / float (2047) * 30) IrmsA0 = round (IrmsA0، places) ampsA0 = IrmsA0 / math.sqrt (2) ampsA0 = round (ampsA0، places) # حساب الجهد VrmsA1 = تعويم (maxValue * 1100 / float (2047)) VrmsA1 = round (VrmsA1، places) voltsA1 = VrmsA1 / math.sqrt (2) voltsA1 = round (voltsA1 ، places) print (' VoltsA1 ، places) print (' Volts : {0} '. format (voltsA1)) print (' Current: {0} '. تنسيق (ampsA0))
مع القيام بذلك ، يتم حساب القوة ونشر البيانات على adafruit.io
#calculate power power = round (ampsA0 * voltsA1، places) print ('Power: {0}'. format (power)) #post data to adafruit.io EnergyUsage = aio.feeds ('EnergyUsage') aio.send_data (' الطاقة ، الطاقة)
بالنسبة للحسابات المجانية ، تطلب adafruit أن يكون هناك بعض التأخير بين الطلبات أو تحميل البيانات.
# انتظر قبل تكرار تكرار الوقت. (0)
و رمز كاملة للمشروع هو متاح في أسفل هذه الصفحة
تجريبي
مع اكتمال الكود ، احفظه واضغط على زر التشغيل في Python IDE. قبل ذلك ، تأكد من أن Pi متصل بالإنترنت عبر WiFi أو LAN ، وأن مفتاح aio واسم المستخدم الخاصين بك صحيحان. بعد فترة ، يجب أن تبدأ في رؤية بيانات الطاقة (الطاقة) معروضة في الخلاصة على Adafruit.io. كان إعداد أجهزتي أثناء العرض التوضيحي هكذا
لأخذ الأمور إلى أبعد من ذلك ، يمكنك إنشاء لوحة معلومات على adafruit.io وإضافة مكون رسم بياني حتى تتمكن من الحصول على عرض رسومي للبيانات كما هو موضح في الصورة أدناه.
هذا كل شيء يا رفاق ، يمكنك الآن مراقبة استهلاكك للطاقة من أي مكان في العالم. من المهم ملاحظة أنه يوجد بالتأكيد الكثير من عمليات الضبط والمعايرة التي يتعين القيام بها لتحويلها إلى حل دقيق حقًا ، لكنني أعتقد أن هذا يمنحك كل ما تحتاجه تقريبًا للمتابعة.
لا تتردد في طرح أسئلة حول المشروع عبر قسم التعليقات. سأحاول الإجابة على أكبر عدد ممكن. حتى المرة القادمة.