مرة أخرى حول 433 MHz أجهزة الإرسال والاستقبال

اكتسبت أبسط مجموعة من جهاز استقبال وجهاز إرسال ISM 433 MHz شعبية مستحقة بين محبي الإلكترونيات. المجموعات رخيصة (حتى في Chip-Deep يمكنك شرائها مقابل 300 روبل ، وعلى Ali ، كما يقولون ، عمومًا مقابل خمسين دولارًا) ، فهي بسيطة وموثوقة. بالإضافة إلى ذلك (والتي ربما لا تشك في أنها) ، هذه هي الطريقة الأكثر انتشارًا واختراقًا لتبادل البيانات اللاسلكية - إشارة عند تردد 433 ميجاهرتز تمر بشكل أفضل بكثير من خلال العقبات وتعمل على مسافة أبعد من نطاق 2.4 غيغاهرتز الشهير (433 يتم تأجيل MHz تمامًا بجدار نصف متر من الخرسانة ، كما أن شبكة Wi-Fi تنفد بالفعل بمقدار 10 سم). أعترف أنه ظهر مؤخرًا وحدات MBee-868كونها مجهزة بهوائي (اتجاهي) مناسب ، فإنها "تطلق" المزيد ، ولكنها على الأقل ذات حجم أكبر وأكثر صعوبة في الاتصال وتتطلب إدارة موفرة للطاقة وتكوينًا مسبقًا. بالإضافة إلى ذلك ، فإن تردد 868 ميجاهرتز يمر عبر عقبات ضعف ضعفها (على الرغم من أنه بالطبع أفضل من تردد 2.4 جيجاهرتز).



تمت كتابة الكثير حول أجهزة إرسال واستقبال 433 MHz (بما في ذلك المحور) بالطبع. ومع ذلك ، يبدو أنه لا أحد يعرف كيفية تضمين هذه المجموعة بشكل صحيح في الدائرة لسبب غريب. عندما قرأت مرة أخرى هنا أن المجموعة " أخذت مسافة 8 أمتار في خط الرؤية ، لم يكن بالإمكان إتقان العداد التاسع"، قطعت صبري. ما 8 أمتار أخرى ؟! في 40-50 كنت أعتقد ، على الرغم من أنه في الواقع ، ربما ، النطاق أكبر.

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

لدي مثل هذه المجموعة التي تعمل في البلد على مسافة حوالي 25-30 مترًا بزاوية حادة إلى الجدار الخشبي ، بحيث يكون ما يقرب من متر واحد (في المجموع) من الجدران والأقسام ، محميًا جزئيًا بعزل رقائق ، في مسار الإشارة. على مسافة أقصر بكثير ، خلف الجدار مباشرة تقريبًا ، تفقد شبكة WiFi الإشارة تمامًا. في المدينة ، تنتهي الإشارة من أحد طرفي شقة المدينة المكونة من ثلاث غرف إلى الطرف الآخر من خلال قسمين داخليين ، وكذلك من الشرفة ، حيث في خط مستقيم بين جهاز الإرسال والاستقبال ما لا يقل عن 80 سم من الطوب وقسم من الجبس. لم أستخدم أي خيارات عدة أكثر تكلفة مذكورة في المراجعة أعلاه.

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

دعونا نرى ما هي المزالق.

اتصال جهاز الإرسال


جهاز الإرسال (يطلق عليه FS1000A) ، كما نرى من الرسم البياني أدناه ، هو أبسط مولد يعتمد على مرنان 433 ميجاهرتز SAW. يتم تجميع المولد على الترانزستور Q1 ، والترانزستور Q2 ، الذي يتم على أساسه توفير البيانات الرقمية ، هو ببساطة مفتاح يربط المولد بالطاقة (إلى ناقل GND) في وجود مستوى عالٍ (وحدة منطقية) عند الإدخال. يمكن أن تكون الطاقة من 5 إلى 12 فولت ، ووفقًا للمصنعين ، كلما زادت الطاقة ، كلما زاد الاتصال.



لم ألاحظ المزايا الأساسية لزيادة التغذية كجزء من مهمتي. ومع ذلك ، لا ينبغي للمرء أن يهمل حقيقة أنه لا توجد متطلبات طاقة خاصة هنا ، ومع زيادة الجهد ، سيعمل الجهاز بشكل أفضل فقط. من السهل توصيل جهاز الإرسال مباشرة بالجهد من محول 9-12 فولت ، بطارية أو مجموعة من 6 بطاريات (دبوس Vin Arduino). باستخدام مصدر طاقة غير مستقر ، والذي يمكن أن يتجاوز 12 فولت (على سبيل المثال ، مع البطاريات) ، أقوم عادةً بفصل جهاز الإرسال من الدائرة الرئيسية باستخدام مثبت منفصل 9 فولت (يمكنك استخدام أبسط 78L09) ، ولا أرى أي فرق في التشغيل بين 9 و 12 فولت. باستخدام Uno أو Nano ، يمكنك استخدام مثبت 5 فولت المدمج لتشغيل وحدة التحكم نفسها والدوائر الأخرى (على سبيل المثال ، المستشعرات)وبالنسبة لـ Mini (خاصة استنساخها الرخيص) ، أنصحك بوضع مثبت 5 فولت منفصل ، وربطه بدبوس 5V.

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



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

اتصال المتلقي


عند شراء جهاز استقبال (قد يطلق عليه MX-RM-5V أو XD-RF-5V) ، انتبه إلى طول المحطات - لقد صادفت بطريقة أو بأخرى مجموعة كاملة مع دبابيس مختصرة ، مما تسبب في سقوط جهاز الاستقبال من موصل PBS القياسي عند أدنى تشويه ولديه كان علي أن أعلق على وجه التحديد إلى اللوحة.

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

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

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



على سبيل المثال ، المثبت من نوع LP2950-5.0 بالإضافة إلى مكثفين ضروريين له في الخيار الأرخص (عندما تكون المكثفات من السيراميك ، في النطاق 1-3 ميكروفاراد) سيضيف ستين كحد أقصى لتكلفة دائرتك. لكنني أفضل عدم التوفير: عند الإخراج ، أضع خزفًا عاديًا ، وعند الإدخال أضع إلكتروليتًا (10-100 μF) ، علاوة على ذلك ، الحالة الصلبة (البوليمر) أو التنتالوم. يمكن الاستغناء عن المكثفات الخزفية هناك وهناك ، إذا كان جهد الإدخال من 7-12 فولت يأتي من بطاريات البطارية أو من مثبت تناظري آخر. تتطلب المصادر المستقرة النبضية وأبسط المقومات غير المستقرة ترشيحًا إضافيًا. يمكنك استخدام إلكتروليت الألومنيوم الرخيص إذا وضعت سيراميك 0.1 ميكروفاراد موازية له ،من الأفضل وضع محاثة متسلسلة عند إدخال عدة كسور أو وحدات ملي جينية.

يجب تثبيت المثبت مباشرة بالقرب من جهاز الاستقبال ، ويجب أن يكون طول الموصلات في حده الأدنى. بدلاً من LP2950 ، يمكنك أن تأخذ LM2931 أو ما شابه بجهد تغذية صغير (وهذا مهم بشكل خاص إذا كانت الدائرة تعمل بالبطاريات - بالنسبة إلى LM78L05 العادي ، يجب أن يكون جهد الإدخال 7.5 على الأقل ، ويفضل 8-9 فولت).

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

في أبسط إصدار ، كهوائيات ، يمكنك القيام بقصاصات من سلك أحادي النواة بمقطع عرضي لا يقل عن 0.5 مم وطول 17 سم ± 1-3 مم. لا تستخدم أسلاك التركيب العالقة! المزيد من الهوائيات الحلزونية المدمجة معروضة للبيع ، لكنني شخصياً لم أختبر فعاليتها. يتم إغلاق طرف الهوائي لكل من جهاز الإرسال وجهاز الاستقبال في الفتحة المقابلة في زاوية اللوحة (لا تخطئ في النسخة المطورة من جهاز الإرسال - كلمة ANT أيضًا خارج المكان هناك ، انظر الشكل أعلاه).

توليد ومعالجة البيانات المرسلة


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

علاوة على ذلك ، نفترض أن جهاز الإرسال والاستقبال متصلان بـ Arduino. بالإضافة إلى VirtualWire ، فيما يتعلق بازدهار "المنازل الذكية" ، هناك العديد من الأشياء الأخرى مثل RC-Switch أو RemoteSwitch ، ولكنها تركز على مهام أخرى ، ومن الواضح أنه لا يستحق استخدامها لنقل البيانات العشوائية.

يبلغ الحد الأقصى لطول رسالة واحدة في VirtualWire 27 بايت (انظر الوثائق ). إرسال رسالة واحدة كاملة (يتم استكمالها تلقائيًا بتوقيع 0xb38 وقيمة طول الرسالة ومجموع اختباري) بالسرعة التي اخترتها وهي 1200 بت في الثانية 0.35 ثانية.

بالمناسبة ، كلما زادت سرعة الإرسال المحددة ، سيكون نطاق الإرسال أقل. من تجربة استخدام RS-232 ، من المعروف أنه مع زيادة المدى ، تنخفض سرعة الإرسال المسموح بها بشكل مضاعف: بسرعة 19200 خط يعمل دون محمية لمدة 15 مترًا ، عند 9600-150 مترًا ، وبسرعة 1200 - أكثر من كيلومتر. سيكون من المثير للاهتمام اكتشاف طبيعة هذا الاعتماد بشكل تجريبي لحالتنا ، لأن الكثير هنا يعتمد على الرياضيات المستخدمة.

تبدو تهيئة جهاز الإرسال في VirtualWire كما يلي:

. . . . .
#include <VirtualWire.h>
. . . . .
void setup() {
  vw_setup(1200); //   VirtualWire
  vw_set_tx_pin(10);   //   VirtualWire D10
. . . . .
}

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

من الناحية العملية ، من الملائم استخدام نوع السلسلة لإنشاء رسالة ، شيء من هذا القبيل:

. . . . .
//    
#define ledPin 13 //  (D13,  19 ATmega) 
char msg[13];
volatile int tmpr=0;
volatile int hum=0;
. . . . .
void loop() {
  delay(1000); // 1 c
float temperature;
float humidity;
. . . . .  //   temperature  humidity  
//       4 :
  tmpr = temperature*10+2731; //2731 =     
//    4 :
  hum = humidity*10+1000; 
//  :
  digitalWrite (ledPin,HIGH); //  —  
  String strMsg="DAH"; // - 
  strMsg+=tmpr; //  
  strMsg+=hum; // 
  strMsg.toCharArray(msg,12); //   , 12 –  
//  :
  vw_send((uint8_t *)msg, strlen(msg)); //  
  vw_wait_tx(); //   
  delay(500); // 500 
  digitalWrite (ledPin, LOW); //  —  
}

إذا كنت بحاجة إلى نقل أرقام أكثر دقة مع عدد كبير من الأرقام ، فأنت ببساطة تزيد من طول مصفوفة الرسائل. هناك حاجة إلى المتغيرات العالمية "المتطايرة" tmpr و hum إذا كنت متوسطًا في قراءات عديدة ، وإلا يمكن أيضًا إعلانها محليًا داخل وظيفة الحلقة (). تتكون الرسالة ، كما ترى ، من قيم درجة الحرارة والرطوبة المحولة ، في سلاسل ASCII المكونة من أربعة بايت لكل منها ، مسبوقة بسلسلة مكونة من ثلاثة أحرف "DAH" (يمكن أن تكون الأحرف أي أحرف أخرى من جدول ASCII). هذا توقيع سيسمح لك بتمييز هذه الرسالة من بين الرسائل الأخرى المحتملة التي ترسلها أجهزة مماثلة. لا تهمل التوقيع ، حتى إذا كنت تعتقد أن الأجهزة الأخرى القريبة ليست متوقعة في هذا النطاق ، فهي في الوقت نفسه تعمل كضمان إضافي لسلامة البيانات المستلمة.

لاحظ أيضًا أنه عند تحويل سلسلة إلى صفيف ، يجب تحديد حرف واحد أكثر من إجمالي طول الرسالة (3 + 4 + 4 = 11) ، وهذا يأخذ في الاعتبار الحرف الصفري الذي يغلق السلسلة. ويجب تحديد حجم الصفيف msg [] بهامش ويمكن أن يكون أي حجم ، في هذه الحالة من 13 إلى 27 بايت. عند النقل ، سيستمر إرساله تمامًا مثلما سترجع الدالة strlen (msg) ، أي 11 بايت + حرف فارغ.

في الجزء المستقبل ، يجب تحليل الصفيف الناتج من رموز ASCII. ولكن عليك أولاً قبولها. لتهيئة الاستقبال ، يتم تنفيذ الإجراءات التالية:

#include <VirtualWire.h>
char str[5];     ASCII  
  uint8_t buf [VW_MAX_MESSAGE_LEN];  //    
  uint8_t buflen = VW_MAX_MESSAGE_LEN;  // max   
. . . . .

void setup() {
  vw_set_rx_pin(2); //D2   VirtualWire
  vw_setup(1200); //   VirtualWire
. . . . .
} 

في الواقع تقنية تحليل خط ما هي:

void loop() {
  vw_rx_start();  //  
  buflen = VW_MAX_MESSAGE_LEN; //    
 if (vw_have_message()) { // 
 if (vw_get_message(buf, &buflen)) //   
  {
    vw_rx_stop(); //   :
        for (byte i=0; i<3; i++)  //    
                str[i]= buf[i]; // 
                str[3]='\0';
      if ((str[0]=='D')&&(str[1]=='A')&&(str[2]=='H')) {
// ,  
       for (byte i=3;i<7;i++)  //    
                str[i-3]= buf[i]; //    
      int tmpr=atoi(str); //   
      tmpr=tmpr-2731; // 2731,     
. . . . .//    10    float,  
. . . . . //    -
// :
      for (byte i=7;i<11;i++)  //    
                str[i-7]= buf[i]; //    
      int hh = atoi(str); //   
      hh=(hh-1000)/10;
      if (hh>99) hh=99; //   %,  
. . . . . // -
   } //end   DAT
  } //end  
 } // 
} // end loop

آمل أن يكون لديك الآن عدد أقل من الأسئلة حول استخدام هذه الأجهزة الرخيصة وسهلة الاستخدام.

All Articles