Skocz do zawartości

Problem z przekazywaniem sygnałów z esp32 na arduino zasilanym z baterii.


Onedwa

Pomocna odpowiedź

Witam serdecznie, 

Borykam się z dziwnym dla mnie problemem, otóż zbudowałem sobie pojazd rc składający się z czterech silników, arduino, nakładki od iduino i modułu esp32 wroom do komunikacji wifi z telefonem. Do sterowania użyłem aplikacji z google play, który wysyła 5 zapytań GET; "GET /?State=F", "GET /?State=B","GET /?State=L","GET /?State=R", "GET /?State=S".

Kolejno są to : przód, tył, lewo, prawo i stop. Sygnały schodzą na esp jak i są przekazywane na arduino dopóki układ jest zasilany z kabla usb. Niestety gdy uruchomię z zasilania bateryjnego, to silniki na sygnały nie reaguję, podobnie jest gdy obwód jest zasilany z kabla usb, a przełączę przycisk zasilania bateryjnego, to wywala komunikację z komputerem.

Kod sterujący silnikami w zależności od otrzymanej komendy, a pod nim kod z esp32, który odbiera sygnały z telefonu i przekazuje na arduino.

Wydaje mi się, że jest kwestia zasilania, ale nie dam sobie ręki uciąć, może ktoś miał podobny problem?

Z góry dziękuję za odpowiedzi.

#include <AFMotor.h>

// Inicjalizacja motor shield
AF_DCMotor motor1(1); // Motor 1 podłączony do kanału M1
AF_DCMotor motor2(2); // Motor 2 podłączony do kanału M2
AF_DCMotor motor3(3); // Motor 3 podłączony do kanału M3
AF_DCMotor motor4(4); // Motor 4 podłączony do kanału M4

void setup() {
  Serial.begin(9600); // Komunikacja z ESP32
  Serial.println("Arduino is ready to receive commands");
}

void loop() {
  if (Serial.available()) {
    char command = Serial.read();
    Serial.print("Received command: ");
    Serial.println(command);
    
    switch (command) {
      case 'F':
        // Ruch do przodu
        Serial.println("Moving forward");
        motor1.setSpeed(255); // Maksymalna prędkość
        motor1.run(FORWARD);
        motor2.setSpeed(255);
        motor2.run(FORWARD);
        motor3.setSpeed(255);
        motor3.run(FORWARD);
        motor4.setSpeed(255);
        motor4.run(FORWARD);
        break;
      case 'B':
        // Ruch do tyłu
        Serial.println("Moving backward");
        motor1.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.setSpeed(255);
        motor2.run(BACKWARD);
        motor3.setSpeed(255);
        motor3.run(BACKWARD);
        motor4.setSpeed(255);
        motor4.run(BACKWARD);
        break;
      case 'R':
        // Skręt w prawo
        Serial.println("Turning right");
        motor1.setSpeed(255);
        motor1.run(FORWARD);
        motor2.setSpeed(255);
        motor2.run(BACKWARD);
        motor3.setSpeed(255);
        motor3.run(FORWARD);
        motor4.setSpeed(255);
        motor4.run(BACKWARD);
        break;
      case 'L':
        // Skręt w lewo
        Serial.println("Turning left");
        motor1.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.setSpeed(255);
        motor2.run(FORWARD);
        motor3.setSpeed(255);
        motor3.run(BACKWARD);
        motor4.setSpeed(255);
        motor4.run(FORWARD);
        break;
      case 'S':
        // Stop
        Serial.println("Stopping");
        motor1.setSpeed(0);
        motor1.run(RELEASE);
        motor2.setSpeed(0);
        motor2.run(RELEASE);
        motor3.setSpeed(0);
        motor3.run(RELEASE);
        motor4.setSpeed(0);
        motor4.run(RELEASE);
        break;
      default:
        Serial.println("Unknown command");
        break;
    }
  }
}
#include <WiFi.h>

// Nazwa i hasło sieci Wi-Fi
const char* ssid = "RC_CONNECTION";
const char* password = "12345678";

// Inicjalizacja serwera
WiFiServer server(80);

// Piny dla Serial1
const int RX_PIN = 16;
const int TX_PIN = 17;

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // Używamy Serial1 do komunikacji z Arduino

  // Ustawienie ESP32 jako Access Point
  WiFi.softAP(ssid, password);

  Serial.println("Access Point utworzony:");
  Serial.print("SSID: ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.softAPIP());

  // Uruchomienie serwera
  server.begin();
}

void loop() {
  WiFiClient client = server.available(); // Sprawdzenie, czy są klienci

  if (client) {
    Serial.println("New connection");
    String currentLine = ""; // do trzymania danych z klienta

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c); // Wysyła komendę do komputera przez Serial

        if (c == '\n') {
          // Przetwarzanie żądania GET
          Serial.println("Processing request:");
          Serial.println(currentLine);

          // Wysłanie komendy do Arduino przez Serial1
          if (currentLine.indexOf("GET /?State=F") >= 0) {
            Serial1.println("F");
          } else if (currentLine.indexOf("GET /?State=B") >= 0) {
            Serial1.println("B");
          } else if (currentLine.indexOf("GET /?State=R") >= 0) {
            Serial1.println("R");
          } else if (currentLine.indexOf("GET /?State=L") >= 0) {
            Serial1.println("L");
          } else if (currentLine.indexOf("GET /?State=S") >= 0) {
            Serial1.println("S");
          }

          // Wysłanie odpowiedzi do klienta
          client.println("HTTP/1.1 200 OK");
          client.println("Content-type:text/html");
          client.println();
          client.println("Komenda otrzymana");
          client.println();
          break;
        } else if (c != '\r') {
          currentLine += c;
        }
      }
      yield(); // Dodanie yield() w celu uniknięcia resetowania przez watchdog
    }
    client.stop();
    Serial.println("Client Disconnected");
  }
  delay(10); // Dodanie niewielkiego opóźnienia, aby odciążyć procesor
}

 

DIAGRAM RC.png

Link do komentarza
Share on other sites

7,5 V DC, rzeczywiście jest to za dużo, wypadało by wrzucić rezystor przed esp.

Dodam, że podłączyłem esp do zasilania z usb, a reszta z akumulatorów i wynik był pozytywny, wszystko hula.

Ale teraz mnie zastanawia dlaczego tam jest 7.5V skoro na płytce na tym wyjściu powinno być +5V.

Link do komentarza
Share on other sites

Dnia 8.07.2024 o 22:06, Onedwa napisał:

7,5 V DC, rzeczywiście jest to za dużo, wypadało by wrzucić rezystor przed esp.

 

Dnia 8.07.2024 o 22:06, Onedwa napisał:

Ale teraz mnie zastanawia dlaczego tam jest 7.5V skoro na płytce na tym wyjściu powinno być +5V.

To jest wejście tam 5V jest kiedy podłączone to jest USB, 7.5V zwiększy moc strat w stabilizatorze, a być może to nie działa z akumulatorków bo masz kiepskiej jakości koszyki? ESP potrzebuje dużo prądu podczas rozruchu i łączenia do WiFi, możesz spróbować dodać tam kondensator około 1000uF/10...16V(czy jaki tam masz)

Edytowano przez _LM_
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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.