Skocz do zawartości

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki


Komentator

Pomocna odpowiedź

Dnia 25.01.2020 o 20:52, Miki_elektronik napisał:

Jakie są wartości tych kondensatorów filtrujących w układzie z serwomechanizmem

@Miki_elektronik te wartości nie muszą być bardzo precyzyjnie dobrane, kondensatory ceramiczne 100 nF i elektrolityczne 100 uF spokojnie wystarczą.

Link do komentarza
Share on other sites

// ZADANIE 5.3 FORBOT JEST NAJLEPSZY!



#include <Arduino.h>

#include <Servo.h> //Biblioteka odpowiedzialna za serwa



Servo serwomechanizm; //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa

int pozycja = 0;      //Aktualna pozycja serwa 0-180

int zmiana = 6;       //Co ile ma się zmieniać pozycja serwa?

int czas = 200;



void setup()

{

  serwomechanizm.attach(9); //Serwomechanizm podłączony do pinu 9

}



void loop()

{

  if (pozycja < 180)

  {                                //Jeśli pozycja mieści się w zakresie

    serwomechanizm.write(pozycja); //Wykonaj ruch

  }

  else

  { //Jeśli nie, to powrót na początek

    pozycja = 0;

    czas = czas + 50; ////////////////////////////// ZADANIE 5.3 - zwiekszanie czasu kolejnego przeskoku o 50 milisekund //////////////////////////////////////





  pozycja = pozycja + zmiana; //Zwiększenie aktualnej pozycji serwa

  delay(czas);

}

 

Edytowano przez Gieneq
  • Lubię! 1
Link do komentarza
Share on other sites

Dzień dobry

Mam pytanie odnośnie pracy z serwomechanizmami. Czy jeśli mam serwa Hitec hs311 które co 10 sekund zmieniają pozycję (mają podłączone ramię Pan/tilt z niewielkim obciążeniem) to czy trzymanie pozycji przez te 10 sekund jest dla nich bardzo szkodliwe? W momencie gdy przerywam sygnał (co intuicyjnie wydawałoby się bardziej higienicznym postępowaniem to serwa zaczynają się w skrajnych pozycjach ślizgać i nie trzymają pozycji. 

Będę bardzo wdzięczna za odpowiedź.  

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@karolina witam na forum 🙂 Serwomechanizmy nie podtrzymują same z siebie zadanej pozycji, jeśli odłączy się sygnał sterujący. Nie ma tam też mechanicznego hamowania (pomijając opór przekładni). "Niewielkie obciążenie" raczej im nie zaszkodzi 😉

Link do komentarza
Share on other sites

Witam, jestem zupełnie zielony w Arduino i elektronice i robię kurs Arduino, który dostałem w prezencie od żony. Jestem aktualnie na podłączeniu servomechanizmu i musze przyznać, że pierwszy schemat nie bardzo do mnie przemawia. Nie widzę w zestawie takich kondensatorów (nie widzę także opisu jakie to są kondensatory, tylko że filtrujące) a obrazek nie jest zbyt wyraźny dlatego nie wiem jak podłączyć ten stabilizator 7805 i kondensatory. Nigdzie nie jest także napisane czy Arduino ma być cały czas podłączone przez USB czy tylko na początku przy wgraniu programu?

 

1650116345_Zrzutekranuz2020-02-1718-35-26.png.cea408f3aee337351dca6a7ce93c10e5.png

Link do komentarza
Share on other sites

@przemko Na stronie 19 i 20 tego forum jest dokładnie opisane jak możesz je podłączyć. Są to dwa kondensatory ceramiczne, ale możesz także podłączyć 1 ceramiczny i 1 elektrolityczny. W takim przypadku nie możesz pomieszać plusa z minusem 😉

  • Lubię! 1
Link do komentarza
Share on other sites

Mam pytanie. W zadaniu 5.5 użyłem rownania

odczyt=analogRead(A1);

pozycja=(odczyt*180)/1024;

Serwo zaczęło wariowac. Jak podłączyłem się do UART pokazywał mi wartości dla zmiennej pozycja od - 30 do 120. Odczyt zaś wskazywal normalnie od 0 do 1023. 

odczyt to zmienna typu int. Pozycję próbowałem i na int i na float. 

Dlaczego wartość pozycja mogła przyjąć wartości ujemne? 

Wcześniej jak rownanie napisałem w następujący sposób:

pozycja=odczyt*(180/1024);

to pozycje wyświetlał mi jako wartość 0

Edytowano przez Kerotes
Link do komentarza
Share on other sites

@Kerotes wygląda na to że zmienna jest rzutowana na int.

pozycja=odczyt*(180/1024);

W tym to co jest w nawiasie wynosi 0 jako wyniki dzielenia całkowitoliczbowego, więc taka metoda odpada.

int pozycja=(int)(odczyt*180.0/1024.0);

Spróbuj tego albo użyj funkcji map, która przeskaluje wartości.

Link do komentarza
Share on other sites

Może ktoś będzie miał ochotę skomentować:

#include <Servo.h>

Servo serwo;
int vvlpot = 0;
int vvlpot2 = 0;
int zakres = 0;

void setup()
{ serwo.attach(9);
  Serial.begin (9600);
 }

void loop()
{ vvlpot = analogRead(A0);                            //przypisanie wartości zmiennym do porównania 
  vvlpot2 = analogRead(A0);                           //i zatrzymania programu
  
 while (vvlpot > vvlpot2 - 5 && vvlpot < vvlpot2 + 5) //zatrzymanie programu
 {  vvlpot = analogRead(A0);                          //monitorowanie stanu potencjometru
  }
  zakres = map(vvlpot, 0, 1024, 0, 180);              //zakres napięcia na kąt serwa
  serwo.write(zakres);
  delay(10);                                          //Opóźnienie ma wyeliminować "drgania" serwa
  Serial.println (vvlpot);                            //"monitor", czy program faktycznie 
  Serial.println (vvlpot2);                           //się zatrzymujev

I pytanie: w niektórych ustawieniach potencjometru serwo drga (domyślam się ze próbuje się ustawić precyzyjnie do nastaw potencjometru). Czy da się ten efekt wyeliminować czy serwa tak mają i to nie jest problem?

Link do komentarza
Share on other sites

Tak się zastanawiałem co robi ten program, ale rozumiem że jest to coś w rodzaju strefy nieczułości? Starasz się odrzucić niewielki (1%) szum na potencjometrze i gdy różnica jest wystarczająco duża to coś ustawić. Jeżeli metoda write przyjmuje inty to ta 1% strefa jest już wliczona przy mapowaniu bo około 5 jednostek z ADC zamieniane jest na 1 jednostkę nastawy serwa. Więc może zwiększ tą strefę do np. 30.

Niemniej, serwa tak mają że czasem sobie drgają 🙂 Wbudowany sterownik próbuje osiągnąć zadaną pozycję i wpada w oscylacje wokół stanu ustalonego.

Link do komentarza
Share on other sites

33 minuty temu, Gieneq napisał:

zwiększ tą strefę do np. 30

co nie oznacza, że wyeliminuje się drgania tylko że prawdopodobieństwo ich wystąpienia będzie sześciokrotnie mniejsze niż w przypadku 5.

Zamiast vvplot i vvplot2 wypisuj stan zmiennej "zakres" (przed i po mapowaniu) - będziesz wiedział czy to wina szumów potencjometru, czy konstrukcji serwa.

Przy okazji: delay(10) nic nie wyeliminuje jako że serwo i tak nie przyjmie informacji częściej niż co 20 milisekund - taka już jego serwiasta uroda.

 

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