- التعرف على وحدة nRF24L01 RF
- التواصل مع اردوينو nRF24L01
- جانب المستقبل: اتصالات وحدة Arduino Uno nRF24L01
- جانب المرسل: اتصالات وحدة Arduino Nano nRF24L01
- العمل مع وحدة الإرسال والاستقبال اللاسلكية nRF24L01 +
- برمجة nRF24L01 لاردوينو
- التحكم في محرك سيرفو باستخدام nRF24L01 لاسلكيًا
بينما تزداد شعبية إنترنت الأشياء (IoT) ، والصناعة 4.0 ، والاتصال من آلة إلى آلة ، إلخ ، أصبحت الحاجة إلى الاتصال اللاسلكي حتمية ، مع وجود المزيد من الأجهزة / الأجهزة للتحدث مع بعضها البعض على السحابة. يستخدم المصممون العديد من أنظمة الاتصالات اللاسلكية مثل Bluetooth Low Energy (BLE 4.0) و Zigbee و ESP43 Wi-Fi Modules و 433MHz RF و Lora و nRF وما إلى ذلك ، ويعتمد اختيار الوسيط على نوع التطبيق الذي يتم استخدامه فيه.
من بين جميع الوسائط اللاسلكية الشائعة للاتصال بالشبكة المحلية هي nRF24L01. تعمل هذه الوحدات على 2.4 جيجا هرتز (نطاق ISM) بمعدل باود من 250 كيلو بت في الثانية إلى 2 ميجا بت في الثانية وهو أمر قانوني في العديد من البلدان ويمكن استخدامه في التطبيقات الصناعية والطبية. يُزعم أيضًا أنه باستخدام الهوائيات المناسبة ، يمكن لهذه الوحدات أن ترسل وتستقبل حتى مسافة 100 متر بينها. ممتع حق !!؟ لذلك ، في هذا البرنامج التعليمي سوف نتعلم المزيد عن وحدات nRF24l01 هذه وكيفية ربطها بمنصة متحكم مثل Arduino. سنشارك أيضًا بعض الحلول للمشكلات الشائعة أثناء استخدام هذه الوحدة.
التعرف على وحدة nRF24L01 RF
و حدات NRF24L01 هي جهاز الإرسال والاستقبال وحدات ، وهذا يعني كل وحدة يمكن كلا إرسال واستقبال البيانات ولكن لأنها نصف مزدوج يمكنهم إما إرسال أو استقبال البيانات في وقت واحد. تحتوي الوحدة على nRF24L01 IC العام من أشباه الموصلات الاسكندنافية المسؤولة عن إرسال واستقبال البيانات. يتصل IC باستخدام بروتوكول SPI وبالتالي يمكن توصيله بسهولة بأي متحكمات دقيقة. يصبح الأمر أسهل مع Arduino نظرًا لأن المكتبات متاحة بسهولة. يتم عرض pinouts للوحدة القياسية nRF24L01 أدناه
وحدة لديها على تشغيل التيار الكهربائي من 1.9V إلى 3.6V (عادة 3.3V) ويستهلك أقل جدا الحالية فقط 12mA أثناء التشغيل العادي الذي يجعل من بطارية فعالة، وبالتالي حتى يمكن تشغيلها على خلايا عملة واحدة. على الرغم من أن جهد التشغيل يبلغ 3.3 فولت ، فإن معظم المسامير تتحمل 5 فولت ، وبالتالي يمكن توصيلها مباشرة بوحدات تحكم دقيقة 5 فولت مثل Arduino. ميزة أخرى لاستخدام هذه الوحدات هي أن كل وحدة بها 6 خطوط أنابيب. بمعنى ، يمكن لكل وحدة التواصل مع 6 وحدات أخرى لنقل البيانات أو استقبالها. هذا يجعل الوحدة مناسبة لإنشاء شبكات نجمية أو متداخلة في تطبيقات إنترنت الأشياء. كما أن لديهم نطاقًا واسعًا من العناوين يبلغ 125 معرّفًا فريدًا ، وبالتالي في منطقة مغلقة يمكننا استخدام 125 من هذه الوحدات دون التدخل مع بعضها البعض.
التواصل مع اردوينو nRF24L01
في هذا البرنامج التعليمي سوف نتعلم كيفية ربط nRF24L01 مع Arduino من خلال التحكم في محرك المؤازرة المتصل بأحد Arduino عن طريق تغيير مقياس الجهد على Arduino الآخر. من أجل البساطة ، استخدمنا وحدة nRF24L01 كجهاز إرسال والآخر جهاز استقبال ، ولكن يمكن برمجة كل وحدة لإرسال البيانات واستلامها بشكل فردي.
يظهر أدناه مخطط الدائرة لتوصيل وحدة nRF24L01 مع Arduino. من أجل التباين ، لقد استخدمت UNO لجانب المستقبل و Nano لجانب المرسل. لكن منطق الاتصال يظل كما هو بالنسبة للوحات Arduino الأخرى مثل mini و mega أيضًا.
جانب المستقبل: اتصالات وحدة Arduino Uno nRF24L01
كما ذكرنا سابقًا ، يتصل nRF24L01 بمساعدة بروتوكول SPI. في Arduino Nano و UNO ، تُستخدم الدبابيس 11 و 12 و 13 لاتصالات SPI. ومن ثم نقوم بتوصيل دبابيس MOSI و MISO و SCK من nRF إلى المسامير 11 و 12 و 13 على التوالي. الدبابيس CE و CS قابلة للتكوين من قبل المستخدم ، لقد استخدمت الدبوس 7 و 8 هنا ، ولكن يمكنك استخدام أي دبوس عن طريق تغيير البرنامج. يتم تشغيل وحدة nRF بواسطة دبوس 3.3 فولت في Arduino ، والذي سيعمل في معظم الحالات. إذا لم يكن الأمر كذلك ، فيمكن تجربة مصدر طاقة منفصل. بصرف النظر عن توصيل nRF ، قمت أيضًا بتوصيل محرك مؤازر بالدبوس 7 وتشغيله من خلال دبوس 5V في Arduino. وبالمثل ، تظهر دائرة الإرسال أدناه.
جانب المرسل: اتصالات وحدة Arduino Nano nRF24L01
اتصالات جهاز الإرسال هي نفسها أيضًا ، بالإضافة إلى أنني استخدمت مقياس جهد متصل عبر دبوس أرضي 5 فولت من Arduino. يتم توصيل الجهد التناظري الناتج الذي سيتنوع من 0 إلى 5 فولت بالدبوس A7 من نانو. يتم تشغيل كل من الألواح من خلال منفذ USB.
العمل مع وحدة الإرسال والاستقبال اللاسلكية nRF24L01 +
ومع ذلك ، من أجل جعل nRF24L01 الخاص بنا يعمل بدون ضوضاء ، قد نرغب في التفكير في الأشياء التالية. لقد كنت أعمل على هذا nRF24L01 + لفترة طويلة وتعلمت النقاط التالية التي يمكن أن تساعدك على عدم التعرض للضرب على الحائط. يمكنك تجربة هذه عندما لا تعمل الوحدات بالطريقة العادية.
1. معظم وحدات nRF24L01 + في السوق مزيفة. المنتجات الرخيصة التي يمكننا العثور عليها على Ebay و Amazon هي الأسوأ (لا تقلق ، مع القليل من التعديلات يمكننا جعلها تعمل)
2. المشكلة الرئيسية هي مصدر الطاقة ، وليس الرمز الخاص بك. ستعمل معظم الرموز عبر الإنترنت بشكل صحيح ، ولديّ رمز عمل اختبرته شخصيًا ، أخبرني إذا كنت بحاجة إليها.
3. انتبه لأن الوحدات المطبوعة على هيئة NRF24L01 + هي في الواقع Si24Ri (نعم منتج صيني).
4. سوف تستهلك وحدات الاستنساخ والوحدات المزيفة مزيدًا من الطاقة ، وبالتالي لا تطور دائرة الطاقة الخاصة بك بناءً على ورقة بيانات nRF24L01 + ، لأن Si24Ri سيكون لديها استهلاك تيار مرتفع حوالي 250 مللي أمبير.
5. احذر من تموجات الجهد والارتفاعات الحالية ، فهذه الوحدات حساسة للغاية ويمكن أن تحترق بسهولة. (؛- (مقالي وحدتين حتى الآن)
6. تساعد إضافة مكثفات (10 فائق التوهج و 0.1 فائق التوهج) عبر Vcc و Gnd للوحدة في جعل الإمداد نقيًا وهذا يعمل مع معظم الوحدات.
لا يزال إذا كان لديك مشاكل في الإبلاغ عن قسم التعليقات أو قراءة هذا ، أو طرح أسئلتك على منتدانا.
تحقق أيضًا من مشروعنا السابق حول إنشاء غرفة دردشة باستخدام nRF24L01.
برمجة nRF24L01 لاردوينو
لقد كان من السهل جدًا استخدام هذه الوحدات مع Arduino ، نظرًا للمكتبة المتاحة بسهولة والتي أنشأها maniacbug على GitHub. انقر فوق الارتباط لتنزيل المكتبة كمجلد ZIP وإضافتها إلى Arduino IDE الخاص بك باستخدام Sketch -> Include Library -> Add.ZIP library option. بعد إضافة المكتبة يمكننا البدء في البرمجة للمشروع. علينا كتابة برنامجين ، أحدهما لجانب المرسل والآخر لجانب المستقبل. ومع ذلك ، كما قلت سابقًا ، يمكن لكل وحدة أن تعمل كجهاز إرسال واستقبال. يتم تقديم كلا البرنامجين في نهاية هذه الصفحة، في رمز جهاز الإرسال ، سيتم التعليق على خيار جهاز الاستقبال وفي برنامج جهاز الاستقبال سيتم التعليق على رمز جهاز الإرسال. يمكنك استخدامه إذا كنت تحاول مشروعًا يجب أن تعمل فيه الوحدة على حد سواء. يتم شرح عمل البرنامج أدناه.
مثل كل البرامج ، نبدأ بتضمين ملفات الرأس. نظرًا لأن nRF يستخدم بروتوكول SPI ، فقد قمنا بتضمين رأس SPI وكذلك المكتبة التي قمنا بتنزيلها للتو. يتم استخدام مكتبة المؤازرة للتحكم في محرك السيرفو.
#تضمن
السطر التالي هو السطر المهم حيث نوجه المكتبة حول دبابيس CE و CS. في مخطط دائرتنا ، قمنا بتوصيل CE بالدبوس 7 و CS بالدبوس 8 لذلك قمنا بتعيين الخط على أنه
RF24 myRadio (7 ، 8) ؛
يجب الإعلان عن جميع المتغيرات المرتبطة بمكتبة RF كهيكل متغير مركب. في هذا البرنامج ، يتم استخدام متغير msg لإرسال واستقبال البيانات من وحدة RF.
بنية الحزمة { int msg؛ } ؛ حزمة حزمة هيكلة typedef ؛ بيانات الحزمة
تحتوي كل وحدة RF على عنوان فريد يمكن من خلاله إرسال البيانات إلى الجهاز المعني. نظرًا لأن لدينا زوجًا واحدًا فقط هنا ، فقد قمنا بتعيين العنوان على صفر في كل من جهاز الإرسال والاستقبال ، ولكن إذا كان لديك وحدة متعددة ، فيمكنك تعيين المعرف على أي سلسلة فريدة مكونة من 6 أرقام.
عناوين البايت = {"0"} ؛
بعد ذلك ، داخل وظيفة الإعداد الفارغ ، نقوم بتهيئة وحدة RF وتعيينها للعمل مع نطاق 115 وهو خالي من الضوضاء وأيضًا ضبط الوحدة على العمل في وضع استهلاك الطاقة الأدنى بسرعة لا تقل عن 250 كيلو بت في الثانية.
إعداد باطل () { Serial.begin (9600) ؛ myRadio.begin () ، myRadio.setChannel (115) ، // 115 نطاقًا فوق WIFI إشارات myRadio.setPALevel (RF24_PA_MIN) ؛ // MIN power low rage myRadio.setDataRate (RF24_250KBPS) ؛ // الحد الأدنى للسرعة myservo.attach (6) ؛ Serial.print ("تهيئة الإعداد") ؛ تأخير (500) ؛ }
تقوم الدالة WriteData () الخالية بكتابة البيانات التي تم تمريرها إليها. كما قيل سابقًا ، يحتوي nRF على 6 أنابيب مختلفة يمكننا قراءة البيانات أو كتابتها ، وهنا استخدمنا 0xF0F0F0F066 كعنوان لكتابة البيانات. على جانب المستلم ، يتعين علينا استخدام نفس العنوان فيوظيفة ReadData () لتلقي البيانات التي تمت كتابتها.
باطل WriteData () { myRadio.stopListening () ، // إيقاف الاستلام وابدأ في نقل myRadio.openWritingPipe (0xF0F0F0F066) ؛ // يرسل البيانات على هذا العنوان المكون من 40 بت myRadio.write (& data، sizeof (data)) ؛ تأخير (300) ؛ }
تقوم دالة WriteData () باطلة بقراءة البيانات ووضعها في متغير. مرة أخرى من بين 6 أنابيب مختلفة يمكننا من خلالها قراءة البيانات أو كتابتها هنا ، استخدمنا 0xF0F0F0F0AA كعنوان لقراءة البيانات. هذا يعني أن مرسل الوحدة الأخرى قد كتب شيئًا على هذا العنوان ومن ثم نقرأه من نفس العنوان.
ReadData () باطل { myRadio.openReadingPipe (1، 0xF0F0F0F0AA) ؛ // أي أنبوب يجب قراءته ، 40 بت عنوان myRadio.startListening () ؛ // Stop Transminting وابدأ Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data، sizeof (data))؛ } Serial.println (data.text) ؛ } }
بصرف النظر عن هذه الأسطر ، تُستخدم الأسطر الأخرى في البرنامج لقراءة POT وتحويلها إلى 0 إلى 180 باستخدام وظيفة الخريطة وإرسالها إلى وحدة الاستقبال حيث نتحكم في المؤازرة وفقًا لذلك. لم أشرح لهم سطراً سطراً لأننا تعلمنا ذلك بالفعل في برنامجنا التعليمي للتفاعل المؤازر.
التحكم في محرك سيرفو باستخدام nRF24L01 لاسلكيًا
بمجرد أن تكون جاهزًا مع البرنامج ، قم بتحميل رمز جهاز الإرسال والاستقبال (الوارد أدناه) على لوحات Arduino المعنية وقم بتشغيلها باستخدام منفذ USB. يمكنك أيضًا تشغيل الشاشة التسلسلية لكل من اللوحتين للتحقق من القيمة التي يتم إرسالها وما يتم استلامه. إذا كان كل شيء يعمل كما هو متوقع عند تشغيل مقبض POT على جانب جهاز الإرسال ، فيجب أيضًا تشغيل المؤازرة على الجانب الآخر وفقًا لذلك.
يتم عرض العمل الكامل للمشروع في الفيديو أدناه. من الطبيعي جدًا ألا تعمل هذه الوحدات في المحاولة الأولى ، إذا واجهت أي مشكلة ، فتحقق من الكود والأسلاك مرة أخرى وجرب الإرشادات المذكورة أعلاه لحل المشاكل. إذا لم يعمل شيء ، فقم بنشر مشكلتك في المنتديات أو في قسم التعليقات وسأحاول حلها.