arduino ile motor sürme etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Bu yazımızda servo motoru arduino üzerinden sürme projesinden bahsedeceğiz.
Servo motorlarının üzerinde 1 adet power,1 adet ground ve 1 adette kontrol ya da sinyal ucu olmak üzere toplamda 3 adet pin bulunmaktadır.
Yandaki resimde tipik bir servo motor görülmektedir.Peki servo motor nasıl çalışır ?
Servo motorlar sinyal uçlarına gönderilen pulse ile çalışırlar ve bu pulse ile servo motorun 0 ile 180 derece arasında açıda dönmesini sağlar.Arduino tarafından gönderilecek olan pulse her 20 mili saniyede bir tekrarlanmalıdır aksi halde step motorumuz başlangıç değerine geri dönecektir.
Servo motoru 1ms ile 2ms pulse değerlerimizle 0-180 derece aralığında kontrol etmeye çalışacağız ve bunun içinde arduino servo motor kontrol kütüphanesini kullanacağız.
Arduino Servo motor kütüphanesi nasıl çalışır ? (<Servo.h>)
Servo kütüphanesini bir derleyici ile açtığınızda karşınıza kütüphane içerisinde tanımlı fonksiyonlar çıkacaktır ki bu fonksiyonları arduino ide içerisinde kullanacağız.İsterseni gelin bu fonksiyonlara bir göz atalım :
Servo : arduino ide içerisinde servo ile değişken tanımlayarak bir servo motor objesi oluşturmaya yarar.
attach(): bu fonksiyon servo motorumuzun bağlı olduğu pine servo motor kontrolünü bağlamamızı sağlayacak.
write(): tanımladığımız servo motora istediğimiz açı değerini göndermemizi sağlayacak olan fonksiyonumuz.
writeMicroseconds(): Servo motorumuza göndereceğimiz pulse değerimizin sıklığını ayarlayacak olan fonksiyonumuz.
read(): En son gönderilen açı değerini bize döndürecek olan fonksiyonumuz.
readMicroseconds():Servo motora gönderilen pulse değerinin sıklığını bize geri döndüren fonksiyonumuz.
attached(): Yukarıda belirtmiş olduğumuz attach fonksiyonun işlevini yerine getirmesi sonucu true ya da servo motorun yazılımsal olarak bağlı olmadığı durumda ise false döndüren fonksiyonumuz.
detach(): Yazılımsal olarak servo motoru programımızdan çıkaran yani attach foknsiyonu ile servo motoru bağladığımız pini yazılımsal olarak boşa çıkaran fonksiyonumuz.
Gelelim kodlarımıza :
#include<Servo.h>// servo kütüphanemizi ekledik
Servo motor;// motor adında bir servo objesi oluşturduk
int poz=0;//motorumuzun pozisyonunu içerisinde tutacağımız değişkenimiz.
void setup()
{
motor.attach(9);// servo motorumuzu 9 numaralı pwm pini üzerinden kontrol edeceğimizi belirttik
}
void loop()
{
for(poz=0;poz<180;poz++)//motorumuzun açısını sıfırdan başlatarak for içerisinde 180e kadar arttıracağız
{
motor.write(poz);//servo motora açısını gönderiyoruz.
delay(15);//15ms gecikme gönderiyoruz
}
for(poz=180;poz>0;poz--)//motorumuzun açısından 180 dereceden 0 dereceye indiriyoruz
{
motor.write(poz);// motorumuza açısını gönderiyoruz
delay(15);//15 ms bir gecikme gönderiyoruz
}
}
Programı çalıştırdığınızda servo motorun önce 0 dan 180 dereceye, sonrasında ise 180 dereceden 0 dereceye doğru hareket ettiğini göreceksiniz.
Servo motorlarının üzerinde 1 adet power,1 adet ground ve 1 adette kontrol ya da sinyal ucu olmak üzere toplamda 3 adet pin bulunmaktadır.
Yandaki resimde tipik bir servo motor görülmektedir.Peki servo motor nasıl çalışır ?
Servo motorlar sinyal uçlarına gönderilen pulse ile çalışırlar ve bu pulse ile servo motorun 0 ile 180 derece arasında açıda dönmesini sağlar.Arduino tarafından gönderilecek olan pulse her 20 mili saniyede bir tekrarlanmalıdır aksi halde step motorumuz başlangıç değerine geri dönecektir.
Servo motoru 1ms ile 2ms pulse değerlerimizle 0-180 derece aralığında kontrol etmeye çalışacağız ve bunun içinde arduino servo motor kontrol kütüphanesini kullanacağız.
Servo kütüphanesini bir derleyici ile açtığınızda karşınıza kütüphane içerisinde tanımlı fonksiyonlar çıkacaktır ki bu fonksiyonları arduino ide içerisinde kullanacağız.İsterseni gelin bu fonksiyonlara bir göz atalım :
Servo : arduino ide içerisinde servo ile değişken tanımlayarak bir servo motor objesi oluşturmaya yarar.
attach(): bu fonksiyon servo motorumuzun bağlı olduğu pine servo motor kontrolünü bağlamamızı sağlayacak.
write(): tanımladığımız servo motora istediğimiz açı değerini göndermemizi sağlayacak olan fonksiyonumuz.
writeMicroseconds(): Servo motorumuza göndereceğimiz pulse değerimizin sıklığını ayarlayacak olan fonksiyonumuz.
read(): En son gönderilen açı değerini bize döndürecek olan fonksiyonumuz.
readMicroseconds():Servo motora gönderilen pulse değerinin sıklığını bize geri döndüren fonksiyonumuz.
attached(): Yukarıda belirtmiş olduğumuz attach fonksiyonun işlevini yerine getirmesi sonucu true ya da servo motorun yazılımsal olarak bağlı olmadığı durumda ise false döndüren fonksiyonumuz.
detach(): Yazılımsal olarak servo motoru programımızdan çıkaran yani attach foknsiyonu ile servo motoru bağladığımız pini yazılımsal olarak boşa çıkaran fonksiyonumuz.
Gelelim kodlarımıza :
#include<Servo.h>// servo kütüphanemizi ekledik
Servo motor;// motor adında bir servo objesi oluşturduk
int poz=0;//motorumuzun pozisyonunu içerisinde tutacağımız değişkenimiz.
void setup()
{
motor.attach(9);// servo motorumuzu 9 numaralı pwm pini üzerinden kontrol edeceğimizi belirttik
}
void loop()
{
for(poz=0;poz<180;poz++)//motorumuzun açısını sıfırdan başlatarak for içerisinde 180e kadar arttıracağız
{
motor.write(poz);//servo motora açısını gönderiyoruz.
delay(15);//15ms gecikme gönderiyoruz
}
for(poz=180;poz>0;poz--)//motorumuzun açısından 180 dereceden 0 dereceye indiriyoruz
{
motor.write(poz);// motorumuza açısını gönderiyoruz
delay(15);//15 ms bir gecikme gönderiyoruz
}
}
Programı çalıştırdığınızda servo motorun önce 0 dan 180 dereceye, sonrasında ise 180 dereceden 0 dereceye doğru hareket ettiğini göreceksiniz.
Yine yaratıcı bir fikir arduino ile birleşince karşımıza vücut bulmuş bir şekilde çıkıyor.Nedir bu?
Şema
Su seviye kontrolünden başlayalım isterseniz.Dikkatinizi çektiyse su haznesinin üzerinden arduinonun 5 volt çıkışı suya daldırılmış vaziyette ve haznenin sağ tarafından ise 3 noktadan düşük seviye,orta seviye ve yüksek seviye olmak üzere 3 adet prop yerleştirilimiş.
Herbir su seviye switchi nasıl çalışır?
Yerleştirilmiş ilgili proba su teması olması halinde o prob ile 5 volt kaynağımız kısa devre olacağından transistörün base ine düşük bir miktar akım akar ve trasistörün emitter ve collector kısımları kısa devre olur ve arduinomuza o bolgeden dijital input olarak bilgi gider.
Peki sistemde su seviyesine nasıl karar verilir?
High,medium ve low olmak üzere 3 adet proba su teması halinde yüksek seviyede su var demek anlamını taşır ve su pompasını kapatırız.Medium ve low a teması halinde ise orta seviye bir su var anlamını taşıyacağından ya pompamıza düşük devirde çalışma bilgisi göndeririz ya da zamanlayıcı yardımı ile belirli süre çalıştırırız.Sadece düşük seviyesi görülmesi durumunda ise tam güç çalıştırır ve haznemizi doldururuz.
Motor nasıl sürülüyor?
Su seviye devrelerinde transistörün anahtarlama elamanı olarak kullanıldığı gibi arduinonun bir digital pini output olarak ayarlanmış ve pompayı aktif hale getirecek transistörün base ine bağlanmış.Çıkışımızın 1 olması durumunda base e bir miktar akım gidecek ve motorun çıkışı ile toprak kısa devre olacağından motorumuz çalışmaya başlayacak.
Sistemin görünüşü
Gelelim sistemin kodlarına :)
#include <LiquidCrystal.h> // lcd kütüphanesi eklenmiş
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // lcd bacakları kütüphaneye göre ayarlanmış
byte sensorPin[] = {8, 9, 10}; // su seviye sensör dijital adresleri 8-9-10 olarak ayarlandı
byte ledPin[] = {11, 12, 13}; // led pinleri ayarlandı
const byte sensors = 3;
int level = 0;
int motor = A4; // motor pini ayarlandı
void setup() {
for(int i = 0; i < sensors; i++) {
pinMode(sensorPin[i], INPUT); //sensör pinleri input haline geldi
pinMode(ledPin[i], OUTPUT); // led pinleri output haline geldi
}
pinMode(motor, OUTPUT); //motor pini output haline geldi
lcd.begin(16, 2); //lcd başlatıldı
}
void loop() {
level = 0; // su seviyesi sıfırlandı
for(int i = 0; i < sensors; i++) {
if(digitalRead(sensorPin[i]) == LOW) { // düşük su seviyesi kontrolü
digitalWrite(ledPin[i], HIGH); // düşük ledi yakıldı
level = sensors - i; // su seviyesi dusuruldu
} else {
digitalWrite(ledPin[i], LOW); // normale döndüğünde söndürüldü
}
}
lcd.clear(); // lcd temizlendi
lcd.print("Water level");
lcd.setCursor(0,1);
switch(level) { // su seviyesi ekrana yazdırılıyor switch her seviye için kontrol ediyor.
case 1:
lcd.print("HIGH");
digitalWrite(motor, HIGH);
break;
case 2:
lcd.print("AVERAGE");
digitalWrite(motor, LOW);
break;
case 3:
lcd.print("LOW");
digitalWrite(motor, LOW);
break;
default:
lcd.print("NO WATER");
digitalWrite(motor, LOW);
break;
}
delay(50);
}
Gelilim sonuç cümlemize :)
Bu devre tabiiki profesyonel amaçlarla kullanılamaz.Gidip büyük bir su kuyusu otomasyonu yapmanız devrenin bu hali ile imkansız ancak aklıma ilk gelen :) otomatik bir kahve makinesinde su haznesi otomasyonu bu şekilde gayet rahatlıkla yapılabilir.
Bir sonraki yazımda görüşmek dileği ile :)
Caner ÇAKAR