Skocz do zawartości

Problem ze sterowaniem dwoma serwomechanizmami z Arduino


KamilTrag

Pomocna odpowiedź

Witam,

Mam pewien problem, połączyłem układ dokładnie według schematu z lekcji (stosując podany stabilizator i 2 kondensatory 100 nF) i kod programu z przykładu działa, ale na oko serwo nie porusza się o 180 stopni. Testowałem przykład "sweep" i podzieliłem ruch na kąty 0-90 i 90-180 stopni, w pierwszym przedziale ruch jest wyraźnie większy od tych 90 stopni a w drugim mniejszy. Poniżej zamieszczam kod - przedział 0 - 90 stopni:

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  
  for (pos = 0; pos <= 90; pos += 1) { // goes from 0 degrees to 90 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(35);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 90; pos >= 0; pos -= 1) { // goes from 90 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(35);                       // waits 15ms for the servo to reach the position
  }
}

I drugi - 90 - 180 stopni:

void loop() {
  for (pos = 90; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(35);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 90; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(35);                       // waits 15ms for the servo to reach the position
  }  
}

Czy może być to spowodowane niedokładnością serwa albo jakimiś blokadami mechanicznymi? Czytałem podobne opinie w internecie, ale wolę zapytać pewnego źródła.

Druga sprawa to nagły ruch serwa po podłączeniu zasilania, wprawdzie to raczej coś w rodzaju silnego drgnięcia orczyka, ale zauważyłem, że przy kilkukrotnym odłączeniu i podłączeniu zasilania orczyk zmienia pozycję początkową o kilka stopni. Co gorsza, gdy ustawiłem pozycję na 180 (samym myservo.write(180) bez żadnego innego ruchu w pętli loop), to po takim przełączaniu zasilania ponowne uruchomienie programu bez dodanego przesunięcia na inną pozycję nie wraca na wcześniejszą pozycję 180 stopni, tylko dalej jest kilka stopni błędu.

Ostatni problem mam z programem, który ma poruszać jednocześnie dwoma serwami w przeciwnych kierunkach.

#include <Servo.h>

Servo myservo_right;  // create servo object to control a servo
Servo myservo_left;

int pos_left = 0;    // variable to store the servo position
int pos_right = 180;
 
void setup() {
  myservo_right.attach(10);
  myservo_left.attach(9); // attaches the servo on pin 9 to the servo object
  
  myservo_left.write(pos_left);     // 0-90
  myservo_right.write(pos_right);   //90-180 
}

void loop()
{   
      for (pos_right = 180; pos_right >= 90; pos_right -= 1) {

         pos_left += 1;
         myservo_right.write(pos_right);                                
         myservo_left.write(pos_left);             
                    
         delay(100);                         
    }
      for (pos_right = 90; pos_right <= 180; pos_right += 1) {

         pos_left -= 1;
         myservo_left.write(pos_left); 
         myservo_right.write(pos_right);                 // 
                      
         delay(100);                         
    }
}

Mianowicie, lewe serwo wykonuje na kilka ruchów więcej niż serwo prawe w momencie, kiedy zbliża się do pozycji 0 stopni. Wina może leżeć w zasilaniu z 6 baterii 1.5 V czy w czymś innym? Z tego co sprawdzałem, port Vin w Arduino może dać maksymalnie 0,8 A, a serwomechanizmy, których użyłem (Tower Pro SG92R) bez obciążenia nie powinny wymagać większego prądu.

Link do komentarza
Share on other sites

@KamilTrag, 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.

Twoje pytania wydzieliłem z kursu podstaw Arduino, ponieważ wykorzystujesz inny sprzęt i próbujesz uruchamiać inne przykłady.

13 godzin temu, KamilTrag napisał:

Mam pewien problem, połączyłem układ dokładnie według schematu z lekcji (stosując podany stabilizator i 2 kondensatory 100 nF) i kod programu z przykładu działa, ale na oko serwo nie porusza się o 180 stopni. Testowałem przykład "sweep" i podzieliłem ruch na kąty 0-90 i 90-180 stopni, w pierwszym przedziale ruch jest wyraźnie większy od tych 90 stopni a w drugim mniejszy. Poniżej zamieszczam kod - przedział 0 - 90 stopni:

To już zależy od konkretnego serwa. Często serwa są w stanie wykonać obrót o 180*, ale w większości przypadków producenci gwarantują mniejszy zakres ruchu. Osiąganie dokładnie 180* może zależeć od konkretnego typu serwomechanizmu, a nawet od konkretnego egzemplarza.

13 godzin temu, KamilTrag napisał:

Czy może być to spowodowane niedokładnością serwa albo jakimiś blokadami mechanicznymi? Czytałem podobne opinie w internecie, ale wolę zapytać pewnego źródła.

Jest to możliwe, wszystko zależy od tego o jakich odchyłkach piszesz.

13 godzin temu, KamilTrag napisał:

Druga sprawa to nagły ruch serwa po podłączeniu zasilania, wprawdzie to raczej coś w rodzaju silnego drgnięcia orczyka, ale zauważyłem, że przy kilkukrotnym odłączeniu i podłączeniu zasilania orczyk zmienia pozycję początkową o kilka stopni.

To raczej normalna sprawa - szczególnie przy małych i tanich serwach.

  • Lubię! 1
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!

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