آموزش آردوینوپروژه های آردوینو

ارتباط سریال RS485 بین دو برد آردوینو با فاصله طولانی و کابل CAT6

امروز در بسیاری از پروژه ها ما از برد های آردوینو، رزبری پای، NodeMCU و … استفاده میکنیم. در این برد ها اکثر ارتباط با سنسور ها و ماژول ها با استفاده از ارتباط سریال انجام میشود. در بعضی پروژه ها، ما نیازمند برقراری ارتباط سریال در فواصل طولانی هستیم. ارتباط سریال در فاصله طولانی میتواند دچار نویز شدیدی شود. بنابراین اگر میخواهید ارتباط سریال را در فاصله بیشتر از 10-15 متر برقرار کنید، ادامه این آموزش را بخوانید. زیرا در این آموزش ما با استفاده از RS485 و کابل CAT 6E نحوه برقراری ارتباط سریال بین دو برد آردوینو را آموزش میدهیم.

امروز ما قصد داریم پروتکل دیگری را که بیشتر مورد استفاده قرار می گیرد بنام RS485 بررسی کنیم که معمولاً در محیط های صنعتی با نویز  زیاد برای انتقال داده ها استفاده می شود. ما می خواهیم در مورد پروتکل ارتباطی RS485 و نحوه پیاده سازی آن با دو آردوینو نانو و استفاده از ماژول مبدل MAX485 RS485 به UART را بیاموزیم.

در این پروژه ما از کابل CAT-6E استفاده میکنیم که می تواند تا 600 مگاهرتز را پشتیبانی کند. هر دو انتها توسط یک رابط RJ45 خاتمه می یابد. حساسیت ورودی گیرنده 200 میلی ولت است.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

پیشنهاد میکنم مقاله ارتباط سریال چیست را بخوانید.

شماتیک مدار ارتباط سیمی مسافت طولانی

تصویر زیر نمودار مدار فرستنده و گیرنده را برای ارتباط سیمی از راه دور با آردوینو نشان می دهد. توجه داشته باشید که مدارهای فرستنده و گیرنده هر دو یکسان به نظر می رسند تنها چیزی که متفاوت است کد نوشته شده در آن است. ما از یک برد به عنوان فرستنده و یک برد به عنوان گیرنده استفاده می کنیم ، اما می توانیم به راحتی برنامه ها را تنظیم کنیم تا با همان تنظیمات ، هم به عنوان فرستنده و هم گیرنده کار کنند.

شماتیک مدار ارتباط سیمی مسافت طولانی

شماتیک اتصال فوق نیز در زیر آورده شده است.

ارتباط سریال فاصله طولانی بین دو برد آردوینو

همانطور که در بالا مشاهده می کنید ، دو جفت مدار تقریباً یکسان هستند. هر دو مدار دارای یک ال سی دی کاراکتری 16*2 و یک آی سی مبدل MAX485 UART به RS485 هستند که از طریق یک رابط RJ45 به هر انتهای کابل Ethernet Cat-6E متصل هستند. کابلی که من در آموزش از آن استفاده کردم 25 متر طول دارد. ما برخی از داده ها را از طرف فرستنده از طریق کابل از برد آردوینو نانو ارسال می کنیم که از طریق ماژول MAX RS485 که در حالت Master کار می کند به سیگنال های RS485 تبدیل می شود.

در انتهای دریافت ، ماژول مبدل MAX485 به عنوان Slave کار می کند و با دریافت اطلاعات انتقالی از Master ، مجدداً داده RS485 را که دریافت کرده به سیگنال های استاندارد 5 ولت TTL UART تبدیل می کند تا توسط برد آردوینو نانو خوانده شود و در ال سی دی کاراکتری نمایش داده شود.

قطعات مورد نیاز

  1. ماژول مبدل MAX485
  2. برد آردوینو نانو – 2 عدد
  3. ال سی دی کاراکتری 16*2
  4. پتانسیومتر 10 کیلو اهم – 2 عدد
  5. کابل اترنت Cat-6E
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

ماژول مبدل MAX485 UART-RS485

این ماژول مبدل UART-RS485 دارای یک تراشه MAX485 است که یک فرستنده و گیرنده کم مصرف و با سرعت کم است که برای ارتباطات RS-485 استفاده می شود. این ماژول با منبع تغذیه + 5 ولت کار می کند و جریان نامی آن 300 میکرو آمپر است. این ماژول روی ارتباطات نیمه دو طرفه کار می کند تا عملکرد تبدیل سطح TTL به سطح RS-485 را اجرا کند ، به این معنی که می تواند در هر زمان اطلاعات را انتقال دهد یا دریافت کند و می تواند حداکثر سرعت انتقال 2.5Mbps را به دست آورد. ورودی گیرنده دارای ویژگی ایمن در برابر خرابی است که در صورت باز بودن ورودی ، خروجی بالای منطقی را تضمین می کند همچنین دارای LED های داخلی برای نمایش وضعیت فعلی تراشه است.

پیشنهاد میکنم مقاله تفاوت ارتباط RS485 و UART را بخوانید.

ماژول مبدل MAX485 UART-RS485

نمودار مدار داده شده در بالا نحوه اتصال IC داخلی MAX485 به اجزای مختلف را توضیح می دهد و هد رهای فاصله استاندارد 0.1 اینچی را ارائه می دهد تا در صورت تمایل با برد بورد استفاده شود.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

کابل اترنت CAT-6E

وقتی به انتقال داده از راه دور فکر می کنیم ، فوراً به فکر اتصال به اینترنت از طریق کابل های اترنت می افتیم. امروزه ، ما بیشتر از Wi-Fi برای اتصال به اینترنت استفاده می کنیم اما قبلاً از کابلهای اترنت برای اتصال آن به اینترنت استفاده می کردیم. دلیل اصلی استفاده از این کابلهای اترنت بر روی سیمهای معمولی این است که آنها دارای محافظت بسیار بهتری در برابر نویز ها به خصوص در فاصله های طولانی هستند. کابل های اترنت دارای محافظ های لایه به لایه برای محافظت در برابر تداخل الکترومغناطیسی هستند و همچنین هر جفت سیم به هم تابیده شده است تا از تشکیل حلقه جریان جلوگیری کند.

آنها اغلب با کانکتور های 8 پین RJ45 در هر دو انتها خاتمه می یابند. انواع مختلفی از کابل های اترنت وجود دارد که می توانیم از جمله CAT-4، CAT-5، CAT-5E، CAT-6، CAT-6A و … استفاده کنیم. ما از کابل CAT-6E استفاده می کنیم که می تواند تا 600 مگاهرتز را پشتیبانی کند.

تصویری که نشان می دهد چگونه یک جفت سیم در داخل لایه عایق کابل CAT-6E پیچ خورده است.

کابل کت سیکس CAT-6E

اتصال RJ-45 به کابل اترنت CAT-6E

اتصال RJ-45 به کابل اترنت CAT-6E

کد آردوینو ارتباط سریال طولانی

در این پروژه ، ما از دو برد آردوینو نانو استفاده می کنیم ، یكی به عنوان فرستنده و یكی به عنوان گیرنده كه هر كدام از آنها از یک ال سی دی کاراکتری 16*2 برای نمایش نتیجه استفاده میکنند. کد کامل در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.

طرف فرستنده سریال

در ابتدا ما یک متغیر برای پین enable و یک متغیر برای مقدار پتانسیومتر در نظر میگیریم. سپس کتابخانه ال سی دی کاراکتری را فراخوانی میکنیم و پین های آن را تعریف میکنیم.

int enablePin = 8;
int potval =0 ;
#include <LiquidCrystal.h>       
LiquidCrystal lcd(2,3,4,5,6,7);

سپس وارد تابع void setup میشویم و پین enable را high میکنیم تا ماژول MAX485 در حالت فرستنده قرار بگیرد. از آنجا که این ماژول، یک آی سی نیمه دو طرفه است، نمیتواند همزمان انتقال دهد یا دریافت کند. همچنین ما ال سی دی کاراکتری را فعال میکنیم و یک پیام مقدمه در آن نمایش میدهیم.

  Serial.begin(9600);   
  pinMode(enablePin, OUTPUT);
  lcd.begin(16,2);
  lcd.print("irenx.ir");
  lcd.setCursor(0,1);
  lcd.print("Transmitter Nano");
  delay(3000);
  lcd.clear();

اکنون در void loop، یک مقدار عدد صحیح که به طور مداوم در حال افزایش است ، روی خطوط Serial می نویسیم که به برد نانو دیگر منتقل می شود. این مقدار در ال سی دی کاراکتری سمت فرستنده نیز نمایش داده میشود.

    Serial.print("Sent Value= ");
    Serial.println(potval);
    lcd.setCursor(0,0);
    lcd.print("Sent Value");
    lcd.setCursor(0,1);
    lcd.print(potval);
    delay(1000);
    lcd.clear();
    potval+=1;

طرف گیرنده سریال

در سمت گیرنده نیز ما ابتدا یک متغیر برای پین enable تعریف میکنیم که برای تعیین حالت ماژول MAX485 استفاده میشود. سپس کتابخانه LCD کاراکتری را فراخوانی میکنیم و پین های آن را تعریف میکنیم.

int enablePin = 8; 
#include <LiquidCrystal.h>    
LiquidCrystal lcd(2,3,4,5,6,7);

در قسمت void setup نیز مانند طرف فرستنده عمل میکنیم.

  Serial.begin(9600);      
  pinMode(enablePin, OUTPUT);
  lcd.begin(16,2);
  lcd.print("irenx.ir");
  lcd.setCursor(0,1);
  lcd.print("Receiver Nano");
  delay(3000);
  digitalWrite(enablePin, LOW);

سپس در void loop بررسی میکنیم که آیا چیزی در پورت سریال موجود است یا خیر و سپس داده ها را میخوانیم و از آنجا که داده ورودی یک عدد صحیح است، آن را روی ال سی دی نمایش میدهیم.

        int pwmval = Serial.parseInt(); 
        Serial.print("I got value");
        Serial.println(pwmval);
        lcd.setCursor(0,0);
        lcd.print("Received Value");
        lcd.setCursor(0,1);
        lcd.print(pwmval);
        delay(1000);
        lcd.clear();

به این ترتیب میتوانیم ارتباط سریال را در مسافت های طولانی برقرار کنیم. این یک روش ساده و آسان برای انقال اطلاعات است. در این پروژه ما از نرخ باو 9600 استفاده کردیم که برای بیشتر ماژول ها و سنسور ها مناسب است.

موارد موجود در فایل : سورس کامل ، شماتیک کامل

4.6 (15 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

4 نظر

  1. سلام وقتتون بخیر
    میخوام اعداد 5 رقمی را که بامکس485 دریافت میکنم را با کمک میکرو کنترلر at mega32 و 5 عدد سون سگمنت نمایش دهم میشه لطفا راهنماییم کنید که چکارهایی باید انجام دهم

  2. درود.
    نام ماژولی که کابل شبکه اترنت را به آن متصل کردید چیست؟

    1. سلام جناب. ماژول خاصی نیست و فقط وظیفه ارتباط سیم های کابل CAT6 به ماژول MAX485 رو بر عهده داره.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *