Merhaba Arkadaşlar...
Servo motor, kendilerine gelen sinyalin pulse uzunluğuna göre konum olan motorlardır. Genellikle güç saglayan motorlar belirli bir hızda dönmeye göre tasarlanırken servo motorlar çok geniş bir hız komutunu yerine getirecek sekilde tasarlanır. Servo motorlar kullanıcının komutlarını yerine getiren motorlardır.
Servo motor AA ya da DA olarak bulunur. İlk zamanlarda servo motor genelde DA motorlardır. Çünkü uzun yıllar yüksek akımlar için tek kontrol yöntemi tristör kullanılmaktaydı. Transistörler yüksek akımları kontrol etme yetenegi kazandıkça ve yüksek akımları yüksek frekanslarda anahtarlandıkça servo motorlar daha sık kullanılmaya baslandı. İlk servo motor özellikle güçlendiriciler için tasarlanmıstı. Step motor kullanılmayan kapalı devre (çıkısın kontrol edildigi) sistemlere servo sistem diye adlandırılmaktadır. Bu yüzden hız kontrolcüye baglanmıs basit bir AA endüksiyon motorunun da servo motor olarak adlandırmak mümkündür.
Ben bu projede mini bir servo motoru Arduino kontrolcüsü ile kullanmaya çalısacagız.Öncelikle gerekli baglantıları şekildeki gibi yapalım.
Ardından servo motor kütüphanesini linkten indirip library (arduino/libraries) klasörünün içerisine çıkartıyoruz. Daha sonra programımızı açıp kodumuzu yazıyoruz.
Servo motorumuzu potansiyometre yardımıyla kontrol etmek istersek ise yapmamız gereken öncelikle asagıdaki gibi devremizi baglamaktır.
Ardından programımızın kodunu yazıp Arduino'ya Upload ederek çalıstırıyoruz.
Servo motor, kendilerine gelen sinyalin pulse uzunluğuna göre konum olan motorlardır. Genellikle güç saglayan motorlar belirli bir hızda dönmeye göre tasarlanırken servo motorlar çok geniş bir hız komutunu yerine getirecek sekilde tasarlanır. Servo motorlar kullanıcının komutlarını yerine getiren motorlardır.
Servo motor AA ya da DA olarak bulunur. İlk zamanlarda servo motor genelde DA motorlardır. Çünkü uzun yıllar yüksek akımlar için tek kontrol yöntemi tristör kullanılmaktaydı. Transistörler yüksek akımları kontrol etme yetenegi kazandıkça ve yüksek akımları yüksek frekanslarda anahtarlandıkça servo motorlar daha sık kullanılmaya baslandı. İlk servo motor özellikle güçlendiriciler için tasarlanmıstı. Step motor kullanılmayan kapalı devre (çıkısın kontrol edildigi) sistemlere servo sistem diye adlandırılmaktadır. Bu yüzden hız kontrolcüye baglanmıs basit bir AA endüksiyon motorunun da servo motor olarak adlandırmak mümkündür.
Ben bu projede mini bir servo motoru Arduino kontrolcüsü ile kullanmaya çalısacagız.Öncelikle gerekli baglantıları şekildeki gibi yapalım.
Ardından servo motor kütüphanesini linkten indirip library (arduino/libraries) klasörünün içerisine çıkartıyoruz. Daha sonra programımızı açıp kodumuzu yazıyoruz.
#include int servoPin = 9;
Servo servo;
int angle = 0; // derece cinsinden servo pozisyonu
void setup()
{
servo.attach(servoPin);
}
void loop()
{
for(angle = 0; angle < 180; angle++) // 0-180 derece tarama
{
servo.write(angle);
delay(15);
}
for(angle = 180; angle > 0; angle--) // 180-0 derece geri tarama
{
servo.write(angle);
delay(15);
}
}
servoPin kodumuz servoyu kontrol etmek için yollayacagımız sinyalin hangi pinden gelecegini belirtiyor. Biz 9 numaralı pini kullandık. Servo servo; kodu servo kütüphanesinin bize getirdigi yeni bir tanım seklidir. int, double gibi servo tanımlamasıdır. servo.write(angle); kodu içerisinde tanımlanan degeri servoya ileten fonksiyondur.Bizim programımızda angle tanımlı deger 0'dan 180'e kadar çıkıp inmektedir. Programın çalısır halinin videosu aşağıdadır ;Ardından programımızın kodunu yazıp Arduino'ya Upload ederek çalıstırıyoruz.
#include int servoPin = 9;
Servo servo;
int angle = 0; // derece cinsinden servo pozisyonu
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
int angle = reading / 6; // 0 to 180-ish
servo.write(angle);
}
Bu noktada sıklıkla karsılasılan problem potansiyometreden analog deger okunurken stabil bir islem gözlenememesidir. Bu yüzden potansiyometre sabit bile olsa analog deger sürekli farklı algılanmakta mikrodenetleyici de durmadan farklı açı sinyali yollamaktadır. Servo motor ufak açılarla bi ileri bir geri giderek titremektedir. Bu durum için öncelikle tavsiyem yüksek degerli potlardan kaçınmanız. Örnegin 10k dirence sahip potansiyometre sizin için ideal olacaktir. Ek olarak kodunuz içerisinde çeşitli düzenlemeler yaparak da stabilizasyonu arttırabilirsiniz. Asagıdaki kodda ufak bir ekleme yapılarak potun 30 degerden küçük okumalar için hareket etmesi önlenmiş bu sayade ufak titreşimler engellenmiştir. Tabi ki bu durum bize hassasiyet kaybı olarak yansır ancak genel kullanım için çok büyük sıkıntı çıkarmayacaktır. #include int servoPin = 9;
int potPin = 0;Servo servo;
int angle=0;
void setup()
{
servo.attach(servoPin);
}
void loop()
{
int reading = analogRead(potPin); // 0 to 1023
if( ((angle-(reading/6))>30) || ((reading/6)-angle)>30)
{
angle = reading / 6; // 0 to 180-ish
analogValue = analogRead(potPin); // print it out in many formats:
potValue = angle; // print it out in many formats:
servo.write(angle);
}
else
{}
}
Son olarak bu kodun çalısır haldeki videosunu ekliyorum.