در این مثال ما جهت یک محرک خطی را با یک آردوینو و دو سوئیچ لحظه ای کنترل خواهیم کرد. این آموزش بر اساس مبانی بحث شده در آموزش "کنترل سرعت موتور درایور با آردوینو"، توصیه می کنیم قبل از ادامه ، آن آموزش را مرور کنید.
این آموزش به دو بخش تقسیم شده است: دکمه های فشاری که در حالت لحظه ای عمل می کنند (به عنوان مثال محرک ها با انتشار دکمه متوقف می شوند) و دکمه های فشاری که در حالت پایدار عمل می کنند (یعنی محرک ها حتی هنگام آزاد شدن دکمه نیز به حرکت خود ادامه می دهند).
توجه: این آموزش دانش قبلی را با اصول اولیه الکترونیکی ، سخت افزار و نرم افزار آردوینو در نظر گرفته است. اگر اولین بار است که از Arduino استفاده می کنید ، پیشنهاد می کنیم اصول را از یکی از بسیاری از آموزش های عالی مبتدی برای جستجو در Google و YouTube بیاموزید. لطفاً توجه داشته باشید که منابعی برای ارائه پشتیبانی فنی برای برنامه های سفارشی نداریم و خارج از این آموزشهای عمومی که موجود نیست ، اشکال زدایی ، ویرایش ، ارائه کد یا سیم کشی را انجام نمی دهیم.
اجزاء
- محرک خطی 12 ولت
- منبع تغذیه 12 ولت
- آردوینو
- راننده موتور
- دو دکمه لحظه ای (به صورت اختیاری دکمه سوم برای کنترل قفل)
- سیم های برق برای ایجاد اتصالات و ابزار چین دار یا آهن لحیم کاری
سیم کشی
بررسی اجمالی سخت افزار و نرم افزار برای کنترل لحظه ای
از سوئیچ های لحظه ای هنگامی استفاده می شود که فقط هنگام فشار دادن دکمه بخواهید محرک حرکت کند ، هنگام آزاد شدن دکمه ، محرک به طور خودکار متوقف می شود. کد زیر را بارگذاری کنید
کد کنترل لحظه ای
https://gist.github.com/Will-Firgelli/aeee209bda6b2246359eed70ec353eb8
/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program enables momentary direction control of actuator using push button
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int downPin = 12;
int upPin = 13;
int Speed = 255; //choose any speed in the range [0, 255]
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(downPin, INPUT_PULLUP);
pinMode(upPin, INPUT_PULLUP);
}
void loop() {
if(digitalRead(upPin)==LOW){ //check if extension button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else if(digitalRead(downPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
else{ //if no button is pushed, remain stationary
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}
}
بررسی اجمالی سخت افزار و نرم افزار برای حفظ کنترل
متناوباً ، بعضی اوقات ممکن است بخواهید از یک دکمه قفل استفاده کنید. هنگامی که دکمه را فشار می دهید محرک را حرکت دهید و هنگامی که دکمه را رها می کنید به حرکت ادامه دهید. برای دستیابی به این هدف باید یک سوییچ دیگر به پین 8 و GND متصل کنید ، سپس برنامه را در زیر بارگذاری کنید. از آنجا که هنگام آزاد شدن دکمه ، محرک متوقف نمی شود ، این کلید جدید دکمه "توقف" را بازی می کند.
کد پایدار کنترل
https://gist.github.com/Will-Firgelli/2b96dce14c0cee7a0009e61e47cc5f67/* Firgelli Automations
* Limited or no support: we do not have the resources for Arduino code support
*
* Program enables latching direction control of actuator using push button
*/
int RPWM = 10; //connect Arduino pin 10 to IBT-2 pin RPWM
int LPWM = 11; //connect Arduino pin 11 to IBT-2 pin LPWM
int stopPin = 8;
int downPin = 12;
int upPin = 13;
int Speed = 255; //choose any speed in the range [0, 255]
void setup() {
pinMode(RPWM, OUTPUT);
pinMode(LPWM, OUTPUT);
pinMode(stopPin, INPUT_PULLUP);
pinMode(downPin, INPUT_PULLUP);
pinMode(upPin, INPUT_PULLUP);
}
void loop() {
if(digitalRead(upPin)==LOW){ //check if extension button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, Speed);
}
else if(digitalRead(downPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, Speed);
analogWrite(LPWM, 0);
}
else if(digitalRead(stopPin)==LOW){ //check if retraction button is pressed
analogWrite(RPWM, 0);
analogWrite(LPWM, 0);
}
}