Arduino Ders 16: Lazer ve LDR ile Alarm


Arduino üzerinde alarm sistemi yapımını anlatacağım. Burada çok detaylı bir çalışma yapmaktan ziyade basit bir alarm sistemi yapacağız. Bunun için bir adet lazer kullandık. Lazer oyuncak olarak satılan lazerlerden. İsterseniz arduino için kullanılan lazer modülünü de kullanabilirsiniz. Seçim size kalmış. 

Malzemeler:
  • Arduino Nano
  • Lazer
  • LDR
  • Direnç 330 Ohm olabilir
  • Buzzer



int buzzer=8;
int ldr=A0;
int deger=0;
 
void setup() {
  pinMode(buzzer,OUTPUT);
}
 
void loop() {
  deger=analogRead(ldr);
  if(deger<400 buzzer="" delay="" digitalwrite="" else="" pre="">

3 Yorumlar

  1. çok güüüzel devre yapılır

    YanıtlaSil
    Yanıtlar
    1. yok ya hatalıymış

      Sil
    2. // Ayarlar
      const int buzzerPin = 8; // Buzzer bağlı pin (D8)
      const int ldrPin = A0; // LDR bağlı analog pin
      const int ledPin = 13; // Durum LED'i (opsiyonel)

      const bool PASSIVE_BUZZER = false; // true = pasif buzzer (tone/noTone), false = aktif (digital on/off)

      const int SAMPLES = 8; // Ortalama için örnek sayısı
      const int SAMPLE_DELAY = 5; // örnekler arası ms
      int threshold = 400; // alarm eşik değeri (kalibre edin)
      const int HYSTERESIS = 30; // +/− histerezis (titreşimi azaltır)

      bool alarmOn = false;

      void setup() {
      pinMode(buzzerPin, OUTPUT);
      digitalWrite(buzzerPin, LOW);
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, LOW);

      Serial.begin(9600);
      delay(100);
      Serial.println("Lazer/LDR alarm - Başlıyor");
      // Hızlı ön-kalibrasyon (sadece bilgi amaçlı)
      long s = 0;
      for (int i=0;i<20;i++){ s += analogRead(ldrPin); delay(20); }
      Serial.print("Ön-kalibrasyon LDR ortalaması: ");
      Serial.println(s/20);
      Serial.println("Karanlık/aydınlık durumlarını ayrı ayrı test edip 'threshold' değerini ayarlayın.");
      }

      void loop() {
      int val = readAverage(ldrPin);
      Serial.print("LDR=");
      Serial.print(val);
      Serial.print(" Alarm=");
      Serial.println(alarmOn ? "ON" : "OFF");

      // Not: eğer sizin donanımda ışık arttıkça analog değer artıyorsa aşağıdaki mantık doğru.
      // Eğer bağlama şekliniz ters ise (< yerine >) tersine çevirin.

      if (!alarmOn && val < (threshold - HYSTERESIS/2)) {
      alarmOn = true;
      triggerAlarm();
      } else if (alarmOn && val > (threshold + HYSTERESIS/2)) {
      alarmOn = false;
      stopAlarm();
      }

      delay(150); // döngü hızı
      }

      int readAverage(int pin) {
      long sum = 0;
      for (int i=0;i<SAMPLES;i++) {
      sum += analogRead(pin);
      delay(SAMPLE_DELAY);
      }
      return (int)(sum / SAMPLES);
      }

      void triggerAlarm() {
      Serial.println("!! ALARM TETIKLENDI !!");
      digitalWrite(ledPin, HIGH);
      if (PASSIVE_BUZZER) {
      tone(buzzerPin, 1500); // 1.5 kHz sürekli ton (istediğiniz frekansı değiştirin)
      } else {
      digitalWrite(buzzerPin, HIGH); // aktif buzzer için
      }
      }

      void stopAlarm() {
      Serial.println("Alarm durdu.");
      digitalWrite(ledPin, LOW);
      if (PASSIVE_BUZZER) {
      noTone(buzzerPin);
      } else {
      digitalWrite(buzzerPin, LOW);
      }
      }

      Sil
Daha yeni Daha eski