ارتباط های آسنکرون سریال یکی از کاربردی ترین نوع ارتباط در بین سخت افزار های مختلف است . در این ارتباط دیتا در تعدا بیت های مشخصی و بر اساس یک زمان بندی دقیق و از قبل مشخص شده انتقال می باشد . یکی از کاربردی ترین پروتکل های ارتباط سریال غیر همزمان ، پرتکل RS232 می باشد . این پروتکل شامل لایه های سخت افزاری و نرم افزاری خود است . در لایه های نرم افزاری نحوه ارسال بیت های داده و سایر پارامتر ها مشخص می شود و در لایه سخت افزاری شامل پورت های 9 پایه با عنوان پورت های DB9 می باشد . در این ارتباط مسیر های ارسال و دریافت دیتا مجزا از همدیگر می باشند . به طور گسترده ای از RS232 در کامپیوتر های صنعتی و… استفاده می شود . RS232 امکان ارتباط باسیم تا مسافت های تقریبا 15 متری را فراهم می ساز . اما به دلیل مسافت کم RS232 در ارتباط های با فاصله دور تر از پروتکل RS485 استفاده می شود . ساختار نرم افزاری و نحوه ارسال دیتا در این پروتکل همانند RS232 است با این تفاوت که سطح ولتاژ در این ارتباط با RS232 متفاوت است . RS485 امکان ارتباط های باسیم تا فواصل 1200 متر را فارهم میسازد . لذا در شبکه هایی که اجزا در وفواصل دوری از هم قرار دارند از RS485 استفاده می شود . برخلاف RS232 در ارتباط RS485 هیچ سخت افزار معینی برای استفاده در خروجی ها تعریف نشده است ( پورت سخت افزاری ). به همین دلیل خروجی و ورودی های RS485 در برد های مختلف به شکل های مختلف است مانند ترمینال و یا حتی پورت های DB9 . یکی از مهم ترین تفاوت های RS232 و RS485 کانال های ارتباطی آن ها می باشد . ارتباط RS232 به صورت تمام دو طرفه است ولی ارتباط RS485 به صوت نیمه دو طرفه می باشد که از دیفرانسیل خطوط برای انتقال منطق های 0 و 1 استفاده می کند . در این آموزش قصد داریم به نحوه راه اندازی ماژول MAX485 بپردازیم . MAX485 یک مبدل UART به RS485 است . لذا به راحتی توسط این ماژول دیتای سریال ارسال شده از برد آردوینو را می توان از طریق پروتکل RS485 منتقل نمود . این کار امکان ارتباط سیمی چندین برد را در فواصل دور فراهم می سازد .
در تصویر زیر پایه های ماژول MAX485 نشان داده شده است :
شماتیک اتصال ماژول به آردوینو :
برنامه فرستنده :
#define SerialTxControl 2 // contact # 2 will switch receiver / transmitter mode #define RS485Transmit HIGH #define RS485Receive LOW void setup (void) { Serial.begin (9600); // set the serial port to 9600baud speed pinMode (SerialTxControl, OUTPUT); digitalWrite (SerialTxControl, RS485Transmit); // put the device into transmitter mode } void loop (void) { Serial.print ("ping"); // send text delay (500); }
برنامه گیرنده :
#define SerialTxControl 2 #define RS485Transmit HIGH #define RS485Receive LOW char buffer [100]; byte state = 0; void setup (void) { Serial.begin (9600); pinMode (13, OUTPUT); pinMode (SerialTxControl, OUTPUT); digitalWrite (SerialTxControl, RS485Receive); // put the device into receiver mode } void loop (void) { int i = 0; if (Serial.available ()) {// if any data came to the port delay (5); // wait a bit for the entire data packet to be accepted by the port while (Serial.available ()) { buffer [i ++] = Serial.read (); // read data and write it to the buffer } } if (i> 0) {// if there is something in the buffer buffer [i ++] = '\ 0'; // convert the buffer contents to a string by adding a null character if (strcmp (buffer, "ping")) {// if the accepted string is equal to the ping text digitalWrite (13, state); // blink LED state =! state; } } }
پس از پروگرام کردن دوتا برد آردوینو ، در محیط آردوینو IDE در قسمت Tools پورت را برد روی پروتی که گیرنده به آن متصل است قرار داده و سپس وارد محیط Serial Monitor شوید .