Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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();
}

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