 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
08-01-2020, 02:03 PM
المشاركة 12
|
|
الأمثلة الموجودة ضمن بيئة تطوير الاردوينو :
مثال رقم 1 : محرك الخطوة يتتبع دوران مقاومة متغيرة (أو حساس آخر) على الدخل التناظرى “0” :
البرنامج :
كود:
/*
* MotorKnob
*
* A stepper motor follows the turns of a potentiometer
* (or other sensor) on analog input 0.
*
* http://www.arduino.cc/en/Reference/Stepper
* This example code is in the public domain.
*/
#include <Stepper.h>
// change this to the number of steps on your motor
#define STEPS 100
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);
// the previous reading from the analog input
int previous = 0;
void setup() {
// set the speed of the motor to 30 RPMs
stepper.setSpeed(30);
}
void loop() {
// get the sensor value
int val = analogRead(0);
// move a number of steps equal to the change in the
// sensor reading
stepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
}
شرح البرنامج :
1- فى البداية يجب تضمين ملف الرأس للمكتبة Stepper بالصيغة :
كود:
#include <Stepper.h>
2- ثم تحديد (تعريف) عدد الخطوات STEPS فى كل دورة للمحرك الخاص بك (من خصائص المحرك) :
كود:
// change this to the number of steps on your motor
#define STEPS 100
3- بعد ذلك يتم إنشاء مثيل للفئة Stepper وليكن بالمسمى stepper مع تعيين البارامترات الخاصة به ( عدد الخطوات فى الدورة STEPS ، والأطراف المتصلة بدائرة تشغيل محرك الخطوة 8,9,10,11 ) للدالة :
كود:
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);
4- تعريف متغير القيمة السابقة لعدد الخطوات steps المطلوبة (من الدخل التناظرى) ، نوع int ، مع تعيينه بصفر:
كود:
// the previous reading from the analog input
int previous = 0;
5- فى الدالة setup يتم تحديد سرعة دوران المحرك بالقيم 30 لفة كل دقيقة (التى سوف يدور بها عند إعطائه أمر الخطوات ) ، باستخدام الدالة :
كود:
// set the speed of the motor to 30 RPMs
stepper.setSpeed(30);
6- فى الدالة loop يتم :
أ- الحصول على قراءة جهد الدخل التناظرى (قيمة الحساس) :
كود:
// get the sensor value
int val = analogRead(0);
ب- ثم إعطاء الأمر بالحركة ( الخطوة step) بقيمة التغير فى قيمة الحساس :
كود:
// move a number of steps equal to the change in the sensor reading
stepper.step(val - previous);
ت- تذكر القيمة السابقة للحساس
كود:
// remember the previous value of the sensor
previous = val;
مثال رقم 2 : التحكم فى محرح الخطوة – دورة واحدة :
• هذا البرنامج يقوم بتشغيل محرح خطوة أحادى القطبية أو ثنائى القطبية .
• المحرك متصل بالأطراف الرقمية 8-11 للاردوينو .
• المحرك يجب أن يدور دورة واحدة فى اتجاه معين ، ثم يدور دورة واحدة فى الاتجاه الآخر .
كود:
/*
Stepper Motor Control - one revolution
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor should revolve one revolution in one direction, then
one revolution in the other direction.
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
void setup() {
// set the speed at 60 rpm:
myStepper.setSpeed(60);
}
void loop() {
// step one revolution in one direction:
myStepper.step(stepsPerRevolution);
delay(500);
// step one revolution in the other direction:
myStepper.step(-stepsPerRevolution);
delay(500);
}
مثال رقم 3 : التحكم فى محرك الخطوة – خطوة واحدة فى كل مرة .
• هذا البرنامج يقوم بتشغيل محرح خطوة أحادى القطبية أو ثنائى القطبية .
• المحرك متصل بالأطراف الرقمية 8-11 للاردوينو .
• المحرك سوف يخطو "خطوة" واحدة فى كل مرة ، ببطىء شديد . يمكنك استخدام ذلك لاختبار التوصيل الصحيح لأسلاك المحرك بالأطراف المناسبة . إذا كان التوصيل صحيح فإن جميع الخطوات يجب أن تكون فى نفس الاتجاه .
• يستخدم هذا البرنامج أيضا لعد عدد الخطوات لكل دورة للمحرك ، إذا لم تكن تعرفه . ثم بعد ذلك أدخل هذا العدد فى مثال الدورة الواحدة السابق للتحقق من حصولك على العدد الصحيح .
كود:
/*
Stepper Motor Control - one step at a time
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
The motor will step one step at a time, very slowly. You can use this to
test that you've got the four wires of your stepper wired to the correct
pins. If wired correctly, all steps should be in the same direction.
Use this also to count the number of steps per revolution of your motor,
if you don't know it. Then plug that number into the oneRevolution
example to see if you got it right.
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int stepCount = 0; // number of steps the motor has taken
void setup() {
}
void loop() {
// step one step:
myStepper.step(1);
stepCount++;
delay(500);
}
مثال رقم 4 : التحكم فى محرك الخطوة : التحكم فى السرعة :
• هذا البرنامج يقوم بتشغيل محرك الخطوة أحادى القطبية أو ثنائى القطبية .
• المحرك متصل بالأطراف 8-11 للاردوينو .
• توجد مقاومة متغيرة متصلة بالدخل التناظرى رقم “0” .
• المحرك سوف يدور فى اتجاه عقارب الساعة . كلما ارتفع قيمة المقاومة المتغيرة ، كلما أسرعت سرعة المحرك . لأن الدالة setSpeed() تحدد التأخير بين الخطوات ، قد تلاحظ أن المحرك أقل إستجابة للتغيرات فى قيمة الحساس عند السرعات المنخفضة .
كود:
/*
Stepper Motor Control - speed control
This program drives a unipolar or bipolar stepper motor.
The motor is attached to digital pins 8 - 11 of the Arduino.
A potentiometer is connected to analog input 0.
The motor will rotate in a clockwise direction. The higher the potentiometer value,
the faster the motor speed. Because setSpeed() sets the delay between steps,
you may notice the motor is less responsive to changes in the sensor value at
low speeds.
*/
#include <Stepper.h>
const int stepsPerRevolution = 200; // change this to fit the number of steps per revolution
// for your motor
// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
int stepCount = 0; // number of steps the motor has taken
void setup() {
// nothing to do inside the setup
}
void loop() {
// read the sensor value:
int sensorReading = analogRead(A0);
// map it to a range from 0 to 100:
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
// set the motor speed:
if (motorSpeed > 0) {
myStepper.setSpeed(motorSpeed);
// step 1/100 of a revolution:
myStepper.step(stepsPerRevolution / 100);
}
}
مثال عملى : محرك الخطوة 28BYJ-48 مع الدائرة المتكاملة ULN2003
المحرك 28BYJ-48 هو محرك خطوى ذو 5 أسلاك أحادي القطبية والذى يتحرك 32 خطوة لكل دورة داخليًا ولكن لديه نظام تروس يحرك العمود بمعامل 64. والنتيجة هي محرك يدور بسرعة 2048 خطوة لكل دورة (32 * 64) . تجدر الإشارة إلى أن بعض هذه المحركات قد يكون لديها نظام تروس مختلف ، لذلك قد لا يكون عدد الخطوات لكل دوران للمحرك هو نفسه. هذا المحرك يعمل على 5 فولت.
يتم تغليف المحرك عادةً بلوحة تشغيل (قيادة) صغيرة تعتمد على الدائرة المتكاملة المكونة من مصفوفة ترانزستور دارلينجتون ULN2003. تحتوي اللوحة على موصل يتناسب بشكل مثالي مع أسلاك المحرك بحيث يكون سهل الاستخدام للغاية. هناك أيضا وصلات لأربعة مداخل رقمية بجهد 5 فولت ، وكذلك وصلة للتغذية .
فيما يتعلق بمصدر الإمداد بالقدرة ، هناك شيء مهم للغاية تجدر الإشارة إليه وهو أنه يجب ألا تستخدم أبدًا 5 فولت من لوحة Arduino لتشغيل هذا المحرك (أو أي محرك آخر) بصرف النظر عن مدى إغرائه. على الرغم من أن 28BYJ-48 لا يسحب الكثير من التيار ، إلا أنه سيحدث "ضوضاء" “noise” كهربائية على خطوط الإمداد بالقدرة وقد يؤدي ذلك إلى تلف Arduino. دائما استخدام مصادر قدرة منفصلة لتشغيل محركات الخطوة لخاص بك .
سنقوم بتوصيل المحرك والمشغل والاردوينو على النحو التالي:

الآن بعد أن وصلنا إلى كل شيء ، سنحتاج إلى برمجة الاردوينو . فيما يلي البرنامج الذي سنستخدمه للقيام بذلك:
كود:
/*
Demonstrates 28BYJ-48 Unipolar Stepper with ULN2003 Driver
Uses Arduino Stepper Library
*/
//Include the Arduino Stepper Library
#include <Stepper.h>
// Define Constants
// Number of steps per internal motor revolution
const float STEPS_PER_REV = 32;
// Amount of Gear Reduction
const float GEAR_RED = 64;
// Number of steps per geared output rotation
const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED;
// Define Variables
// Number of Steps Required
int StepsRequired;
// Create Instance of Stepper Class
// Specify Pins used for motor coils
// The pins used are 8,9,10,11
// Connected to ULN2003 Motor Driver In1, In2, In3, In4
// Pins entered in sequence 1-3-2-4 for proper step sequencing
Stepper steppermotor(STEPS_PER_REV, 8, 10, 9, 11);
void setup()
{
// Nothing (Stepper Library sets pins as outputs)
}
void loop()
{
// Slow - 4-step CW sequence to observe lights on driver board
steppermotor.setSpeed(1);
StepsRequired = 4;
steppermotor.step(StepsRequired);
delay(2000);
// Rotate CW 1/2 turn slowly
StepsRequired = STEPS_PER_OUT_REV / 2;
steppermotor.setSpeed(100);
steppermotor.step(StepsRequired);
delay(1000);
// Rotate CCW 1/2 turn quickly
StepsRequired = - STEPS_PER_OUT_REV / 2;
steppermotor.setSpeed(700);
steppermotor.step(StepsRequired);
delay(2000);
}
في هذا البرنامج ، نستخدم المكتبة Stepper التي تأتي ضمن بيئة تطوير الاردوينو . تهتم هذه المكتبة بتسلسل النبضات التي سنرسلها إلى محرك الخطوة ويمكن استخدامها مع مجموعة واسعة من المحركات ، أحادية القطب وثنائية القطب.
تتميز محركات الخطوة 28BYJ-48 بأن لها تروس داخلية مما يقلل من سرعة دوران عمود الخرج بمعامل 64 (البعض يختلف ). لذلك نحدد (نعرف) ثلاثة ثوابت للتعامل مع دوران المحرك:
• STEPS_PER_REV وهو عدد الخطوات التي يتخذها المحرك الفعلي لكل دورة. تم تعيينا بالقيمة 32.
• GEAR_RED وهو مقدار تقليل (تخفيض) التروس. تم وضعها بالقيمة 64 ولكن قد تحتاج إلى ضبطها إذا كان المحرك مختلفًا .
• STEPS_PER_OUT_REV وهو الخرج النهائي لعمود المحرك بعد تخفيض التروس. وهو حاصل ضرب الرقمين أعلاه.
في حال كنت تتساءل عن سبب استخدام النوع float بدلاً من integer للثوابت أعلاه ، فذلك لأن تخفيض التروس في بعض الأحيان يصل عدد مثل 63.5. إذا كنت تستخدم 64 ، يمكنك استخدام الأعداد الصحيحة integers .
سيتم استخدام المتغير "StepsRequired" لتحديد (لتعريف) عدد الخطوات التي نريد أن يدور بها محركنا.
محرك الخطوة أحادى القطبية 28BYJ-48 له تسلسل خطوة كما يلي: 1-3-2-4 سيتم استخدام هذه المعلومات لقيادة المحرك عن طريق إنشاء مثيل للفئة Stepper يسمى "steppermotor" مع تسلسل الأطراف 8,10, 9, 11 . تأكد تحقيق ذلك أو أن المحرك لن يعمل بشكل صحيح.
لا يوجد شيء لتعيينه في الدالة setup لأن فئة المكتبة Stepper تقوم بالفعل بتعيين أطراف الدخل / الخرج الأربعة كمخارج .
في الدالة loop لدينا ثلاثة عروض توضيحية ، لك الحرية لإضافة أكبر عدد تريده أو لتغيير الموجود .
التشغيل الأول يخطو المحرك أربع خطوات ببطء شديد. من المثير للاهتمام ملاحظة الليدات في UNL2003 أثناء تشغيلها.
التشغيل الثانى يدور المحرك في اتجاه عقارب الساعة نصف دوره ببطء شديد. والتشغيل النهائى يعود المحرك نصف دورة بسرعة أكبر بكثير. يمكنك تجربة البارامتر "setSpeed" لتحديد السرعة القصوى لمحركك.
|