• 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 serwem AR - 3603 HB
#1
Witam,

Mam problem z precyzyjnym sterowaniem serwem AR - 3603 HB. Problem polega,że w tym serwie jest możliwa tylko praca ciągła, a wiec po podaniu krotkiego impulsu serwo obraca się w dajmy na to w lewo a przekroczeniu danej długości impulsu w prawo. Gdy ustawimy długość graniczną serwo się zatrzymuje. Problem polega na tym iż chce wysterować odpowiednio w czasie taką samą drogę w jedną jak i w drugą strone, ale nigdy mi sie to nie udaje.

mój program działa w następujacy sposób po przekroczeniu danej wartosci na przetworniku analogowym serwo obraca się w jedną strone przez dany okres czasu a po ponownym przekroczeniu wartosci progowej w tym samym czasie w drugą strone. Jednak widać iż drogi te są różne a nie równe. Z górzy dziękuje za pomoc.

Kod:
#include <Servo.h>

Servo moje_serwo;  // stworz obiekt moje_serwo do kontroli serwa

int potencjometr = A2;  // pin analogowy do odczytu potencjometra
int wartorsc;    // zmienna przechowujaca odczyt z potencjometru
int i = 0;
int g = 0;
int k = 0;

void setup() {
  moje_serwo.attach(9); // serwo podlaczone jest do pinu 11
  Serial.begin(9600);
}

void loop() {
 
wartorsc = analogRead(potencjometr);
Serial.print(wartorsc);       

if ( wartorsc > 510 && k==0) {
  k=1;
  }

if ( wartorsc < 500 && k==1) {
  k=2;
  }
 
if ( wartorsc > 510 && k==2) {
  k=3;
  }

if ( wartorsc < 500 && k==3) {
  k=0;
  }

if(( k == 1) && (i == 0) && (g == 0)){
g=1;
moje_serwo.write(180);
delay(500); 
moje_serwo.write(90);
delay(500);
i = 1;
g=0;
}

if((k == 3) && (i == 1) && (g == 0)){
g=1;
moje_serwo.write(0);
delay(500); 
moje_serwo.write(90);
delay(500);   
i = 0;
g=0;
}
 
Odpowiedź
#2
Przestań używać delay, to jest tylko do programów DEMO, naucz się obsługi micros i millis. Serwo co do zasady pracuje w wychyleniu o określony kąt, jak zdjąłeś ograniczniki by przerobić je na silniczek to tak to działa, możesz na piechotę próbować zmieniać czasy a i tak nic Ci to nie gwarantuje. Chcesz dokładnie pozycjonować się w ruchu po okręgu to użyj silnika krokowego, zabawkowe do Arduino są już od dziesięciu złotych, lepsze + driver to kilkadziesiąt złotych, oczywiście są i droższe, nie wiem jaka jest górna granica ani Twoje potrzeby.
 
Odpowiedź
#3
(10-10-2019, 01:24)kaczakat napisał(a): Przestań używać delay, to jest tylko do programów DEMO, naucz się obsługi micros i millis. Serwo co do zasady pracuje w wychyleniu o określony kąt, jak zdjąłeś ograniczniki by przerobić je na silniczek to tak to działa, możesz na piechotę próbować zmieniać czasy a i tak nic Ci to nie gwarantuje. Chcesz dokładnie pozycjonować się w ruchu po okręgu to użyj silnika krokowego, zabawkowe do Arduino są już od dziesięciu złotych, lepsze + driver to kilkadziesiąt złotych, oczywiście są i droższe, nie wiem jaka jest górna granica ani Twoje potrzeby.

Z używaniem delay się zgodze, ale tego serwo nie przerabiałem. Ono fabrycznie jest tak skonsturowane ze pracuje w trybie ciągłym. Długośc impulsu nie decyduje o kącie wychylenia, a o kierunku obrotów
 
Odpowiedź
#4
(11-10-2019, 10:16)pejdzejro napisał(a): Ono fabrycznie jest tak skonsturowane ze pracuje w trybie ciągłym. Długośc impulsu nie decyduje o kącie wychylenia, a o kierunku obrotów
Przyznam, że nie wiedziałem, iż takie serwa istnieją, bo i po co? Tak działają siłowniki (przynajmniej bardzo podobnie). Umieść dokumentację tego serwa lub daj linki do niego ale pełną dokumentację (producenta) a nie ulotkę umieszczaną przez sprzedawców, którzy w 90% nie wiedzą co sprzedają (rekordy bije Botland, stanowczo odradzam).
Jak umieścisz dokumentację to postaram się znaleźć rozwiązanie.

PS
Na beznadziejnie wolne odświeżanie graficznych wyświetlaczy kolorowych rozwiązanie znalazłem https://forbot.pl/forum/topic/16876-akce...ent-136600
Na problem zawieszania przerwań w czasie transmisji do WS282x też https://forum.atnel.pl/post222192.html#p222192
a nawet dwa, drugie (bez dodatkowego sprzętu) będzie opisane w "Elektronice dla wszystkich"
to i na problem serwa tez znajdę lekarstwo.

PS2
Pytanie, czy pacjent przeżyje :-) ?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości