يعد الاتصال التسلسلي أحد أكثر الطرق شيوعًا لتبادل البيانات بين الأجهزة الإلكترونية. ومع ذلك، عندما تزيد المسافات أو يكون هناك تداخل كهرومغناطيسي في البيئة، يمكن أن تكون إشارات الاتصال عرضة للأخطاء. وهنا يأتي دور معيار الاتصال RS485، مما يوفر بديلاً قويًا وفعالاً. يتيح لنا Arduino، بتعدد استخداماته، الاستفادة الكاملة من هذا البروتوكول بطريقة بسيطة إلى حد ما.
في هذه المقالة، سنرى كيف يمكن تنفيذ اتصال RS485 بين العديد من Arduinos باستخدام وحدات تعتمد على MAX485 المدمجة، وهي شريحة تقوم بتحويل إشارات TTL (من Arduino) إلى RS485 والعكس. خلال هذا البرنامج التعليمي، سنغطي كلاً من المفاهيم الأساسية والأمثلة العملية التي ستسمح لك بتنفيذ الاتصال البسيط وشبه المزدوج والكامل بين وحدات التحكم الدقيقة في Arduino، وسنشرح كيف يمكنك توسيع نظام الاتصال هذا للتعامل مع أجهزة متعددة في جهاز واحد. حافلة RS485.
ما هو RS485؟
RS485 هو معيار اتصالات يستخدم على نطاق واسع في الصناعة، وهو معروف بخصائصه متانة وقدرتها على الصمود مسافة طويلة انتقال، حتى في البيئات الصناعية الصاخبة. على عكس الأنواع الأخرى من الاتصالات التسلسلية، مثل RS232، يسمح RS485 بتوصيل أجهزة متعددة على نفس الناقل، مما يجعله مثاليًا لتطبيقات الأتمتة والتحكم الصناعية.
هذا البروتوكول مقاوم للضوضاء الكهرومغناطيسية بفضل حقيقة أنه يستخدم نظام الإشارات التفاضليةمما يعني أن البيانات يتم إرسالها عبر سلكين، A وB، وهما نسختان متقابلتان في الجهد. وهذا يسمح بإلغاء أي ضوضاء يتم التقاطها في الكابلات بسهولة، مما يضمن سلامة الإشارة.
إحدى المزايا الرئيسية لـ RS485 هي ذلك يدعم مسافات تصل إلى 1200 متر وسرعات تصل إلى 35 ميجابت في الثانية عبر مسافات قصيرة، مما يجعله بروتوكولًا مثاليًا للتطبيقات الصناعية وتطبيقات التحكم في البيئات التي تتطلب كابلات طويلة.
أوضاع الاتصال RS485
في اتصال RS485، يمكننا تكوين النظام بثلاث طرق مختلفة: الإرسال البسيط، الإرسال أحادي الاتجاه، الإرسال المزدوج الكامل. ولكل منها خصوصياتها ويتم تنفيذها وفقًا لاحتياجات المشروع.
الاتصالات البسيطة
في الوضع البسيط، يسير الاتصال في اتجاه واحد فقط، أي أن جهازًا واحدًا يعمل كجهاز مرسل ومثل آخر المتلقي. يعد هذا مفيدًا في المواقف التي تريد فيها فقط إرسال البيانات أو تلقيها دون الحاجة إلى التعليقات.
على سبيل المثال، يمكننا إعداد نظام حيث يقرأ Arduino قيمة المستشعر ويرسلها إلى جهاز آخر يستقبلها ببساطة. في هذه الحالة، نظرًا لوجود بيانات تنتقل في اتجاه واحد فقط، يمكن الاستغناء عن بعض عناصر التحكم الإضافية، مما يجعل النظام أكثر بساطة واقتصادية.
اتصال نصف مزدوج
يتم تنفيذ معظم تطبيقات RS485 على Arduino في الوضع أحادي الاتجاه لأن هذا يتطلب فقط موضوعين، ويتيح لك إرسال واستقبال البيانات، ولكن ليس في وقت واحد. أي أنه إذا كان أحد الأجهزة يرسل البيانات، فيجب أن تكون الأجهزة الأخرى في وضع الاستقبال، والعكس صحيح.
للتبديل بين وضعي الإرسال والاستقبال، استخدم دبابيس إضافية (RE/DE) على وحدة MAX485، والتي ستتحكم فيها من خلال الكود لتحديد ما إذا كان الجهاز يجب أن يرسل أو يستقبل في أي وقت محدد.
يعد هذا الوضع مفيدًا بشكل خاص إذا كان لديك أجهزة متعددة على نفس الناقل وتحتاج إلى الاتصال ببعضها البعض، ولكن ليس في وقت واحد.
اتصال مزدوج كامل
في وضع الازدواج الكامل، يمكن للأجهزة إرسال واستقبال البيانات في نفس الوقت. ومع ذلك، لتنفيذ الإرسال المزدوج الكامل في RS485، زوجين من الأسلاك الملتويةمما يزيد من تكلفة وتعقيد الأسلاك. بالإضافة إلى ذلك، ستحتاج إلى وحدتين MAX485 لكل جهاز لإدارة قنوات الإرسال والاستقبال بشكل منفصل.
المكونات المطلوبة لاتصال RS485 مع Arduino
لتنفيذ نظام اتصالات RS485 على الاردوينو، سوف تحتاج إلى المكونات التالية:
- واحد أو أكثر من اردوينو: سيفي أي نموذج من نماذج Arduino بالغرض، ولكن في هذا البرنامج التعليمي سوف نستخدمه Arduino UNO واردوينو ميجا كأمثلة.
- وحدات MAX485: تسمح لك هذه الوحدات بتحويل إشارات TTL من Arduino إلى RS485 والعكس. فهي رخيصة جدًا ويسهل العثور عليها في متاجر مثل AliExpress أو eBay.
- مقاومات الإنهاء: عادة ما يتم وضع مقاومة تتراوح قيمتها بين 120 أوم في كل طرف من طرفي الناقل لتجنب الانعكاسات في الإشارة. في المسافات القصيرة، من الممكن الاستغناء عنها، ولكن في التركيبات الأطول فهي ضرورية للحفاظ على سلامة الإشارة.
- الكابلات الزوجية الملتوية: يوصى باستخدام الكابلات المزدوجة الملتوية لتقليل التداخل الكهرومغناطيسي، خاصة في البيئات الصناعية الصاخبة.
مخطط الاتصال العام
قم بتوصيل وحدات MAX485 إلى Arduino أمر بسيط للغاية. أهم الأطراف هي 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 وجعلهم يستجيبون فقط للرسائل المخصصة لهم.