• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie servo + DC bluetooth
#1
Witam

Jestem początkujący w temacie arduino.

Chciałbym sterować serwomechanizmem oraz silnikiem poprzez aplikacje bluetooth na androida typu Arduino Bluetooth Joystisk. Wiadomo o  co chodzi - samochód. Problem ma z przypisaniem osi x do sterowania serwem oraz osi y do sterowania silnikiem. Chodzi mi o płynną regulacje skrętu oraz prędkości. Chcę użyć do tego Arduino Nano.

Proszę o pomoc w temacie lub skierowanie do jakiegoś źródła na ten temat.
 
Odpowiedź
#2
W kursie znajdziesz opis obsługi silników i serw: https://forbot.pl/blog/kursy , program może działać sensownie dopiero co najmniej po poznaniu millis(), ale nie zaczynaj od końca kursu bo nic nie zrozumiesz. Do komunikacji z BT przyda się jeszcze poznanie parsowania zmiennych i przykład z event dla UART (jest wbudowany w Arduino IDE), przykłady użycia znajdziesz też na tym forum.
 
Odpowiedź
#3
Do komunikacji bluetooth używam modułu hc-05, komunikacja działa. Jak pisałem mam problem z przypisaniem wartości sygnału na konkretną oś. Kursy na tym forum przeglądam a bieżąco.
 
Odpowiedź
#4
No to super, pokaż kod, opisz z czym masz w nim problem, jak się zachowuje samochód vs czego oczekujesz.
 
Odpowiedź
#5
Więc musisz po prostu przypisać wartość sygnału na konkretną os, i tyle Smile
Mam nadzieję że zalapiesz sarkazm Wink
 
Odpowiedź
#6
Sarkazm załapny Smile

Poniżej kod
Kod:
   #define enA 9
   #define in1 4
   #define in2 5
   #define enB 10
   #define in3 6
   #define in4 7
   int xAxis, yAxis;
   unsigned int  X = 0;
   unsigned int  Y = 0;
   int motorSpeedA = 0;
   int motorSpeedB = 0;
   void setup() {
     pinMode(enA, OUTPUT);
     pinMode(enB, OUTPUT);
     pinMode(in1, OUTPUT);
     pinMode(in2, OUTPUT);
     pinMode(in3, OUTPUT);
     pinMode(in4, OUTPUT);
     Serial.begin(38400); // komunikacja
   }
   void loop() {
     // stop
     X = 512; // 4;
     Y = 512; // 4;
     //
     while (Serial.available() >= 2) {
       X = Serial.read();
       delay(10);
       Y = Serial.read();
     }
     delay(10);
 
     yAxis = Y;//*4;
     // y tyl
     if (yAxis < 470) {
     
       // motor B tyl
       digitalWrite(in3, HIGH);
       digitalWrite(in4, LOW);
       // y map tyl
       motorSpeedA = map(yAxis, 470, 0, 0, 255);
       
     }
     else if (yAxis > 550) {

       // potor B przod
       digitalWrite(in3, LOW);
       digitalWrite(in4, HIGH);
       // y map przod
       motorSpeedB = map(yAxis, 550, 1023, 0, 255);
     }
     // stop
     else  {

       motorSpeedB = 0;
     }
   
 
     analogWrite(enA, motorSpeedA); // PWM serwo A
     analogWrite(enB, motorSpeedB); // PWM motor B
   }
Narazie nic się nie dzieje. Problem w tym że nie wiem jak przypisać wartości suwaka x do serwa (jeszcze nie ma w kodzie) i y do silnika. Aplikacja jak w załączniku.

   
 
Odpowiedź
#7
Przekieruj całą komunikację z BT na serial monitor Arduino, dowiedz się co jest wysyłane  z joystika, jak często. Potem obmyśl jak obrobić te dane i przypisać je do zmiennych. Przykład jest m.in. tu: http://forum.arduinopolska.pl/watek-seri...nie-danych #2.
 
Odpowiedź
#8
Więc zrobiłem tak jak poniżej:

   

Z tego co wychodzi to że nie zależnie którą oś przesunę to wyrzuca D jako ruch i S jako stop. Czyli wychodzi na to że aplikacja nie rozróżnia osi. Dla trzech przycisków jest ok bo kolejno B, B2, B3.
 
Odpowiedź
#9
Wystarczyło przeczytać opis aplikacji, jest link do przykładowego szkicu na github. D to direction, a S to speed i to raczej chodzi o Twoje XY link. Niezależnie co robisz aplikacja wysyła w ustawionym interwale dane, tak by program w Arduino wiedział, że joy jest w zasięgu, inaczej zatrzymuje pojazd.
 
Odpowiedź
#10
Witam

Trochę to zajęło ale temat zakończony powodzeniem. Dziękuje za pomoc.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości