Arduino'da Watchdog Timer (WDT) Kullanımı

👤 Yazar: ozcan 📅 Tarih: 13.05.2026 10:51 👁️ Görüntüleme: 11

Arduino'da Watchdog Timer (WDT) Kullanımı: Sistemin Kilitlenmesine Son!

Gömülü sistem projelerinde karşılaşılan en büyük sorunlardan biri, kodun beklenmedik bir anda kilitlenmesi veya sonsuz döngüye girerek cihazın tepkisiz kalmasıdır. Özellikle uzaktan yönetilen veya 7/24 çalışması gereken projelerde (güneş takip sistemleri, otomasyon devreleri vb.) cihazın başına gidip reset atmak her zaman mümkün olmaz. İşte bu noktada devreye Watchdog Timer (Bekçi Köpeği) girer.

Watchdog Timer Nedir?

Watchdog, işlemcinin içinde bulunan bağımsız bir zamanlayıcıdır. Mantığı oldukça basittir: Siz koda bir "zaman sınırı" koyarsınız. Eğer kodunuz bu süre zarfında "her şey yolunda, sistemi resetleme" komutunu vermezse, Watchdog işlemcinin kilitlendiğini varsayar ve sistemi otomatik olarak resetleyerek her şeyi baştan başlatır.

Neden Kullanmalıyız?

Elektriksel Gürültüler: Motorların veya yüksek akımlı cihazların oluşturduğu parazitler işlemciyi anlık kilitleyebilir.

Yazılımsal Hatalar: Tahmin edilemeyen sonsuz döngüler veya kütüphane içi takılmalar.

Kritik Sistemler: Sistemin asla durmaması gereken durumlar.

Watchdog Kullanımı İçin Adımlar

Arduino'da WDT kullanmak için <avr/wdt.h> kütüphanesini dahil etmemiz gerekir.

1. Kütüphaneyi Dahil Etme ve Aktifleştirme

setup() fonksiyonu içerisinde bekçi köpeğine ne kadar süre tanıyacağınızı belirlersiniz (Örn: 2 saniye, 4 saniye, 8 saniye).

2. Köpeği Beslemek (Resetleme)

Kodunuzun ana döngüsü (loop) içinde, her şeyin normal çalıştığını kanıtlamak için wdt_reset(); komutunu kullanmalısınız. Eğer bu komut belirlenen sürede çalışmazsa sistem resetlenir.


Örnek Kod Bloğu

#include <avr/wdt.h>

void setup() {
  Serial.begin(9600);
  Serial.println("Sistem baslatiliyor...");

  // Watchdog Timer'ı 4 saniyeye ayarla (WDTO_4S)
  // Seçenekler: WDTO_15MS, WDTO_500MS, WDTO_2S, WDTO_4S, WDTO_8S
  wdt_enable(WDTO_4S); 
}

void loop() {
  Serial.println("Kod calisiyor, her sey yolunda.");
  
  // Önemli: Köpeği besle! Bu komut zamanlayıcıyı sıfırlar.
  wdt_reset();

  // Test senaryosu: Bir butona basıldığında veya bir hata oluştuğunda
  // sistemi kilitlediğimizi (delay ile) varsayalım.
  // Eğer aşağıdaki delay 4 saniyeden uzun sürerse sistem resetlenir.
  delay(1000); 
}

Dikkat Edilmesi Gereken Kritik Noktalar

Bootloader Sorunu: Bazı eski Arduino modellerinde (özellikle eski Nano'lar) Watchdog reset attıktan sonra bootloader döngüsüne girebilir ve cihaz sürekli resetlenir. Bu durumda "Optiboot" bootloader yüklemek veya güncel kartlar kullanmak çözümdür.

Süre Seçimi: Seçtiğiniz süre, loop içerisindeki en uzun işlemden (örneğin bir sensör okuma süresi) daha uzun olmalıdır.

Hatalı Yerleşim: Eğer wdt_reset(); komutunu hatalı bir yere koyarsanız, sistem kilitlense bile resetlenmeyebilir. Bu yüzden sadece ana akışın sağlıklı olduğundan emin olduğunuz noktalarda kullanın.

Sonuç: Watchdog Timer kullanmak, amatör bir projeyi "endüstriyel seviyede" kararlı bir sisteme dönüştüren en önemli detaylardan biridir. Projelerinizde mutlaka yer verin!



💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1