Arduino ile servo motorun hızı nasıl ayarlanır?

682784

Hectopat
Katılım
16 Ocak 2022
Mesajlar
5.732
Makaleler
6
Çözümler
27
Merhaba servo motor hızını nasıl ayarlayabilirim? Kod bu şekilde 5 servo var.
C:
#include <Servo.h>

int x1Pin = A0;
int y1Pin = A1;
int x2Pin = A2;
int y2Pin = A3;
int x3Pin = A4;


Servo motor1; Servo motor2;Servo motor3; Servo motor4;Servo motor5;
 
int SERVOPIN1 = 1;
int SERVOPIN2 = 1;
int SERVOPIN3 = 1;
int SERVOPIN4 = 1;
int SERVOPIN5 = 1;

 
 
void setup() {
pinMode(x1Pin, INPUT);
pinMode(y1Pin, INPUT);
pinMode(x2Pin, INPUT);
pinMode(y2Pin, INPUT);
pinMode(x3Pin, INPUT);
motor1.attach(5);
motor2.attach(6);
motor3.attach(7);
motor4.attach(8);
motor5.attach(9);
}
 
void loop() {
SERVOPIN1 = map(analogRead(x1Pin),0,1023,0,180);
SERVOPIN2 = map(analogRead(y1Pin),0,1023,0,180);
SERVOPIN3 = map(analogRead(x2Pin),0,1023,0,180);
SERVOPIN4 = map(analogRead(y2Pin),0,1023,0,180);
SERVOPIN5 = map(analogRead(x3Pin),0,1023,0,180);
motor1.write(SERVOPIN1);
motor2.write(SERVOPIN2);
motor3.write(SERVOPIN3);
motor4.write(SERVOPIN4);
motor5.write(SERVOPIN5);
}
 
Merhaba servo motor hızını nasıl ayarlayabilirim? Kod bu şekilde 5 servo var.
C:
#include <Servo.h>

int x1Pin = A0;
int y1Pin = A1;
int x2Pin = A2;
int y2Pin = A3;
int x3Pin = A4;


Servo motor1; Servo motor2;Servo motor3; Servo motor4;Servo motor5;
 
int SERVOPIN1 = 1;
int SERVOPIN2 = 1;
int SERVOPIN3 = 1;
int SERVOPIN4 = 1;
int SERVOPIN5 = 1;

 
 
void setup() {
pinMode(x1Pin, INPUT);
pinMode(y1Pin, INPUT);
pinMode(x2Pin, INPUT);
pinMode(y2Pin, INPUT);
pinMode(x3Pin, INPUT);
motor1.attach(5);
motor2.attach(6);
motor3.attach(7);
motor4.attach(8);
motor5.attach(9);
}
 
void loop() {
SERVOPIN1 = map(analogRead(x1Pin),0,1023,0,180);
SERVOPIN2 = map(analogRead(y1Pin),0,1023,0,180);
SERVOPIN3 = map(analogRead(x2Pin),0,1023,0,180);
SERVOPIN4 = map(analogRead(y2Pin),0,1023,0,180);
SERVOPIN5 = map(analogRead(x3Pin),0,1023,0,180);
motor1.write(SERVOPIN1);
motor2.write(SERVOPIN2);
motor3.write(SERVOPIN3);
motor4.write(SERVOPIN4);
motor5.write(SERVOPIN5);
}
Dereceleri 1,1 arttırın ve aralara bekleme koyun örnek olarak;
Kod:
servo.write(1);
delay(10);
servo.write(2);
delay(10);
servo.write(3);
delay(10);
servo.write(4);
delay(10);
servo.write(5);
delay(10);
servo.write(6);
delay(10);
servo.write(7);
delay(10);
 
Dereceleri 1,1 arttırınve aralara bekleme koyun örnek olarak;
servo.write(1);
delay(10);
servo.write(2);
delay(10);
servo.write(3);
delay(10);
servo.write(4);
delay(10);
servo.write(5);
delay(10);
servo.write(6);
delay(10);
servo.write(7);
delay(10);
Teşekkürler şuan deneyemem yarın dönüş yaparım.
Başka çözüm yolları varmı acaba?
 
Merhaba servo motor hızını nasıl ayarlayabilirim? Kod bu şekilde 5 servo var.
C:
#include <Servo.h>

int x1Pin = A0;
int y1Pin = A1;
int x2Pin = A2;
int y2Pin = A3;
int x3Pin = A4;


Servo motor1; Servo motor2;Servo motor3; Servo motor4;Servo motor5;
 
int SERVOPIN1 = 1;
int SERVOPIN2 = 1;
int SERVOPIN3 = 1;
int SERVOPIN4 = 1;
int SERVOPIN5 = 1;

 
 
void setup() {
pinMode(x1Pin, INPUT);
pinMode(y1Pin, INPUT);
pinMode(x2Pin, INPUT);
pinMode(y2Pin, INPUT);
pinMode(x3Pin, INPUT);
motor1.attach(5);
motor2.attach(6);
motor3.attach(7);
motor4.attach(8);
motor5.attach(9);
}
 
void loop() {
SERVOPIN1 = map(analogRead(x1Pin),0,1023,0,180);
SERVOPIN2 = map(analogRead(y1Pin),0,1023,0,180);
SERVOPIN3 = map(analogRead(x2Pin),0,1023,0,180);
SERVOPIN4 = map(analogRead(y2Pin),0,1023,0,180);
SERVOPIN5 = map(analogRead(x3Pin),0,1023,0,180);
motor1.write(SERVOPIN1);
motor2.write(SERVOPIN2);
motor3.write(SERVOPIN3);
motor4.write(SERVOPIN4);
motor5.write(SERVOPIN5);
}
Bir while döngüsü kullanmayı da deneyebilirsiniz. Örneğin servo motoru 150 dereceden 170 dereceye getireceksiniz. Derece değerini bir değişkene tayin edersiniz. Ondan sonra o değişkenin 170'den küçük ya da 170'e eşit olduğu zamanlarda while döngüsünün çalışmasını söylersiniz. Ve döngünün içinde derece değerini her seferinde bir miktar artırırsınız ve bekleme komutu kullanırsınız. Bekleme komutunun ne kadar bekleteceği ya da derecenin her seferinde ne kadar artacağı ile oynayarak da hızı ayarlarsınız.
 
Evet daha güzel bir çözüm yolu var. @Master.sh'a katılmıyorum, gidiş yolu sonuç kadar önemlidir.
for (int i = 1; i < 8; i++) { servo.write(i); delay(10); }
Haklısınız, döngüler hep bana karışık geldi, kullanmıyorum. Zaten "benim bildiğim yok bir döngü ilede halledebilirsiniz." demiştim. Döngü konusunda bilgim olmadığı için yazmadım. Amacım kendim yaptığım gibi işime yarayan bir çözümle arkadaşa yardımcı olmak.
 
Evet daha güzel bir çözüm yolu var. @Master.sh'a katılmıyorum, gidiş yolu sonuç kadar önemlidir.
for (int i = 1; i < 8; i++) { servo.write(i); delay(10); }

Tecnio açıklamamış lakin @Master.sh gibi saçma yollar ile kodunuzu neden yazmamalısınız onu anlatayım.
  • Kullandığınız karta göre değişir ancak gereksiz yere belleği doldurmuş olursunuz.
  • İşlemleri yavaşlatırsınız.
Kodun akış yönetim çok önemlidir. Kodun doğru ve temiz akmasını sağlamak, stabilliği, hata ayıklamayı ve en önemlisi okunabilirliği arttırır.
 
Tecnio açıklamamış lakin @Master.sh gibi saçma yollar ile kodunuzu neden yazmamalısınız onu anlatayım.
  • Kullandığınız karta göre değişir ancak gereksiz yere belleği doldurmuş olursunuz.
  • İşlemleri yavaşlatırsınız.
Kodun akış yönetim çok önemlidir. Kodun doğru ve temiz akmasını sağlamak, stabilliği, hata ayıklamayı ve en önemlisi okunabilirliği arttırır.
Bu açıdan bakarsak haklısınız. O konuda hatam olmuş kabul ediyorum.
 

Geri
Yukarı