Go Down

Topic: intervaluino con un motore DC? (Read 707 times) previous topic - next topic

robyr11

ciao a tutti!! Grazie a Lollotek ho realizzato il mio intervallometro con un motore passo passo..e questo funziona perfettamente!!

Ora vorrei utilizzare il mio motore 12v DC per unirlo al famoso "intervaluino", quindi vorrei che facesse esattamente quello che fa lo sketch di lollotek con il motore passo passo, ma con un motore DC. Cosa dovrei modificare?? ecco lo sketch con il motore passo passo!

//per variare il tempo di stop del motore, cambiare il valore "delay" tra parentesi (è in millisec) nella stringa void loop, alla fine..//

// nella stringa successiva, chiamata void rotate3, aggiungendo o eliminando le stringhe "rotate (); " il motore aggiunge o elimina movimenti//

int shutter_on = 200; //tempo di pressione per attivare la cam, da settare intorno i 100 e 300
int shutter_off = 1500; // tempo di attesa prima di attivare il motorino

int wakeup = 300; //time to activate wakeup (focus)
int wakewait =200; //time between wake and shutter


int outpin = 13; //uscita per lo scatto
int wakepin = 12; //uscita per la messa a fuoco

// init motorino
int motorPin1 =8;
int motorPin2 =9;
int motorPin3 =10;
int motorPin4 =11;
int delayTime = 500;

int step = 1;

void setup() {
  // init dei pin per lo scatto
  pinMode(outpin, OUTPUT); //outpin gives output
  pinMode(wakepin, OUTPUT); //wakepin gives output
 
  // tempistiche per lo scatto, modificare in base alle esigenze
  shutter_on = 200;
 
 
  // init dei pin per il motorino
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
 

}

/////////// Loop ////////////

void loop(){
    digitalWrite(wakepin, HIGH); //turn wakeup/focus on
    delay(wakeup); //keep focus
    digitalWrite(wakepin, LOW); //turn wakeup off
    delay(wakewait); //wait
    digitalWrite(outpin, HIGH); //press the shutter
    delay(shutter_on); //wait the shutter release time
    digitalWrite(outpin, LOW); //release shutter
    delay(shutter_off); //wait for next round

    delay(1000); // riga nuova - questo è il tempo di attesa prima di ripartire dopo lo scatto

    rotate();

    delay(2000); // qui metti in millisendi quanto vuoi attendere prima di scattare
}

void rotate(){
switch (step) {
    case 1:
      digitalWrite(motorPin1, HIGH);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, LOW);
      break;
    case 2:
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, HIGH);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, LOW);
      break;
    case 3:
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, HIGH);
      digitalWrite(motorPin4, LOW);
      break;
    case 4:
      digitalWrite(motorPin1, LOW);
      digitalWrite(motorPin2, LOW);
      digitalWrite(motorPin3, LOW);
      digitalWrite(motorPin4, HIGH);
      break;
}
   delay(delayTime);
   step ++;
   step --;
   if (step == 0){
      step = 4;
   }
}

uwefed

Il motore passo passo fa un passo a ogni impulso dato al suo integrato di pilotaggio.

Un motore DC gira quando gli da tensione con una velocitá che dipende dal carico; percui non sai di quanto gira. Una volta fermo non ha coppia e non puó contrastare un momento che viene applicato sul asse da un peso non equilibrato.

Per usare un motore DC che equivale a un motore passo passo serve oltre al motore un ingranaggio con una vite senza fine oppure un freno e un encoder o un sensore che legge i giri fatti dal motore.

Tutto questo comporta a un cambio sostanziale della logica del programma.

In poche parole lascia stare il motore DC e metti uno a passi.

Ciao Uwe

robyr11

ok!! capito..

a questo punto dovrò cercarmi un altro motore passo passo!!

Go Up