Arduino ile Sleep Mode (Uyku Modu)

👤 Yazar: ozcan 📅 Tarih: 24.05.2026 14:18 👁️ Görüntüleme: 10

Pilli Projelerin Ömrünü Aylarca Uzatın: Arduino ile Sleep Mode (Uyku Modu)

Arduino ile harika bir taşınabilir proje (örneğin pilli bir hava istasyonu, saksı nem ölçer veya uzaktan kumanda) tasarladınız ve her şeyi bir kutuya koyup sahaya bıraktınız. Ancak birkaç gün sonra projenin çalışmadığını, pilin tamamen tükendiğini fark ettiniz.

Standart bir Arduino Uno veya Nano, boşta çalışırken bile yaklaşık 30-50 mA arasında akım çeker. Eğer projeniz sadece saatte bir kez sensör okuyup geri kalan sürede hiçbir şey yapmıyorsa, mikrodenetleyicinin sürekli açık kalması tam bir enerji israfıdır.

Bu yazımızda, Arduino'yu derin bir uykuya sokarak güç tüketimini mikroamper (µA) seviyelerine düşürmeyi ve pil ömrünü aylarca (hatta yıllarca) nasıl uzatacağımızı öğreniyoruz.

Uyku Modu (Sleep Mode) Nedir?

Uyku modu, Arduino'nun içindeki işlemci çekirdeğini, çevre birimlerini (Zamanlayıcılar, ADC, Seri Port vb.) ve saat osilatörünü geçici olarak kapatarak enerji tasarrufu sağlama yöntemidir. Bilgisayarlarımızı veya telefonlarımızı "Hazırda Beklet" moduna almaya benzer.

ATmega328P işlemcisinde farklı uyku modları bulunur ancak en yüksek tasarrufu SLEEP_MODE_PWR_DOWN (Derin Uyku) modu sağlar. Bu modda Arduino adeta komaya girer ve akım tüketimi minimuma iner.

Uyanma Borusu: Donanımsal Kesmeler (Interrupt)

Arduino derin uykuya daldığında delay() gibi fonksiyonlar çalışmaz ve zaman durur. Peki, bu kartı uykudan nasıl uyandıracağız?

En etkili yöntem Harici Kesmeler (External Interrupts) kullanmaktır. Arduino Uno ve Nano üzerinde harici kesme olarak kullanabileceğimiz iki özel pin bulunur: D2 (Interrupt 0) ve D3 (Interrupt 1). Bu pinlere bağlı bir buton, bir hareket sensörü (PIR) veya bir kapı manyetiği tetiklendiği anda Arduino uyanır, görevini yapar ve tekrar uykuya dalar.

Örnek Proje Kodu: Butonla Uyandırılan Güç Tasarruflu Sistem

Aşağıdaki kodda Arduino setup işlemlerini bitirdikten sonra uykuya dalacaktır. Siz D2 pinine bağlı butona bastığınız anda sistem uyanacak, 13 numaralı LED'i 3 saniye yakacak ve ardından tekrar derin uykuya geçecektir.

#include <avr/sleep.h> // Uyku modları için gerekli kütüphane
#include <avr/power.h> // Güç yönetimi için gerekli kütüphane

const int wakeUpPin = 2; // Arduino'yu uyandıracak kesme pini (D2)
const int ledPin = 13;   // Durumu gözlemleyeceğimiz LED

void wakeUp() {
  // Burası Interrupt (Kesme) fonksiyonudur.
  // Uyanma anında buradaki kodlar çok hızlıca çalışır.
  // Uyku modundan çıkış için bu fonksiyonun içi boş kalabilir.
}

void setup() {
  pinMode(wakeUpPin, INPUT_PULLUP); // Buton pimini dahili pull-up ile giriş yapıyoruz
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // 1. ADIM: Uyanınca yapılacak işleri buraya yazıyoruz
  digitalWrite(ledPin, HIGH); 
  delay(3000); // LED'i 3 saniye yak
  digitalWrite(ledPin, LOW);

  // 2. ADIM: Tekrar uykuya hazırlık
  delay(200); // Seri port veya donanımların işlemlerini bitirmesi için kısa bir bekleme
  
  // Uyku modunu en derin seviye olan "Power Down" olarak ayarlıyoruz
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  
  sleep_enable(); // Uyku modunu kuruluma hazır hale getir
  
  // D2 pini LOW (Şaseye) düştüğünde (butona basıldığında) wakeUp fonksiyonunu çağır
  attachInterrupt(digitalWritePinToInterrupt(wakeUpPin), wakeUp, LOW);
  
  // 3. ADIM: Arduino şimdi uyuyor!
  // Kod tam bu satırda durur ve işlemci kapanır.
  sleep_mode(); 
  
  // ==========================================
  // BUTONA BASILDIĞI ANDA KOD BURADAN DEVAM EDER
  // ==========================================
  
  sleep_disable(); // İlk iş olarak uyku modunu devre dışı bırak
  detachInterrupt(digitalWritePinToInterrupt(wakeUpPin)); // Kesmeyi kaldır (Gereksiz uyanmaları önlemek için)
}

Gerçek Güç Tasarrufu İçin Donanımsal İpuçları

Yazılımsal olarak sleep mode kullanmak harika bir adımdır ancak standart bir Arduino Uno/Nano kartını doğrudan bu kodla uyutsanız bile akım tüketiminin 10-15 mA seviyesinin altına inmediğini görürsünüz. Bunun nedeni kartın üzerindeki diğer donanımlardır:

    1. Güç LED'i: Kartın üzerinde sürekli yanan o küçük kırmızı/yeşil LED, tek başına yaklaşık 5-10 mA akım çeker. Pilli projelerde bu LED'i havyayla kart üzerinden sökmek veya yolunu kesmek gerekir.
    2. Voltaj Regülatörü: Arduino üzerindeki dahili voltaj regülatörü (AMS1117 vb.) siz uyusanız bile ciddi bir akım sızdırır. Pilli projelerde regülatörü bypass edip doğrudan 5V veya 3.3V pini üzerinden (örneğin kontrollü bir Li-Po pil veya 2xAA pil ile) besleme yapmak en doğrusudur.
    3. USB-Seri Dönüştürücü Entegre: Kart üzerindeki CH340 veya FTDI entegreleri sürekli akım tüketir. Endüstriyel projelerde pille çalışırken Arduino Uno yerine saf mikrodenetleyici (ATmega328P Standalone) kullanmak akımı aylarca yetecek mikroamper (µA) seviyelerine düşürür.

    Özet

    IoT ve giyilebilir teknoloji projelerinde pil ömrü her şeydir. Projenizin sürekli veri göndermesine gerek yoksa, <avr/sleep.h> kütüphanesini kullanarak sisteminizi uyutun, sadece bir hareket veya zamanlayıcı sinyali geldiğinde uyandırın. Doğru donanım modifikasyonlarıyla bir çift kalem pille 1 yıldan fazla çalışan sistemler kurabilirsiniz!

    Pilli Arduino projelerinizde karşılaştığınız en büyük zorluklar nelerdi? Sleep mode denerken takıldığınız adımları yorumlarda bizimle paylaşın, birlikte çözelim!

    💬 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