Skocz do zawartości

Pierwszy robot jeżdzący - jakie zasilanie silników DC


Pomocna odpowiedź

11 minut temu, ethanak napisał:

To jeszcze żyroskop (jedna oś Z, żeby utrzymać jazdę prosto albo obrót o konkretny kąt) i dopiero będzie fajnie!

A to nie trzeba wtedy dorzucać kompasu? 

A po co kompas? To cholerstwo ma zbyt długi czas potrzebny aby pokazać kierunek. Dobrze oprogramowany najtańszy 6050 zrobi swoją robotę szybciej i z większą precyzją...

No, chyba że chcesz przejechać parę kilometrów; wtedy kompas się przyda.

3 minuty temu, ethanak napisał:

A po co kompas?

 

do modelarstwa jest zrobione takie coś ze kamera w modelu rusza się tak jak kręcisz głową...poprostu podąża za tym na co patrzysz no i tam była mowa o tym że os z nie będzie chodziła bez kompasu bo poprostu nie ma punktu odniesienia...wiadomo pitch i roll będą działać,ale yaw będzie pokazywał jak moduł będzie leżał płasko i obracał się wokół własnej osi?

Nie no spokojnie panowie 😄

Jeszczze kompletnie nie mam sterowania.

Może dzisiaj uda się skleić kawałek apki na andka ( jednak będę robił sam ) i zrobić skręcanie. Bo póki co auto tylko na wprost śmiga.

kolejny etap to myślałem dorzucić czujniki odległości co by nauczyć bo samemu trochę jeździć 🙂

 

Aaa co do mocy!

Na pierwszy rzut oka wydaje się że jest jej wystarczająco 🙂

predkosc również mnie zadowala na tutejsze warunki.

ZAuwazylem jedna dziwna rzecz. Otóż staje przed ścianą j daje pełną moc jadąc w ścianę.

przednie silniki zaczynają się ślizgać ale tylne mają większe obciążenie i po kilku sekundach walki, stają i zaczynają bardzo dziwnie wyć. Natychmiast wtedy odcinam im prąd.

CO się z nimi wtedy dzieje ?

12 minut temu, cezarg1410 napisał:

CO się z nimi wtedy dzieje ?

Silnik krokowy należy rozpędzać. Jeżeli spróbujesz go uruchomić "od ręki" na np. 2000 RPM, to nie ruszy. Ale jeżeli będziesz rozpędzał to da radę. Teraz sobie pomyśl, że nagle przez przypadek coś zatrzymuje ten silnik jak się kręci z dużą prędkością obrotową. Po prostu nie może ruszyć i zaczyna piszczeć, bo cewki zawsze piszczą przy odpowiednim taktowaniu 😉 

Możesz spróbować zablokować silnik "na stole" np. Archimedesem (dźwignią). Wtedy zobaczysz taki sam efekt. Uwaga: te silniki często mają dość niezłego kopa, więc ręką nie polecam próbować. Im wyższa prędkość tym łatwiej zatrzymać silnik (bo ma mniejszy moment obrotowy).

Rada: nie wjeżdżać w ścianę "na chama".

  • Lubię! 1
41 minut temu, H1M4W4R1 napisał:

Rada: nie wjeżdżać w ścianę "na chama".

Świetna rada😉 wszystko tak jak powiedział kolega wyżej...a ja zapytam ile tam tego prądu ustawiłeś??

Dzięki za rady 🙂 Już rozumiem. To był swego rodzaju crash test żeby sprawdzić zachowanie robota w warunkach niecodziennych.

 

1 godzinę temu, farmaceuta napisał:

a ja zapytam ile tam tego prądu ustawiłeś??

Zgodnie z Twoją radą: VREF mam 0,5V czyli prąd będzie 1A. Silniki według aukcji ciągną do 1,4A więc w teorii tyle mógłbym jeszcze ustawić.

6 minut temu, cezarg1410 napisał:

czyli prąd będzie 1A. Silniki według aukcji ciągną do 1,4A więc w teorii tyle mógłbym jeszcze ustawić.

No i dobrze, nie ma co żyłować jeśli nie potrzebujesz...choć pewnie już przy 1.2a nie chciałyby się zatrzymać...😉 Czekamy na dalsze postępy...

5 minut temu, farmaceuta napisał:

.choć pewnie już przy 1.2a nie chciałyby się zatrzymać.

Nie omieszkam sprawdzić.

Jasne. Będzie coś nowego będzie nowy post 🙂 ostatanio z czasem kiepsko ale coś tam powoli codziennie od 23 do 24 udaje się pogrzebać 😄

  • 8 miesiące później...

Wstyd się przyznać, ale robot przeleżał prawie 9 miesięcy bez żadnego dotknięcia.

Nawał obowiązków rodzinnych, przeprowadzka itp itd - totalny brak czasu.

No ale wczoraj odkurzyłem drania i napsiałem apkę do sterowania po BT - póki co mega prosta. Przód tył lewa prawa i stała prędkość silników.

I niestety - "prawe" silniki działają ok. Lewe - zawsze kręcą się do przodu.

Wymontowałem ESP z robota i sprawdzam napięcie na pinie sterowania kierunkiem lewych silników - niezależnie od komendy zawsze mam tam 3.3V :/

 

Czy ktos jest w stanie podpowiedzieć co robię źle?

Poniżej kod:


#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

#if !defined(CONFIG_BT_SPP_ENABLED)
#error Serial Bluetooth not available or not enabled. It is only available for the ESP32 chip.
#endif

#include "FastAccelStepper.h"
#include "AVRStepperPins.h" // Only required for AVR controllers

const int DIR_LEFT_PIN = 14;
const int STEP_LEFT_PIN = 12;

const int DIR_RIGHT_PIN = 27;
const int STEP_RIGHT_PIN = 13;

const int ENABLE_PIN = 26;

FastAccelStepperEngine leftEngine = FastAccelStepperEngine();
FastAccelStepper *leftStepper = NULL;

FastAccelStepperEngine rightEngine = FastAccelStepperEngine();
FastAccelStepper *rightStepper = NULL;

BluetoothSerial SerialBT;

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");

  leftEngine.init();
  leftStepper = leftEngine.stepperConnectToPin(STEP_LEFT_PIN);

  rightEngine.init();
  rightStepper = rightEngine.stepperConnectToPin(STEP_RIGHT_PIN);
  
  if (leftStepper && rightStepper) {
    leftStepper->setDirectionPin(DIR_LEFT_PIN);
    leftStepper->setEnablePin(ENABLE_PIN);
    leftStepper->setAutoEnable(true);
    leftStepper->setSpeedInHz(1000);       // 500 steps/s
    leftStepper->setAcceleration(500);    // 100 steps/s²

    rightStepper->setDirectionPin(DIR_RIGHT_PIN);
    rightStepper->setEnablePin(ENABLE_PIN);
    rightStepper->setAutoEnable(true);
    rightStepper->setSpeedInHz(1000);       // 500 steps/s
    rightStepper->setAcceleration(500);    // 100 steps/s²

//    digitalWrite(DIR_LEFT_PIN, LOW);
//    digitalWrite(DIR_RIGHT_PIN, LOW);
  }
}

void loop() {
  if (SerialBT.available()) {

    String text = SerialBT.readStringUntil('<<');

    if (text.startsWith(">>")) {
      text = text.substring(2);

      int splitterIndex = text.indexOf("--");

      String buttonName = text.substring(0, splitterIndex);
      String actionName = text.substring(splitterIndex + 2, text.length());


      Serial.print("Button ");
      Serial.print(buttonName);

      Serial.print(", Action: ");
      Serial.println(actionName);


      if (buttonName == "UP" && actionName == "DOWN") {
        goForward();
      } else if (buttonName == "UP" && actionName == "UP") {
        stop();
      }

      if (buttonName == "DOWN" && actionName == "DOWN") {
        goBackward();
      } else if (buttonName == "DOWN" && actionName == "UP") {
        stop();
      }
      if (buttonName == "LEFT" && actionName == "DOWN") {
        left();
      } else if (buttonName == "LEFT" && actionName == "UP") {
        stop();
      }
      if (buttonName == "RIGHT" && actionName == "DOWN") {
        right();
      } else if (buttonName == "RIGHT" && actionName == "UP") {
        stop();
      }
    }
  }
}




void goForward() {
  leftStepper->runForward();
  rightStepper->runForward();
}
void goBackward() {
  leftStepper->runBackward();
  rightStepper->runBackward();
}


void left() {
 leftStepper->runBackward();
 rightStepper->runForward();
}
void right() {
 leftStepper->runForward();
  rightStepper->runBackward();
}


void stop() {
  leftStepper->stopMove();
  rightStepper->stopMove();
}

 

 

Dodam, że próbowałem zmieniać pin tych lewych silników na inny, ale efekt zawsze ten sam.

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