اردوينو – الدرس السادس عشر – التحكم باتجاه وسرعة دوران محرك DC Motor

مبتدئ

image_pdf

الكود البرمجي

ارفع الكود التالي على متحكم الاردوينو:

int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int switchPin = 7;
int potPin = 0;
 
void setup()
{
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(switchPin, INPUT_PULLUP);
}
 
void loop()
{
  int speed = analogRead(potPin) / 4;
  boolean reverse = digitalRead(switchPin);
  setMotor(speed, reverse);
}
 
void setMotor(int speed, boolean reverse)
{
  analogWrite(enablePin, speed);
  digitalWrite(in1Pin, ! reverse);
  digitalWrite(in2Pin, reverse);
}

داخل دالة setup تم تعريف المنافذ وحالاتها .
داخل دالة loop ، يتم تحديد قيمة السرعة للمحرك DC Motor DC Motor عبر اخذ قراءة القيمة التناظرية ‘analogRead’ من المقاوم المتغير ‘pot’ وقسمته على 4.

السبب وراء القسمة على 4 هي لأن القيمة المستخرجة من القراءة التناظرية ‘analogRead’ تكون مابين 0 و 1023 ولكنها يجب أن تكون القيمة بي 0 و 255.

اذا تم الضغط على الزر ، فإن محرك DC Motor سيتحرك للأمام ، وبالضغط مره أخرى سيتحرك بعكس الاتجاه.
القيمة  لمتغير ‘reverse’ يتم أخذه من متغير ‘switchPin’ ،لذا عند الضغط على الزر ستكون القيمة 0،وعند الضغط مره أخى ستكون القيمة 1 .

قيمة السرعة و الانعكاس ‘reverse’ يتم تمريرها إلى الدالة ‘setMotor’ والتي ستحدد المنافذ لرقاقة التحكم بمحرك للتحكم .

void setMotor(int speed, boolean reverse)
{
  analogWrite(enablePin, speed);
  digitalWrite(in1Pin, ! reverse);
  digitalWrite(in2Pin, reverse);
}

أولاً ، السرعة تم تحديدها عبر استخدام ‘analogWrite’ لمنفذ enable pin . منفذ enable pin يقوم بتشغيل أو اطفاء المحرك بغض النظر عن قيم منافذ in1 و in2.

للتحكم باتجاه حركة الدوران للمحرك DC Motor علينا عكس قيم منافذ in1 و in2.

اذا كانت قيمة in1 عالية (اي تساوي 1) و قيمة in2 منخفضة (اي تساوي 0)، سيقوم محرك DC Motor بالدوران باتجاه واحد ، واذا تم عكس القيم لمنافذ in1 و in2 فسيقوم محرك DC Motor بالدوران بالاتجاه المعاكس.

الأمر ‘ ! ‘  يعني ‘ ليس – not’  لذلك أول امر ‘digitalWrite’ لـin1 يقوم بعكس القيمة المأخوذه من  ‘reverse’ فمثلاً لو كانت القيمة عالية (تساوي 1) فسيوقم بعكسها إلى قيمة منخفضة (تساوي 0) والعكس صحيح.

الأمر الثاني ‘digitalWrite’ لـin2 يقوم بأخذ القيمة من ‘reverse’ وهذا يعني بأنها ستكون دائما عكس القيمة لـin1 .

X
Product added to the cart