Arduino potansiyometre kodu servoyu titretiyor

UruxUs

Hectopat
Katılım
26 Ocak 2021
Mesajlar
1.039
Çözümler
11
Daha fazla  
Cinsiyet
Erkek
ChatGPT'ye yazdırmış olduğum bu kodda sorun yaşıyorum. Devreye potansiyometre bağlı olmasa bile servo titriyor. Hatta bazen diğer servolar bile hareketlenebiliyor. Onları bir değer ile sabitlemiş olmama rağmen. Potansiyometre kodu olmadan değerler vererek sorunsuzca hareket ettirebiliyorum.

C++:
#include <Servo.h> // Servo kütüphanesini dahil ediyoruz

Servo servo1; // İlk servo için nesne tanımlaması
Servo servo2; // İkinci servo için nesne tanımlaması
Servo servo3; // Üçüncü servo için nesne tanımlaması

int potPin1 = A0; // İlk potansiyometre için analog pin tanımlaması
int potPin2 = A1; // İkinci potansiyometre için analog pin tanımlaması
int potPin3 = A2; // Üçüncü potansiyometre için analog pin tanımlaması

void setup() {
  servo1.attach(2); // Servo1 için pin 2'ye bağlanması
  servo2.attach(3); // Servo2 için pin 3'e bağlanması
  servo3.attach(4); // Servo3 için pin 4'e bağlanması
}

void loop() {
  int potValue1 = analogRead(potPin1); // İlk potansiyometrenin değerini okuyoruz
  int potValue2 = analogRead(potPin2); // İkinci potansiyometrenin değerini okuyoruz
  int potValue3 = analogRead(potPin3); // Üçüncü potansiyometrenin değerini okuyoruz

  int servoAngle1 = map(potValue1, 0, 1023, 0, 180); // İlk potansiyometre değerini 0-180 derece arasına çeviriyoruz
  int servoAngle2 = map(potValue2, 0, 1023, 0, 180); // İkinci potansiyometre değerini 0-180 derece arasına çeviriyoruz
  int servoAngle3 = map(potValue3, 0, 1023, 0, 180); // Üçüncü potansiyometre değerini 0-180 derece arasına çeviriyoruz

  servo1.write(servoAngle1); // Servo1'i ilgili açıya getiriyoruz
  servo2.write(20); // Servo2'yi ilgili açıya getiriyoruz
  servo3.write(90); // Servo3'ü ilgili açıya getiriyoruz

  delay(15); // 15ms bekliyoruz
}
 
ChatGPT'ye yazdırmış olduğum bu kodda sorun yaşıyorum. Devreye potansiyometre bağlı olmasa bile servo titriyor. Hatta bazen diğer servolar bile hareketlenebiliyor. Onları bir değer ile sabitlemiş olmama rağmen. Potansiyometre kodu olmadan değerler vererek sorunsuzca hareket ettirebiliyorum.

C++:
#include <Servo.h> // Servo kütüphanesini dahil ediyoruz

Servo servo1; // İlk servo için nesne tanımlaması
Servo servo2; // İkinci servo için nesne tanımlaması
Servo servo3; // Üçüncü servo için nesne tanımlaması

int potPin1 = A0; // İlk potansiyometre için analog pin tanımlaması
int potPin2 = A1; // İkinci potansiyometre için analog pin tanımlaması
int potPin3 = A2; // Üçüncü potansiyometre için analog pin tanımlaması

void setup() {
  servo1.attach(2); // Servo1 için pin 2'ye bağlanması
  servo2.attach(3); // Servo2 için pin 3'e bağlanması
  servo3.attach(4); // Servo3 için pin 4'e bağlanması
}

void loop() {
  int potValue1 = analogRead(potPin1); // İlk potansiyometrenin değerini okuyoruz
  int potValue2 = analogRead(potPin2); // İkinci potansiyometrenin değerini okuyoruz
  int potValue3 = analogRead(potPin3); // Üçüncü potansiyometrenin değerini okuyoruz

  int servoAngle1 = map(potValue1, 0, 1023, 0, 180); // İlk potansiyometre değerini 0-180 derece arasına çeviriyoruz
  int servoAngle2 = map(potValue2, 0, 1023, 0, 180); // İkinci potansiyometre değerini 0-180 derece arasına çeviriyoruz
  int servoAngle3 = map(potValue3, 0, 1023, 0, 180); // Üçüncü potansiyometre değerini 0-180 derece arasına çeviriyoruz

  servo1.write(servoAngle1); // Servo1'i ilgili açıya getiriyoruz
  servo2.write(20); // Servo2'yi ilgili açıya getiriyoruz
  servo3.write(90); // Servo3'ü ilgili açıya getiriyoruz

  delay(15); // 15ms bekliyoruz
}
Şimdi efendim 10-bit çözünürlükte yani 0-1023 arasında bir ADC işlemi gerçekleştiriyorsunuz ve 0-180 arasına eşitliyorsunuz, anlatmak istediğim değerler çok fazla oynayabilir. Dolayısıyla bunu 0 - 30 gibi bir değere alıp değeri 6 ile çarpmak mesela titreşimi azaltır. Veya bekleme süresini arttırmayı gözden geçirebilirsiniz. Kolaylıklar dilerim.
 
Şimdi efendim 10-bit çözünürlükte yani 0-1023 arasında bir ADC işlemi gerçekleştiriyorsunuz ve 0-180 arasına eşitliyorsunuz, anlatmak istediğim değerler çok fazla oynayabilir. Dolayısıyla bunu 0 - 30 gibi bir değere alıp değeri 6 ile çarpmak mesela titreşimi azaltır. Veya bekleme süresini arttırmayı gözden geçirebilirsiniz. Kolaylıklar dilerim.

Bekleme süresini arttırmak işe yaramamıştı. Ancak o dediğiniz işlemi deneyeceğim. Fakat değeri 6 ile nasıl çarpıp koda yansıtabileceğim pek kafama oturmadı. Kodu da zaten ChatGPT'ye yazdırmıştım :D.
 
Bekleme süresini arttırmak işe yaramamıştı. Ancak o dediğiniz işlemi deneyeceğim. Fakat değeri 6 ile nasıl çarpıp koda yansıtabileceğim pek kafama oturmadı. Kodu da zaten ChatGPT'ye yazdırmıştım :D.

Basit matematik. Map kısmında 0, 180 yazan kısmı 0, 30 olarak değiştirip servo1.write(servoAngle1 * 6) yapıyorsunuz, böylece 30 kademeniz oluyor.
0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180 :)
 
Basit matematik. Map kısmında 0, 180 yazan kısmı 0, 30 olarak değiştirip servo1.write(servoAngle1 * 6) yapıyorsunuz, böylece 30 kademeniz oluyor.
0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180 :)

Teşekkürler. Deneyip bilgilendiririm.
 
Teşekkürler. Deneyip bilgilendiririm.
C:
long map(long x, long in_min, long in_max, long out_min, long out_max) {
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Map fonksiyonu böyle çalışıyor, dolayısıyla 30 yaptığımızda 0-30 arasında ayarladığımız 1 birime 34.1 analog değeri düşüyor.

Kolay gelsin.
 

Yeni konular

Geri
Yukarı