6 Eylül 2026 Pazar

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 */
}


Devre Şeması




Bu uygulamada servo motor <Servo.h> kütüphanesi kullanılarak, 10k potansiyometre ile kontrol edilmiştir. Devrede kullanılan servo motor SG90 servo motordur.


Program Kodları

//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>
Servo servo_motor;
int pot_oku, pot_deger;
void setup()
{
  pinMode(A0, INPUT);
  servo_motor.attach(9);  //servo motor kontrol ucu 9 nolu pine takıldı
  Serial.begin(9600);
}

void loop()
{
  pot_oku = analogRead(A0);   //potansiyometreden okunan analog deger değişkene atandı.
  pot_deger = map(pot_oku, 0, 1023, 0, 179);  //Arduino'nun analog portundan okunan değer 0-1023 arasındadır.
                                              //Bu aralık map fonksiyonu ile servonun açı aralığı olan 0-180 
                                              //arasına oranlandı.
  servo_motor.write(pot_deger);  //servo motora açı değeri gönderildi
  delay(50);
  Serial.print("pottan okunan değer= "); Serial.println(pot_oku);
}



Devre Şeması




Bu uygulamada servo motor kütüphanesiz olarak PWM sinyali kullanılarak kontrol edilmiştir. Devrede kullanılan servo motor SG90 servo motordur.

Program Kodları

//AÇIKLAMA
//Servo motor için üretilecek PWM sinyali Timer’lar ile üretilir. millis() 
//komutunun Timer’ı ile PWM’in HIGH durumu, micros() komutunun Timer’ı ile de 
//PWM’in LOW durumu kontrol edilir. PWM sinyalinin nasıl üretildiği detaylı
//olarak klasör içindeki power point dosyasında şekille birlikte anlatıldı.

unsigned long servo_yuksek = 0;
int servo_yuksek_artir = 20;
unsigned long servo_dusuk = 0;
int servo_dusuk_artir = 1500;
void setup()
{
  pinMode(12, OUTPUT);
  servo_yuksek = millis();
}

void loop()
{
  if (millis() > servo_yuksek + servo_yuksek_artir)
  {
    digitalWrite(12, HIGH);
    servo_yuksek += servo_yuksek_artir;
    servo_dusuk = micros();
  }

  if (micros() > servo_dusuk + servo_dusuk_artir)
  {
    digitalWrite(12, LOW);
    servo_dusuk += servo_dusuk_artir;
  }
}


Devre Şeması




     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
//Servo motor for döngüsü ile 5 er derece aralıklarla 180 dereceye
//kadar döndürülür ve sonra ilk konumuna geri getirilir.
//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>
Servo servo_motor;    //servo nesnesi oluşturuldu
int i;
void setup()
{
  servo_motor.attach(9);  //servo motor kontrol ucu 9 nolu pine takıldı.
  servo_motor.write(0);   //servoyu sıfır derece döndür. Aslında bu kod burada hizalama için kullanıldı.
  delay(1000);            //motorun dönmeyi bitirebilmesi için bekleme verildi

  for (i = 5; i <= 180; i = i + 5)
  {
    servo_motor.write(i); //servo motora açı değerini gönder
    delay(100);
  }

  servo_motor.write(0);
  delay(1000);
}

void loop()
{

}


Devre Şeması



     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
//Servo motor önce 0 dereceye, sonra 90 dereceye, sonra yine 0 dereceye konumlandırılır.
//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>
Servo servo_motor;  //servo nesnesi oluşturuldu
void setup()
{
  servo_motor.attach(9);  //servo motor kontrol ucu 9 nolu pine takıldı

  servo_motor.write(0);   //servoyu sıfır derece döndür.Aslında bu kod burada hizalama için kullanıldı.
  delay(1000);            //motorun dönmeyi bitirebilmesi için bekleme verildi

  servo_motor.write(90);  //servoyu 90 derece döndür.
  delay(1000);
  servo_motor.write(0);   //servoyu sıfır derece döndür.
  delay(1000);

}

void loop()
{

}


Devre Şeması



 Servo Motorun Yapısı ve Arduino İle Kontrolü

Servo Motor Nedir?


Servo, mekanizmalardaki açısal-doğrusal pozisyon, hız ve ivme kontrolünü hatasız bir şekilde yapan tahrik sistemi olarak tanımlanır. Servo motor, sağlanan akım ve voltaja bağlı olarak tork ve hız üreten bir elektromekanik cihazdır. Yüksek tork üretme kapasitesi onları ağır yüklerin hassas bir şekilde hareket ettirilmesi gereken uygulamalar için ideal kılar. Hassas konum kontrolü ve hız ayarı gerektiren uygulamalarda kullanılan özel bir motor türüdür. Servolar, istenilen pozisyonu alması ve yeni bir komut gelmediği sürece bulunduğu pozisyonu değiştirmemesi amacıyla tasarlanmıştır. 

Servo motor, bir geri besleme sistemi ile çalışır ve genellikle bir sürücü veya kontrol devresi, bir motor, bir geri bildirim sensöründen oluşur. Bu bileşenler, servo motorun istenen konuma doğru hareket etmesini ve belirli bir hızda çalışmasını sağlar. Geri besleme cihazı; akım, hız veya pozisyon gibi bilgileri servo sürücüye sunar. Bu sürücü de komut verilen parametrelere göre motor eylemini gerçekleştirir.

Servo motor, birçok farklı alanda kullanılır. Örneğin, robotik uygulamalarda, robotun kollarını, bacaklarını veya diğer hareketli parçalarını hassas bir şekilde kontrol etmek için kullanılır. Model uçaklar, drone’lar ve diğer uzaktan kumandalı araçlarda da servo motorlar, yön ve hız kontrolü için kritik bir rol oynar. Endüstriyel otomasyonda, CNC makinelerinde, 3D yazıcılarda ve çeşitli otomatik sistemlerde servo motorlar yaygın olarak kullanılır.


Servo Motorun Yapısı


Motor; AC veya DC, fırçalı veya fırçasız, döner veya lineer, çekirdekli(mıknatıslı) veya çekirdeksiz(sargılı) veya herhangi bir çeşitte olabilir. 

Geri bildirim cihazı; bir potansiyometre, Hall etkili cihaz, devir sayacı, çözücü, kodlayıcı, lineer transdüser veya uygun olan herhangi bir sensör olabilir. 

Sürücü devre; motora güç veren ve servo motorun komut verildiği üzere çalıştığını doğrulamak için geribildirim verileri ile komut referansını karşılaştıran kontrol elektroniğidir. Yani aldığı geri bildirime göre, çıkışı ayarlayabilen ve böylece motorun konumunu, hızını ve genel hareketini kontrol etmede benzersiz bir doğruluk elde eden otomatik bir kontrol sistemini temsil eder.

Dişli sistemi, motorun torkunu artırmakta ve servo mili daha fazla yük kaldırabilmektedir. Servoların kaldırabileceği yük tork gücü üzerinden ifade edilir. Servo motorların torku, motor milinin tahrik edebileceği maksimum yük olarak tarif edilir. Bu işlem sırasında servonun dönüş hızı da yavaşlamış olur. Kullanılan dişli sistemine göre servo motorların kaldırabileceği yük değişir.


Klasik(RC) Servo Motorun Çalışma Prensibi


Servo motorların içerisinde motorun hareketini sağlayan bir DC motor bulunmaktadır. Bu motorun dışında bir dişli mekanizması, potansiyometre ve bir motor sürücü devresi bulunmaktadır. Potansiyometre, motor milinin dönüş miktarını ölçmektedir. Servo içerisindeki DC motor hareket ettikçe potansiyometre döner ve kontrol devresi motorun bulunduğu pozisyon ile istenilen pozisyonu karşılaştırarak motor sürme işlemi yapar. Yani, servolar diğer motorlar gibi harici bir motor sürücüye ihtiyaç duymadan çalışmaktadırlar. Genellikle çalışma açıları 0 - 180 derece arasında ve 1 derece hassasiyete sahiptir. Fakat 360 dereceye kadar çalışma açısına sahip veya sürekli dönen özel amaçlı servo motorlar da vardır. Servolar genellikle 4.8-6V gerilim ile çalışmaktadırlar. 7.4V ve daha yüksek gerilimle çalışan servolar da bulunmaktadır.


Endüstriyel Servo Motorların Çalışma Prensibi


Basit bir endüstriyel servo motor, hız ile orantılı çıkış voltajı sağlayan bir integral devir ölçer ve bir DC motordan oluşur. Hızın ne kadar olacağı kontrol devresinde ayarlanmıştır. Kontrol devresi, devir ölçerin geri bildirim voltajını alır ve gelen voltaja bağlı olarak motora gereken voltajı ve akımı verir. 

Aşağıdaki gibi daha sofistike(özel, karmaşık) bir servo sistem hassas hareket kontrolü sağlamak amacıyla hassas geri besleme elemanları kullanır. Bunlar akım, hız ve pozisyon çevrimlerinden oluşur. Bu akım, hız ve pozisyon sensörlerinden gelen bilgilere göre sürücü devresi servo motoru daha hassas bir şekilde kontrol edebilir.









Konumuza klasik(RC) servo motorlar üzerinden devam edelim.


Servo Motor Kontrolü


Servo motorun üç adet bağlantı kablosu bulunmaktadır. Bu kablolar genellikle kırmızı, turuncu (bazen sarı) ve siyah (bazen kahverengi) olmaktadır. Bu renkler kabloların görevini göstermektedir. Kırmızı renk besleme (genellikle 5 volt) bağlantısını, siyah veya kahverengi renk de toprak bağlantısını göstermektedir. Geriye kalan turuncu kablo ise mikro denetleyiciden gönderilecek sinyal için kullanılır.

Servo motorlar PWM (Sinyal Genişlik Modülasyonu) sinyal ile çalışmaktadırlar. Bu PWM sinyaller bir mikrokontrolcüden veya uzaktan kumandadan sağlanabilmektedir. Servo, her 20 ms içerisinde bir pals değeri okumaktadır. Pals uzunluğu motorun dönüşünü belirlemektedir. Örnek olarak 1.5 ms’lik bir pals, motorun 90 derece pozisyonunu almasını sağlayacaktır (Nötr Pozisyon). Servolar, hareket etmeleri için bir komut aldıklarında önce istenilen pozisyona hareket ederler, sonrasında ise o pozisyonda kalırlar. Servolar bulundukları pozisyonu korurken kendilerine dışarıdan bir güç uygulandığında bu güce direnirler. Bulundukları konumu sonsuza kadar koruyamazlar. Pozisyonlarını koruyabilmeleri için palsin tekrar edilmesi gerekebilir. Hareket etmeleri için gereken pals genişliklerinin minimumları ve maksimumları vardır ve bu değerler değişkendir. Fakat genellikle minimum pals genişliği 0,5 ms, maksimum pals genişliği ise 2,5 ms’dir. Servo motorun kontrolü için ayarlanmış bu pals genişlikleri dışındaki PWM sinyalleri servo motoru düzgün çalıştıramaz.

Aşağıdaki şekilde genellikle servo motorların sahip oldukları PWM değerleri vardır. 0,5 ms duty cycle değerinde 0°, 2,5 ms değerinde ise 180° pozisyonunu almış olur(Daha önce anlatıldığı gibi bu limit bazen 360° de olabilmektedir). 









Böylelikle servo motor, pals genişlikleri 0,5ms ile 2,5ms arasında değiştirilerek 0 ile 180 derece arasında bir konuma ayarlanabilir.  

Servo Oransal Kontrol

Motora uygulanan güç hareket etme miktarıyla orantılıdır. Eğer mil büyük bir açı için hareket edecekse motor daha hızlı, mil küçük bir açı için hareket edecekse motor daha yavaş döner. Buna oransal kontrol denir.


Servo Motor Etiket Değeri Anlamları

0,15 sn / 60º : 0,15 sn’de 60 derece dönebilir anlamına gelmektedir.

40 kg / cm : Motor miline 1 cm uzunluğunda bir aparat takıldığında 40 kg yük kaldırabilir anlamına gelir. Bu da torkun = 40 x 1 = 40 kg/cm olduğu anlamına gelir. Eğer 2 cm uzunluğunda bir aparat takılırsa o zaman;  F x 2 = 40 olacağı için F = 2 yani 20 kg kaldırabilir anlamına gelir.


Elektronik Yapılarına Göre Servo Motor Çeşitleri

Frekansı 50 Hz (PWM periyodu 20 ms) olan servo motorlara analog, frekansı 300 Hz (PWM periyodu 3,33 ms) olan servo motorlara dijital servo motorlar denir.

Analog servo motorlar; dinlenme modunda bulunurken gelen komuta hızlı reaksiyon veremez. Tabi ki torktaki mevcut bu gecikme gelişmiş uygulamalar için pek de uygun değildir.

Dijital servolar; analog servolara göre daha yüksek frekansta çalıştıkları için komutlara daha hızlı ve net tepki verirler. Hızları ve torkları daha yüksektir. Analog servolara göre yumuşak bir hızlanma özelliğine sahiptir. Tek dezavantajları yüksek enerji harcamalarıdır. 



Arduino İle Servo Motor Kontrol

Servo motor kontrolü için Arduino’daki PWM çıkış pinlerini kullanmamız gerekiyor. PWM pin sayısı Arduino’nun türüne göre değişmektedir. Bu pinlerin yanında dalga (~) işareti bulunmaktadır. Arduino Uno’da 3, 5, 6, 9, 10, 11 nolu pinler PWM pinleridir. Servo motorun enerjisini Arduino üzerinden alacaksak, motoru fazla zorlayıp yüksek akım çekmesine izin vermemeliyiz. Arduino pinleri belli bir miktar akım verebildiği için, motorun yüksek akım çekmesi Arduino’ya zarar verebilir. 

Servo motor kontrolü için öncelikle #include <Servo.h> kütüphanesini projemize eklemeliyiz. Servo kütüphanesi Timer1 zamanlayıcısını kullanmaktadır.

  1. Servo servo_motor;

Servo motorun kütüphanesini çağırabilmek için değişkenleri tanımladığımız kısımda ismi “servo_motor” olan bir servo nesnesi oluşturduk.


  1. servo_motor.attach(pin_no);

Yukarıda tanımladığımız servo nesnesini kullanarak, Arduino’nun, servo motoru kontrol edecek pini tanımlandı. Servo motorun kontrol pini bu pine bağlanır.

Örnek:  servo_motor.attach(9);   //servonun kontrol pini Arduino’nun 9 nolu pinine takıldı.


  1. servo_motor.write(derece);

Yukarıda tanımladığımız servo nesnesini kullanarak, servo motorun kaç derece döneceğini belirler. Yani servo motora açı değerini gönderir. Bu komuttan delay(sure) komutu göndererek servo motorun dönüşünü tamamlamasına izin vermeliyiz. Bekleme süresinin ne kadar olacağını servo motorun etiket bilgilerinden öğrenebiliriz.


Örnek: servo_motor.write(90); //servo motor 90 derece dönsün.



Arduino servo motor uygulamalarımızda servo motorun enerjisini Arduino pinleri üzerinden aldığımız için Arduino’yu 12V harici bir güç kaynağı ile beslemek önem arz etmektedir. 

Aslında olması gereken servo motorun harici güç kaynağı ile beslenmesidir ama uygulamalarımızda kullandığımız servo motor düşük güçlü olduğu için enerjiyi Arduino pinlerinden aldık. Arduino pinlerinin verebileceği akım değeri maksimum 40mA, tavsiye edilen 20mA’dir.






Örnek-1
//AÇIKLAMA
//WDT zamanlayıcısı 2 sn'yeye ayarlandı. for döngüsüne girdiğimizde döngü içinde wdt_reset()
//komutunu kullanmazsak döndü tamamlanmadan yani i=5'e kadar gelmeden arduino resetleneceği
//için tüm komutlar baştan başlayacaktır. Böylece döngü hep tamamlanmadan baştan
//başlayacaktır. Fakat wdt_reset() komutunu döngü içinde kullandığımızda 2 sn'den
//daha kısa sürede WDT zamanlayıcısı sıfırlanacağı için arduino resetlenmeyecek ve döngü
//tamamlanacaktır. Siz de bu uygulamada wdt_reset(); komutunu kullanarak ve kullanmayarak
//sonuçları izleyebilirsiniz.
#include <avr/wdt.h>
int i;
void setup()
{
  Serial.begin(9600);
  wdt_disable();        //WDT pasif edildi.
  delay(3000);
  wdt_enable(WDTO_2S);  //WDT etkinleştirildi sayaç 2 sn'ye ye ayarlandı.
  Serial.println("Watchdog Timer 2 sn olarak ayarlandı.");
}

void loop()
{
  for (i = 1; i < 6; i++)
  {
    Serial.print(i); Serial.println("'nci döngü");
    delay(1000);
    //wdt_reset();        //zamanlayıcı sıfırlandı.
  }
}


Örnek-2
//AÇIKLAMA
//WDT 4 sn'ye olarak ayarlandı. Loop içinde "Merhaba" yazısını ekrana
//yazdırdıktan sonra while(1) ile programı 18. satırda sonsuz döngüye
//soktuk. Normalde ekrana bir kez "Merhaba" yazdıktan sonra bu satırda
//sürekli beklemesi gerekirdi ama WDT ile 4 sn'de bir Arduino'yu resetlediğimiz
//için "Merhaba" yazısı belirli zaman araklıklarıyla sonsuz döngüden
//kurtulup ekrana tekrar yazılabilmektedir.
#include <avr/wdt.h>
int i;
void setup()
{
  Serial.begin(9600);
  wdt_disable();        //WDT pasif edildi.
  delay(3000);
  wdt_enable(WDTO_4S);  //WDT etkinleştirildi sayaç 4 sn'ye ye ayarlandı.
  Serial.println("Watchdog Timer 4 sn olarak ayarlandı.");
}

void loop()
{
  Serial.println("Merhaba");
  while(1);
}


        WDT(Watchdog timer) bekçi köpeği anlamına gelir. Elektrik dalgalanmaları, parazitler, algoritma içerisinde planlanmayan hesaplamalar vb. bir sebeple algoritma yürütülmez ise, kodlar ilerlemez ise ya da donmalar olur ise işte tam da burada devreye WDT girer ve Arduino’yu resetler ve her şeyi en baştan başlatır. Eğer algoritmamızın belli yerlerine WDT kodlarını yerleştirirsek, herhangi bir kilitlenme-donma durumunda program, bizim belirlediğimiz satıra bizim belirlediğimiz sürede gelmezse, Arduino bir şeylerin ters gittiğini anlayacak ve WDT Arduino’yu reset butonuna basmış gibi resetleyecektir. Böylece program kodları baştan başlayacaktır.

WDT varsayılan olarak tüm projelerde devre dışıdır.


Watchdog Zamanlayıcısı Nasıl Çalışır?

WDT etkinleştirildiğinde, sıfırdan başlayarak kullanıcı tarafından seçilen bir değere kadar saymaya başlar. WDT kullanıcı tarafından seçilen değere ulaşana kadar sıfırlanmazsa, taşma meydana gelir ve WDT mikrodenetleyiciyi resetler. Algoritmanın normal bir şekilde çalıştığı durumlarda sistemin resetlenmemesi için belli periyotlarla WDT’nin tekrar sıfırlanması gereklidir. Böylelikle sistem donduğunda, bir şekilde resetlenemez hale geldiğinde (mesela sonsuz döngü durumları gibi) sistemi bu zamanlayıcı resetleyerek tekrar çalışabilir hale getirmektedir. 

Bir sıfırlama aralığı seçerken, veri okuma veya gönderme veya harici sensörlere bağlanma gibi uzun süreli işlemleri dikkate almamız çok önemlidir. Herhangi bir kazara sıfırlamayı önlemek için sıfırlama eşiği bu sürelerden en az bir buçuk kat daha büyük olmalıdır.

Watchdog zamanlayıcısı dâhili 128kHz saat kaynağını kullanır. ATmega328P watchdog timer 10 farklı zaman ayarı için yapılandırılabilir. Bunlar: 16ms, 32ms, 64ms, 0,125s, 0,25s, 0,5s, 1s, 2s, 4s ve 8s’dir. 


WDT Etkinleştirildiğinde Bekleme Süresinin Önemi

Watchdog zamanlayıcısı kodun başlangıcında devre dışı bırakılır. Ardından 3 saniyelik bir gecikme verilir ve sonra WDT etkinleştirilir. Bu gecikme, Arduino'daki önyükleyicinin yeni bir kodun yüklenip yüklenmediğini kontrol etmesini ve kodu flash a yazması için zaman tanımasını sağlamak açısından önemlidir. Hatalı kodlama veya uygunsuz değerlendirmeler nedeniyle; yazılan kodun mikrodenetleyiciyi çok kısa sürelerde sonsuza kadar sıfırladığı bir durum meydana gelebilir. Bu durum Arduino'nun yeni versiyonuyla gelen Optiboot yükleyicisi için geçerli olmayabilir, ancak eski olanlarda kesinlikle gerçekleşecektir. 




WDT’nin Kullanımı İle İlgili Dikkat Edilmesi Gereken Nokta

Arduino'nuzun önyükleyicisine bağlı olarak, watchdog zamanlayıcısıyla ilgili şöyle bir sorun yaşanabilir: 

Watchdog zamanlayıcı değeri çok düşükse ve önyükleyici yeni kod yüklerken zamanlayıcıyı sıfırlamıyorsa, Arduino kartınıza her zaman önyükleme aşamasında takılı kalacak şekilde zarar verebilirsiniz. Önyükleyici başlamaya çalışacaktır, ancak zamanlayıcı kartı sıfırlamaya devam edecek ve düzgün bir şekilde başlamasına asla izin vermeyecektir. Bu gibi sorunları önlemek için, WDT’nin süresini her zaman 2 saniye veya daha fazla olarak belirlediğinizden emin olun.


Arduino WDT Komutları

Watchdog zamanlayıcısını kullanabilmek için öncelikle #include <avr/wdt.h> kütüphanesini projemize dahil etmeliyiz. 

  1. wdt_disable();

Watchdog zamanlayıcısını devre dışı bırakır.


  1. wdt_enable(süre);

Watchdog zamanlayıcısını etkinleştirir ve zamanlayıcı süresini belirler. Bu satırdan itibaren zamanlayıcı çalışmaya başlar ve belirlenen bu süre dolmadan WDT sıfırlanmazsa, bu süre her dolduğunda watchdog timer tetiklenecek ve mikrodenetleyiciyi resetleyecektir.


süre” Değişkeninin Alabileceği Değerler

16 ms

WDTO_16MS

32 ms

WDTO_32MS

64 ms

WDTO_64MS

125 ms

WDTO_125MS

250 ms

WDTO_250MS

500 ms

WDTO_500MS

1s

WDTO_1S

2 s

WDTO_2S

4 s

WDTO_4S

8 s

WDTO_8S


Örnek: wdt_enable(WDTO_2S); //2 sn’de bir mikrodenetleyiciyi resetle.


  1. wdt_reset();

Watchdog zamanlayıcısını sıfırlar.



Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com