Immenso Ivaldo ! Mentre aspetto un motore Nema 17 preso su un sito cinese a 8 euro stavo tentando di utilizzare asrtofocus al banco utilizzando questo motore ROHS 28BJY-48 5V ma non funziona si accendono tutti e 4 i led rossi del motor shield assieme ma non si muove , se utilizzo un programam di gestione dei motori passo passo funziona ma chiaramente non e interfacciabile con ascom . Il programma e' questo .
E il motore che non e' compatibile con il programma o sbaglio il collegamento dei 4 fili (il motore ne ha 5)
Ha 5 fili Rosso Arancio Giallo Rosa BLU
li ho collegati cosi
Blu B+ Rosa B- Giallo A- Arancio A+
il data sheet e' qui
http://www.instructables.com/id/BYJ48-Stepper-Motor/ ARDUINO GENUINO UNO Geekcreit + MOTOR SHIELD 3 Derrek-Robot
/**********************************************************/
#define TIMEFASE 20
#define DEBUG
#define PWMA 3
#define PWMB 11
#define DIRA 12
#define DIRB 13
/**********************************************************/
int nFase = 0;
/**********************************************************/
void setup() {
#ifdef DEBUG
Serial.begin( 9600 );
Serial.println("Avvio");
#endif
/**********************************************************/
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
/**********************************************************/
}
/**********************************************************/
void loop() {
eseguiStep( 50,true );
stop();
delay( 1000 );
eseguiStep( 100,true );
stop();
delay( 1000 );
eseguiStep( 200,true );
stop();
delay( 3000 );
}
/**********************************************************/
int fase( int nFase ) {
switch( nFase ) {
case 1:
digitalWrite(DIRA, HIGH);
digitalWrite(DIRB, LOW);
digitalWrite(PWMA, HIGH);
digitalWrite(PWMB, LOW);
break;
case 2:
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, HIGH);
digitalWrite(PWMA, LOW);
digitalWrite(PWMB, HIGH);
break;
case 3:
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, LOW);
digitalWrite(PWMA, HIGH);
digitalWrite(PWMB, LOW);
break;
case 4:
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, LOW);
digitalWrite(PWMA, LOW);
digitalWrite(PWMB, HIGH);
break;
}
delay(TIMEFASE);
return nFase;
}
/**********************************************************/
int stop() {
delay( 500 );
digitalWrite(DIRA, LOW);
digitalWrite(DIRB, LOW);
digitalWrite(PWMA, LOW);
digitalWrite(PWMB, LOW);
}
/**********************************************************/
void eseguiStep( int passi, boolean dir ) {
if ( passi <= 0 ) { return; }
if ( dir ) { for ( int p=1; p<=passi; p++) { gira(); } }
else { for ( int p=passi; p>=1; p--) { gira(); } }
}
/**********************************************************/
void gira() {
nFase = (nFase+1);
if ( nFase > 4 ) { nFase=1; }
fase( nFase );
}
con questo funziona ....