====== ULN2003 ====== * http://www.instructables.com/id/BYJ48-Stepper-Motor/ * library : http://engyfun.blogspot.fr/2015/02/here-is-source-code-for-our-28byj48.html {{:materiel:uln2003:uln2003.jpg|}} {{youtube>Sl2mzXfTwCs?large}} ===== Exemple ===== /* BYJ48 Stepper motor code Connect : IN1 >> D8 IN2 >> D9 IN3 >> D10 IN4 >> D11 VCC ... 5V Prefer to use external 5V Source Gnd written By :Mohannad Rawashdeh https://www.instructables.com/member/Mohannad+Rawashdeh/ 28/9/2013 */ #define IN1 8 #define IN2 9 #define IN3 10 #define IN4 11 int Steps = 0; boolean Direction = true;// gre unsigned long last_time; unsigned long currentMillis ; int steps_left=4095; long time; void setup() { Serial.begin(115200); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); // delay(1000); } void loop() { while(steps_left>0){ currentMillis = micros(); if(currentMillis-last_time>=1000){ stepper(1); time=time+micros()-last_time; last_time=micros(); steps_left--; } } Serial.println(time); Serial.println("Wait...!"); delay(2000); Direction=!Direction; steps_left=4095; } void stepper(int xw){ for (int x=0;x7){Steps=0;} if(Steps<0){Steps=7; } } =====simple code avec lib stepper ===== #include const int stepsPerRevolution = 32*64; // (step,1N2,1N4,1N3,1N1) Stepper myStepper(stepsPerRevolution, 9, 11, 10, 8); void setup() { } void loop() { myStepper.setSpeed(10); //vitesse entre 0 et 15 // 100 step = 2048 myStepper.step(2048); delay(1500); myStepper.step(-2048); delay(1500); } ===== StepperMotor LIB ===== * Creer un dossier StepperMotor dans /User/..../Arduino/libraries * copier StepperMotor.h et StepperMotor.cpp dedans // StepperMotor.h #ifndef Stepper_h #define Stepper_h class StepperMotor { public: StepperMotor(int In1, int In2, int In3, int In4); // Constructor that will set the inputs void setStepDuration(int duration); // Function used to set the step duration in ms void step(int noOfSteps); // Step a certain number of steps. + for one way and - for the other int duration; // Step duration in ms int inputPins[4]; // The input pin numbers }; #endif // StepperMotor.cpp #include #include StepperMotor::StepperMotor(int In1, int In2, int In3, int In4){ // Record pin numbers in the inputPins array this->inputPins[0] = In1; this->inputPins[1] = In2; this->inputPins[2] = In3; this->inputPins[3] = In4; // Iterate through the inputPins array, setting each one to output mode for(int inputCount = 0; inputCount < 4; inputCount++){ pinMode(this->inputPins[inputCount], OUTPUT); } duration = 50; } void StepperMotor::setStepDuration(int duration){ this->duration = duration; } void StepperMotor::step(int noOfSteps){ /* The following 2D array represents the sequence that must be used to acheive rotation. The rows correspond to each step, and the columns correspond to each input. L */ bool sequence[][4] = {{LOW, LOW, LOW, HIGH }, {LOW, LOW, HIGH, HIGH}, {LOW, LOW, HIGH, LOW }, {LOW, HIGH, HIGH, LOW}, {LOW, HIGH, LOW, LOW }, {HIGH, HIGH, LOW, LOW}, {HIGH, LOW, LOW, LOW }, {HIGH, LOW, LOW, HIGH}}; int factor = abs(noOfSteps) / noOfSteps; // If noOfSteps is +, factor = 1. If noOfSteps is -, factor = -1 noOfSteps = abs(noOfSteps); // If noOfSteps was in fact negative, make positive for future operations /* The following algorithm runs through the sequence the specified number of times */ for(int sequenceNum = 0; sequenceNum <= noOfSteps/8; sequenceNum++){ for(int position = 0; ( position < 8 ) && ( position < ( noOfSteps - sequenceNum*8 )); position++){ delay(duration); for(int inputCount = 0; inputCount < 4; inputCount++){ digitalWrite(this->inputPins[inputCount], sequence[(int)(3.5 - (3.5*factor) + (factor*position))][inputCount]); } } } } #include StepperMotor motor1(8,9,10,11); StepperMotor motor2(4,5,6,7); void setup(){ Serial.begin(9600); motor1.setStepDuration(1); motor2.setStepDuration(1); } void loop(){ motor1.step(1000); motor2.step(1000); delay(2000); motor1.step(-1000); motor2.step(-1000); delay(2000);