ho comprato due motori passo passo venduti ognuno con il loro driver ULN2003. Provati, funzionano, ma non so come fare per farli girare contemporaneamente.
Si deve forse usare un solo driver ?
quello che mi è arrivato è una piccola piastrina con l'integrato, 4 led e ci sono 4 soli pin (IN1, IN2, IN3 e IN4) da collegare ad arduino, oltre che il + e il - da collegare alla batteria.
Non saprei com fare a livello di sketch, perché girano, ma uno alla volta......
Posta lo sketch , perchè si fa prima a spiegartelo
prima ho provato usando la libreria Stepper.h
#include <Stepper.h>
#define STEPS 100
Stepper dx(STEPS, 8, 10, 11, 9) ;
Stepper sx(STEPS, 2, 4, 5, 3) ;
int rchar ;
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()>0){
rchar = Serial.read() ;
if ( rchar == 'a'){
Serial.println("avanti");
avanzare() ;
}
}
// ecc
}
void avanzare(){
dx.setSpeed(200);
sx.setSpeed(200);
dx.step(2048);
sx.step(-2048);
}
qui capisco che vada prima uno e poi l'altro....
POI ho provato senza la libreria con questo codice:
int motorSXPin1 = 8;
int motorSXPin2 = 9;
int motorSXPin3 = 10;
int motorSXPin4 = 11;
int motorDXPin1 = 2;
int motorDXPin2 = 3;
int motorDXPin3 = 4;
int motorDXPin4 = 5;
int motorSpeed = 1200; //variable to set stepper speed
int count = 0; // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
int rchar ;
void setup() {
Serial.begin(9600);
pinMode(motorSXPin1, OUTPUT);
pinMode(motorSXPin2, OUTPUT);
pinMode(motorSXPin3, OUTPUT);
pinMode(motorSXPin4, OUTPUT);
pinMode(motorDXPin1, OUTPUT);
pinMode(motorDXPin2, OUTPUT);
pinMode(motorDXPin3, OUTPUT);
pinMode(motorDXPin4, OUTPUT);
}
void loop() {
if(Serial.available()>0){
rchar = Serial.read() ;
if ( rchar == 'a'){
Serial.println("avanti");
avanzare() ;
}
}
// ecc
}
void avanzare(){
for(int i = 7; i >= 0; i--){
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
void setOutput(int out){
digitalWrite(motorSXPin1, bitRead(lookup[out], 0));
digitalWrite(motorDXPin1, bitRead(lookup[out], 0));
digitalWrite(motorSXPin2, bitRead(lookup[out], 1));
digitalWrite(motorDXPin2, bitRead(lookup[out], 1));
digitalWrite(motorSXPin3, bitRead(lookup[out], 2));
digitalWrite(motorDXPin3, bitRead(lookup[out], 2));
digitalWrite(motorSXPin4, bitRead(lookup[out], 3));
digitalWrite(motorDXPin4, bitRead(lookup[out], 3));
}
qui non fa nulla
SONO RIUSCITA:
dimenticavo un ciclo for
nel loop non basta 'avanzare();',
ma
int a=0;
for(a=0; a<512; a++)
avanzare() ;
in questo modo per esempio va avanti di 512 passi.
Per ora i motori vanno nella stessa direzione, ora devo farli andare uno in clockwise e l'altro al contrario
posto il codice che funziona, almeno per la parte di avanzamento, ma poi sarà simile per il resto:
int motorSXPin1 = 8;
int motorSXPin2 = 9;
int motorSXPin3 = 10;
int motorSXPin4 = 11;
int motorDXPin1 = 2;
int motorDXPin2 = 3;
int motorDXPin3 = 4;
int motorDXPin4 = 5;
int motorSpeed = 1200; //variable to set stepper speed
int count = 0; // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup1[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
int lookup2[8] = {B01001, B00001, B00011, B00010, B00110, B00100, B01100, B01000};
int rchar ;
void setup() {
Serial.begin(9600);
pinMode(motorSXPin1, OUTPUT);
pinMode(motorSXPin2, OUTPUT);
pinMode(motorSXPin3, OUTPUT);
pinMode(motorSXPin4, OUTPUT);
pinMode(motorDXPin1, OUTPUT);
pinMode(motorDXPin2, OUTPUT);
pinMode(motorDXPin3, OUTPUT);
pinMode(motorDXPin4, OUTPUT);
}
void loop() {
if(Serial.available()>0){
rchar = Serial.read() ;
if ( rchar == 'a'){
Serial.println("avanti");
int a=0;
for(a=0; a<512; a++)
avanzare() ;
}
}
// ecc
}
void avanzare(){
for(int i = 7; i >= 0; i--){
setOutput(i);
delayMicroseconds(motorSpeed);
}
}
void setOutput(int out){
digitalWrite(motorSXPin1, bitRead(lookup1[out], 0));
digitalWrite(motorDXPin1, bitRead(lookup2[out], 0));
digitalWrite(motorSXPin2, bitRead(lookup1[out], 1));
digitalWrite(motorDXPin2, bitRead(lookup2[out], 1));
digitalWrite(motorSXPin3, bitRead(lookup1[out], 2));
digitalWrite(motorDXPin3, bitRead(lookup2[out], 2));
digitalWrite(motorSXPin4, bitRead(lookup1[out], 3));
digitalWrite(motorDXPin4, bitRead(lookup2[out], 3));
}
questo funziona