يعد الاتصال التسلسلي أحد أكثر الطرق شيوعًا لتبادل البيانات بين الأجهزة الإلكترونية. ومع ذلك، عندما تزيد المسافات أو يكون هناك تداخل كهرومغناطيسي في البيئة، يمكن أن تكون إشارات الاتصال عرضة للأخطاء. وهنا يأتي دور معيار الاتصال RS485، مما يوفر بديلاً قويًا وفعالاً. يتيح لنا Arduino، بتعدد استخداماته، الاستفادة الكاملة من هذا البروتوكول بطريقة بسيطة إلى حد ما.
في هذه المقالة، سنرى كيف يمكن تنفيذ اتصال RS485 بين العديد من Arduinos باستخدام وحدات تعتمد على MAX485 المدمجة، وهي شريحة تقوم بتحويل إشارات TTL (من Arduino) إلى RS485 والعكس. خلال هذا البرنامج التعليمي، سنغطي كلاً من المفاهيم الأساسية والأمثلة العملية التي ستسمح لك بتنفيذ الاتصال البسيط وشبه المزدوج والكامل بين وحدات التحكم الدقيقة في Arduino، وسنشرح كيف يمكنك توسيع نظام الاتصال هذا للتعامل مع أجهزة متعددة في جهاز واحد. حافلة RS485.
ما هو RS485؟
يُعدّ RS485 معيارًا شائع الاستخدام في الاتصالات الصناعية، ويُعرف بمتانته وقدرته على التعامل مع مسافات الإرسال الطويلة ، حتى في البيئات الصناعية الصاخبة. وعلى عكس أنواع الاتصالات التسلسلية الأخرى، مثل RS232، يسمح RS485 بتوصيل أجهزة متعددة على نفس ناقل البيانات، مما يجعله مثاليًا لتطبيقات التحكم والأتمتة الصناعية.
يتميز هذا البروتوكول بمقاومته للتشويش الكهرومغناطيسي لأنه يستخدم نظام إشارات تفاضلية ، حيث تُرسل البيانات عبر سلكين، A وB، متعاكسين في الجهد. وهذا يسمح بإلغاء أي تشويش قد يلتقطه الكابلات بسهولة، مما يضمن سلامة الإشارة.
إحدى المزايا الرئيسية لـ RS485 هي أنها تدعم مسافات تصل إلى 1200 متر وسرعات تصل إلى 35 ميجابت في الثانية عبر مسافات قصيرة، مما يجعلها بروتوكولًا مثاليًا للتطبيقات الصناعية والتحكمية في البيئات التي تتطلب كابلات طويلة.
أوضاع الاتصال RS485

في اتصال RS485، يمكننا تكوين النظام بثلاث طرق مختلفة: الإرسال البسيط، الإرسال أحادي الاتجاه، الإرسال المزدوج الكامل. ولكل منها خصوصياتها ويتم تنفيذها وفقًا لاحتياجات المشروع.
الاتصالات البسيطة
في وضع الإرسال والاستقبال الأحادي، يكون الاتصال أحادي الاتجاه؛ حيث يعمل أحد الجهازين كمرسل والآخر كمستقبل . وهذا مفيد في الحالات التي ترغب فيها فقط بإرسال أو استقبال البيانات دون تلقي أي ردود فعل.
على سبيل المثال، يمكننا إعداد نظام حيث يقرأ Arduino قيمة المستشعر ويرسلها إلى جهاز آخر يستقبلها ببساطة. في هذه الحالة، نظرًا لوجود بيانات تنتقل في اتجاه واحد فقط، يمكن الاستغناء عن بعض عناصر التحكم الإضافية، مما يجعل النظام أكثر بساطة واقتصادية.
اتصال نصف مزدوج
تُنفَّذ معظم تطبيقات RS485 على أردوينو في وضع نصف مزدوج، لأنه لا يتطلب سوى سلكين ، ويتيح إرسال واستقبال البيانات، وإن لم يكن ذلك في آنٍ واحد. بمعنى آخر، إذا كان أحد الأجهزة يُرسل البيانات، فيجب أن تكون الأجهزة الأخرى في وضع الاستقبال، والعكس صحيح.
للتبديل بين وضع الإرسال والاستقبال، يتم استخدام دبابيس إضافية (RE/DE) على وحدة MAX485، والتي ستتحكم بها من خلال الكود لتحديد ما إذا كان يجب على الجهاز الإرسال أو الاستقبال في أي وقت.
يعد هذا الوضع مفيدًا بشكل خاص إذا كان لديك أجهزة متعددة على نفس الناقل وتحتاج إلى الاتصال ببعضها البعض، ولكن ليس في وقت واحد.
اتصال مزدوج كامل
في وضع الإرسال والاستقبال المتزامن، يمكن للأجهزة إرسال واستقبال البيانات في آنٍ واحد. مع ذلك، يتطلب تطبيق هذا الوضع في RS485 زوجين من الأسلاك المجدولة ، مما يزيد التكلفة وتعقيد التوصيلات. علاوة على ذلك، ستحتاج إلى وحدتي MAX485 لكل جهاز لإدارة قنوات الإرسال والاستقبال بشكل منفصل.
المكونات المطلوبة لاتصال RS485 مع Arduino
لتنفيذ نظام اتصالات RS485 على الاردوينو، سوف تحتاج إلى المكونات التالية:
- واحد أو أكثر من اردوينو: سيفي أي نموذج من نماذج Arduino بالغرض، ولكن في هذا البرنامج التعليمي سوف نستخدمه Arduino UNO واردوينو ميجا كأمثلة.
- وحدات MAX485: تسمح لك هذه الوحدات بتحويل إشارات TTL من Arduino إلى RS485 والعكس. فهي رخيصة جدًا ويسهل العثور عليها في متاجر مثل AliExpress أو eBay.
- مقاومات الإنهاء: عادة ما يتم وضع مقاومة تتراوح قيمتها بين 120 أوم في كل طرف من طرفي الناقل لتجنب الانعكاسات في الإشارة. في المسافات القصيرة، من الممكن الاستغناء عنها، ولكن في التركيبات الأطول فهي ضرورية للحفاظ على سلامة الإشارة.
- الكابلات الزوجية الملتوية: يوصى باستخدام الكابلات المزدوجة الملتوية لتقليل التداخل الكهرومغناطيسي، خاصة في البيئات الصناعية الصاخبة.
مخطط الاتصال العام
توصيل وحدات MAX485 بلوحة أردوينو أمرٌ بسيط للغاية. أهم المنافذ هي A وB، والتي تُقابل خطوط ناقل RS485. يجب توصيل هذه المنافذ بجميع الأجهزة المتصلة بالناقل. بالإضافة إلى ذلك، تحتوي الوحدة على منفذي RE وDE اللذين يتحكمان في وضع الاستقبال أو الإرسال.
بشكل عام، يتم توصيل الوحدات بالاردوينو كما يلي:
- يتصل VCC وGND للوحدة بـ VCC وGND على Arduino.
- يتصل DI (إدخال البيانات) للوحدة بمنفذ TX الخاص بـ Arduino إذا كانت الوحدة ستعمل كباعث.
- يتصل RO (مخرج المستقبل) للوحدة بمنفذ RX الخاص بـ Arduino إذا كانت الوحدة ستعمل كمستقبل.
- يجب التحكم في DE و RE من خلال منفذ Arduino الرقمي للتبديل بين وضعي الإرسال والاستقبال.
إذا كنت تحتاج فقط إلى أن تعمل الوحدة كمرسل أو مستقبل، فيمكنك توصيل RE وDE مباشرة بـ HIGH أو LOW. ومع ذلك، بالنسبة للاتصالات الأكثر تعقيدًا حيث يتعين على الجهاز التبديل بين الإرسال والاستقبال، فمن الأفضل التحكم في هذه الأطراف من البرنامج.
أمثلة على التعليمات البرمجية للاتصالات RS485
فيما يلي عدة أمثلة تغطي تكوينات الاتصال المختلفة مع RS485 على Arduino.
الاتصالات البسيطة
رمز المصدر
بالنسبة لنظام إرسال بسيط أساسي حيث يكون لدينا مرسل واحد ومستقبل واحد فقط، قد يبدو رمز المرسل كما يلي:
void setup() { Serial.begin(9600); } void loop() { Serial.write(analogRead(0)); delay(500); }
رمز المتلقي
سوف يقوم المتلقي ببساطة بقراءة البيانات التي تصل عبر المنفذ التسلسلي:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
اتصال نصف مزدوج
في هذا المثال، نقوم بتنفيذ نظام أحادي الاتجاه حيث تتناوب الأجهزة بين إرسال البيانات واستقبالها.
كود المعلم
const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, HIGH); Serial.write('H'); delay(100); digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); Serial.println(data); } }
كود الرقيق
const int reDePin = 2; void setup() { pinMode(reDePin, OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(reDePin, LOW); if (Serial.available()) { int data = Serial.read(); delay(100); digitalWrite(reDePin, HIGH); Serial.write(data + 1); } }
اتصال مزدوج كامل
لتنفيذ اتصال مزدوج الاتجاه، ستكون هناك حاجة إلى وحدتين MAX485 لكل Arduino. سيتعامل كل زوج من الوحدات مع خط بيانات واحد: واحد للإرسال والآخر للاستقبال.
سيكون الرمز مشابهًا للأمثلة السابقة، ولكن في هذه الحالة سيكون كلا الجهازين يرسلان ويستقبلان دائمًا في وقت واحد.
التوسع إلى أجهزة متعددة في RS485
يتمتع RS485 بالقدرة على توصيل ما يصل إلى 32 جهازًا في ناقل واحد، وفي حالات خاصة يمكنه الوصول إلى المزيد. وهذا يجعله اختيارًا ممتازًا للمشاريع التي تتضمن وحدات تحكم أو أجهزة متعددة. للتعرف على كل واحد منهم على الشبكة، من الشائع تنفيذ عنوان أو معرف لكل جهاز.
في هذه الحالة، سيرسل السيد رسالة بعنوان الجهاز الذي يريد الاتصال به، وسيكون هذا الجهاز فقط هو المسؤول عن معالجة الرسالة وإعطاء الرد.
بالإضافة إلى ذلك، هناك إمكانية استخدام بروتوكولات أكثر تعقيدًا مثل MODBUS، والتي تسمح بإنشاء شبكات عالية الكفاءة وآمنة في الصناعة.
بالنسبة للمشاريع المنزلية أو التطبيقات الأقل تطلبًا، يمكنك ببساطة تعيين معرف لكل Arduino وجعلهم يستجيبون فقط للرسائل المخصصة لهم.