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

سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3: 7 Steps
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3: 7 Steps

فيديو: سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3: 7 Steps

فيديو: سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3: 7 Steps
فيديو: Scentroid's CTAir Continuous Urban Air Quality Monitor Seminar A 12.08.2020 (Subtitled) 2024, شهر نوفمبر
Anonim
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3
سهل للغاية منخفض الطاقة BLE في Arduino الجزء 2 - مراقبة درجة الحرارة / الرطوبة - Rev 3

التحديث: 23 نوفمبر 2020 - أول استبدال لبطاريتين AAA منذ 15 يناير 2019 ، أي 22 شهرًا لـ 2xAAA Alkaline التحديث: 7 أبريل 2019 - Rev 3 من lp_BLE_TempHumidity ، ويضيف مؤامرات التاريخ / الوقت ، باستخدام pfodApp V3.0.362 + ، والاختناق التلقائي عند الإرسال البيانات

التحديث: 24 مارس 2019 - المراجعة 2 من lp_BLE_TempHumidity ، ويضيف المزيد من خيارات المؤامرة و i2c_ClearBus

هذا الدليل ، جهاز مراقبة درجة حرارة منخفضة جدًا للطاقة ، هو الجزء 2 من 3.

الجزء 1 - إنشاء أجهزة BLE منخفضة الطاقة للغاية أصبح سهلاً مع أغطية Arduino لإعداد Arduino لتشفير nRF52 للأجهزة منخفضة الطاقة ووحدة البرمجة وقياس تيار الإمداد. كما يغطي أيضًا أجهزة ضبط الوقت والمقارنات المتخصصة منخفضة الطاقة والمدخلات التي تم التخلي عنها واستخدام pfodApp للاتصال بجهاز nRF52 والتحكم فيه.

الجزء 2 - جهاز مراقبة الرطوبة بدرجة حرارة منخفضة جدًا للطاقة ، هذا الجهاز ، يغطي استخدام وحدة Redbear Nano V2 ومستشعر درجة الحرارة / الرطوبة Si7021 لبناء بطارية منخفضة الطاقة / جهاز مراقبة الطاقة الشمسية. يغطي أيضًا تعديل مكتبة Si7021 لتكون منخفضة الطاقة ، وضبط جهاز BLE لتقليل استهلاكه الحالي <25uA وتصميم عرض مخصص لدرجة الحرارة / الرطوبة لهاتفك المحمول.

الجزء 3 - يغطي استبدال Redbear Nano V2 باستخدام وحدات أخرى قائمة على nRF52 بدلاً من Nano V2. وهو يغطي اختيار مكونات الإمداد ، والبناء ، وإزالة حماية برمجة رقاقة nRF52 ، واستخدام دبابيس NFC مثل GPIO العادي ، وتحديد لوحة nRF52 جديدة في Arduino.

هذه التعليمات عبارة عن تطبيق عملي للجزء الأول من بناء أجهزة BLE منخفضة الطاقة جدًا والتي أصبحت سهلة مع Arduino من خلال إنشاء جهاز مراقبة درجة الحرارة والرطوبة BLE منخفض الطاقة للغاية. ستعمل الشاشة لسنوات على Coin Cell أو 2 × بطاريات AAA ، حتى لفترة أطول بمساعدة الطاقة الشمسية. يغطي هذا البرنامج التعليمي ضبط معلمات BLE لاستهلاك منخفض للطاقة وكيفية تزويد جهازك بالطاقة من البطارية أو البطارية + الطاقة الشمسية أو الشمسية فقط.

بالإضافة إلى عرض درجة الحرارة والرطوبة الحالية ، تخزن الشاشة آخر 36 ساعة من قراءات 10 دقائق وآخر 10 أيام من قراءات الساعة. يمكن رسمها على هاتف Android الخاص بك والقيم المحفوظة في ملف السجل. لا حاجة لبرمجة Android ، يتولى pfodApp كل ذلك. يتم التحكم في شاشة Android والرسوم البيانية بالكامل بواسطة رسم Arduino الخاص بك حتى تتمكن من تخصيصه كما هو مطلوب.

يتم استخدام لوحة Redbear Nano V2 لمكون nRF52832 BLE ويتم استخدام لوحة Sparkfun Si7021 في مستشعر درجة الحرارة / الرطوبة. يتم استخدام مكتبة معدلة منخفضة الطاقة مع Si7021. تم تصميم ثنائي الفينيل متعدد الكلور صغير لعقد NanoV2 ومكونات الإمداد. ومع ذلك ، نظرًا لعدم وجود مكونات مثبتة على السطح مستخدمة ، يمكنك بسهولة بناء هذا على لوحة vero. يتم تغطية ثلاثة إصدارات من مزود الطاقة. 1) البطارية بالإضافة إلى المساعدة الشمسية ، 2) البطارية فقط ، 3) الطاقة الشمسية فقط. لا يحتوي خيار الطاقة الشمسية فقط على أي تخزين للبطارية ، وبالتالي لن يعمل إلا عندما يكون هناك بعض الضوء. يكفي وجود ضوء ساطع للغرفة أو مصباح مكتبي.

الخطوط العريضة

يتكون هذا المشروع من 4 أجزاء مستقلة نسبية: -

  1. اختيار المكونات والبناء
  2. الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
  3. قياس العرض الحالي وعمر البطارية
  4. بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط

الخطوة 1: اختيار المكون

اختيار المكونات

كما هو مذكور في الجزء 1 - الحيلة للحصول على حل منخفض الطاقة حقًا هي عدم فعل أي شيء في معظم الأوقات ، وتقليل التيار من خلال مقاومات السحب / المنسدلة الخارجية على المدخلات وعدم وجود أي مكونات إضافية. سيستخدم هذا المشروع كل هذه الحيل للحصول على حل منخفض الطاقة.

المكون nRF52832

يمكن تشغيل شريحة nRF52832 بمصدر طاقة يتراوح بين 1.7 فولت و 3.6 فولت (أقصى جهد به 3.9 فولت). هذا يعني أنه يمكنك تشغيل الشريحة مباشرة من خلية معدنية أو بطاريتين AAA. ومع ذلك ، فمن الحكمة إضافة منظم جهد لحماية الشريحة من الفولت الزائد. يأتي هذا المكون الإضافي بتكلفة طاقة ، ولكن في حالة لوحة NanoV2 ، يستهلك المنظم الموجود على اللوحة ، TLV704 ، أقل من 5.5uA كحد أقصى ، وعادة 3.4uA فقط. بالنسبة لهذا الاستخدام الإضافي الصغير للطاقة ، تحصل على حماية لما يصل إلى 24 فولت من مدخلات الإمداد.

مكون Si7021

يرسم مستشعر Si7021 نفسه عادةً <1uA عند عدم إجراء قياس ، أي في وضع الاستعداد ، وما يصل إلى 4 مللي أمبير عند نقل البيانات عبر I2C. نظرًا لأننا لا نأخذ القياس باستمرار ، فإن 4mA ليست جزءًا مهمًا من متوسط العرض الحالي. يؤدي أخذ قراءة 30 ثانية إلى إضافة أقل من 1uA إلى متوسط تيار العرض ، انظر قياسات العرض الحالية أدناه.

هناك نوعان من لوحات كسر Si7021 متاحة بسهولة. واحد من Adafruit والآخر من Sparkfun. ستخبرك نظرة سريعة على اللوحين أن لوحة Adafruit بها العديد من المكونات أكثر من لوحة Sparkfun ، لذلك ستميل إلى اختيار لوحة Sparkfun. يُظهر النظر إلى المخططات الخاصة بكل لوحة أن لوحة Sparkfun هي مجرد مستشعر مكشوف واثنين من resisotors للسحب 4k7 ، في حين أن لوحة Adafruit بها لوحة تحكم MIC5225 على متنها ، والتي عادة ما تسحب 29uA طوال الوقت. هذا مهم عندما يكون التيار الزائد لبقية الدائرة <30uA. نظرًا لأن لدينا بالفعل منظمًا لشريحة nRF52832 ، فلن تكون هناك حاجة إلى هذا المكون الإضافي ويمكن تشغيل Si7021 من مصدر الإمداد بجهد 3.3 فولت. لذلك سيستخدم هذا المشروع لوحة اندلاع Si7021 من Sparkfun.

تقليل التيار من خلال مقاومات السحب / المنسدلة الخارجية على المدخلات

مقاومات السحب 4K7 I2C ليست ذات قيمة عالية بشكل خاص وستسحب 0.7 مللي أمبير عند انخفاضها. قد تكون هذه مشكلة إذا قاموا بوضع إدخال مفتاح تم تأريضه لفترات طويلة. ومع ذلك ، في هذا المشروع ، يتم تقليل التيار من خلال هذه المقاومات باستخدام واجهة I2C بشكل غير متكرر ولفترة قصيرة فقط. في معظم الأوقات ، لا تكون خطوط I2C قيد الاستخدام وتكون عالية / ثلاثية الحالة ، لذلك لا يتدفق التيار عبر هذه المقاومات.

الخطوة الثانية: البناء

بناء
بناء
بناء
بناء
بناء
بناء

تم بناء المشروع على ثنائي الفينيل متعدد الكلور صغير ، ولكن نظرًا لعدم وجود مكونات SMD ، يمكن بناؤه بسهولة باستخدام لوحة فيرو. تم تصنيع PCB بواسطة pcbcart.com من ملفات Gerber هذه ، TempHumiditySensor_R1.zip يعد PCB غرضًا عامًا بما يكفي لاستخدامه في مشاريع BLE الأخرى.

التخطيطي هو مبين أعلاه. هنا نسخة pdf.

قائمة الاجزاء

التكلفة التقريبية لكل وحدة اعتبارًا من ديسمبر 2018 ، حوالي 62 دولارًا أمريكيًا ، باستثناء الشحن والمبرمج من الجزء الأول

  • Redbear NanoV2 ~ 17 دولارًا أمريكيًا
  • لوحة اندلاع Sparkfun Si7021 ~ 8 دولارات أمريكية
  • 2 × 53 مم × 30 مم 0.15 واط 5 فولت الخلايا الشمسية على سبيل المثال Overfly ~ 1.10 دولار أمريكي
  • 1 × PCB TempHumiditySensor_R1.zip ~ 25 دولارًا أمريكيًا مقابل 5 خصم www.pcbcart.com أو لوحة Vero (شريط نحاسي) على سبيل المثال Jaycar HP9540 ~ 5 دولارات أسترالية
  • 2 × 1N5819 الثنائيات شوتكي على سبيل المثال Digikey 1N5819FSCT-ND ~ 1 دولار أمريكي
  • 1 × 470R 0.4 واط 1٪ المقاوم على سبيل المثال Digikey BC3274CT-ND ~ 0.25 دولار أمريكي
  • 6 × 6 دبوس رأس دبابيس ذكر على سبيل المثال Sparkfun PRT-00116 ~ 1.5 دولار أمريكي
  • أنثى إلى أنثى البلوز على سبيل المثال معرف Adafruit: 1950 ~ 2 دولار أمريكي
  • 3 مم × 12 مم مسامير النايلون ، على سبيل المثال Jaycar HP0140 ~ 3 دولارات أسترالية
  • 3 مم × 12 مم نايلون المكسرات ، على سبيل المثال Jaycar HP0146 ~ 3 دولارات أسترالية
  • شريط سكوتش للتركيب الدائم Cat 4010 ، على سبيل المثال من أمازون ~ 6.6 دولار أمريكي
  • حامل بطارية AAA x 2 ، على سبيل المثال Sparkfun PRT-14219 ~ 1.5 دولار أمريكي
  • بطاريتان قلويتان AAA 750mA ، على سبيل المثال Sparkfun PRT-09274 ~ 1.0 دولار أمريكي يجب أن تدوم هذه البطاريات> عامين. بطاريات إنرجايزر القلوية ذات سعة أعلى
  • صندوق بلاستيك (ABS) 83 مم × 54 مم × 31 مم ، على سبيل المثال Jaycar HB6005 ~ 3 دولارات أسترالية
  • pfodApp ~ 10 دولارات أمريكية
  • 1 × 22 فائق التوهج 63 فولت منخفض ESR مكثف (اختياري) على سبيل المثال Jaycar RE-6342 ~ 0.5 دولار أسترالي أو Digikey P5190-ND ~ 0.25 دولار أمريكي

البناء مستقيم للأمام. يتم تثبيت حامل البطارية والخلايا الشمسية في الصندوق البلاستيكي بشريط مزدوج الوجهين شديد التحمل.

لاحظ سلك ارتباط Gnd من CLK إلى GND في الجزء النهائي. يتم تثبيت هذا بعد البرمجة لمنع الضوضاء على إدخال CLK من تشغيل شريحة nRF52 في وضع تصحيح الأخطاء الحالي العالي

الخطوة 3: الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch

الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch
الكود - مكتبة مستشعر الطاقة المنخفضة وواجهة المستخدم و Arduino Sketch

قم بتنزيل الكود المضغوط ، lp_BLE_TempHumidity_R3.zip ، وقم بفك ضغطه إلى دليل Arduino Sketches. تحتاج أيضًا إلى تثبيت مكتبة lp_So7021 من هذا الملف المضغوط وكذلك تثبيت مكتبة pfodParser.

مكتبة استشعار الطاقة المنخفضة ، lp_Si7021

يوفر كل من Adafruit و Sparkfun مكتبات دعم للوصول إلى مستشعر Si7021 ، ومع ذلك فإن هاتين المكتبتين غير مناسبتين لاستخدام طاقة منخفضة للغاية. كلاهما يستخدم تأخيرًا (25) في الكود لتأخير قراءة المستشعر أثناء أخذ القياس. كما هو مذكور في الجزء 1 ، فإن التأخير هو أمر شرير. يعمل تأخير Arduino () على إبقاء المعالج الصغير يعمل باستخدام الطاقة أثناء انتظار انتهاء المهلة. هذا يكسر القاعدة الأولى لضعف الطاقة BLE ، لا تفعل شيئًا في معظم الأوقات. تستبدل مكتبة lp_Si7021 البديلة جميع التأخيرات بـ lp_timers التي تضع المعالج الصغير في وضع السكون أثناء انتظار انتهاء المستشعر من القياس.

ما هو الفرق الذي تحدثه مكتبة lp_Si7021؟ باستخدام مكتبة دعم SparkFun Si7021 الأصلية وأخذ قراءة واحدة في الثانية دون أي مطبوعات تسلسلية ، يرسم متوسط 1.2mA. يؤدي استبدال مكتبة Sparkfun بمكتبة lp_Si7021 إلى تقليل متوسط التيار إلى ~ 10uA ، أي 100 مرة أقل. في هذا المشروع ، يكون أسرع معدل قياس هو مرة كل 30 ثانية عند توصيل الهاتف المحمول ، مما ينتج عنه متوسط تيار مستشعر أقل من 1uA. في حالة عدم وجود اتصال BLE ، يكون معدل القياس مرة واحدة كل 10 دقائق ويكون متوسط تيار إمداد المستشعر ضئيلًا.

واجهة المستخدم

أعلاه هو عرض الشاشة الرئيسية وعرض مكثف لتاريخ كل ساعة لمدة 10 أيام. يمكن تكبير المؤامرات وتحريكها في كلا الاتجاهين باستخدام إصبعين.

يتم ترميز واجهة المستخدم في مخطط Arduino ثم إرسالها إلى pfodApp على أول اتصال حيث يتم تخزينها مؤقتًا للاستخدام والتحديثات المتكررة. العرض الرسومي مبني من رسم الأوليات. راجع عناصر تحكم Arduino المخصصة لنظام Android للحصول على برنامج تعليمي حول كيفية إنشاء عناصر التحكم الخاصة بك. تحتوي ملفات Thermometer و RHGauge و Button على أوامر الرسم لتلك العناصر.

ملاحظة: لا شيء إذا كانت هذه الشاشة مضمنة في pfodApp. يتم التحكم في الشاشة بالكامل بواسطة الكود الموجود في رسم Arduino الخاص بك

تحدد طريقة sendDrawing_z () في رسم lp_BLE_TempHumidity_R3.ino واجهة المستخدم.

sendDrawing_z () باطلة {dwgs.start (50، 60، dwgs. WHITE) ، // الخلفية الافتراضية إلى WHITE إذا تم حذفها ، أي البدء (50 ، 60) ؛ parser.sendRefreshAndVersion (30000) ، // إعادة طلب dwg كل 30 ثانية. يتم تجاهل ذلك إذا لم يتم تعيين إصدار المحلل اللغوي // أزرار اللمس أعلاه لفرض تحديثات العرض dwgs.touchZone (). cmd ('u'). size (50، 39).send ()؛ dwgs.pushZero (35، 22، 1.5) ؛ // حرك صفرًا إلى مركز dwg إلى 35 ، 22 وقياسه بمقدار 1.5 مرة rhGauge.draw () ؛ // رسم عنصر التحكم dwgs.popZero () ؛ dwgs.pushZero (18 ، 33) ، // حرك صفرًا إلى مركز dwg إلى 18 ، 33 مقياس هو 1 (افتراضي) ميزان الحرارة.draw () ؛ // رسم عنصر التحكم dwgs.popZero () ؛

dwgs.pushZero (12.5، 43، 0.7) ؛ // حرك صفرًا إلى مركز dwg إلى 12.5 ، 43 والقياس بمقدار 0.7

hrs8PlotButton.draw () ، // رسم عنصر التحكم dwgs.popZero () ؛ dwgs.pushZero (37.5، 43، 0.7) ؛ // حرك صفرًا إلى مركز dwg إلى 37.5 ، 43 والقياس بمقدار 0.7 يومًا 1PlotButton.draw () ؛ // رسم عنصر التحكم dwgs.popZero () ؛

dwgs.pushZero (12.5، 54، 0.7) ؛ // حرك صفرًا إلى مركز dwg إلى 12.5 ، 54 والقياس بمقدار 0.7

days3PlotButton.draw () ، // رسم عنصر التحكم dwgs.popZero () ؛ dwgs.pushZero (37.5، 54، 0.7) ؛ // حرك صفرًا إلى مركز dwg إلى 37.5 ، 54 وقياسه بمقدار 0.7 يومًا 10PlotButton.draw () ؛ // رسم عنصر التحكم dwgs.popZero () ؛ dwgs.end () ، }

أوامر pushZero تغير الأصل والقياس لرسم المكون التالي. يتيح لك ذلك تغيير حجم وموضع الأزرار والمقاييس بسهولة.

في الاتصال الأول ، يستغرق العرض الأولي 5 أو 6 ثوانٍ لتحميل ~ 800 بايت التي تحدد الشاشة. يقوم pfodApp بتخزين الشاشة مؤقتًا ، لذا فإن التحديثات المستقبلية تحتاج فقط إلى إرسال التغييرات وقياس المواضع والقراءات. تستغرق هذه التحديثات بضع ثوانٍ فقط لإرسال 128 بايت تحتاج إلى تحديث العرض.

هناك خمس (5) مناطق لمس نشطة محددة في الشاشة. يحتوي كل زر على زر محدد في طريقة الرسم () الخاصة به ، بحيث يمكنك النقر فوقه لفتح الرسم البياني الخاص به ، ويتم تكوين النصف العلوي من الشاشة ليكون منطقة اللمس الثالثة

dwgs.touchZone (). cmd ('u'). size (50، 39).send ()؛

عند النقر فوق الشاشة فوق الأزرار ، يتم إرسال الأمر "u" dwg إلى الرسم التخطيطي الخاص بك لفرض قياس جديد وتحديث الشاشة. عادةً عند الاتصال ، تحدث التحديثات كل 30 ثانية فقط. كل نقرة أو تحديث للرسم يفرض قياسًا جديدًا. تم تأخير الاستجابة من مخطط Arduino إلى pfodApp حتى اكتمال القياس الجديد (حوالي 25 مللي ثانية) بحيث يمكن إرسال أحدث قيمة في التحديث.

رسم اردوينو

رسم Arduino ، lp_BLE_TempHumidity_R3.ino ، هو نسخة محسنة من مثال الرسم المستخدم في الجزء 1. يستبدل الرسم lp_BLE_TempHumidity_R3.ino القائمة بالرسم الموضح أعلاه. كما أنه يضيف دعم المستشعر lp_Si7021 ومصفوفات البيانات لتخزين 10 دقائق وقياسات تاريخية كل ساعة.

التعقيد الرئيسي في رسم lp_BLE_TempHumidity_R3.ino هو التعامل مع إرسال بيانات المؤامرة. أثناء إجراء القياسات ، يتعامل readRHResults () مع تجميع النتائج وحفظها في المصفوفات التاريخية. يبلغ طول المصفوفات 120 ، ولكن عند إرسال البيانات ، تكون أول 30 نقطة بيانات في فترة زمنية أدق.

هناك بعض النقاط التي يجب مراعاتها عند إرسال 200 نقطة فردية لعرضها: -

  1. يبلغ طول كل نقطة بيانات حوالي 25 بايت بتنسيق نص CSV. إذن 150 نقطة تساوي 3750 بايت من البيانات. تحتوي الفئة lp_BLESerial على مخزن مؤقت 1536 بايت ، 1024 منه كبير بما يكفي لأكبر رسالة pfod. 512 بايت الأخرى محجوزة لإرسال البيانات. بمجرد أن تملأ البيانات التاريخية 512 بايت ، يتأخر إرسال المزيد من البيانات حتى توجد مساحة في المخزن المؤقت.
  2. لتجنب تباطؤ بيانات قطعة الأرض في تحديثات الشاشة الرئيسية ، يتم إرسال بيانات قطعة الأرض فقط أثناء عرض شاشة المؤامرة. بمجرد أن يعود المستخدم إلى الشاشة الرئيسية ، يتم إيقاف إرسال بيانات قطعة الأرض مؤقتًا. يتم استئناف إرسال بيانات قطعة الأرض عندما ينقر المستخدم فوق زر قطعة الأرض لعرض قطعة الأرض مرة أخرى.
  3. تبدأ المؤامرات التاريخية من 0 (الآن) وتعود بالزمن إلى الوراء. إذا لم يكن هناك قياس جديد منذ عرض آخر قطعة أرض ، فسيتم عرض البيانات السابقة التي تم تنزيلها بالفعل مرة أخرى على الفور. إذا كان هناك قياس جديد ، فسيتم إضافته إلى بيانات الرسم السابقة.
  4. عند تشغيل الشاشة لأول مرة ، لا توجد قراءات تاريخية ويتم تخزين 0 في المصفوفات كقراءة غير صالحة. عندما يتم عرض المؤامرة ، يتم تخطي القراءات غير الصالحة فقط ، مما ينتج عنه مخطط أقصر.

مئوية وفهرنهايت

يعرض رسم lp_BLE_TempHumidity_R3.ino البيانات ويرسمها بالدرجة المئوية. لتحويل النتائج إلى فهرنهايت ، استبدل كل تكرارات

parser.print (sensor. Temp_RawToFloat (..

مع

parser.print (sensor. CtoF (sensor. Temp_RawToFloat (…

واستبدل رمز unicode degC في Octal / 342 / 204 / 203 برمز degF / 342 / 204 / 211

سيعرض pfodApp أي Unicode يمكنك عرضه على الهاتف المحمول.

راجع استخدام أحرف غير ASCII في Arduino لمزيد من التفاصيل. قم أيضًا بتغيير إعدادات MIN_C و MAX_C في Thermometer.h. أخيرًا ، اضبط حدود قطعة الأرض كما يحلو لك ، على سبيل المثال تغيير | درجة الحرارة C ~ 32 ~ 8 ~ درجة مئوية |

ليقول

| درجة الحرارة F ~ 90 ~ 14 ~ درجة فهرنهايت |

الخطوة 4: قياس تيار العرض

قياس تيار العرض
قياس تيار العرض

باستخدام مكتبة lp_Si7021 ، حتى أخذ قياس درجة الحرارة / الرطوبة كل 10 ثوانٍ يساهم فقط ~ 1uA في متوسط تيار العرض ، وبالتالي فإن العامل الرئيسي في تيار الإمداد وبالتالي عمر البطارية هو التيار المستخدم بواسطة إعلان BLE والاتصال ونقل البيانات.

قم بتوصيل لوحة درجة الحرارة / الرطوبة بالمبرمج الموضح في الجزء 1 كما هو موضح أعلاه.

مع فصل الخلايا الشمسية والبطاريات ، يتم توصيل Vin و Gnd إلى Vdd و Gnd للمبرمج (الخيوط الصفراء والخضراء) ويتم توصيل SWCLK و SWDIO بـ Clk و SIO بلوحة رأس المبرمج (الخيوط الزرقاء والوردية)

يمكنك الآن برمجة NanoV2 وقياس تيار الإمداد كما هو موضح في الجزء 1.

قم بتثبيت مكتبة Si7021 منخفضة الطاقة من هذا الملف المضغوط ، lp_Si7021.zip وتثبيت مكتبة pfodParser وفك ضغط lp_BLE_TempHumidity_R3.zip إلى دليل رسومات Arduino وبرمجة لوحة Temp / Humditiy باستخدام lp_BLE_TempHumidity_R3.ino

كما هو مذكور أعلاه ، فإن مساهمة المستشعر هي <1uA ، في المتوسط ، بأعلى معدل قياس مستخدم في هذا المشروع ، وبالتالي فإن معلمات الإعلان والاتصال BLE هي العامل المحدد لعمر البطارية.

معلمات الإعلان والاتصال BLE التي تؤثر على الاستهلاك الحالي هي: -Tx Power ، والفاصل الزمني للإعلان ، وفترات الاتصال القصوى والدقيقة ، ووقت الاستجابة التابع.

ملاحظة: باستخدام التوصيلات أعلاه ، يوجد منظمان (2) في التوريد ، أحدهما على لوحة NanoV2 عبر Vin و MAX8881 على إمداد المبرمج. هذا يعني أن تيارات العرض المقاسة ستكون ~ 5uA أعلى من الفعلي ، بسبب المنظم الثاني. القيم المذكورة أدناه هي التيارات المقاسة مطروحًا منها 5uA الإضافية.

قوة تكساس

توفر تأثيرات Tx Power التيار عند الاتصال وعند الإعلان (غير متصل). يستخدم هذا المشروع أقصى إعداد للطاقة (+4) ويوفر أفضل نطاق وأكبر مناعة ضد الضوضاء للتوصيلات الأكثر موثوقية. يمكنك استخدام طريقة lp_BLESerial setTxPower () لتغيير إعداد الطاقة. القيم الصالحة ، في زيادة الطاقة ، -40 ، -30 ، -20 ، -16 ، -12 ، -8 ، -4 ، 0 +4. يجب عليك استدعاء lp_BLESerial begin () طريقة قبل استدعاء setTxPower (). انظر الرسم lp_BLE_TempHumidity_R3.ino.

يمكنك تجربة تقليل Tx Power ، لكن الحل الوسط هو نطاق أقصر والمزيد من انقطاع الاتصال بسبب التداخل. في هذا المشروع ، يتم ترك Tx Power افتراضيًا ، +4. كما سترى أدناه ، حتى مع هذا الإعداد ، لا يزال تيار الإمداد المنخفض للغاية ممكنًا.

الفاصل الزمني للإعلان

بالنسبة إلى Tx Power ، عند عدم وجود اتصال ، تحدد الفاصل الزمني للإعلان متوسط الاستهلاك الحالي. النطاق الموصى به هو 500 إلى 1000 مللي ثانية. هنا تم استخدام 2000mS. يتمثل الحل الوسط في أن فترات الإعلان الأطول تعني أن عثور هاتفك المحمول على الجهاز وإعداد الاتصال يكون أبطأ. داخليًا ، يتم تعيين فترات الإعلان بمضاعفات 0.625 مللي ثانية في النطاق 20 مللي ثانية إلى 10.24 ثانية. تأخذ طريقة lp_BLESerial setAdvertisingInterval () mS كوسيطة ، للراحة. بالنسبة للفاصل الزمني للإعلان +4 TxPower و 2000 mS ، كان الاستهلاك الحالي ~ 18uA. بالنسبة للفاصل الزمني للإعلان 1000 مللي ثانية ، كان ~ 29uA. استخدم Rev 2 الفاصل الزمني للإعلان 2000 مللي ثانية ولكن هذا أدى إلى بطء الاتصالات. تم تغيير Rev 3 إلى الفاصل الزمني للإعلان 1000mS لجعل الاتصالات أسرع.

فترات الاتصال القصوى والدقيقة

بمجرد إنشاء الاتصال ، يحدد الفاصل الزمني للاتصال عدد مرات اتصال الهاتف المحمول بالجهاز. يتيح لك lp_BLESerial setConnectionInterval () ضبط الحد الأقصى والحد الأدنى المقترحين ، ومع ذلك يتحكم الهاتف المحمول في فاصل الاتصال الفعلي. من أجل الراحة ، تكون الوسيطات الخاصة بـ setConnectionInterval () في مللي ثانية ، ولكن داخليًا تكون فترات الاتصال في مضاعفات 1.25 مللي ثانية ، في النطاق 7.5 مللي ثانية إلى 4 ثوانٍ.

الإعداد الافتراضي هو setConnectionInterval (100 ، 150) أي 100 مللي ثانية بحد أقصى 150 مللي ثانية. تؤدي زيادة هذه القيم إلى تقليل تيار العرض أثناء الاتصال ، ولكن الحل الوسط هو إرسال أبطأ للبيانات. يستغرق كل تحديث للشاشة حوالي 7 رسائل BLE ، بينما تستغرق القياسات 36 ساعة كاملة من 10 دقائق حوالي 170 رسالة BLE. لذا فإن زيادة فترات الاتصال تؤدي إلى إبطاء تحديثات الشاشة وعرض المخطط.

تحتوي فئة lp_BLESerial على مخزن مؤقت للإرسال يبلغ 1536 بايت ويرسل فقط كتلة واحدة من 20 بايت من هذا المخزن المؤقت ، كل فاصل اتصال أقصى لمنع إغراق ارتباط BLE بالبيانات. أيضًا عند إرسال بيانات قطعة الأرض ، يرسل المخطط البيانات فقط حتى تنتظر 512 بايتًا ليتم إرسالها ، ثم يؤخر إرسال المزيد من البيانات حتى يتم إرسال بعض البيانات. هذا يتجنب الفيضانات إرسال المخزن المؤقت. يجعل هذا الاختناق من عمليات الإرسال نقل البيانات إلى الهاتف المحمول موثوقًا به ، ولكنه لم يتم تحسينه لتحقيق الحد الأقصى من خلال الوضع.

في هذا المشروع ، تم ترك فترات الاتصال كقيم افتراضية.

الكمون الرقيق

في حالة عدم وجود بيانات لإرسالها إلى الهاتف المحمول ، يمكن للجهاز اختيارياً تجاهل بعض رسائل الاتصال من الهاتف المحمول. هذا يوفر Tx Power وإمداد التيار. إعداد Slave Latency هو عدد رسائل الاتصال المطلوب تجاهلها. الافتراضي هو 0. يمكن استخدام طريقة lp_BLESerial setSlaveLatency () لتغيير هذا الإعداد.

أعطى Slave Latency 0 الافتراضي 50uA تيارًا للإمداد ، متجاهلاً تحديثات الشاشة كل 30 ثانية ، ولكن بما في ذلك رسائل keepAlive البالغة 5 ثوانٍ. أعطى ضبط زمن انتقال الرقيق على 2 متوسط تيار إمداد متصل يبلغ 25uA. أعطى إعداد وقت استجابة الرقيق 4 ~ 20uA. لا يبدو أن الإعدادات الأعلى تقلل من تيار العرض ، لذا تم استخدام إعداد Slave Latency البالغ 4.

عند الاتصال ، يطلب pfodApp كل 30 ثانية تحديثًا للعرض. هذا يفرض قياس المستشعر ويرسل البيانات مرة أخرى لتحديث العرض الرسومي. ينتج عن هذا التحديث 66uA إضافيًا لمدة 2 ثانية كل 30 ثانية. هذا متوسط 4.4uA خلال 30 ثانية. إضافة هذا إلى 20uA ، يعطي متوسط تيار إمداد توصيل ~ 25uA

الخطوة 5: إجمالي العرض الحالي وعمر البطارية

باستخدام الإعدادات أعلاه ، كما هو محدد في lp_BLE_TempHumidity_R3.ino ، إجمالي التيار عند الاتصال وتحديث الشاشة كل 30 ثانية ، حوالي 25uA. عند عدم الاتصال ، يكون حوالي 29uA.

لحساب عمر البطارية ، يُفترض سحب تيار مستمر يبلغ 29uA.

البطاريات المختلفة لها قدرات مختلفة وخصائص جهد. البطاريات المذكورة هنا هي خلية العملة المعدنية CR2032 ، وخلية العملة المعدنية CR2450 (N) ، و 2 x AAA Alkaline ، و 2 x AAA Lithium و LiPo.

ملخص البطارية

في حالة استخدام Solar Assist ، أضف 50٪ إلى أرقام عمر البطارية هذه (بافتراض 8 ساعات من الإضاءة في اليوم)

ملحوظة: مكثف 22 فائق التوهج LowESR (C1) ، بالإضافة إلى مكثف NanoV2 22 فائق التوهج الموجود على اللوحة ، يخزن تيار الخلايا الشمسية ثم يزوده بنبضات تيار TX. من ناحية أخرى ، توفر البطارية بعضًا من تيار TX. يضيف هذا 22 فائق التوهج LowESR الإضافي حوالي 10٪ إلى تيار البطارية عندما لا تكون الخلية الشمسية هي الإمداد ، ولكنه أيضًا يطيل عمر البطارية عن طريق التعويض عن المقاومة الداخلية المتزايدة للبطارية مع وصول البطارية إلى نهاية عمرها الافتراضي. تم أخذ القياسات أدناه بدون مكثف إضافي 22 فائق التوهج.

CR2032 - 235 مللي أمبير - عمر البطارية 10 شهور CR2450 (N) - 650 مللي أمبير (540 مللي أمبير) - عمر البطارية 2.3 سنة (سنتان) 2 x AAA Alkaline - 1250mAHr - عمر البطارية 3.8.yrs2 x AAA Lithium - 1200mAHr - عمر البطارية 4.7 yrsLiPo قابلة لإعادة الشحن - غير مستحسن بسبب ارتفاع التفريغ الذاتي.

CR2032

تبلغ سعة خلية العملة هذه 235 مللي أمبير (بطارية Energizer) ، والجهد الاسمي 3V والجهد المحدد للتفريغ 2V. هذا يعني أن عمر البطارية 8100 ساعة أو ~ 0.9 سنة. ومع ذلك ، تزداد مقاومة الخلية الداخلية مع وصول البطارية إلى نهاية عمرها الافتراضي ، وبالتالي قد لا تتمكن من توفير ذروة نبضات تيار Tx. يمكن استخدام مكثف إمداد أكبر لتقليل هذا التأثير ، ولكن لنفترض أن العمر الافتراضي يصل إلى 10 أشهر.

CR2450 (N)

تبلغ سعة خلية العملة هذه عادةً 620 مللي أمبير (540 مللي أمبير في الساعة لـ CR2450N) ، والجهد الاسمي 3 فولت والجهد المحدد للتفريغ 2 فولت. هذا يعني أن عمر البطارية يبلغ 22 أو 400 ساعة أو حوالي عامين و 6 أمتار (18600 ساعة ~ سنتان 2 متر لـ CR2450N). ومع ذلك ، تزداد مقاومة الخلية الداخلية مع وصول البطارية إلى نهاية عمرها الافتراضي ، وبالتالي قد لا تتمكن من توفير ذروة نبضات تيار Tx. يمكن استخدام مكثف إمداد أكبر لتقليل هذا التأثير ، ولكن لنفترض أن عمر 2 سنة و 4 أمتار (سنتان شمالاً).

ملاحظة: يحتوي الإصدار CR2450N على شفة أكثر سمكًا مما يساعد على منع التثبيت غير الصحيح في حامل CR2450N. يمكنك إدخال خلية CR2450N و CR2450 في حامل CR2450 ولكن لا يمكنك إدراج خلية CR2450 في حامل CR2450N

عدد 2 خلايا قلوية AAA

تبلغ سعة هذه البطاريات حوالي 1250 مللي أمبير (بطارية Energizer) للتيارات المنخفضة جدًا ، والجهد الاسمي 2x1.5V = 3V والجهد المحدد للتفريغ 2x0.8V = 1.6V. لكن جهد التفريغ المحدد هذا أقل من جهد التشغيل لمستشعر Si7021 (1.9 فولت) لذلك لا يمكن استخدام البطارية إلا حتى 1 فولت لكل منهما. هذا يقلل من السعة بحوالي 10٪ إلى 15٪ أي ~ 1000 مللي أمبير.

هذا يعني أن عمر البطارية يبلغ 34 أو 500 ساعة أو حوالي 4 سنوات. ومع ذلك ، تزداد مقاومة الخلية الداخلية مع وصول البطارية إلى نهاية عمرها الافتراضي ، وبالتالي قد لا تتمكن من توفير ذروة نبضات تيار Tx. يمكن استخدام مكثف إمداد أكبر لتقليل هذا التأثير ، ولكن لنفترض أن عمر 3 سنوات و 10 أمتار. ملحوظة تتمتع البطاريات القلوية بتفريغ ذاتي من 2٪ إلى 3٪ سنويًا.

2 × خلايا ليثيوم AAA

تبلغ سعة هذه البطاريات حوالي 1200 مللي أمبير (بطارية Energizer) ، والجهد الاسمي 2x1.7V = 3.4V ، في التيارات المنخفضة ، والجهد المفرغ 2x1.4V = 2.4V. هذا يعني أن عمر البطارية يبلغ 41 أو 400 ساعة أو 4 سنوات و 8 أمتار.

بطارية LiPo قابلة لإعادة الشحن

تأتي هذه البطاريات بسعات مختلفة من 100 مللي أمبير إلى 2000 مللي أمبير ، بصيغ مسطحة ، وبجهد مشحون يبلغ 4.2 فولت وجهد تفريغ> 2.7 فولت. ومع ذلك ، فإنها تتمتع بتفريغ ذاتي مرتفع بنسبة 2٪ -3٪ / شهرًا (أي 24٪ إلى 36٪ سنويًا) وبالتالي فهي ليست مناسبة لهذا التطبيق مثل البطاريات الأخرى.

الخطوة 6: بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط

بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط
بدائل الإمداد - المساعدة الشمسية ، البطارية فقط ، الطاقة الشمسية فقط

بطارية بالإضافة إلى مساعد الطاقة الشمسية

يستخدم البناء أعلاه مصدر Battery plus Solar Assist. عندما تولد الألواح الشمسية جهدًا أكبر من جهد البطارية ، فإن الخلايا الشمسية ستعمل على تشغيل الشاشة ، وبالتالي إطالة عمر البطارية. عادة يمكن إطالة عمر البطارية بنسبة 50٪ أخرى.

الألواح الشمسية المستخدمة صغيرة ، 50 مم × 30 مم ، رخيصة ، ~ 0.50 دولار ، ومنخفضة الطاقة. إنها ألواح 5V اسمياً ، ولكنها تحتاج إلى ضوء الشمس الساطع المباشر الكامل لتوليد 5V. في هذا المشروع ، تم توصيل لوحتين في سلسلة بحيث يكون وضع الشاشة بالقرب من النافذة بعيدًا عن أشعة الشمس المباشرة كافياً لاستبدال طاقة البطارية. حتى الغرفة المضاءة جيدًا ، أو المصباح المكتبي ، يكفي للخلايا الشمسية لتوليد> 3.3 فولت عند> 33uA والاستيلاء على البطارية.

تم إنشاء لوحة اختبار بسيطة لتحديد مكان وضع مراقب درجة الحرارة / الرطوبة بعيدًا عن الشمس ولا يزال يعمل بالطاقة الشمسية. كما ترون من الصورة أعلاه ، فإن اللوحين المتصلين بمقاوم 100 كيلو ينتج 5.64 فولت عبر 100 كيلو ، أي 56uA الحالي عند 5.64 فولت. هذا أكثر من كافٍ لتولي تشغيل الشاشة من البطارية. أي قراءة للجهد أعلى من جهد البطارية الاسمي 3 فولت يعني أن الخلايا الشمسية ستعمل على تشغيل الشاشة بدلاً من البطارية.

يقوم الثنائيان الموجودان في دائرة مراقبة درجة الحرارة والرطوبة بعزل الخلايا الشمسية والبطاريات عن بعضها البعض والحماية من توصيلها في قطبية عكسية. يحمي المقاوم سلسلة 10V 1W و 470R منظم NanoV2 الموجود على اللوحة من الجهد الزائد من خليتين شمسيتين في الشمس الكاملة ، خاصة إذا تم استخدام خلايا 12V بدلاً من خلايا 5V. في التشغيل العادي عند <5V ، فإن زينر 10 فولت يرسم فقط ~ 1uA.

البطارية فقط

بالنسبة لإمداد البطارية فقط ، ما عليك سوى حذف R1 و D1 و D3 والخلايا الشمسية. يمكنك أيضًا استبدال D1 بقطعة من الأسلاك إذا كنت لا تريد حماية قطبية عكسية.

الطاقة الشمسية فقط

يتطلب تشغيل الشاشة من الخلايا الشمسية فقط ، بدون بطارية ، دائرة إمداد طاقة مختلفة. تكمن المشكلة في أنه بينما تعمل الشاشة على 29uA ، عند تشغيل الطاقة ، فإن nRF52 يرسم حوالي 5 مللي أمبير لمدة 0.32 ثانية. تعمل الدائرة الموضحة أعلاه (إصدار pdf) على إيقاف تشغيل منظم MAX8881 حتى يتم شحن مكثفات الإدخال ، 2 × 1000 فائق التوهج ، حتى 4.04 فولت. ثم يصدر MAX6457 إدخال MAX8881 SHDN لتشغيل nRF52 (NanoV2) توفر المكثفات 2 × 1000 فائق التوهج تيار بدء التشغيل الضروري.

يتيح ذلك للشاشة تشغيلها بمجرد توفر طاقة شمسية كافية ، مما يجعلها تعمل عند 29uA.

الخطوة 7: الخاتمة

قدم هذا البرنامج التعليمي جهاز مراقبة درجة الحرارة الذي يعمل بالبطارية / بالطاقة الشمسية كمثال على مشروع BLE منخفض الطاقة للغاية في Arduino لشريحة nRF52832. تيارات العرض ~ 29uA حيث يتم تحقيق ذلك عن طريق ضبط معلمات الاتصال. نتج عن ذلك عمر بطارية خلية عملة CR2032 يتجاوز 10 أشهر. يعد أطول لخلايا وبطاريات عملة ذات سعة أكبر. تؤدي إضافة خليتين شمسيتين رخيصتين إلى إطالة عمر البطارية بسهولة بنسبة 50٪ أو أكثر. يكفي ضوء الغرفة الساطع أو المصباح المكتبي لتشغيل الشاشة من الخلايا الشمسية.

تم تقديم دائرة طاقة خاصة للسماح بتشغيل الشاشة من خلايا شمسية منخفضة السعة فقط.

يتيح لك pfodDesigner المجاني تصميم القوائم / القوائم الفرعية ، والتخطيط مقابل التاريخ / الوقت وتسجيل البيانات ثم إنشاء رسم Arduino منخفض الطاقة لك. هنا تم ترميز واجهة مخصصة باستخدام أساسيات رسم pfodApp. يعرض الاتصال بـ pfodApp واجهة المستخدم ويقوم بتحديث القراءات أثناء استخدام الشاشة ~ 29uA

لا حاجة لبرمجة أندرويد. يعالج pfodApp كل ذلك.

موصى به: