• 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
problem z serwomechanizmem
#1
Cześć,
Zakupiłem serwo pełnego obrotu AR-3606HB 360 stopni i próbuję napisać do obsługi program, ale serwo nie zachowuje się tak jak powinno. W datasheet wyczytałem, że przy 1,5ms to punkt neutralny ale moje serwo w tej lini
Kod:
servo1.writeMicroseconds(1500);

nie jest zatrzymane ale obraca się powoli. Napisałem testowy program do obsługi serwa dwa przyciski do zmiany ruchu serwa w przeciwnych kierunkach oraz do zatrzymania gdy nie ma nic wciśniete, lecz po wgraniu serwo na nic nie reaguje i obraca się:
Kod:
#include <Servo.h>
int button1 = 8; //button pin, connect to ground to move servo
int button2 = 9;
int press1 = 0;
Servo servo1;

void setup()
{
 pinMode(button1,INPUT_PULLUP);
 pinMode(button2,INPUT_PULLUP);
 servo1.attach(7);
 digitalWrite(button1, LOW); //enable pullups to make pin high
 digitalWrite(button2, LOW);
 servo1.writeMicroseconds(1500);
}


void loop()
{
   if((digitalRead(button1))==HIGH){
   servo1.writeMicroseconds(1000);
   }
   else if((digitalRead(button2))==HIGH){
   servo1.writeMicroseconds(2000);
   }
   else
   servo1.writeMicroseconds(1500);
}
 
Odpowiedź
#2
pokręciłem wbudowanym potencjometrem(?) i teraz dla obojętnie jakiej wartości
servo1.writeMicroseconds();
serwo kręci się tak samo, w tą samą stronę. Czy ktoś wie jak to naprawić?
 
Odpowiedź
#3
Witam,
Po prostu napisz program, który będzie w pętli zmieniał czas impulsu i wyświetlał go np. w serialporcie. Wtedy zobaczysz jak zachowuje się Twoje serwo w zależności od czasu.
Pozdrawiam.
 
Odpowiedź
#4
Nie bardzo rozumiem jak by mi to miało pomóc, w datasheet jest napisane że 1500 μs to pozycja neutralna, gdzie serwo powinno być nieruchome, u mnie dla jakiejkolwiek wartości serwo obraca się z taką samą prędkością w tą samą stronę czy to 1000 μs, czy 1500 μs czy 2000 μs. Nie wiem jak ustawić serwo, by max prędkość w jedną stronę była przy 1000 μs pozycja neutralna przy 1500 μs a max prędkość w drugą stronę 2000 μs.
 
Odpowiedź
#5
Niestety serwa to kompromis jestem też modelarzem i mam z serwami do czynienia na co dzień i uwierz mi nie znalazłem jeszcze ani jednego serwa które by stało idealnie przy wartości 1500us generowane przez arduino . Jak kolega wyżej radził puść dane położenia na serial i będziesz wiedział w jakim położeniu ma neutrum twoje serwo . Poniżej masz prosty programik który ci pokaże położenie kątowe i wartość w pwm w us.

Kod:
byte servo = 9;
byte angle;
int pwm;

void setup(){

Serial.begin(9600);
pinMode(servo, OUTPUT);
}

void loop (){

angle = map(analogRead(A0), 0, 1023, 0, 180);
Serial.print(angle);
Serial.print("  :  ");
Serial.println(pwm);
servoPulse(servo, angle);
}

void servoPulse (int servo, int angle){

pwm = (angle*11) + 500;      
digitalWrite(servo, HIGH);
delayMicroseconds(pwm);
digitalWrite(servo, LOW);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości