26.2.17

Arduino ja mootoriplaadi REV 3 kasutamine

Tegin näidiseks jupi koodi koos eestikeelsete kirjeldustega. Mootoril tuleb määrata 3 erineva pinni olekud. Mootoril A pin 3 määrab kiiruse, pin 12 suuna ja pin 9 oleks pidur. Mootor B on minul vasakul. Koodis tuleb tähele panna kuidas määratakse mootori valikul teise mootori pinnide asend:
if(motor == 1){
    digitalWrite(DIRA, inPin1);
    digitalWrite(BRKA, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(DIRB, inPin3);
    digitalWrite(BRKB, inPin4);
    analogWrite(PWMB, speed);
  }

Siit saab kogu koodi millega robot sõidab edasi ja aeglasemalt tagasi. Tagasi kiirus 50 on liiga väike ja üks mootor ei oma piisavalt jõudu. Video leiab siit https://www.youtube.com/watch?v=RjrxIsvad6I


//mootoriplaadi REV 3 naidiskood

//Mootor A
int PWMA = 3; //Kiirus
int DIRA = 12; //Suund
int BRKA = 9; //Pidur

//Mootor B
int PWMB = 11; //Kiirus
int DIRB = 13; //Suund
int BRKB = 8; //Pidur

void setup(){
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);

  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);

 
  pinMode(BRKA, OUTPUT);
  pinMode(BRKB, OUTPUT);
}

void loop(){
  move(1, 100, 1); //mootor A, kiirus, suund
  move(0, 100, 1); //mootor B, kiirus, suund

  delay(1000); //oota 1 sekund
  stop(); //stop alamprogramm
  delay(500); //ootab kuni uue liikumiseni

  move(1, 50, 0); //mootor A, kiirus, suund
  move(0, 50, 0); //motor B, kiirus, suund

  delay(1000);
  stop();
  delay(500);
}


void move(int motor, int speed, int direction){
//Move alamprogramm
//motor: 0 mootor B ja 1 mootor A
//speed: 0 kuni 255 on kiirus
//direction: 0 suund, 1 teistpidi suund

  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;
  boolean inPin3 = LOW;
  boolean inPin4 = HIGH;
 
  if(direction == 1){
    inPin1 = HIGH;
    inPin3 = HIGH;
    inPin2 = LOW;
    inPin4 = LOW;
  }else{
    inPin1 = LOW;
    inPin3 = LOW;
    inPin2 = LOW;
    inPin4 = LOW;
  }

  if(motor == 1){
    digitalWrite(DIRA, inPin1);
    digitalWrite(BRKA, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(DIRB, inPin3);
    digitalWrite(BRKB, inPin4);
    analogWrite(PWMB, speed);
  }
}

void stop(){
//lubab standby ehk stop alamprogramm
 
}

Kommentaare ei ole:

Postita kommentaar