🚚 Besplatna dostava za narudžbe veće od 35EUR

KKM: STEPPER MOTOR I ULN2003 DRIVER

KKM: STEPPER MOTOR I ULN2003 DRIVER-Uncategorized

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM!

Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

OSNOVNE KARAKTERISTIKE

Htjeli mi to ili ne, motori se nalaze u hrpi uređaja koje koristimo svakodnevno. Printeri, laptopi, perilice rublja, električni brijači, quadcopteri i još puno, puno toga. Ipak, jako je mali postotak ljudi koji znaju i upravljati s njima. Najbolje i najjednostavnije nešto naučiti je kada imamo fizički primjer, upravo stoga volimo Dasduino i KKM tutorijale.

Karakteristike 28BYJ-48 stepper motora:
Napon: 5V
Kut jednog okreta: 5.625°
Omjer okreta: 64
Frekvencija: 100HZ
za više pogledajte datasheet

ŠTO I KAKO RADI STEPPER MOTOR?

Princip rada stepper motora obraditi ćemo na primjeru unipolarnog stepper motora 28-BYJ48.

Pogled na BYJ-48 motor iznutra.
Stepper, ili koračni, motor rotira pokretni dio preciznim koracima u određenim vremenskim intervalima. Puls se šalje do serije zavojnica (naš motor ima 4 zavojnice) koje čine prsten oko rotora, ali one same su statične pa taj dio motora zovemo stator. Preciznost motora se izražava brojem koraka koje motor pravi kako bi napravio puni krug, 360°. Možemo ju izračunati iz formule: broj koraka = ( 360°/stupanj jednog okreta) * omjer okreta. Na primjeru našeg steppera to je: (360°/5.625°) * 64 = 4096 koraka.

izvor slike wikipedia.
Princip rada možemo vidjeti na gifu iznad. Svaki stepper motor radi na način da se serije zavojica u statoru “pale” naizmjenično u smjeru u kojem želimo okretati motor, odnosno “stoje” u istom stanju ako želimo da motor miruje.

KAKO POVEZATI MODUL NA DASDUINOM?

Stepper motor spojiti ćemo na ULN driver, a njega na Dasduino. Slika prikazuje dijelove modula ULN2003. Za više, pogledajte datasheet.

Stepper motor, ULN2003 breakout pločicu i Dasduino spojiti ćemo kako pokazuje slika ispod.

 

KOD

/*
*  BYJ48 Koracni motor s ULN breakout boardom
*  Spojite :
*  IN1 - D8
*  IN2 - D9
*  IN3 - D10
*  IN4 - D11
*  VCC - 5V
*  Gnd - gnd
*  e-radionica.com
*/
#define IN1  8
#define IN2  9
#define IN3  10
#define IN4  11
int koraci = 0;
boolean smjer = true;
unsigned long vrijemeZadnje = 0;    // biljeziti cemo vrijeme
unsigned long vrijemeTrenutno = 0;  // koje je potrebno da se
unsigned long vrijeme = 0;          // se izvrsi zadani kut
int koraciPreostalo = 4095; //ovaj koracni ukupno ima 4095 koraka
void setup()
{
    Serial.begin(115200);
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
}
void loop()
{
  while(koraciPreostalo > 0) // dokle je preostalo koraka do punog okreta
  {
    vrijemeTrenutno = micros(); //zapisi trenutno vrijeme u micro sek
    if(vrijemeTrenutno - vrijemeZadnje >= 1000)
    {
      stepper(1); //pozovi funkciju stepper (vidi dolje void stepper)
      vrijeme = vrijeme + micros() - vrijemeZadnje;
      vrijemeZadnje = micros();
      koraciPreostalo--;
    }
   }
   
   Serial.println(vrijeme);
   Serial.println("Pricekaj..!");
   delay(2000);
   smjer = !smjer; // obrni smjer
   koraciPreostalo = 4095;  // resetiraj broj koraka
}
void stepper(int brojKoraka)
{
  for (int x=0; x < brojKoraka; x++) { switch(koraci) { case 0: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; case 1: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH); break; case 2: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 3: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); break; case 4: digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 5: digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 6: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; case 7: digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); break; default: digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); break; } postaviSmjer(); } } void postaviSmjer() { if(smjer==1){ koraci++; } if(smjer==0){ koraci--; } if(koraci>7){ koraci=0; }
    if(koraci<0){ koraci=7; }
}