Skocz do zawartości

Pomocna odpowiedź

Cześć, zbliża się nowy rok akademicki i przez to będę miał mniej czasu na konstruowanie, dlatego jeszcze zanim zaczną się pierwsze laboratoria online chciałem zbudować coś prostego, co nie zajęłoby zbyt wiele czasu, a i dawało satysfakcję. Postawiłem na budowę line follower'a, ponieważ - co wielu z Was może zdziwić - jeszcze nigdy nie robiłem robota tej klasy. W internecie oczywiście jest wiele tutoriali poświęconych budowie podobnych pojazdów, jednak uznałem, że dużo więcej wyciągnę z nauki działania czujników zbliżeniowych oraz samodzielnego skonstruowania i zaprogramowania robota.

Elektronika

Sercem robota jest stara dobra płytka Arduino Uno, natomiast jako sterownika silników użyłem rozszerzenia Ardumoto od SparkFun. Czujniki to popularne TCRT5000 z potencjometrem do regulacji czujności. Jako zasilania używam 4 baterii AA zapakowanych do koszyka z włącznikiem.

Mechanika

Podwozie składa się z płytki wyciętej z 3 mm spienionego PCV, dwóch silników Dagu DG01D-L z przekładnią 48:1, które były w zestawie z płytką Ardumoto oraz kulki podporowej dla stabilizacji.

Kod

Jestem dość zielony jeśli chodzi o programowanie, więc działanie kodu jest dość proste. Arduino odczytuje sygnał cyfrowy z czujników zbliżeniowych, a następnie z pomocą instrukcji warunkowej decyduje, który silnik uruchomić.

Poniżej wrzucam kilka fotek, filmik oraz kod. Mam nadzieję, że nie jest to projekt zbyt banalny na tutejsze standardy 😅. Swoją drogą mogę polecić budowę takiego robota dla początkujących, ponieważ mimo swojej prostoty daje sporo satysfakcji. 🙂

const int pinIRdL = 8;
const int pinIRdR = 7;

int wartoscL = 0;
int wartoscR = 0;

#define CW  0
#define CCW 1

#define MOTOR_A 0
#define MOTOR_B 1

#define trigPin 8
#define echoPin 9

const byte PWMA = 3;  // PWM control (speed) for motor A
const byte PWMB = 11; // PWM control (speed) for motor B
const byte DIRA = 12; // Direction control for motor A
const byte DIRB = 13; // Direction control for motor B

void setup() {
  pinMode(pinIRdL, INPUT);
  pinMode(pinIRdR, INPUT);
  
}



void loop() {
  if(wartoscL == 1 && wartoscR == 0) {
    driveArdumoto(MOTOR_A, CW, 90);
    stopArdumoto(MOTOR_B);
    delay(10);
  } else if(wartoscR == 1 && wartoscL == 0) {
    driveArdumoto(MOTOR_B, CCW, 90);
    stopArdumoto(MOTOR_A);
    delay(10);
  } else if(wartoscL == 0 && wartoscR == 0) {
    driveArdumoto(MOTOR_A, CW, 90);
    driveArdumoto(MOTOR_B, CCW, 90);
  } else if(wartoscL == 1 && wartoscL == 1) {
    stopArdumoto(MOTOR_A);
    stopArdumoto(MOTOR_B);
  }

  
  wartoscL = digitalRead(pinIRdL);
  wartoscR = digitalRead(pinIRdR);
}



void driveArdumoto(byte motor, byte dir, byte spd)
{
  if (motor == MOTOR_A)
  {
    digitalWrite(DIRA, dir);
    analogWrite(PWMA, spd);
  }
  else if (motor == MOTOR_B)
  {
    digitalWrite(DIRB, dir);
    analogWrite(PWMB, spd);
  }  
}

void stopArdumoto(byte motor)
{
  driveArdumoto(motor, 0, 0);
}

void setupArdumoto()
{
  pinMode(PWMA, OUTPUT);
  pinMode(PWMB, OUTPUT);
  pinMode(DIRA, OUTPUT);
  pinMode(DIRB, OUTPUT);
  
  digitalWrite(PWMA, LOW);
  digitalWrite(PWMB, LOW);
  digitalWrite(DIRA, LOW);
  digitalWrite(DIRB, LOW);
}

Filmik

20201001_193231.jpg

20201001_193212.jpg

20201001_193144.jpg

  • Lubię! 1
Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.