دمج الوحدات · الدرس 3.7
التحكم بالمحرك الخطوي (Stepper Motor) عبر جهاز التحكم عن بُعد (IR Remote Control)
العودة إلى الدروسالتحكم عن بعد
ستتحكم بمحرك خطوي (Stepper Motor) عبر جهاز تحكم عن بُعد (IR Remote). تأتي لوحة القيادة مع المحرك فتسهل توصيله بـ UNO. ولتجنب تغذيته مباشرة من UNO، نستخدم وحدة طاقة (Power Supply Module) صغيرة تركب على لوحة التجارب (Breadboard) ومحول طاقة (9V1A Adapter). يتصل مستقبل الأشعة تحت الحمراء (IR Receiver Module) بـ UNO مباشرة لقلة استهلاكه.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3) ولوحة تجارب (Breadboard) 830 نقطة.
- مستقبل الأشعة تحت الحمراء (IR Receiver Module) وجهاز تحكم عن بُعد (IR Remote).
- وحدة قيادة المحرك الخطوي (ULN2003 Stepper Motor Driver Module) ومحرك خطوي (Stepper Motor).
- وحدة تغذية (Power Supply Module) ومحول طاقة (9V1A Adapter).
- تسعة أسلاك أنثى إلى ذكر (Female to Male DuPont Wires) وسلك ذكر إلى ذكر (Male to Male Jumper Wires).
التوصيل


أربعة منافذ 8–11 للمحرك، ومنفذ 12 لاستقبال IR. وصّل 5V وأرضي UNO بالحساس. غذِّ المحرك من وحدة لوحة التجارب (Breadboard) احتياطًا لأنه قد يستهلك أكثر من قدرة UNO، ولتجنب إتلاف تغذيتها.
البرنامج والتجربة
قبل رفع البرنامج، تأكد من توفر مكتبتي IRremote و Stepper في بيئة Arduino IDE. إذا لم تكن مثبتة أو ظهرت رسالة تشير إلى مكتبة مفقودة، فاتبع خطوات التثبيت في قسم «ما هي المكتبات؟» وطرق تثبيتها في الدرس 1.5 «وميض LED وإضافة المكتبات».
افتح ملف البرنامج With_Remote.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.
إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.
يتعرف البرنامج إلى زري + و- فقط. الضغط على + يدير المحرك دورة كاملة مع عقارب الساعة؛ والضغط على- دورة كاملة عكسها.
الكود
With_Remote/With_Remote.ino
//www.elegoo.com
//2016.12.12
#include "Stepper.h"
#include "IRremote.h"
/*----- Variables, Pins -----*/
#define STEPS 32 // Number of steps per revolution of Internal shaft
int Steps2Take; // 2048 = 1 Revolution
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 6
/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4
Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
void setup()
{
irrecv.enableIRIn(); // Start the receiver
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
switch(results.value)
{
case 0xFFA857: // VOL+ button pressed
small_stepper.setSpeed(500); //Max seems to be 500
Steps2Take = 2048; // Rotate CW
small_stepper.step(Steps2Take);
delay(2000);
break;
case 0xFF629D: // VOL- button pressed
small_stepper.setSpeed(500);
Steps2Take = -2048; // Rotate CCW
small_stepper.step(Steps2Take);
delay(2000);
break;
}
irrecv.resume(); // receive the next value
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
}/* --end main loop -- */