Skocz do zawartości
borpio

Robot z kursu robotów + moduł bluetooth

Pomocna odpowiedź

Witam, mam następujący problem i bardzo proszę o poradę.

Mianowicie chciałem podłączyć do robota z "kursu robotów" moduł bluetooth aby móc sterować robotem za pomocą smartfona.

W tym celu zamówiłem moduł bluetooth HC-05, ale dzisiaj zamiast tego dostałem z tego co wygooglowałem prawdopodobnie moduł "PL2303" (link poniżej) :

https://www.instructables.com/id/USB-to-TTL-Converter-PL2303HX/

Zdjęcia realne modułu.

20190508_131028.thumb.jpg.39d092db2af4ec83c8f4e4dbd1839436.jpg20190508_131002.thumb.jpg.6a7accca137824a554ef1ab28ac877d4.jpg

Moje pytanie brzmi czy jestem w stanie go podłączyć do robota z kursu? i sterować robotem przez smartfon ???.

Chciałem wykonać podobny projekt jak ten: https://circuitdigest.com/microcontroller-projects/g-sensor-controlled-robot-car-arduino

Czy jest to wykonalne?.

Z góry dziękuje za pomoc i pozdrawiam.

Udostępnij ten post


Link to post
Share on other sites

@borpio, witam na forum 😉 Widzę, że to Twoje pierwsze kroki na Forbocie, oto najważniejsze informacje na start:

  • Chcesz przywitać się z innymi członkami naszej społeczności? Skorzystaj z tematu powitania użytkowników.
  • Opis najciekawszych funkcji, które ułatwiają korzystanie z forum znajdziesz w temacie instrukcja korzystania z forum - co warto wiedzieć?
  • Poszczególne posty możesz oceniać (pozytywnie i negatywnie) za pomocą reakcji - ikona serca w prawym dolnym rogu każdej wiadomości.

17 minut temu, borpio napisał:

W tym celu zamówiłem moduł bluetooth HC-05, ale dzisiaj zamiast tego dostałem z tego co wygooglowałem prawdopodobnie moduł "PL2303" (link poniżej) :

To co otrzymałeś to nie jest moduł Bluetooth tylko konwerter USB<>UART, którego w tym przypadku nie potrzebujesz, bo masz już coś takiego wbudowane w Arduino. Niestety taki moduł nie pozwoli na realizację bezprzewodowej komunikacji z telefonem.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)

Dziękuje za szybką odpowiedź. Mam pytanie czy takie podłączenie wykorzystując UART jak na poniższym schemacie będzie poprawne do komunikacji i sterowania robotem?. Czy może trzeba wykorzystać wyprowadzenia oznaczone w żółtej ramce (5V, GND i np. D13 D12)?. A może obie opcje będą złe :)?. Z góry dziękuje za odpowiedź.

349389231_ukad.thumb.png.bd1e9ac7d7b1bfd052866f8663160129.png

Edytowano przez borpio

Udostępnij ten post


Link to post
Share on other sites

Witam ponownie,

do projektu robota dodałem moduł bluetooth HC-05 i podłączyłem go przez UART (zdjęcie w załączniku),

oraz zainstalowałem na smartfon aplikacje do sterowania 'Blue control V2.0' (zdjęcie w załączniku).

Działa to dobrze i oprogramowane są przyciski:

  • strzałka w górę: jazda (niby :D) do przodu,
  • środkowy przycisk stop,
  • strzałka w dół: jazda do tyłu
  • strzałki w lewo i w prawo: obrót w lewo i w prawo.

Serwo zamocowałem najpierw na recepturkę, ale przypadkowo znalazłem odpowiednie wkręty (recepturka została na zdjęciu...). Następnie dodałem czujnik odległości, z tymże wersja zamocowania na gumki u mnie się nie sprawdza, czujnik po chwili jazdy i paru wykryciach przeszkody skierowuje się w dół więc cały czas wykrywa przeszkodę (siebie). Dzisiaj próbowałem go przykleić kropelką bo nie mam wspomnianego w kursie hot glue, niestety ta opcja też wypadła podobnie jak z gumką za mało jest miejsca na "styk" (tylko ten brzeg kółka z 2 stron) myślę że może wypełnię to koło jakimś małym kółkiem i przykleję je, a potem czujnik, jak to też wyjdzie słabo to kupie hot glue.

Jeśli chodzi o kod to oprócz kodu z kursu z ostatniego odcinka dodałem kod związany z komunikacją bluetooth i przyciskami z aplikacji.

Zastanawiam się i proszę o pomoc co mógłbym tu jeszcze dodać fajnego i żeby mi wystarczyło na to zasilania??? (może dodać koszyk na baterie) może oświetlenie???  (posiadam części z kursu elektroniki: poziom 1 i 2 Arduino: 1 i 2 i techniki cyfrowej). Na koniec zamieszczam kod:

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165
#define BUZZER 10
#define trigPin 7
#define echoPin 8

#include <Servo.h>
Servo serwo;
#define SERWO_PIN 11

void setup() {
  //konfiguracja pinów od mostka H
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);

  //buzzer
  pinMode(BUZZER, OUTPUT);
  digitalWrite(BUZZER, 0); //wyłączenie buzzera

  //czujnik odleglosci
  pinMode(trigPin, OUTPUT); //trig jako wyjście
  pinMode(echoPin, INPUT); //echo jako wejście

  serwo.attach(SERWO_PIN); //serwo do pinu 11
  serwo.write(90); //serwo na pozycje 90 (bo zakres 0-180)

  Serial.begin(9600);

}
void loop() {
  if (Serial.available() > 0)
  {
    char data = Serial.read(); //odczyt danych z modułu hc-05
    switch (data)
    {
      case 'U': //do przodu
        leftMotor(95);
        rightMotor(95);
        delay(2000);
        break;

      case 'D': //do tyłu
        leftMotor(-95);
        rightMotor(-95);
        delay(2000);
        break;

      case 'C': //stop
        leftMotor(0);
        rightMotor(0);
        break;

      case 'L': //obrót w lewo
        leftMotor(-95);
        rightMotor(95);
        break;

      case 'R': //obrót w prawo
        leftMotor(95);
        rightMotor(-95);
        break;
    }
  }
  //czy wykryto przeszkode w zakresie 0-40 cm
  if (zmierzOdleglosc() > 40) {
    leftMotor(40); //jeśli nie to jedź prosto
    rightMotor(40);
  } else {
    //jeśli przeszkoda
    stopMotors(); //zatrzymaj robota
    serwo.write(20); //skręć czujnikiem w prawo
    delay(800); //poczekaj 800 ms dla ustabilizowania konstrukcji

    //sprawdź, czy po prawej stronie jest przeszkoda
    if (zmierzOdleglosc() > 40) {
      //jeśli jest pusto
      leftMotor(40);
      rightMotor(-40);
      delay(400); //obracaj w prawo przez 400 ms
    } else {
      //jeśli po prawej jest przeszkoda
      serwo.write(160); //obróć czujnik w lewo
      delay(800); //poczekaj 800 ms dla ustabilizowania konstrukcji

      //sprawdź, czy po lewej stronie jest przeszkoda
      if (zmierzOdleglosc() > 40) {
        //jeśli jest pusto
        leftMotor(-40);
        rightMotor(40);
        delay(400); //obracaj w lewo przez 400 ms
      } else {
        //jeśli z przodu, z lewej i prawej jest przeszkoda
        digitalWrite(BUZZER, 1);
        delay(500);
        digitalWrite(BUZZER, 0);
        //daj sygnał buzzerem
      }
    }
    //po sprawdzeniu przeszkód po bokach
    //ustaw czujnik prosto
    serwo.write(90);
  }
  //opoznienie 100ms ponieważ nie ma potrzeby sprawdzać przeszkód częściej
  delay(100);
}

int zmierzOdleglosc() {
  long czas, dystans;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;
  return dystans;
}

void leftMotor(int V) {
  if (V > 0) { //jeśli prędkość jest większa od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 0); //kierunek do przodu
    analogWrite(L_PWM, V); //ustawienie prędkości
  } else {
    V = abs(V); //funkcja abs() zwróci wartość V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(L_DIR, 1); //kierunek: do tyłu
    analogWrite(L_PWM, V); //ustawienie prędkości
  }
}
void rightMotor(int V) {
  if (V > 0) { //jeśli predkość jest większa od 0 (dodatnia)
    V = map(V, 0, 130, 0, PWM_MAX); //130 bo prawy silnik słabszy
    digitalWrite(R_DIR, 0); //kierunek: do przodu
    analogWrite(R_PWM, V); //ustawienie predkości
  } else {
    V = abs(V); //funkcja abs() zwróci wartość V  bez znaku
    V = map(V, 0, 130, 0, PWM_MAX); //130 bo prawy silnik słabszy
    digitalWrite(R_DIR, 1); //kierunek: do tyłu
    analogWrite(R_PWM, V); //ustawienie prędkości
  }
}
void stopMotors() {
  analogWrite(L_PWM, 0); //wyłączenie lewego silnika
  analogWrite(R_PWM, 0); //wyłączenie prawego silnika
}

DSCN0377.JPG DSCN0378.JPG screen-0.jpg

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

@borpio super, że udało się wszystko uruchomić 😉 

Jeśli masz elementy z kursu Arduino 2 to warto na pewno podłączyć cyfrowo sterowane diody RGB - będzie sporo ciekawych możliwości 😉

Udostępnij ten post


Link to post
Share on other sites

Dzięki za szybką odpowiedź 🙂.

43 minuty temu, Treker napisał:

@borpio super, że udało się wszystko uruchomić 😉 

Jeśli masz elementy z kursu Arduino 2 to warto na pewno podłączyć cyfrowo sterowane diody RGB - będzie sporo ciekawych możliwości 😉

W przypadku cyfrowo sterowanych diod RGB mam do wykorzystania na płytce sterownika dwa wolne piny D12 i D13 oraz masę np. przy wyprowadzeniach ADC?.

Czy linijka diod programowalnych WS2812 też wchodzi w grę?, aby ją podłączyć konieczne było by (chyba) umieszczenie małej płytki stykowej np. na koszyku z bateriami żeby podłączyć do niej rezystory i kondensator ?. Dobrze kombinuje? bo wariant z "wiszeniem rezystorów i kondensatorów w powietrzu" ze względów estetycznych nie wchodzi w grę. Linijkę chyba bym umieścił z przodu i chciałbym uzyskać efekt jak w serialu knight rider :D.

Pozdrawiam

Piotr

Udostępnij ten post


Link to post
Share on other sites

Tak, oczywiście - możesz podłączyć linijkę WS2812. Możesz dodać małą płytkę stykową i zaryzykować podłączenie linijki bez kondensatora i bez tego rezystora, raczej też będzie działać. Można zrobić tutaj taką prowizorkę dla testu 😉

Udostępnij ten post


Link to post
Share on other sites

Witam, dzięki za odpowiedź =). Dodałem małą płytkę stykowa i zamocowalem ją 2 trytytkami na koszu od baterii wygląda to nienajgorzej. Podłączyłem linijkę identycznie jak w kursie 2 z arduino z C i dwoma R do shieldu i wszystko działa, linijce dałem kod wariant 2 czerwono niebieski. Przejrzałem co prawda przykłady z biblioteki ale na razie odpuscilem ten temat (knight ridera ;). Niestety na te chwile nie kupiłem hot glue. Próbowałem kropelka i poxipol ale nic z tego. Więc nie wiem czy czujnik odległości dodam. Czy jeśli bym jednak chciał go dodać i podłączyć serwo czy obecne zasilanie to wytrzyma? Nie odejmujac linijki mam na myśli. Z jednej strony mocno zależy mi na projekcie ale nie wiem czy dam radę mądrze zmienić kod z odcinka o czujniku aby się to nie gryzlo z sterowaniem przez telefon w sensie ja sobie a robót sobie =)) bo taki uzyskalem efekt ale co prawda przy źle przymocowanym czujniku odległości.

20190518_193129.jpg

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Nie masz co się martwić o zasilanie - raczej nic nie zepsujesz. Najwyżej robot przestanie działać i będzie się zawieszał. Trwałego uszkodzenia raczej nie dasz rady zrobić w taki sposób. Można więc śmiało eksperymentować.  Największy pobór prądu będzie przy szybkim miganiu wszystkimi diodami na wszystkie kolory (czyli na biało). Jak nie robisz takich ekstremalnych efektów to powinno być dobrze 🙂

  • Pomogłeś! 1

Udostępnij ten post


Link to post
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ę »

×