Arduino Forum

International => Italiano => Software => Topic started by: veroda on Jul 20, 2012, 06:58 pm

Title: motore passo passo
Post by: veroda on Jul 20, 2012, 06:58 pm
ciao a tutti.. ho un problema con questo codice.
il motore deve eseguire un ciclo in avanti se si trova nella posizione corretta ovvero se il finecorsa 7 che per mia comodita ho chiamato pulsante e impegnato altrimenti deve ruotare in senso contrario fino a impegnare il finecorsa e poi eseguire il ciclo in avanti. funziona pero ripete il ciclo e io ho la necessita di farlo eseguire una sola volta.Ho provato mettendolo nel void setup funziona in parte, diciamo se lui e in posizione quindi il pulsante e HIGH esegue il ciclo con il comando for se pero deve tornare in dietro esegue solamente uno stepp.
int motorPin2 = 11;
int motorPin3 = 12;
int motorPin4  = 13;
int delayTime = 20; // velocita motore
int pulsante;       //finecorsa
int ciclo=40;
void setup()
  {
  pinMode(8,INPUT);
  pinMode(motorPin1, OUTPUT); 
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT); 
  pinMode(motorPin4, OUTPUT);
  }
  void loop()
{
pulsante=digitalRead( 8 );
if (pulsante==LOW)
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime); 
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, HIGH); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime); 
}
pulsante=digitalRead  ( 8 );
if (pulsante==HIGH)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime); 
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, HIGH); 
delay(delayTime);
}
}
}
Title: Re: motore passo passo
Post by: veroda on Jul 20, 2012, 10:35 pm
risolto  XD XD mettendo un contatore,semplice no? comunque se qualcuno a idee  in merito ben venga. Grazie e buona serata a tutti

int motorPin1 = 10;
int motorPin2 = 11;
int motorPin3 = 12;
int motorPin4  = 13;
int delayTime = 20; // velocita motore
int pulsante;       //finecorsa
int ciclo=40;
int contatore=0;
void setup()
  {
  pinMode(8,INPUT);
  pinMode(motorPin1, OUTPUT); 
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT); 
  pinMode(motorPin4, OUTPUT);
  }
  void loop()

{
if (contatore <= 0 )
{
pulsante=digitalRead( 8 );
if (pulsante==HIGH)
{
for (int i=1; i <= ciclo; i++)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(delayTime); 
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, HIGH); 
delay(delayTime);
}
contatore=contatore+1;
}

else
{
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(delayTime); 
digitalWrite(motorPin1, LOW); 
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
digitalWrite(motorPin1, HIGH); 
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW); 
digitalWrite(motorPin4, LOW); 
delay(delayTime);
}
}
}
Title: Re: motore passo passo
Post by: aleale97 on Jul 21, 2012, 11:52 pm
Ciao scusami ma non ho risposta alla tua domanda :|
Ero comunque interessato perĂ² e ho deciso di rispondere, vorrei capire quello che stai facendo.
Tu stai controllando uno stepper motor come quelli che si trovano nelle stampanti con arduino senza alcun IC esterno?
Ciao :D
Title: Re: motore passo passo
Post by: veroda on Jul 23, 2012, 07:26 pm
ciao...sto facendo una torre di raffreddamento, ho messo un sistema di alette che si aprono quando avvio il sistema e di conseguenza si devono richiudere,spero!!!
ecco perche l'esigenza di arrestare gli steep del motore.
si sto usanto un motore di una stampante con un driver sn754410.
scusa  ma cosa intendi ic esterno? :D
Title: Re: motore passo passo
Post by: uwefed on Jul 24, 2012, 10:48 am
Se usi la libreria stepper si semplifica molto il codice.
http://arduino.cc/en/Reference/Stepper
e schema di collegamneto:
http://arduino.cc/en/Reference/StepperBipolarCircuit circuito in basso a 4 pin.
Se vuoi risparmiare pin dia rduino puoi aggiungere 2 transitori e pilotare il sn754410 con 2 pin

Ciao Uwe
Title: Re: motore passo passo
Post by: veroda on Jul 24, 2012, 06:05 pm
grazie per le dritte..sicuramte andro a utilizzare i due transistor perche non ho piu pin a disposizione, per la libreria provero a giocarci un po e vediamo cosa esce. ciai ciao
Title: Re: motore passo passo
Post by: aleale97 on Jul 28, 2012, 04:48 pm
scusami intendevo senza nessun driver, ma mi hai risposto xDD
Title: Re: motore passo passo
Post by: veroda on Jul 28, 2012, 10:42 pm
vi ho detto un ....... il driver del motore  L 293 DNE  pero il risultato non cambia!
ciao ciao