====== 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);