Bu uygulamada servo motor <Servo.h> kütüphanesi kullanılarak kontrol edilmiştir. Devrede kullanılan servo motor SG90 servo motordur.
Programlama Kodları
//AÇIKLAMA
//Bu uygulama kaldığı yeri hatırlayan servo motor uygulamasıdır.
//Uygulamada servo motor 0 dereceden 180 dereceye, ardından 180 dereceden 0 dereceye
//sürekli dönüş sağlar. Dönüş açısı ve dönüş yönü ise her seferinde EEPROM'a kaydedilir.
//Arduino'nun enerjisini kestiğimizde servo motor son konumunda durur. Enerjiyi tekrar
//verdiğimizde ise en sonki dönüş yönü ve açısı EEPROM'da kayıtlı olduğundan, değerleri
//buradan alarak dönüşüne devam eder.
//NOT: Bu Servo motor uygulamasında motorun daha sağlıklı çalışabilmesi için
//Arduino'nun 12V bir güç kaynağı ile beslenmesi önem arz eder.
#include <Servo.h>
#include <EEPROM.h>
Servo servoMotor;
int servoAcisi;
int donusYonu = 0; /* 0 ise servo ileri, 1 ise geri yönde dönmektedir. */
void setup()
{
servoMotor.attach(9); /* Servo Arduinonun 9 numaralı pinine takıldı */
servoAcisi = EEPROM.read(1); /* Servonun kaldığı yer EEPROMdan alınıyor */
if (servoAcisi < 1 || servoAcisi > 179) /* EEPROMda servo açısı yerine başka bir veri varsa */
{
servoAcisi = 1; /* Motor ilk konumuna donsun */
}
donusYonu = EEPROM.read(0);
if (donusYonu != 1 && donusYonu != 0) /* EEPROMda dönüş yönü yerine başka bir veri varsa */
{
donusYonu = 0; /* Motor ileri yönde donsun */
}
}
void loop()
{
servoMotor.write(servoAcisi); /* Servo motoru kontrol ediyoruz */
EEPROM.write(1, servoAcisi); /* Son açıyı EEPROMa kaydediyoruz */
if (donusYonu == 0) /* Motor ileri önde donuyorsa */
{
servoAcisi = servoAcisi + 5; /* 5 derece döndürelim */
if (servoAcisi > 179) /* Motor ileri yönde sona ulaştıysa */
{
servoAcisi = 179;
donusYonu = 1; /* Geri yönde dönmeye basla */
EEPROM.write(0, donusYonu); /* Yon bilgisi EEPROMa kaydedildi */
}
}
else /* Motor geri yönde donuyorsa */
{
servoAcisi = servoAcisi - 5; /* 5 derece geri don */
if (servoAcisi < 1) /* Motor geri yönde sona ulaştıysa */
{
servoAcisi = 1;
donusYonu = 0; /* ileri yönde dönmeye basla */
EEPROM.write(0, donusYonu); /* Yon bilgisi EEPROMa kaydediliyor */
}
}
delay(100); /* Motorun konumunu alması için biraz bekleme */
}

0 comments:
Yorum Gönder