ارتباط سنسور SRF02 با کامپیوتر+ برنامه نويسي با بسكام AVR
تاريخ: 11 آذر 1389 نويسنده: admin
موضوع: برنامه نويسي, ارتباط سخت افزار با نرم افزار, آموزش برنامه نويسي آي سي, رباتيك

سنسور SRF02 يكي از سنسور هاي ارزان قيمت (22 هزار تومان) و بسيار خوب براي فاصله سنجي با دقت سانتي متر است.
در اينجا برنامه اي كه توسط خودم تست و 100 درصد بدون مشكل بوده است، ارائه مي شود. اين برنامه تحت C#.net 2010 نوشته شده و به صورت Real time اطلاعات فاصله و شماره سنسور را نمایش می دهد . با استفاده از يك ماژول USB به سریال مي توانيد خیلی راحت به USB وصل کنید !!
از لحاظ توضیحات نرم افزاری این موارد قابل ذکر است:
نرم افزار کاملا به زبان ساده نوشته شده و در نرم افزار شما قادر هستید سنسور را در هر لحظه خوانده و مشاهده کنید، از طرفی قادر هستید تا آدرس سنسور را به آدرس دلخواه خودتون تغییر بدهید.
در ابتدای کار یک آرایه دو بعدی از نوع بایتی حاوی (آدرس سنسور و درخواست نوع اطلاعات که در اینجا درخواست به سانتی متر است، به صورت هگز) تعریف می شود.
سپس با دستور Write و متد Oveload دوم آن با یک بازه 1 میلی ثانیه ای درخواست ارسال شده است.(ایجاد وقفه با system.Threading.Thread.Sleep تعریف شده است.)
نهایتا چون سنسور 2 بار اطلاعات را در قالب بایت ارسال می کند، دستور Readbyte در برنامه 2 بار نوشته شده است.
برای پرهیز از هنگ کردن برنامه، من timeout خواندن اطلاعات را تعریف کردم(دستور های serialPort1.ReadTimeout = 1; و serialPort1.WriteTimeout = 20; )
این زمان را شما در ابتدای برنامه می توانید تغییر دهید.... (در صورتی که مشکلی پیش آمد زمان را که بر حسب میلی ثانیه هست تغییر دهید.)
همچنین دستور ReadByte را در دستور try قرار دادم تا مشکلی ایجاد نشود.
تمامی تنظیمات ارسال دیتا و تغییر عدد سنسور نیز به همین شکل اما در آرایه ای جدید تعریف شده است که در صورتی که PDF فارسی جناب ilgar را مطالعه بفرمایید، به راحتی متوجه می شوید.
به مثال زیر که بخشی از برنامه است دقت کنید:
byte[] Sensor1 = new byte[8];
Sensor1[0] = first_value;
Sensor1[1] = 0xA0;
Sensor1[2] = first_value;
Sensor1[3] = 0xAA;
Sensor1[4] = first_value;
Sensor1[5] = 0xA5;
Sensor1[6] = first_value;
Sensor1[7] = final_value;
if (serialPort1.IsOpen == true)
{
serialPort1.Write(Sensor1, 0, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 1, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 2, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 3, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 4, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 5, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 6, 1);
System.Threading.Thread.Sleep(1);
serialPort1.Write(Sensor1, 7, 1);
return;
}
در اینجا اگر به ابتدای سورس دقت کنید، در واقع من یک بایت را با اسم first value انتخاب کرده ام که با دستور Switch case در خطوط بالاتر سمپل، پر می شود.
این دستور switch case شماره ابتدایی سنسور را مشخص کرده است .
مقدار final value نیز از comboBox مقدار مورد نیاز را با استفاده از دستور Switch case به خود می گیرد و نهایتا در آرایه جایگزاری می شود.
هدف از این کار تغییر آدرس (شماره سنسور) از هر آدرسی به آدرس دیگر است.
دلیل موفقیت من، تسلط به ز بان c و basic بود که ترجیحا آنرا در C#.net نوشتم و شما می توانید به راحتی آنرا در VB.net نیز شبیه سازی کنید.
دقت فرمایید اجرای این برنامه فقط در C#.net نسخه سال 2010 انجام گیرد و در نسخه های قدیمی تر، با مشکل مواجه می شوید.... (در حقیقت visual Studio 2010 را باید نصب کرده باشید.)
ضمنا برای ارتباط سخت افزاری هم از ماژول آماده FT232 استفاده کنید و tx ماژول را به Rx سنسور و Rx ماژول را به TX سنسور بدهید. که به دلیل سادگی مدار آنرا دیگه قرار ندادم...
در صورتی هم که پورت کام سیستم را می خواهید استفاده کنید، از یه max232 به عنوان واسط استفاده کنید تا سطح ولتاژ پورت com را به سطح TTl بیاره.....
موفق باشید.
محمدرضا ناظم
برنامه فوق را در پیوست دریافت کنید :

همچنين مي توانيد PDF ديتاشيت فارسي شده SRF02 به همراه روش ارتباط با آي سي AVR به زبان بيسيك را از لينك زير دريافت كنيد:
دانلود اطلاعات فارسي+ سورس بسكام:
