Skocz do zawartości

Problem z robotem na Arduino


Kiras

Pomocna odpowiedź

Cześć wszystkim , mam pewien problem ze swoim pojazdem z krańcówkami , do przodu jedzie normalnie z prędkością jaką nadałem mu w kodzie :

#define L_SIDE_SENSOR A1
#define R_SIDE_SENSOR A0
#define R_PWM 6
#define R_DIR 7
#define L_PWM 5
#define L_DIR 4
#define PWM_MAX 165
#define PWM_MIN 50
#define BUZZER 8

void setup() {
  //Konfiguracja pinow od mostka H
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);
 
  //Konfiguracja pinow od czujnikow
  pinMode(L_SIDE_SENSOR, INPUT_PULLUP);
  pinMode(R_SIDE_SENSOR, INPUT_PULLUP);
 
  //Konfiguracja pozostalych elementow
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, 0); //Wylaczenie buzzera    
}
 
void loop() {
  //Jedz do przodu
  leftMotor(40);
  rightMotor(40);
 
  if (digitalRead(L_SIDE_SENSOR) == LOW || digitalRead(R_SIDE_SENSOR) == LOW) {
    //Jesli przeszkoda po dowolnej stronie
    //Jedz wstecz i wydawaj dzwiek
    leftMotor(-40);
    rightMotor(-40);
    digitalWrite(BUZZER, 1);
    delay(400);
    //Obrot w miejscu
    leftMotor(40);
    rightMotor(-40);
    digitalWrite(BUZZER, 0);
    delay(500);
    //Koniec warunku wracamy do jazdy prosto
  }
}
 
void leftMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0); //Kierunek: do przodu
    analogWrite(L_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1); //Kierunek: do tyłu
    analogWrite(L_PWM, V); //Ustawienie predkosci    
  }
}
 
void rightMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0); //Kierunek: do przodu
    analogWrite(R_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1); //Kierunek: do tyłu
    analogWrite(R_PWM, V); //Ustawienie predkosci    
  }
}
 
void stopMotors() {
  analogWrite(L_PWM, 0); //Wylaczenie silnika lewego
  analogWrite(R_PWM, 0); //Wylaczenie silnika prawego
}

do przodu jeździ z prawidłową predkością ale do tyłu  z tego co zauwazyłem jakiej wartośći w kodzie bym nie wpisał rusza na 100% sił i niewiem jak pozbyć się tego problemu .

Zbudowałem tego robota z pominięciem shieldu Forbot Robot bo takowego nie posiadam.

IMG_20190925_144850.jpg IMG_20190925_144904.jpg IMG_20190925_144917.jpg

Link do komentarza
Share on other sites

@Kiras czy porównałeś sposób sterowania mostka H, który użyty jest w naszym robocie z Twoją wersją? Nie możesz kopiować programów w ciemno (jeśli dysponujesz innym sprzętem) i oczekiwać, że wszystko będzie działało poprawnie 😉 Nie bez przyczyny do każdego kursu dedykowany jest konkretny zestaw - dzięki temu można uniknąć takich problemów. Sprawdź w nocie katalogowej L298N jak trzeba nim sterować i zmień program oraz połączenie. W Twoim wypadku będzie potrzebne 6 połączeń Arduino <> sterownik silników i inny sposób sterowania napędami. Możesz się wspomagać materiałami z tego artykułu: Kurs Arduino – #8 – Sterowanie silnikami DC, pętla for

PS kody programów należy umieszczać przez narzędzie Wstaw kod (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu programy są odpowiednio formatowane i kolorowane, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Poprawiłem to za Ciebie, ale pamiętaj o tym w przyszłości 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.