كود تشغيل محرك DC باستخدام اردوينو


 

 ﺍﻟﺘﺤﻜﻢ ﺑﺎﺗﺠﺎﻩ ﻭﺳﺮﻋﺔ ﺩﻭﺭﺍﻥ ﻣﺤﺮﻙ : DC Motor

ﻓﻲ ﻫﺬﺍ ﺍﻟﺪﺭﺱ ﺳﺘﺘﻌﻠﻢ ﻛﻴﻔﻴﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺴﺮﻋﺔ ﻭﺍﺗﺠﺎﻩ ﺣﺮﻛﺔ ﻣﺤﺮﻙ ﺍﻟﺘﻴﺎﺭ ﺍﻟﻤﺴﺘﻤﺮ ﺍﻟﺼﻐﻴﺮ

 DC Motor ﻋﻦ ﻃﺮﻳﻖ ﺍﻷﺭﺩﻭﻳﻨﻮ ﻭﺭﻗﺎﻗﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺤﺮﻙ L293D .

ﻓﻲ ﻫﺬﻩ ﺍﻟﺘﺠﺮﺑﺔ ﺍﺳﺘﺨﺪﻣﻨﺎ ﺍﻟﻤﻘﺎﻭﻡ ﺍﻟﻤﺘﻐﻴﺮ ’pot‘ ﻟﻠﺘﺤﻜﻢ ﺑﺴﺮﻋﺔ ﺍﻟﻤﺤﺮﻙ ،

ﻛﻤﺎ ﺍﺳﺘﺨﺪﻣﻨﺎ ﺯﺭ push‘ ’button ﻟﻠﺘﺤﻜﻢ ﻓﻲ ﺍﺗﺠﺎﻩ ﺣﺮﻛﺔ ﺍﻟﻤﺤﺮﻙ .

 ﻋﻠﻴﻨﺎ ﺍﺟﺮﺍﺀ ﺍﻟﺘﺠﺮﺑﺔ ﻣﻊ ﺭﻗﺎﻗﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺤﺮﻙ L293D ﻟﻠﺘﻌﺮﻑ ﻋﻠﻰ ﻃﺮﻳﻘﺔ ﻋﻤﻠﻬﺎ .

ﻛﻞ ﻣﺎﻋﻠﻴﻨﺎ ﻓﻌﻠﻪ ﻫﻮ ﺗﻮﻓﻴﺮ ﻃﺎﻗﺔ 5V ﻣﻦ ﺍﻷﺭﺩﻭﻳﻨﻮ ﻟﻠﻤﺤﺮﻙ ﺍﻟﺼﻐﻴﺮ .

 ﻻﺣﻆ ﺍﺗﺠﺎﻩ ﺩﻭﺭﺍﻥ ﺍﻟﻤﺤﺮﻙ ، ﻳﻤﻜﻨﻚ ﻟﻤﺲ ﺍﻟﻤﺤﺮﻙ ﺑﺄﺻﺎﺑﻌﻚ ﻟﻤﻌﺮﻓﺔ ﺍﺗﺠﻬﺎ ﺍﻟﺤﺮﻛﻪ . ﻳﻤﻜﻨﻚ ﻋﻜﺲ ﺍﺗﺠﺎﻩ ﺣﺮﻛﺔ ﺍﻟﻤﺤﺮﻙ ﻋﺒﺮ ﻋﻜﺲ ﺗﻮﺻﻴﻼﺕ ﺍﻟﻤﺤﺮﻙ ‏( ﻗﻢ ﺑﺘﺒﺪﻳﻞ ﺗﻮﺻﻴﻠﺔ ﺍﻟـ 5V ﺑـ GND ، ﻛﺬﻟﻚ ﺍﻟﺤﺎﻝ ﻣﻊ ﺍﻟﺘﻮﺻﻴﻠﻪ ﺍﻷﺧﺮﻯ ‏) ﺑﺬﻟﻚ ﺳﺘﺮﻯ ﺍﻧﻌﻜﺎﺱ ﻻﺗﺠﺎﻩ ﺣﺮﻛﺔ ﺍﻟﺪﻭﺭﺍﻥ .

ﻭﻫﺬﺍ ﻫﻮ ﺩﻭﺭ ﺭﻗﺎﻗﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺤﺮﻙ L293D ، ﺗﻘﻮﻡ ﺑﺎﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﻨﺎﻓﺬ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﻄﺎﻗﺔ ﻭﺍﻟﻤﺠﺎﻝ ﺍﻷﺭﺿﻲ GND ﻭﺑﺬﻟﻚ ﺗﺘﺤﻜﻢ ﺑﺎﺗﺠﺎﻩ ﺣﺮﻛﺔ ﺍﻟﺪﻭﺭﺍﻥ .

ﻗﻢ ﺑﺒﻨﺎﺀ ﻟﻮﺡ ﺍﻟﺘﺠﺎﺭﺏ ﻛﺎﻟﺘﺎﻟﻲ ، ﻻﺣﻆ ﺍﻥ ﺩﻭﺭ ﻣﺘﺤﻜﻢ ﺍﻷﺭﺩﻭﻳﻨﻮ ﻫﻨﺎ ﻫﻮ ﺗﻮﻓﻴﺮ ﺍﻟﻄﺎﻗﻪ ﻓﻘﻂ .

ﺍﻟﻤﻨﺎﻓﺬ ﺍﻟﺘﻲ ﺗﻬﻤﻨﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺮﻗﺎﻗﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺤﺮﻙ L293D ﻫﻲ ﺛﻼﺙ ﻣﻨﺎﻓﺬ ، ﻣﻨﻔﺬ( 1 Pin 1 (Enable ‏) ، ﻣﻨﻔﺬ) 2 Pin 2 (In1 ‏) ، ﻭﻣﻨﻔﺬ) 7 Pin 7 (In2 ‏) .

ﻭﻫﺬﻩ ﺗﻜﻦ ﻣﻮﺻﻮﻟﺔ ﺇﻣﺎ ﺑـ 5V ﺃﻭ GND ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺴﻠﻚ ﺍﻟﺒﻨﻔﺴﺠﻲ ، ﺃﻭ ﺍﻷﺻﻔﺮ ﺃﻭ ﺍﻟﺒﺮﺗﻘﺎﻟﻲ .

ﺍﺫﺍ ﻗﻤﺖ ﺑﺮﺑﻂ Pin 1 (Enable ‏) ﻟﻠـ GND ﺳﻴﺘﻮﻗﻒ ﺍﻟﻤﺤﺮﻙ، ﻣﻬﻤﺎ ﻓﻌﻠﺖ ﺑـ pin In1 ﻭ pin In2 . ﻳﻘﻮﻡ Enable ﺑﺎﻟﺘﺸﻐﻴﻞ ﺃﻭ ﺍﻹﻃﻔﺎﺀ . ﻫﺬﺍ ﻳﺠﻌﻠﻪ ﻣﻔﻴﺪ ﻻﺳﺘﺨﺪﺍﻡ ‘ PWM output ’ ﻟﻠﺘﺤﻜﻢ ﻓﻲ ﺳﺮﻋﺔ ﺍﻟﻤﺤﺮﻙ . ﻗﻢ ﺑﺘﻮﺻﻴﻞ Pin 1 ﺇﻟﻰ 5V ﻟﺘﺸﻐﻴﻞ ﺍﻟﻤﺤﺮﻙ ﻣﺮﻩ ﺃﺧﺮﻯ .

ﻭﺍﻻﻥ ﻗﻢ ﺑﺘﻐﻴﻴﺮ In1 (pin 2 , ﺃﺻﻔﺮ ‏) ﻣﻦ 5V ﺇﻟﻰ GND.

In1 ﻭ In2 ﺟﻤﻴﻌﻬﺎ ﻣﺮﺗﺒﻄﻪ ﺑـ GND ، ﻭﺑﺎﻟﺘﺎﻟﻲ ﺳﻴﺘﻮﻗﻒ ﺍﻟﻤﺤﺮﻙ ﻣﺮﻩ ﺃﺧﺮﻯ .

ﺗﻐﻴﻴﺮ In2 ﻣﻦ GND ﺇﻟﻰ 5V ﺳﻴﻌﻜﺲ ﺣﺮﻛﺔ ﺩﻭﺭﺍﻥ ﺍﻟﻤﺤﺮﻙ ‏( ﺍﻻﺗﺠﺎﻩ ﺍﻵﺧﺮ ‏) .

ﺃﺧﻴﺮﺍً ، ﺑﺘﻐﻴﻴﺮ In1 ﻭﺭﺑﻄﻪ ﻣﺮﻩ ﺃﺧﺮﻯ ﺑـ 5V ﺑﺎﻟﺘﺎﻟﻲ ﺳﻴﻜﻮﻥ In1 ﻭ In2 ﻣﺮﺗﺒﻄﻪ ﺑـ 5V ﺳﻴﻮﻗﻒ ﺍﻟﻤﺤﺮﻙ .

 

 

قم ﺑﺮﻓﻊ ﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﻋﻠﻰ ﻣﺘﺤﻜﻢ ﺍﻷﺭﺩﻭﻳﻨﻮ :

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 ، ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻗﻴﻤﺔ ﺍﻟﺴﺮﻋﺔ ﻟﻠﻤﺤﺮﻙ ﻋﺒﺮ ﺍﺧﺬ ﻗﺮﺍﺀﺓ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻨﺎﻇﺮﻳﺔ ’analogRead‘ ﻣﻦ ﺍﻟﻤﻘﺎﻭﻡ ﺍﻟﻤﺘﻐﻴﺮ ’pot‘ ﻭﻗﺴﻤﺘﻪ ﻋﻠﻰ .4

ﺍﻟﺴﺒﺐ ﻭﺭﺍﺀ ﺍﻟﻘﺴﻤﺔ ﻋﻠﻰ 4 ﻫﻲ ﻷﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﺴﺘﺨﺮﺟﺔ ﻣﻦ ﺍﻟﻘﺮﺍﺀﺓ ﺍﻟﺘﻨﺎﻇﺮﻳﺔ ’analogRead‘ ﺗﻜﻮﻥ ﻣﺎﺑﻴﻦ 0 ﻭ 1023 ﻭﻟﻜﻨﻬﺎ ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻘﻴﻤﺔ ﺑﻲ 0 ﻭ .255

ﺍﺫﺍ ﺗﻢ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﺍﻟﺰﺭ ، ﻓﺈﻥ ﺍﻟﻤﺤﺮﻙ ﺳﻴﺘﺤﺮﻙ ﻟﻸﻣﺎﻡ ، ﻭﺑﺎﻟﻀﻐﻂ ﻣﺮﻩ ﺃﺧﺮﻯ ﺳﻴﺘﺤﺮﻙ ﺑﻌﻜﺲ ﺍﻻﺗﺠﺎﻩ .

ﺍﻟﻘﻴﻤﺔ ﻟﻤﺘﻐﻴﺮ ’reverse‘ ﻳﺘﻢ ﺃﺧﺬﻩ ﻣﻦ ﻣﺘﻐﻴﺮ ’switchPin‘ ،ﻟﺬﺍ ﻋﻨﺪ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﺍﻟﺰﺭ ﺳﺘﻜﻮﻥ ﺍﻟﻘﻴﻤﺔ 0 ،ﻭﻋﻨﺪ ﺍﻟﻀﻐﻂ ﻣﺮﻩ ﺃﺧﻰ ﺳﺘﻜﻮﻥ ﺍﻟﻘﻴﻤﺔ 1 .

ﻗﻴﻤﺔ ﺍﻟﺴﺮﻋﺔ ﻭ ﺍﻻﻧﻌﻜﺎﺱ ’reverse‘ ﻳﺘﻢ ﺗﻤﺮﻳﺮﻫﺎ ﺇﻟﻰ ﺍﻟﺪﺍﻟﺔ ’setMotor‘ ﻭﺍﻟﺘﻲ ﺳﺘﺤﺪﺩ ﺍﻟﻤﻨﺎﻓﺬ ﻟﺮﻗﺎﻗﺔ ﺍﻟﺘﺤﻜﻢ ﺑﺎﻟﻤﺤﺮﻙ 

 

 


المرفقات:
هل كان المحتوى مفيد؟

التعليقات

لاضافة سؤال أو تعليق على المشاركة يتوجب عليك تسجيل الدخول
تسجيل الدخول

محتاج مساعدة؟ تواصل مع مدرس اونلاين الان!

محتاج مساعدة باختيار المدرس الافضل؟ تواصل مع فريقنا الان لمساعدتك بتأمين افضل مدرس
ماهو التخصص الذي تبحث عنه؟
اكتب هنا...