ارتباطی از جنس بلوتوث با برد های آردوینو
در این مقاله میخواهیم شما را با برد محبوب Arduino و یکی از پروتکلهای ارتباطی آن یعنی پورت سریال آشنا کنیم. در قدم اول با یک پروژه بسیار ساده، سازوکار پینهای سریال را با استفاده از ماژول بلوتوث HC-05 در یک سیستم کنترلی به شما نشان میدهیم. درواقع با ایجاد یک سوییچ، LED را با استفاده از گوشی هوشمند خود روشن و خاموش میکنیم، در ادامه این مقاله پس از فراگیری کلیات کار با پورت سریال Arduino و ماژول بلوتوث، طراحی کنترلر یک موتور DC را از طریق موبایل انجام میدهیم.
وسایل موردنیاز:
- برد Arduino (نوع دلخواه که در اینجا از برد UNO استفاده کردهایم)
- یک عدد LED و مقاومت (میتوان از LED داخلی برد هم استفاده کرد)
- ماژول بلوتوث HC-05
- موتور DC
- ماژول درایور L298
- تلفن همراه دارای سیستمعامل اندروید
نرمافزارهای موردنیاز:
- نرمافزار اندروید LED Coontroller
- Arduino IDE
مدار اول مداری بسیار ساده و کوچک است و با چند اتصال، مدار تکمیل میشود. در جدول زیر ترتیب وصل شدن پایهها را مشاهده میکنید. به همین راحتی و با وصل 4 پایه، ماژول بلوتوث آماده راهاندازی میشود. همانطور که میدانید پایه Tx برای ارسال دادههای سریال و پایه Rx برای دریافت این دادهها مورداستفاده قرار میگیرد، پس بههیچعنوان نباید Rx را به Rx یا Tx را به Tx وصل کرد چون در این صورت هیچ دادهای منتقل نمیشود.
پایه منفی LED را به پایه GND و پایه مثبت آن را با یک مقاومت سری کرده و به پایه شماره 13 وصل میکنیم. مقدار مناسب مقاومت نیز در رنج 220 اهم تا 1 کیلو اهم هست. با طی این مراحل کار ساخت مدار به پایان میرسد (همانطور که گفته شد میتوان از LED داخلی آردوینو استفاده کرد).
شماتیک
ماژول HC-05 با ارتباط سریال کار میکند. در اینجا یک برنامه اندروید داریم که برای ارسال دادههای سریال طراحیشده است که با فشار دادن کلیدی خاص، دستوری را از طریق ماژول بلوتوث به برد Arduino برساند؛ که در پروژه موردنظر ما با فشار دادن کلید > برنامه یک داده از نوع کاراکتر با مقدار “1” را ارسال کرده و برد Arduino با توجه به برنامهای که ما نوشتهایم LED را روشن میکند. همچنین با کلیک بر روی گزینه ∧ یک داده “0” فرستادهشده و LED خاموش میشود. با باز کردن مانیتور سریال از Arduino IDE میتوانید تکتک دادههای ارسالشده را مشاهده کنید.
نحوه استفاده از برنامه
نرمافزار Arduino Bluetooth Controller را از لینک زیر دانلود نمایید.
https://play.google.com/store/apps/details?id=com.giumig.apps.bluetoothserialmonitor
برنامه را اجرا کنید، قسمت HC-05 را بیابید و روی آن کلیک کنید تا Pair شود.
در صورت درخواست رمز، از رمز پیشفرض 1234 استفاده کنید. بعد از اتصال موفقیتآمیز از طریق Controller Mode رابط کاربری را تنظیم کنید.
با تنظیم کردن هر گزینه با مقدار موردنظرمان، در هنگام کلیک دستورالعملهای مربوط به آن مقدار اجرا خواهد شد.
سورس کد برنامه آردوینو
char data = 0; //تعریف متغیر از نوع کاراکتر void setup() { Serial.begin(9600); //تعیین نرخ انتقال داده pinMode(13, OUTPUT); //تعیین پین 13 بهعنوان خروجی } void loop() { if(Serial.available() > 0) //شرط برقراری ارتباط { data = Serial.read(); //خواندن اطلاعات از روی پورت سریال Serial.print(data); Serial.print("\n"); if(data == '1') //شرط روشن شدن digitalWrite(13, HIGH); else if(data == '0') //شرط خاموش شدن digitalWrite(13, LOW); } }
حال که اصول کلی استفاده از پینهای سریال Arduino را فراگرفتیم، در یک پله بالاتر، قصد کنترل یک موتور با استفاده از بلوتوث را داریم. در این مرحله برای درایو موتور DC از یک ماژول درایور L298 استفاده میکنیم که قابلیت راهاندازی دو موتور DC را دارد. همانطور که میدانید پینهای خروجی Arduino قابلیت جریان دهی برای تأمین جریان یک موتور DC را ندارند و بدون درایور، برد آسیب میبیند. به همین منظور از یک درایور برای راهاندازی و کنترل موتور استفاده میکنیم. ماژول درایور L298 شامل 2 پل H هست که هر کانال توانایی کنترل 2 آمپر جریان را دارد. بهراحتی میتوان با اتصال ولتاژی بین 5 تا 35 ولت این درایور را راهاندازی کرد. به دلیل وجود یک رگولاتور داخلی در برد، نیاز به یک ولتاژ 5 ولت جداگانه نیست و با اتصال ولتاژ راهاندازی موتورها، قسمت تغذیه ماژول نیز راهاندازی میشود. هر کانال از درایور شامل یک Enable برای فعالسازی کانال و 2 ورودی برای کنترل موتورها (INT) هست. کافی است که یکی از ورودیها را یک و دیگری را صفر کنیم تا موتور در یکجهت شروع به گردش کند. با جابجایی این ورودیها موتور تغییر جهت میدهد. اگر به هر دو ورودی 1 اعمال شود موتور در حالت قفل میماند و در صورت صفر شدن دو ورودی موتور از حرکت میایستد.
سورس کد برنامه
nt motorA = 3; int motorB = 4; //تعریف پینهای کنترل موتور char data = 0; int flag = 0; //پرچم برای تعیین وضعیت void setup() { pinMode(motorA, OUTPUT); //تعیین جهت پینها pinMode(motorB, OUTPUT); Serial.begin(9600); //تعیین نرخ انتقال داده } void loop() { if(Serial.available() > 0) //شرط برقراری ارتباط { data = Serial.read(); flag=0; } if (data == '0') //موتور در وضعیت خاموش { digitalWrite(motorA, HIGH); digitalWrite(motorB, HIGH); if(flag == 0) { Serial.println("Motor: off"); flag=1; } } else if (data == '1') //موتور راستگرد { digitalWrite(motorA, LOW); digitalWrite(motorB, HIGH); if(flag == 0) { Serial.println("Motor: right"); flag=1; } } else if (data == '2') //موتور چپگرد { digitalWrite(motorA, HIGH); digitalWrite(motorB, LOW); if(flag == 0) { Serial.println("Motor: left"); flag=1; } } } توضیحات برنامه
توضیحات برنامه
در ابتدا دو پین 3,4 را برای کنترل موتور تعریف میکنیم که به INT1,INT2 وصل میشوند و وظیفه تعیین جهت گردش موتور را بهعهده دارند. یک متغیر برای ارسال داده از طریق بلوتوث و یک پرچم ایجاد میکنیم. در خط بعدی خروجی بودن پینها و نرخ انتقال داده را مشخص میکنیم. اکنون در بدنه اصلی برنامه با شرط اینکه ارتباط سریال بهدرستی انجامشده باشد، شروط و دستورالعملهای مربوط به هر شرط را وارد میکنیم. روال برنامه به این صورت است که با ارسال مقدار صفر موتور از حرکت میایستد و با ارسال مقدار 1 موتور بهصورت راستگرد و با ارسال مقدار 2 بهصورت چپگرد شروع به حرکت میکند. توابع Serial.println موجود در برنامه نشاندهنده وضعیت موتور بوده که با ارسال هر دستور، برای تست برنامه و صحت اطلاعات ارسالشده از طریق بلوتوث بهوسیله مانیتور سریال هستند.
برنامه را بر روی برد کامپایل و با اتصال به برنامه اندروید آن را راهاندازی میکنیم. طبق تنظیماتی که بر اساس برنامه نوشتهشده، انجامشده است، با فشردن هر گزینه دستورالعمل مربوط به آن اجرا میشود.
در این مقاله استفاده از ماژول بلوتوث در قالب سادهترین پروژهها ارائه شد. در سطوح بالاتر میتوان با استفاده از این تجهیزات، یک سیستم اتوماسیون خانه و یا رباتهایی که با استفاده از گوشی هوشمندتان کنترل میشوند را ساخت.
نکات مهم:
* بههیچوجه در هنگام کامپایل برنامه بر روی UNO Arduino، نباید پینهای داده (Rx,Tx) در ماژول بلوتوث به Arduino وصل باشد. در این صورت هیچ ارتباطی برقرار نخواهد شد.
** به این نکته کاملاً توجه داشته باشید که در هنگام استفاده از دو منبع تغذیه جدا برای Arduino و درایور موتور، حتماً زمینها یکی شود؛ در غیر این صورت مدار بهدرستی عمل نخواهد کرد.
*** در حالت کلی از هر نرمافزار برقراری ارتباط سریال در گوشیهای هوشمند، برای اتصال و ارسال داده از گوشی میتوان استفاده کرد، ما در اینجا از نرمافزار Bluetooth Arduino Controller استفاده کردهایم. فقط به این نکته توجه شود که در استفاده از هر نرمافزار، میبایست داده ارسالشده یکی از مقادیر مشخصشده در برنامه باشد.
سلام، بسیار مفید بود و عملا برای من کار کرد، فقط میشه متغیر flag رو برای من یه توضیح ساده ای بدید،،در ضمن تبادل داده ها هم با 9600جواب نمیده،باید 115200باشه.. ممنون
با سلام خدمت مهندس عزیز.
من یک مبتدی هستم و سوالم این هست که سورس کد برنامه اول و سورس کد برنامه دوم باید هر دو داخل محیط برنامه نویسی یکی بشن و کمپایل شود؟
با عرض سلام و خسته نباشید اول تشکر فراوانی میکنم بابت مطالب خوبتون خیلی کار آمد بود
خدمت شما عارضم ک من دستگاه CNC درست کردم و از طریق برنامه ی GRBLمیتونم بهش کدهاشو بدم و این برنامه رو روی گوشی نصب کردم فقط خواستم ببینم میتونم ماژول HC05رو روی UNOنصب کنم که از طریق بلوتوث بتونم کدهای برنامه GRBLرو واسه CNCارسال کنم
قطعاتی ک داخل CNCاستفاده کردم
UNO,
Ramps 1.4
درایور A4988
با کدوم کد به عقب برمیگرده
سلام من امیرم میشه بگی چه شکلی درست کردی شد بگو واتساب 09932368629
سلام میشه برای هلو گرام یا متن تبلیغاتی استفاده کرد چون تعداد ال ای دی ها چند تا بیشتر نیست البته می خواهم با لیزر امتخان کنم چه مدل سفارش بدم