Do you want to support owner of this site? Click here and donate to his account some amount, he will be able to use it to pay for any of our services, including removing this ad.
Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!

Arduino prosty robot


Dzisiaj pokażę wam jak zbudowć prostego robota, który po napotkaniu przeszkody rozgląda się
cofa i skręca.

Potrzebne materiały:

-arduino
-podwozie robota razem z silnikami (można kupić lub zrobić samemu)
-sterownik silników
-ultra dźwiękowy czujnik odległości
-serwo
-płytka stykowa
-kabelki połączeniowe
-baterie


Reklama





Krok 1:

Po pierwsze trzeba przygotować podwozie. Jeśli kupiłeś gotowe musisz je skręcić,
jeśli robisz je sam pamiętaj aby dobrać odpowiednie silniki(aby robot dał radę ruszyć z miejsca).
Pamiętaj również aby zrobić wystarczająco dużą platformę musisz na niej wszystko zmieścić.

Krok 2:

Teraz należy wszystko podłączyć. W moim robocie zastosowałem sterownik silników TB6612FNG
ale jest to obojętne możesz zastosować każdy. A o to jak należy
wszystko podłączyć:

(U-czujnik ultradźwiękowy, S-serwo)
-Trig(U)--> 2 pin arduino
-Echo(U)--> 1 pin arduino
-VCC(U) --> 5V arduino
-GND(U) --> GND arduino
-GND(S) --> GND arduino
-VCC(S) --> 5V arduino
-Dane(S)--> 9 pin arduino

A teraz sterownik silników:
-Wszystkie masy(GND) do masy w adruino
-VCC -->5V arduino
-A01 --> silnik1 masa
-A02 --> silnik1 zasilanie
-B02 --> silnik2 masa
-B01 --> silnik2 zasilanie
-VMOT--> VIN arduino
-PWMA--> 6 pin arduino
-AIN1 --> 8 pin arduino
-AIN2 --> 7 pin arduino
-BIN2 --> 4 pin arduino
-BIN1 --> 3 pin arduino
-PWMB--> 5 pin arduino

Krok 3:

kiedy wszystko połączysz czas przyczepić to do podwozia. Ponieważ ja kupiłem podwozie mam
już tam wywiercone dziurki aby przykręcić róźne rzeczy (np. Arduino).
Jeśli sam zrobiłeś podwozie wywierć dziurki i przykręć arduino. Pamiętaj aby zrobić
jakieś dystanse żeby arduino nie dotykało podwozia(jeśli jest metalowe) w przeciwnym
wypadku może wystąpić zwarcie a przez to arduino może ulec uszkodzeniu.
Płytkę stykową umieściłem na arduino, czujnik ultradźwiękowy przykleiłem taśmom
dwustronną do serwa, a serwo również taśmom przykleiłem do podwozia.
Kabelki aby były jakoś ułożone spiołem drucikiem.

prosty robot arduino prosty robot arduino prosty robot arduino prosty robot arduino prosty robot arduino

Krok 4:

Czas na program. A więc na dole wklejam program w komentarzach znajduje się wyjaśnienie
całego kodu.
/*####################################################
Nikodem Bartnik June 2014
http://www.arduinopolska.cba.pl/
######################################################
*/

#define trig 2
#define echo 1
#include <Servo.h> 
 
 //definicja serwa
Servo myservo;  
//definicja pinów dla steronika silników
int pwmMotorA=6;
int pwmMotorB=5;
int ForwardA=8;
int BackA=7;
int ForwardB=3;
int BackB=4;

/*liczby dla czujnika ultra dźwiękowego
dist1-lewy pomiar
dist2-środek 
dist3-prawy pomiar
*/
int czas, dist2, dist1, dist3;

void setup() {    



  myservo.attach(9);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);   
  
  //Wyjście PWM kanału A
  pinMode(pwmMotorA, OUTPUT); 
  
  //Wyjście cyfrowe AIN1
  pinMode(ForwardA, OUTPUT); 
  //Wyjście cyfrowe AIN2
  pinMode(BackA, OUTPUT);   
  
  //Wyjście PWM kanału B
  pinMode(pwmMotorA, OUTPUT);
  
  //Wyjście cyfrowe BIN1
  pinMode(ForwardB, OUTPUT); 
  //Wyjście cyfrowe BIN2
  pinMode(BackB, OUTPUT); 
  
  
  //ustawienie prędkości obrotowej silników
  analogWrite(pwmMotorA, 255);
  analogWrite(pwmMotorB, 255);

}
//skręt w lewo
void Left(){
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, HIGH);
  
  //Ustawienie kierunku obrotów B
  digitalWrite(ForwardB, HIGH); 
  digitalWrite(BackB, LOW);
  delay(1000);
}

//skręt w prawo
void Right(){
  
  digitalWrite(ForwardA, HIGH); 
  digitalWrite(BackA, LOW);
  
  
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, HIGH);
  
  delay(1000);
}

//jazda prosto
void Forward(){
  
  digitalWrite(ForwardA, HIGH); 
  digitalWrite(BackA, LOW);
  
  //Ustawienie kierunku obrotów B
  digitalWrite(ForwardB, HIGH); 
  digitalWrite(BackB, LOW);
}

//cofanie
void Back(){
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, HIGH);
  
  //Ustawienie kierunku obrotów B
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, HIGH);
  
}

//pomiar przodu
void ScanForward(){
  
  delay(50);
    digitalWrite(trig, HIGH);
    delayMicroseconds(1000);
    digitalWrite(trig, LOW);
    czas = pulseIn(echo, HIGH);
    dist2 = (czas/2) /29.1;
}

pomiar lewej strony
void ScanLeft(){
  myservo.write(160);
  delay(1000);
  delay(50);
    digitalWrite(trig, HIGH);
    delayMicroseconds(1000);
    digitalWrite(trig, LOW);
    czas = pulseIn(echo, HIGH);
    dist1 = (czas/2) /29.1;
}

//zatrzymanie
void Stop(){
  
  digitalWrite(ForwardA, LOW); 
  digitalWrite(BackA, LOW);
  
  //Ustawienie kierunku obrotów B
  digitalWrite(ForwardB, LOW); 
  digitalWrite(BackB, LOW);
}

//pomiar prawej strony
void ScanRight(){
  myservo.write(20);
  delay(1000);
  delay(50);
    digitalWrite(trig, HIGH);
    delayMicroseconds(1000);
    digitalWrite(trig, LOW);
    czas = pulseIn(echo, HIGH);
    dist3 = (czas/2) /29.1;
}


//pętla wykonująca wszystkie czynności
void loop() {
  Stop();
  delay(20);
  ScanForward();
  
 
  
  if(dist2<=17){
    
    ScanRight();
    ScanLeft();
    myservo.write(90);
    
    if(dist1>=dist3){
 Back();
 delay(1000);
 Right();
    }
    else{
      Back();
      delay(1000);
      Left();
  }
  }
  
  else{
   
    Forward();
    delay(400);
  }

}

Krok 5:

Niektórzy być może zauważyli, że w kodzie jest napisane, że robot ma się zatrzymywać
na w sumie 0.07s. Zrobiłem tak ponieważ kiedy silniki pracują, na bateriach
nie ma potrzebnego dla czujnika 5V więc nie działa poprawnie. Kiedy się zatrzymuje
napięcie wzrasta i czujnik działa poprawnie. Jego zatrzymanie jest tak krótkie,
że prawie go nie widać. Jeśli u ciebie nie występuje taki problem wystarczy z
początku pętli usunąć "stop();" i "delay(20);" i wszystko będzie normalnie.

Poniżej wklejam link do youtube możesz zobaczyć jak wyszedł mój robot
http://youtu.be/JCRbaAKQXSs

Jeśli masz z czymś problem lub jakieś pytania napisz: nikodem.bartnik@gmail.com