• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 1 głosów - średnia: 5
  • 1
  • 2
  • 3
  • 4
  • 5
Attiny85 + ULN2803 silnik krokowy
#1
Siedziałem ostatnio nad sterowaniem silnika krokowego , podstawowe założenie to prostota i program na attiny ( akurat padło na attiny85 ) sterowanie na razie potencjometrem a docelowo z sygnału odbiornika rc.

Do zasilania silnika użyłem ULN2803 ponieważ pozwala na sterowanie 2 silnikami unipolarnymi naraz bez zbędnych zewnętrznych elementów

Być może nie jest to szczyt możliwości programistycznych ale niedawno zacząłem zabawę z arduino .

kodzik pod attiny

Kod:
/*


Sterowanie silnikiem krokowym ULN2803 4 fazy Attiny85 JasQ


*/


int x = 2 ;
int y = 0 ;
int z ;

void setup() {
 
 pinMode(0, OUTPUT);
 pinMode(1, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
}

void loop() {

 z = analogRead(A1);
 if ( z > 520 ) { y = map(z,1023,530,0,50); przod(); }
 if ( z < 500 ) { y = map(z,500,0,50,0); tyl(); }
 if ( z > 500 and z < 520 ) { stoi(); }
}
 
 void przod(void){
 
 digitalWrite(0, HIGH);delay(x);digitalWrite(0, LOW);delay(y);
 digitalWrite(1, HIGH);delay(x);digitalWrite(1, LOW);delay(y);
 digitalWrite(3, HIGH);delay(x);digitalWrite(3, LOW);delay(y);
 digitalWrite(4, HIGH);delay(x);digitalWrite(4, LOW);delay(y);
}
 
 void tyl(void){
 
 digitalWrite(4, HIGH);delay(x);digitalWrite(4, LOW);delay(y);
 digitalWrite(3, HIGH);delay(x);digitalWrite(3, LOW);delay(y);
 digitalWrite(1, HIGH);delay(x);digitalWrite(1, LOW);delay(y);
 digitalWrite(0, HIGH);delay(x);digitalWrite(0, LOW);delay(y);
}
 
 void stoi(void){
   
 digitalWrite(0, LOW);
 digitalWrite(1, LOW);
 digitalWrite(3, LOW);
 digitalWrite(4, LOW);
}

a tutaj kod po optymalizacji  Wink

Kod:
 
// Sterowanie silnikiem krokowym ULN2803 4 fazy

int pin[5]={10,11,12,13};

int y = 0 ;
int z ;
int q = 0 ;

void setup() {
 
 pinMode(10, OUTPUT);
 pinMode(11, OUTPUT);
 pinMode(12, OUTPUT);
 pinMode(13, OUTPUT);
 pinMode(9, INPUT_PULLUP );
 pinMode(8, INPUT_PULLUP );
 pinMode(7, INPUT_PULLUP );
}

void loop() {
 
 z = analogRead(A2);

     if ( digitalRead(9) == LOW ){ z = 510; }
     if ( digitalRead(8) == LOW ){ z = 1023; }
     if ( digitalRead(7) == LOW ){ z = 0; }
 
   if ( z > 520 ) { y = map(z,1023,530,0,150); krok(); q++ ; if ( q > 3 )q=0;}
   if ( z < 500 ) { y = map(z,500,0,150,0); krok(); q-- ; if ( q < 0 )q=3; }
   if ( z > 500 and z < 520 ) { q-- ; if ( q < 0 ) q=3; digitalWrite( pin[q], LOW ); }
}
 
 void krok(void){
   
  digitalWrite( pin[q], HIGH );delay(2);digitalWrite( pin[q], LOW);delay(y);
   
}
 
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#2
Dzięki
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości