در قسمت 48 آموزش آردوینو به کنترل چرخش سروو موتورها با استفاده از پتانسیومتر یا سنسور، کنترل سرعت سروو موتورهای چرخش مداوم (rotation servo motors) و کنترل سرووها موتورها با استفاده از دستورات کامپیوتری پرداختیم. در این قسمت قصد داریم درباره راهاندازی موتور brushless (با استفاده از کنترلر سرعت ) ، راهاندازی vibration motor و نحوه کنترل Solenoids و رلهها صحبت کنیم.
فرض کنید یک موتور brushless دارید و میخواهید سرعت آن را کنترل کنید. این اسکچ از همان کدی استفاده میکند که در آموزش کنترل سروو موتور با آردوینو: پتانسیومتر، سرعت و پورت سریال آمده است. سیمبندی نیز مشابه است، بهجز جایگزینی کنترلر سرعت و موتور. کنترلر سرعت الکترونیکی (Electronic Speed Controller یا ESC) وسیلهای است که برای کنترل موتورهای brushless در وسایل رادیو کنترل به کار میرود. چون این وسایل بهصورت انبوه تولید میشوند، راهکاری مقرونبهصرفه برای راهاندازی موتورهای brushless هستند. میتوانید این کنترلرها را با جستجوی عبارت «ESC» در موتور جستجوی قطعات الکترونیک ISEE پیدا کنید.
موتورهای brushless دارای سه سیمپیچ هستند که باید مطابق راهنمای کنترلر سرعت و همانند شکل ( 1 ) به هم متصل شوند. برای کار با آردوینو، حتماً راهنمای ESC خود را بخوانید. بهعنوان مثال، کنترلر سرعت شرکت RC Electric Parts پیشنهاد میکند که کتابخانهٔ Servo را با دستور زیر مقداردهی اولیه کنید:
|
1 2 3 |
```cpp servo.attach(pin, 1000, 2000); ``` |

شکل ( 1 ) اتصال یک کنترلکننده سرعت الکترونیکی
فرض کنید میخواهید سلونوئید(solenoid) یا رلهای الکترومغناطیسی را تحت کنترل برنامه فعال کنید. سلونوئیدها آهنرباهای الکتریکی هستند که انرژی الکتریکی را به حرکت مکانیکی تبدیل میکنند. رلهٔ الکترومغناطیسی سوییچی است که توسط سلونوئید فعال میشود.
اکثر سلونوئیدها به توان بیشتری نسبت به آنچه یک پین آردوینو میتواند تأمین کند نیاز دارند؛ بنابراین از ترانزیستور برای قطع و وصل کردن جریان مورد نیاز استفاده میشود. فعال کردن سلونوئید با استفاده از دستور digitalWrite و قرار دادن پین در وضعیت HIGH انجام میشود. اسکچ زیر یک ترانزیستور را مطابق شکل (2) راهاندازی میکند؛ سلونوئید هر ساعت برای یک ثانیه فعال میشود:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
```cpp /* * Solenoid sketch */ int solenoidPin = 2; // Solenoid connected to transistor on pin 2 void setup() { pinMode(solenoidPin, OUTPUT); } void loop() { long interval = 1000 * 60 * 60 ; // interval = 60 minutes digitalWrite(solenoidPin, HIGH); // activates the solenoid delay(1000); // waits for a second digitalWrite(solenoidPin, LOW); // deactivates the solenoid delay(interval); // waits one hour } ``` |

شکل ( 2 ) راه اندازی سلونوئید با ترانزیستور
ترانزیستورهای کوچکی مانند 2N2222 برای سلونوئیدهایی که تا چند صد میلیآمپر جریان میکشند مناسب هستند. سلونوئیدهای بزرگتر به ترانزیستورهای توان بالا مانند TIP102/TIP120 یا مشابه آن نیاز دارند.
نقش دیود در مدار، محافظت از ترانزیستور در برابر ولتاژ معکوسی است که هنگام قطع جریان در سیمپیچ ایجاد میشود. جهت دیود مهم است؛ روی دیود نواری رنگی وجود دارد که کاتد را نشان میدهد و باید به قطب مثبت تغذیهٔ سلونوئید متصل شود.
رلههای الکترومغناطیسی درست مانند سلونوئیدها فعال میشوند. نوعی رله به نام رلهٔ حالت جامد (SSR) وجود دارد که میتوان آن را مستقیماً به پین آردوینو متصل، و بدون ترانزیستور درایور راهاندازی کرد. همیشه دیتاشیت رله را بررسی کنید تا ببینید به چه ولتاژ و جریانی نیاز دارد؛ اگر جریان مورد نیاز در ولتاژ ۵ ولت بیش از ۴۰ میلیآمپر باشد، باید از مداری مانند شکل (2 ) استفاده کنید.
در این بخش یاد میگیریم چطور با Arduino یک vibration motor را کنترل کنیم؛ یعنی کاری کنیم یک وسیله در زمانهای مشخص بلرزد. مثلاً میتوانیم کاری کنیم هر یک دقیقه، به مدت یک ثانیه لرزش داشته باشد.
برای این کار، vibration motor را باید مطابق مدار شکل (3) به Arduino وصل کنیم. در این مدار از چند قطعه کمکی استفاده میشود تا هم موتور درست کار کند و هم به Arduino آسیب نرسد.
برای خازن 0.1 میکرو فارادی میتوان از خازن سرامیکی استفاده کرد. اگر بهجای آن از خازنهای الکترولیتی استفاده میکنید، باید حتماً جهت آن را درست وصل کنید. پایه مثبت خازن الکترولیتی باید به مقاومت 33 اهم متصل شود؛ همان مقاومتی که به +5V متصل است.

شکل (3 ) اتصال vibration motor
در این مدار، از یک موتور برای مخصوص لرزش استفاده شده است؛ مثل SparkFun ROB-08449. اگر یک تلفن قدیمی دارید که دیگر به آن نیاز ندارید، ممکن است داخل آن vibration motors های کوچک وجود داشته باشد که برای این کار مناسب باشند. vibration motor ها به توان بیشتر از چیزی که یک پین Arduino میتواند فراهم کند نیاز دارند. به همین دلیل، از یک transistor استفاده برای روشن یا خاموش کردن موتور استفاده میشود.
تقریباً هر ترانزیستور NPN را میتوان موضوع در این مدار استفاده کرد. در شکل ( 3) مدل رایج 2N2222 نشان داده شده است. یک پین خروجی Arduino از طریق یک مقاومت 1k اهمی یک ترانزیستور را قطع و وصل میکند. مقدار این مقاومت خیلی مهم نیست و میتوانید از مقدارهایی تا حدود 4.7K ohm اهم استفاده کنید. این مقاومت جلوی عبور جریان بیش از حد از output pin را میگیرد.
diode ولتاژهایی را که هنگام چرخش توسط سیم پیچ موتور تولید میشوند جذب یا مهار میکند. به همین دلیل گاهی به آن دیود اسنابر (snubber diode ) هم گفته میشود.
خازن ، جهش ولتاژ تولیدشده هنگام باز و بسته شدن براش ها (brushes) را جذب میکند.براش ها (brushes ) همان اتصال هایی هستند که جریان الکتریکی را به سیم پیچهای موتور وصل میکنند. وجود مقاومت 33ohm الزامی است، چون مقدار جریان عبوری از موتور را محدود میکند.
این موضوع باعث می شود ، output pin را به مدت یک ثانیه، یعنی 1,000 میلی ثانیه، در وضعیت HIGH قرار دهد و سپس 59 ثانیه صبر میکند. وقتی pin در وضعیت HIGH باشد، transistor روشن میشود و جریان را عبور میدهد. در نتیجه جریان از موتور عبور میکند و موتور شروع به لرزش میکند.
در ادامه، یک پروژه برای راه اندازی یک vibration motors با استفاده از sensor رائه شده است. اتصالات این مدار شبیه شکل (3) است، با این تفاوت که یک فتوسل ( LDR ) هم به analog pin 0 وصل میشود.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* * Vibrate_Photocell sketch * Vibrate when photosensor detects light above ambient level */ const int motorPin = 3; // vibration motor transistor is connected to pin 3 const int sensorPin = A0; // Photodetector connected to analog input 0 int sensorAmbient = 0; // ambient light level (calibrated in setup) const int thresholdMargin = 100; // how much above ambient needed to vibrate void setup() { pinMode(motorPin, OUTPUT); sensorAmbient = analogRead(sensorPin); // get startup light level } void loop() { int sensorValue = analogRead(sensorPin); if( sensorValue > sensorAmbient + thresholdMargin) { digitalWrite(motorPin, HIGH); // vibrate } else { digitalWrite(motorPin, LOW); // stop vibrating } } |
در اینجا وقتی نور روی photocell بتابد، output pin فعال میشود.سپس سطح نور پسزمینه روی sensor خوانده میشود و در متغیری به نام sensorAmbient ذخیره میشود. بعد از آن، مقدارهای نوری در یک loop خوانده میشوند، اگر از مقدار ذخیرهشده در sensorAmbient بیشتر باشند، باعث روشن شدن vibration motor میشوند.
من کاپیتان آردوینو، اسمم میلاده و اینجا هستم تا تجربیاتم در رابطه با آردوینو رو با شما به اشتراک بزارم!
سلام ساخت اندورید باکس با برد آردوینو uno r3 یا میکرو کنترل uno r3 رابه من آموزش دهید تشکر پیام بزن
سلام جناب ظهوری گرامی روند انتشار مقالات و محتوی در سیسوگ طبق برنامه از چیش تعریف شده هست ولی حتما درخواست شما مطرح میشه تا برای این موضوع محتوای لازم تهیه و منتشر شود . با تشکر از همراهی شما دوست گرامی
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.