Skocz do zawartości

Samochód RC - problem z serwem i silnikiem na mostku H


pyrtkovsky

Pomocna odpowiedź

Witam, tak jak w temacie - jestem w trakcie budowy samochodu RC - a dokładniej programowania układu. Chciałem zaprogramować aby za pomocą 1 analoga od pada sterować kierunkami przód/tył/lewo/prawo.

Używam modułu z mostkiem H L298N + serwo micro 9g. Właśnie z serwem jest pewien problem.

Ogólnie program działa bez zarzutu, silnik obraca się w obie strony po zmianie kierunku wychylenia gałki analoga. Natomiast po podpięciu serwa i dodaniu paru komend - automatycznie mostek H przestaje odpowiadać i działa samo serwo.

Próbowałem użyć zewnętrznego zasilacza na silniki, a samą część logiczną mostka zasilać z Arduino ale nie dało rady.

Co do wspomnianego analoga to posiada on 5 wyprowadzeń, 5V, GND, OŚ X, OŚ Y - z tych korzystam - ostatnie piąte jest od switcha, który póki co jest nie użyty. Oczywiście jedna oś jest do serwa, druga do silnika. Próbowałem również podpiąć 2 analogi, jeden na silnik, drugi serwo - nadal to samo.

Doszedłem do tego, że owy problem powoduje komenda

servo.attach(7)

Po jej usunięciu mostek działa bez problemu, ale wtedy nie mam jak korzystać z serwa

Stąd pytanie - dlaczego tak się dzieje, jak to ominąć? Może gdzieś popełniłem błąd?

Cały kod programu:

// Silnik
int A = 10;
int in1 = 9;
int in2 = 8;
// Analog
int x = 0;
int wartosc = 0;
int y = 1;
// Servo
#include <Servo.h>
Servo servo;

void setup()
{
 pinMode(A, OUTPUT); 
 pinMode(in1, OUTPUT); 
 pinMode(in2, OUTPUT); 
 //servo.attach(7);      

}

void naped()
{

 wartosc = analogRead(x);
 int wartosc1 = map(wartosc, 0, 1023, 0, 255);

if (wartosc1 > 123 && wartosc1 <127)
 {
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
 }
if (wartosc1 >128)
 {
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  analogWrite(A, 200);
 }
if (wartosc1 <123)
 {
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  analogWrite(A, 200);
 }

int kat = analogRead(y);            
kat = map(kat, 0, 1023, 0, 180);
servo.write(kat);                  
delay(15); 

}

void loop()
{
 naped();
}
Link do komentarza
Share on other sites

Z dokumentacji do biblioteki Servo na https://www.arduino.cc/en/Reference/Servo:

The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins.

Wybierz inny pin dla silnika niż 9 i 10.

Link do komentarza
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!

Gość
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.