DIY ELECTRONICSEN

← Tüm projeler

Hareket Alarmı

Başlangıç25 dk

Odaya biri girince öten küçük bir ev alarmı: HC-SR501 PIR sensörü insan vücudunun yaydığı ısıdaki değişimi algılar, buzzer iki tonlu bir siren çalar ve kırmızı LED yanıp söner; her alarm Seri Monitöre sayılarak yazılır. Bir sensörün dijital çıkışını okumayı, yalnızca hareketin başladığı anı yakalamayı, millis() ile bir sesi belli bir süre çalmayı ve işi kendi fonksiyonuna toplamayı öğretir. Ek kütüphane gerekmez.

Uygulamada adım adım yap

Gerekli malzemeler

Bağlantı adımları

  1. 1

    Güç sıralarını bağla (5V ve GND)

    Güç sıralarını bağla (5V ve GND)

    Siyah erkek-erkek jumper kabloyu Arduino'nun güç başlığındaki GND pinlerinden birine tak, diğer ucunu breadboard'un üstteki mavi çizgili (−) güç sırasına bağla. Kırmızı kabloyu aynı başlıktaki 5V pinine tak, diğer ucunu üstteki kırmızı çizgili (+) güç sırasına bağla. PIR sensörü bu iki sıradan beslenecek; LED'in direnci ve buzzer da toprağını (−) sıradan alacak.

    • Arduino GND → üstteki mavi çizgili (−) sıra (siyah kablo)
    • Arduino 5V → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
  2. 2

    Uyarı LED'ini ve direncini tak

    Uyarı LED'ini ve direncini tak

    Kırmızı LED'in uzun bacağını (+) breadboard'un üst yarısında 15. sütuna, kısa bacağını (−) 16. sütuna tak. 220 Ω direncin bir ucunu 16. sütuna, öbür ucunu üstteki (−) güç sırasına tak. Sonra mavi jumper kabloyla Arduino'nun 12 numaralı pinini 15. sütuna bağla (LED_PIN 12). Direnç LED'den geçen akımı sınırlar.

    • kırmızı LED uzun bacak (+) → 15. sütun, üst yarı
    • kırmızı LED kısa bacak (−) → 16. sütun, üst yarı
    • 220 Ω direnç (1. bacak) → 16. sütun, üst yarı
    • 220 Ω direnç (2. bacak) → üstteki mavi çizgili (−) sıra
    • Arduino pin 12 → 15. sütun, üst yarı (mavi kablo)
  3. 3

    Buzzer'ı tak ve bağla

    Buzzer'ı tak ve bağla

    Pasif buzzer'ın + bacağını üst yarıda 8. sütuna, öbür bacağını 9. sütuna tak; + bacak genelde daha uzundur ve gövdesinde + işareti vardır. Turuncu jumper kabloyla Arduino'nun 8 numaralı pinini 8. sütuna bağla (BUZZER_PIN 8). Kısa siyah bir kabloyla 9. sütunu üstteki (−) güç sırasına bağla.

    • buzzer + bacak → 8. sütun, üst yarı
    • buzzer − bacak → 9. sütun, üst yarı
    • Arduino pin 8 → 8. sütun, üst yarı (turuncu kablo)
    • 9. sütun, üst yarı → üstteki mavi çizgili (−) sıra (siyah kablo)
  4. 4

    PIR sensörünü bağla

    PIR sensörünü bağla

    HC-SR501'in üç pinine erkek-dişi jumper kabloların dişi uçlarını tak (beyaz kubbeyi çıkarırsan pinlerin adları kartın üzerinde yazar). VCC'yi kırmızı kabloyla üstteki (+) güç sırasına, GND'yi siyah kabloyla üstteki (−) güç sırasına, OUT'u sarı kabloyla doğrudan Arduino'nun 2 numaralı pinine bağla (PIR_PIN 2). Kartın üzerindeki iki küçük vidadan biri algılama mesafesini, öbürü çıkışın ne kadar HIGH kalacağını ayarlar: başlarken süre vidasını saat yönünün tersine sonuna kadar çevir. Köşedeki jumper H konumundaysa hareket sürdükçe çıkış HIGH kalır.

    • PIR sensörü VCC → üstteki kırmızı çizgili (+) sıra (kırmızı kablo)
    • PIR sensörü GND → üstteki mavi çizgili (−) sıra (siyah kablo)
    • Arduino pin 2 → PIR sensörü OUT (sarı kablo)

Arduino kodu

// PIR, buzzer ve LED'in pinleri
const int PIR_PIN = 2;
const int BUZZER_PIN = 8;
const int LED_PIN = 12;

// PIR'ın ısınma süresi (ms): bu sürede
// çevresini öğrenir, kıpırdama
const unsigned long WARM_UP = 30000;
// Bir alarmın ne kadar çalacağı (ms)
const unsigned long ALARM_TIME = 3000;

int lastState = LOW;
int alarms = 0;

void setup() {
  pinMode(PIR_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);

  Serial.println("PIR ısınıyor, 30 sn bekle...");
  delay(WARM_UP);
  Serial.println("Alarm kuruldu.");
}

// Siren: iki ton sırayla, LED yanıp söner
void soundAlarm() {
  unsigned long start = millis();
  bool high = true;
  while (millis() - start < ALARM_TIME) {
    tone(BUZZER_PIN, high ? 880 : 660);
    digitalWrite(LED_PIN, high ? HIGH : LOW);
    high = !high;
    delay(250);
  }
  noTone(BUZZER_PIN);
  digitalWrite(LED_PIN, LOW);
}

void loop() {
  int state = digitalRead(PIR_PIN);

  // Yalnızca hareketin başladığı anda
  if (state == HIGH && lastState == LOW) {
    alarms++;
    Serial.print("Hareket algılandı! Alarm: ");
    Serial.println(alarms);
    soundAlarm();
  }
  lastState = state;
}

Seri Monitörde göreceğin

SERIAL MONITOR · 9600 BAUD
PIR ısınıyor, 30 sn bekle...
Alarm kuruldu.
Hareket algılandı! Alarm: 1
Hareket algılandı! Alarm: 2

Sonuç

Açılışta Seri Monitörde "PIR ısınıyor" yazar; 30 saniye kıpırdamadan bekle. "Alarm kuruldu." yazınca sensörün önünden geç: buzzer iki tonlu bir sirenle 3 saniye öter, kırmızı LED yanıp söner ve alarm sayısı yazılır. Hareket sürdükçe alarm yeniden çalmaz; sensör sakinleşip yeniden hareket görünce çalar. Alarm hiç çalmıyorsa sarı kablonun pin 2'de, VCC'nin (+) sırada olduğuna bak ve sensörün önünde gerçekten hareket et (PIR ısıyı görür, camın arkasından göremez). Alarm durmadan çalıyorsa ya da çok geç susuyorsa karttaki süre vidasını saat yönünün tersine çevir.

Uygulamada her bağlantıyı tek tek işaretle, envanterindeki parçalarla eşleştir ve kaldığın yerden devam et.

Uygulamada adım adım yap