Merhaba arkadaşlar !
Arduino dersleri serimizin her bir adımında daha eğlenceli projeler yapıyoruz. Bugünkü yazımızda sizlere arduino ile servo motor kullanımından bahsedeceğiz.
Joystick kullanarak bu projeyi yapacağız. Bu sayede hem joystick kullanmayı hem de servo motor kontrol etmeyi öğreneceğiz.
Bir önceki yazımızda ses sensörü modülü ve DC motor kullanmıştık >>> Arduino ve Ses Sensörü Modülü ile Motor Kontrolü
Gerekli Malzemeler:
Arduino ile Joystick Kullanımı
Joystick, iki eksende hareket etmeyi sağlayan iki potansiyometre bulunduran ve dikey hareketinde ise buton görevi gören bir modüldür. Joystick’leri genellikle oyun konsollarında ve uzaktan kumandalı araçlarda görürüz.
Arduino ile uyumlu joystick modülleri ile birçok farklı proje yapılma imkanı vardır. Motor kontrolü, LED kontrolü, robotik kontroller gibi birçok farklı uygulama görmeniz mümkündür.
Arduino Joystick shield butonu, diğer butonların tersine çalışan bir karakteristiğe sahiptir. Yani bir pullup butondur. Butona basmadığımızda 1, bastığımızda ise 0 değerini okuruz.
Aşağıda Joystick modülünün pinout yapısı bulunmaktadır. Dikey, yatay ve buton hareketlerinin hepsi için ayrı birer data pini bulunmaktadır. Modülün çalışabilmesi için ise 5V ve GND beslemesinin yapılması gerekmektedir.
Arduino ile Servo Motor Kullanımı
Servo motorlar sayesinde çok hassas pozisyon kontrolü yapmak mümkündür.
Çoğunlukla çalışma açıları 0-180 derece arasındadır. Arduino’da servo motor kontrol kodları bulunmaktadır. Bunlar için Arduino’da Dosya>Örnekler>Servo>Sweep ve Dosya>Örnekler>Servo>Knob komutlarını takip etmeniz gerekecektir.
Servo Motor İçin Neden PWM Pinleri Kullanmalıyım?
Arduino’da Servo Motorlar PWM sinyali ile çalışırlar. PWM’in Türkçe açılımı Sinyal Genişlik Modülasyonudur ve bu sinyaller mikrokontrolcülerden veya uzaktan kumandalardan sağlanırlar.
PWM pinleri ile servonun tam dönüş açısı ve dönüş süresi kontrol edilebilmektedir.
Arduino PWM Pinleri: 3, 5, 6, 9, 10, 11
Servo motorlar, çalışma prensipleri ve PWM pinleri hakkında detaylı bilgiye buradan ulaşabilirsiniz.
Hadi devremizi kuralım !
Gerekli Joystick kodlarını yazalım !
#include <Servo.h> Servo motor; int deger; int derece; void setup() { motor.attach(3); } void loop() { deger = analogRead(A0); derece = map(deger, 0, 1023, 0, 180); motor.write(derece); }
bendeki joystickde VRY VRX ve SW girişleri var hangisi VER girişi?
vry olması lazım
VRy Y Ekseni VRx X Ekseni SW İse Butondur VRy Veya VRx’i Seçebilirsin İstediğin Yönde Çalıştırmak İçin
(Biraz Geç Oldu Ama 🙂
geç
Tşk
İyi günler, ben joystick ile iki eksende ayrı servo motorlar döndürmek istiyorum.
Kodlarım ise şöyle;
#include
Servo motor;
Servo motor1;
#define A0 yPin
#define A1 xPin
int xderece;
int xdeger;
int ydeger;
int yderece;
int zaman = 0;
int xPin;
int yPin;
void setup() {
motor.attach(3);
motor1.attach(5);
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
}
void loop() {
ydeger = analogRead(yPin);
xdeger = analogRead(xPin);
xderece = map (xdeger, 0,1023, 0,180);
yderece = map(ydeger, 0,1023, 0,180);
motor.write(yderece);
motor1.write(xderece);
}
Yardım ederseniz sevinirim . Teşekkürler.
#include // Servo kütüphanesi
Servo myservo1; // 2 adet servo motor kullanıldı
Servo myservo2;
int pozisyon_x=0; // Joystick lerden okunan analog değerler bu değişkenlerde tutulacak
int pozisyon_y=0;
const int x_pin=0; // Joystick in x ve y eksenleri 0 ve 1. pinlere bağlanacak
const int y_pin=1;
void setup() {
myservo1.attach(9); // Servolar arduinonun 9 ve 10. pinlerine bağlanacak
myservo2.attach(10);
Serial.begin(9600); // Seri haberleşme başladı
}
void loop() {
pozisyon_x = analogRead(x_pin); //0. pinden analog veri okundu
pozisyon_x = map(pozisyon_x, 0, 1023, 0, 180); //0-1023 değeri 0-180 değerine çekildi
myservo1.write(pozisyon_x); // Elde edilen 0-180 arası açı değeri servoya gönderildi
delay(15); // Servonun uygun konuma gelmesi için kısa bir gecikme
pozisyon_y = analogRead(y_pin); //1. pinden analog veri okundu
pozisyon_y = map(pozisyon_y, 0, 1023, 0, 180); //0-1023 değeri 0-180 değerine çekildi
myservo2.write(pozisyon_y); // Elde edilen 0-180 arası açı değeri servoya gönderildi
delay(15); // Servonun uygun konuma gelmesi için kısa bir gecikme
Serial.print(“Servo 1: “);
Serial.print(analogRead(pozisyon_x)); // Servoların kaçar derece döndükleri seri monitörde görüntülenecek
Serial.print(“\n”); // Alt satır
Serial.print(“Servo 2: “);
Serial.print(analogRead(pozisyon_x));
Serial.print(“\n”);
delay(1000);
}
#include
Servo motor;
Servo motor1;
#define yPin A0
#define xPin A1
void setup() {
// put your setup code here, to run once:
motor.attach(3);
motor1.attach(5);
}
void loop() {
// put your main code here, to run repeatedly:
int ydeger = analogRead(yPin);
int xdeger = analogRead(xPin);
int xderece = map(xdeger,0,1023,0,180);
int yderece = map(ydeger,0,1023,0,180);
motor.write(yderece);
motor1.write(xderece);
Bu Kodu Kendim Denedim Çalışıyor İyi Günler
AMA ETMİYCEM BİRŞEY DEĞİL
ayni joystikte y eksenini step motora x eksenini servoya baglama kodunu yazamadim. yardim lutfen.
#include servo kütüphanesi eklenmesi gerekiyor sanırım orda küçük bir hata olmuş
Arduino:1.8.10 (Windows 8.1), Kart:”Arduino/Genuino Uno”
Taslak adının değiştirilmesi gerekiyordu.
Eskiz isimleri bir harf veya rakamla başlamalı, ardından harf
sayılar, kısa çizgiler, noktalar ve alt çizgiler izlemeli. Maksimum uzunluk 63 karakterdir.
joystick_servo:1:10: error: #include expects “FILENAME” or
#include
^
exit status 1
#include expects “FILENAME” or
This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.
hocam bu hatyı veriyor yardım edermisiniz
kardeşşş amadolread(ypin ) değil A0 OLMASI LAZIM
ardiuno ile 3 eksen joıstıkle 4 tane asenkron motoru hız kontrolu ve yon ayarı yapabilirmiyim
Motorlarınıza göre uygun sürücü kullanırsanız elbette yapabilirsiniz.
BEN BİR POT İKİ BUTON İLE SERVO POZİSYON KONTROLÜ YAPMAK İSTİYORUM ÖRNEK VEREREK ANLATMAYA ÇALIŞAYIM POT DEĞERİ DİYELİMKİ 400 DE BIRAKTIM BUTON İLE TERS YÖNE BASILI TUTARAK 900 E GETİRDİM BIRAKTIM DURDU BEN TEKRAR POTU OYNATTIĞIMDA 400 DEĞERİNE DÖNÜP O POZİSYONDAN DEVAM ETMESİNİ İSTİYORUM AŞAĞIDAKİ KOD YANLIŞ BÜYÜK İHTİMAL BANA BU KONUDA YARDIMCI OLURSANIZ ÇOK SEVİNİRİM
#include
int giris_pot =A0;
int giris_butony =2;
int giris_butond =3;
int pot ;
int potsnce;
int aci_deger ;
Servo myservo;
void setup() {
myservo.attach(4);
pinMode(giris_butony,INPUT);
pinMode(giris_butond,INPUT);
servo.attach(4);
}
void loop() {
pot = analogRead(giris_pot);
if(potonce !=pot){
aci_deger=map(pot,0,1023,0,180);
potonce = pot;
}
else {
if(digitalRead(giris_butony) == HIGH)
{aci_deger = aci_deger+1 ; }
if(digitalRead(giris_butond) == HIGH)
{aci_deger = aci_deger-1 ; }
}
servo.write(aci_deger;
}
abi mega kullansam olurmu
ben nano ile yapıyorum kod #include hata veriyor yardımcı olursanız sevinirim
Gerekli kütüphaneler kurulmamış olabilir.