انتقل إلى المحتوى

الفيزياء والتكنولوجيا

نعلم أن الكثير منكم يحب العبث. لذا، للطلاب المهتمين والمتحمسين، إليكم المزيد من المعلومات وأمور البرمجيات DIY.

معلومات الإعلان عن BLE

ملاحظة: إذا كانت لديك اقتراحات لتحسين الشرح، فلا تتردد في إبلاغنا بالتفاصيل.

بالنسبة لأولئك الذين لديهم الجرأة لإنشاء معدات جمع البيانات الخاصة بهم، نقدم معلومات حول بروتوكول الإعلان عن BLE الذي يستخدمه BroodMinder. في الواقع، يستخدم جهازنا BroodMinder-CELL وWiFi و-SubHub الإعلان للتنصت على الأجهزة ثم نقل البيانات مباشرة إلى MyBroodMinder.com.

هناك العديد من برامج BLE Explorer الجيدة المتاحة. المفضلة لدينا هي:

  • Android وiOS – nrfConnect من Nordic Semiconductor. النسخة الخاصة بنظام Android هي الأفضل، لكننا نستخدم كلا النسختين طوال الوقت. تحتوي على ميزة رسم مستوى الإشارة بشكل جميل.
  • PC – Bluetooth LE Explorer من Microsoft. للأسف، لا يظهر هذا البرنامج بيانات الإعلان.
  • Mac – BlueSee – يبدو أن هذا التطبيق يعمل بشكل جيد ويظهر بيانات الشركات المصنعة في حزمة الإعلان.

من المحتمل أن تلاحظ أن أول 3 بايت من معرف الجهاز هي دائمًا 06:09:16 ثم يتبعها معرف الجهاز المحدد والذي يكون دائمًا نموذج:معرف:معرف. بعض الأجهزة (iOS وMac) تخفي المعرف الحقيقي، لذا نقوم أيضًا بتضمينه في حقل الاسم في حزمة الإعلان الموسعة.

تركيب حزمة الإعلان لـ BroodMinder

عند قراءة حزم الإعلان من BLE، يمكنك التعرف على منتجات BroodMinder من خلال النظر إلى ما يلي.

ستبدو البيانات شيئًا مثل هذا. – هذا المثال من الجهاز 43:30:07

GAP Scan Response Event ------------------------------------------------------------------------------------

ble_evt_gap_scan_response: rssi=-77, packet_type=0, sender=[ 07 30 43 80 07 00 ], address_type=0, bond=255, data=[ 02 01 06 02 0a 03 18 ff 8d 02 2b 15 02 00 02 21 00 d0 62 00 ff 7f 05 80 37 07 30 43 00 00 00 ]

ملاحظة: القيم هي بالأرقام العشرية ما لم يسبقها 0x

1) تحقق من علامة "بيانات الشركة المصنعة المحددة" بايت 6،7 = 0x18، 0xff

2) تحقق من IF، LLC كالشركة المصنعة بايت 8،9 = 0x8d، 0x02

بايت 10-29 هي البيانات من BroodMinder كما هو موضح أدناه. DeviceModelIFllc_1 = 0x2b (43d = مقياس) DeviceVersionMinor_1 = 0x15 (21d) DeviceVersionMajor_1 = 0x02 (FW 2.21) Elapsed_2V2 = 0x21 (33d) Temperature_2V2 = 0x62d0 WeightL_2V2 = 0x7FFF WeightR_2V2 = 0x8005

تخطيط جميع النماذج في الصفحة التالية

PRIMARY
Byte نوع القيمة المعامل
0 طول حقل الإعلان 02
1 نوع الحقل 01 قابل للتوصيل
2 القيمة 06 اكتشاف عام LE، قابل للتوصيل، جهاز وضع فردي
3 طول حقل الإعلان 02
4 نوع الحقل 0A قوة الإرسال
5 القيمة 03 القوة بالديسيبل
6 طول حقل الإعلان 24
7 نوع الحقل FF بيانات الشركة المصنعة
8 القيمة 8d IF، LLC = 0x028d، 653
9 القيمة 02 IF، LLC = 0x028d، 653
10 القيمة النموذج
11 القيمة الإصدار الفرعي
12 القيمة الإصدار الرئيسي
13 القيمة درجة الحرارة الفعلية 1 47/49/56/57/58 (SM&XLR)
14 القيمة البطارية
15 القيمة الوقت المنقضي
16 القيمة الوقت المنقضي
17 القيمة درجة الحرارة 47 وما فوق هي درجة مئوية + 5000
18 القيمة درجة الحرارة
19 القيمة درجة الحرارة الفعلية 2 47/49/56/57/58 (SM&XLR)
20 القيمة الوزن الأيسر
21 القيمة الوزن الأيسر
22 القيمة الوزن الأيمن
23 القيمة الوزن الأيمن
24 القيمة الرطوبة ستكون 0 لـ 41/47/49/52
25 القيمة WeightL2/SM_Time0 49/57/58 (XLR)
26 القيمة WeightL2/SM_Time1 49/57/58 (XLR)
27 القيمة WeightR2/SM_Time2 49/57/58 (XLR)
28 القيمة WeightR2/SM_Time3 49/57/58 (XLR)
29 القيمة الوزن الإجمالي الفعلي / حالة السرب 47/49/56/57/58 (SM&XLR)
30 القيمة الوزن الإجمالي في الوقت الحقيقي 47/49/56/57/58 (SM&XLR)
ثانوي حزمة الإعلان الموسعة
بايت النوع القيمة المعامل
0 طول حقل الإعلان 09
1 النوع 09 الاسم المحلي الكامل
2 4' اسم ASCII
3 2'
4 :'
5 0'
6 0'
7 :'
8 0'
9 0'

ملاحظة: BRM52 BroodMinder-SubHub مختلف كما هو موضح أدناه.

إليك المعادلات

if (ModelNumber == 41 | ModelNumber == 42 | ModelNumber == 43)
{
    temperatureDegreesF = e.data[byteNumAdvTemperature_2V2] +       (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
    temperatureDegreesF = (temperatureDegreesF / Math.Pow(2, 16) * 165 - 40) * 9 / 5 + 32;
}
else
{
    double temperatureDegreesC = e.data[byteNumAdvTemperature_2V2] + (e.data[byteNumAdvTemperature_2V2 + 1] << 8);
    temperatureDegreesC = (temperatureDegreesC - 5000) / 100;
    temperatureDegreesF = temperatureDegreesC * 9 / 5 + 32;
}
    humidityPercent = e.data[byteNumAdvHumidity_1V2];
if (ModelNumber == 43)
{
    weightL = e.data[byteNumAdvWeightL_2V2 + 1] * 256 + e.data[byteNumAdvWeightL_2V2 + 0] - 32767;
    weightScaledL = weightL / 100;
    weightR = e.data[byteNumAdvWeightR_2V2 + 1] * 256 + e.data[byteNumAdvWeightR_2V2 + 0] - 32767;
    weightScaledR = weightR / 100;
} 
else if (ModelNumber == 49 | ModelNumber == 57 | ModelNumber == 58)
{
    weightR = e.data[byteNumAdvWeightL_2V2 + 1] * 256 + e.data[byteNumAdvWeightL_2V2 + 0] - 32767;
    weightScaledR = weightR / 100;
    weightL = e.data[byteNumAdvWeightR_2V2 + 1] * 256 + e.data[byteNumAdvWeightR_2V2 + 0] - 32767;
    weightScaledL = weightL / 100;
    weightR2 = e.data[byteNumAdvWeightL2_2V2 + 1] * 256 + e.data[byteNumAdvWeightL2_2V2 + 0] - 32767;
    weightScaledR2 = weightR2 / 100;
    weightL2 = e.data[byteNumAdvWeightR2_2V2 + 1] * 256 + e.data[byteNumAdvWeightR2_2V2 + 0] - 32767;
    weightScaledL2 = weightL2 / 100;
}
realTimeTemperature = ((float)(e.data[byteNumAdvRealTimeTemperature2] * 256 + e.data[byteNumAdvRealTimeTemperature1] - 5000) / 100) * 9 / 5 + 32;

realTimeWeight = (float)(e.data[byteNumAdvRealTimeWeight2] * 256 + e.data[byteNumAdvRealTimeWeight1] - 32767 ) / 100 ;

SM_Time هو الوقت اليونيكس لآخر حدث درجة حرارة. Time0 = LSB، Time3 = MSB، سيكون الوقت منذ التشغيل إذا لم يتم تعيين الوقت في الجهاز بواسطة مزامنة الجهاز.

BRM-52 BroodMinder-SubHub

يقوم -SubHub بإعلانات معقدة. تتغير الإعلانات كل 5 ثوانٍ لإرسال جهاز مختلف. ستدور عبر جميع الأجهزة (بما في ذلك نفسها) ثم تعيد التكرار.

نطلق على هذه الإعلانات الوهمية. اعتمادًا على نظام التشغيل المستخدم، قد تتمكن أو لا تتمكن (مثل iOS) من رؤية معرف الجهاز الحقيقي (مثل 06:09:16:52:01:23). لهذا السبب نضع معرف الجهاز في بايت الإعلان الموسع. لاحظ أيضًا أنه من الصعب قراءة الإعلان الموسع لبعض الأجهزة، ومع ذلك بالنسبة لتلك، يمكنك عادةً قراءة معرف الجهاز الحقيقي.

يقع المعرف الوهمي في بايت 13 و19 و30. تجعل العملية كما يلي:

  1. تحديد ما إذا كان هذا هو -SubHub بواسطة المعرف (إما المعرف الحقيقي أو المعرف في الإعلان الموسع). سيكون دائمًا 52:xx:xx.
  2. إذا كان جهاز "52"، فقم بتحليل البايتات 13/19/30. على سبيل المثال، 43/01/23 سيكون 43:01:23
  3. تحليل بقية حزمة الإعلان وفقًا لنوع الجهاز بناءً على بايت النموذج (بايت 10)

سهل جدًا 😉

فيزياء BroodMinder-W

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

ملاحظة إضافية: إذا كنت تريد فقط رؤية تدفق العسل، فلا حاجة لدعم جيد. سيتعين عليك فقط تجاهل التقلبات اليومية. لا يزال بإمكانك ملاحظة التغيير العام في الوزن.

​

أ) الترتيب الافتراضي

هذا هو الترتيب الافتراضي مع الميزان في مقدمة الخلية وقطعة خشبية 2×4 كدعم مساعد (نقطة ارتكاز) في الخلف:

​ image-20230409132020233

إليك بعض الحسابات المتعلقة بالإعداد:

الافتراضات

يتم توزيع وزن الخلية W بالتساوي ومركز الثقل في منتصف الخلية. لتبسيط الأمر، لا يتم اعتبار بروز المقدمة من اللوح السفلي. يُفترض أن يكون وزن الخلية 100%.

الحسابات

image-20230409132049073

عند استخدام خشب 2×4 القياسي كدعم خلفي ومحاذاته مع الجزء الخلفي من الخلية، يمكن حساب الوزن الكلي للخلية W من الوزن على الميزان S كالتالي:

image-20230409132117498

لذا، استخدم 2.09 كعامل مقياس الخلية الافتراضي في التطبيق إذا كنت تستخدم هذا الإعداد. بالطبع، يمكن ضبط ذلك بدقة بمجرد توفر بعض قياسات الوزن.

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

image-20230409132140051

​

ب) الترتيب البديل 1

استنادًا إلى ما سبق، يجب وضع الدعم المساعد على بعد 1 بوصة من الجزء الخلفي للخلية. يُوصى بإرفاق قطعة تزيين فوق خشب 2×4. سيساعد ذلك في تحديد موضع الدعم المساعد بدقة.

image-20230409132159801

الآن لدينا ذراعي عزم متساويين E و F ويصبح عامل تصحيح ميزان الخلية 2.0 وهو الافتراضي في التطبيق المحمول. ومع ذلك، هناك بعض العوامل المؤثرة الأخرى التي يجب عدم تجاهلها. نقطة الارتكاز الحقيقية للدعم المساعد هي في أي مكان بين الجزء الخلفي للخلية والجزء الأمامي للدعم المساعد بسبب اختلاف مستوى نظام الدعم واحتمالية انحناء خشب 2×4 نفسه.

image-20230409132222112

​

ج) الترتيب البديل 2

يمكن استخدام نظام دعم مختلف له نقطة ارتكاز محددة ولا يتأثر بمحاذاة هيكل الدعم:

خذ قطعة من خشب الصنوبر أو البلوط، بسمك حوالي ¾ بوصة وعرض 2 بوصة. يجب أن تكون الطول بعرض الخلية. قم بقطع شق صغير فيه. يجب أن يكون الشق عميقًا مثل عرض شفرة المنشار. قم بإرفاق هذه القطعة بالجزء السفلي من اللوح السفلي للخلية. قم بمحاذاتها مع الجزء الخلفي. ثم ضع قطعة من زاوية الألمنيوم 1 بوصة × 1/8 بوصة 6061 أو 6063، بنفس طول الشريط الخشبي، تحتها لدعم الخلية. يستقر زاوية الألمنيوم في الشق. يجب أن يكون الارتفاع الكلي لزاوية الألمنيوم والخشب مساويًا أو أكبر قليلاً من ارتفاع الميزان لضمان أن تكون الخلية مستوية أو مائلة قليلاً للأمام لضمان تصريف المياه بعيدًا عن مدخل الخلية.

image-20230409132309128

د) التوازن الجانبي

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

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

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

​

هـ) دعم الخلية بنقاط ثلاث

image-20230409132329198

هناك طريقة لتخفيف الحاجة إلى التوازن الجانبي من خلال إدخال نظام دعم حقيقي من ثلاث نقاط. الأجزاء مشابهة لتلك المستخدمة في الترتيب 2 ولكن بدلاً من استخدام زاوية 1 بوصة، ستحتاج في هذا الترتيب إلى زاوية ¾ بوصة. يتم حفر ثقب بعمق 7/32 بوصة في منتصف اللوح بدلاً من قطع شق. يتم استخدام برغي آلة مشقوق بقطر ¼ بوصة وطول 0.5 بوصة كدعم مركزي. سيقطع البرغي خيوطه الخاصة في اللوح. يتم محاذاة الشق في رأس البرغي بحيث يمكن أن يستقر على حافة زاوية الألمنيوم في نقطة واحدة دون الانزلاق.

image-20230409132356839

هناك فجوة صغيرة بين زاوية الألمنيوم واللوح الخشبي. يجب التأكد من أن هذه الفجوة بعرض متساوي عبر الخلية. يجب أن تكون البرغي في المنتصف هو نقطة الاتصال الوحيدة. سيضمن ذلك قياس الوزن الصحيح وفي نفس الوقت يكون "شبكة الأمان" ضد سقوط الخلية إذا حدث تحميل غير متساوي مفرط، أي أثناء فحص الخلية. f) موضع ميزان BroodMinder

لقد تناول معظم ما سبق الدعم المساعد. دعونا نركز الآن على موضع الميزان.

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

image-20230409132418897

تظهر هذه الرسم البياني تأثير موضع الميزان على عامل تصحيح الميزان والخطأ الناتج عن وضع الميزان غير الدقيق. التأثير هو 5.6% لكل بوصة

image-20230409132434621

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