code
نسخ
اقتباس
عرض
تنزيل
#include <AccelStepper.h>
// تعريف نوع المحرك وطريقة الاتصال (4 أسلاك مع ULN2003)
#define MotorInterfaceType 4 // لأن ULN2003 يستخدم 4 ملفات (Half-step)
// تعريف منافذ المحرك X (مطابقة للمشروع الأصلي)
AccelStepper stepperX(MotorInterfaceType, 11, 9, 10, 8); // IN1, IN3, IN2, IN4
// تعريف منافذ المحرك Y (مطابقة للمشروع الأصلي)
AccelStepper stepperY(MotorInterfaceType, 7, 5, 6, 4); // IN1, IN3, IN2, IN4
void setup() {
Serial.begin(9600);
// إعدادات المحرك X (28BYJ-48 مع ULN2003)
stepperX.setMaxSpeed(300); // سرعة أقل من 400 للعمل الآمن
stepperX.setAcceleration(100); // تسارع معتدل
stepperY.setMaxSpeed(300);
stepperY.setAcceleration(100);
Serial.println("System Ready with ULN2003");
Serial.println("Commands: X+100, X-50, Y+200, Y-100");
}
void loop() {
if (Serial.available() > 0) {
char axis = Serial.read();
int steps = Serial.parseInt();
if (axis == 'X' || axis == 'x') {
stepperX.move(steps);
Serial.print("Moving X ");
Serial.println(steps);
}
else if (axis == 'Y' || axis == 'y') {
stepperY.move(steps);
Serial.print("Moving Y ");
Serial.println(steps);
}
}
stepperX.run();
stepperY.run();
}
code
نسخ
اقتباس
عرض
تنزيل
/*
* Created by ArduinoGetStarted.com
*
* This example code is in the public domain
*
* Tutorial page: https://arduinogetstarted.com/tutorials/arduino-controls-28byj-48-stepper-motor-using-uln2003-driver
*/
// Include the AccelStepper Library
#include <AccelStepper.h>
// define step constant
#define FULLSTEP 4
#define STEP_PER_REVOLUTION 2048 // this value is from datasheet
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
AccelStepper stepper(FULLSTEP, 11, 9, 10, 8);
void setup() {
Serial.begin(9600);
stepper.setMaxSpeed(1000.0); // set the maximum speed
stepper.setAcceleration(50.0); // set acceleration
stepper.setSpeed(200); // set initial speed
stepper.setCurrentPosition(0); // set position
stepper.moveTo(STEP_PER_REVOLUTION); // set target position: 64 steps <=> one revolution
}
void loop() {
// change direction once the motor reaches target position
if (stepper.distanceToGo() == 0)
stepper.moveTo(-stepper.currentPosition());
stepper.run(); // MUST be called in loop() function
Serial.print(F("Current Position: "));
Serial.println(stepper.currentPosition());
}
code
نسخ
اقتباس
عرض
تنزيل
//Includes the Arduino Stepper Library
#include <Stepper.h>
// Defines the number of steps per rotation
const int stepsPerRevolution = 2038;
// Creates an instance of stepper class
// Pins entered in sequence IN1-IN3-IN2-IN4 for proper step sequence
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);//OR//11, 9, 10, 8
void setup() {
// Nothing to do (Stepper Library sets pins as outputs)
}
void loop() {
//====================================slowly full rotation
// Rotate CW slowly at 5 RPM
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution);
delay(1000);
// Rotate CCW slowly at 5 RPM
myStepper.setSpeed(5);
myStepper.step(-stepsPerRevolution);
delay(1000);
//====================================
//====================================slowly half rotation
// Rotate CW slowly at 5 RPM
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution/2);
delay(1000);
// Rotate CCW slowly at 5 RPM
myStepper.setSpeed(5);
myStepper.step(-stepsPerRevolution/2);
delay(1000);
//====================================
//====================================quickly half rotation
// Rotate CW quickly at 7 RPM
myStepper.setSpeed(7);
myStepper.step(stepsPerRevolution/2);
delay(1000);
// Rotate CCW quickly at 7 RPM
myStepper.setSpeed(7);
myStepper.step(-stepsPerRevolution/2);
delay(1000);
//====================================
}