#63 Arduino MPU6050 İle Deprem Alarmı Yapalım

Merhabalar, bu yazımızda Arduino MPU6050 İle Deprem Alarmı Yapalım projesini, Led, Buzzer ve LCD Ekran ile tasarlayarak anlatalım. Arduino’ da MPU6050 ivme ve gyro modülü kullanarak iki ayrı devre yapacağız. Devrenin ilki sadece led ve buzzer ile tasarlanmış olacak. Tek kademede sarsıntıyı algılayarak led yanacak ve buzzer ses verecek. 2. devremizde ise, led ve buzzer ile birlikte i2C 16×2 LCD ekran kullanarak 3 kademede sarsıntıyı ekrandan da takip edebileceğiz. 

Devre bağlantı şeması, Arduino programı ayrıntılı kod kısmı, devre kurulumu detaylı anlatımı ve devre çalışma videosu şu şekildedir.

Arduino’ da kullanabileceğimiz üç eksenli ivmeölçer + üç eksenli jiroskop, toplamda 6 eksenli ivme ve gyro modülü özellikleri nelerdir? Hangi pinler kullanılır? Kullanıldığı alanlar nelerdir? Örnek Arduino çalıştırma kodu nedir? MPU6050 devreye nasıl bağlanır? gibi konularda bilgi almak için bir önceki yazımıza aşağıdaki linkten bakabilirsiniz.

https://egitim.ahmetcandemir.com.tr/mpu6050-ivme-ve-gyro-sensoru-nedir-nasil-calisir/

ARDUINO MPU6050+LED+BUZZER İLE DEPREM ALARMI:

DEVRE BAĞLANTI ŞEMASI:

Arduino MPU6050 İle Deprem Alarmı Yapalım

DEVRE KURULUMU:

Malzemeler:

Arduino Uno
Deney Tahtası (Breadboard)
1 adet ivme ve gyro modülü (MPU6050)
1 adet led diyot (Kırmızı)
1 adet led diyot (Yeşil)
2 adet 220 Ω direnç
1 adet buzzer
8 adet iki ucu erkek jumper kablo

MPU6050 modülü, deney tahtası (breadboard) üzerine yerleştirilir. Modülün VCC pini, Arduino +5V pinine bağlanır. Modülün GND pini, Arduino GND pinine bağlanır. Modülün SCL pini, Arduino’nun SCL pinine, modülün SDA pini, Arduino’nun SDA pinine bağlanır 

Led diyotlar ve buzzer’ ın eksi ayakları, deney tahtası üzerindeki eksi şeride denk gelecek şekilde yerleştirilir. Led diyotların artı bacaklarına 220 ohm dirençler bağlanır. Kırmızı led diyota bağlı direncin diğer ucu jumper kablo ile, Arduino’ nun 6 numaralı pinine bağlanır. Yeşil led diyota bağlı direncin diğer ucu jumper kablo ile, Arduino’ nun 7 numaralı pinine bağlanır. Buzzer + ucu, jumper kablo ile Arduino’ da 8 numaralı pine bağlanır. Led diyotların ve buzzer’ ın eksi ayaklarının bağlandığı eksi şeritten bir kablo alınarak Arduino’ nun GND pinine bağlantı yapılır ve devre tamamlanır.

KOD BÖLÜMÜ:

NOT: Kod bölümü içerisinde yer alan ve // işareti ile başlayan satırlar açıklama satırlarıdır. O satırda, kod bloğunun ne anlama geldiği ve nasıl çalıştığı ile ilgili bilgi verir. Arduino // işaretli alanı çalıştırmaz. İsterseniz kod satırından  // işaret ile başlayan açıklama satırlarını silebilirsiniz.


// MPU6050+Led+Buzzer İle Deprem Alarmı
#include <Wire.h>
#include <MPU6050.h>

MPU6050 sensor;

const int ledPin_K = 6; // Yeşil LED uyarı pini
const int ledPin_Y = 7; // Kırmızı LED uyarı pini
const int buzzer = 8; // Buzzer uyarı pini
const int threshold = 20000; // Sarsıntı eşiği (deneyerek ayarlayabilirsin)

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.initialize();

  pinMode(ledPin_K, OUTPUT);
  pinMode(ledPin_Y, OUTPUT);
  pinMode(buzzer, OUTPUT);

  if (sensor.testConnection()) {
    Serial.println("MPU6050 bağlantısı başarılı.");
  } else {
    Serial.println("MPU6050 bağlantı hatalı!");
    while (1);
  }
}

void loop() {
  int16_t ax, ay, az;   // X, Y, Z eksenlerindeki ivme değerleri

  sensor.getAcceleration(&ax, &ay, &az);

  // Mutlak ivme büyüklüğü (sarsıntı şiddeti)
  long toplamIvme = abs(ax) + abs(ay) + abs(az);

  Serial.print("Toplam İvme: ");
  Serial.println(toplamIvme);

  if (toplamIvme > threshold) {
  for(int i=0; i<30; i++){
    digitalWrite(ledPin_Y, LOW); 
    digitalWrite(ledPin_K, HIGH);
    digitalWrite(buzzer, HIGH);
  delay(50);
    digitalWrite(ledPin_K, LOW);
    digitalWrite(buzzer, LOW);
  delay(50);
    Serial.println("!!! Sarsıntı Tespit Edildi !!!");
  } 
  }
  else {
    digitalWrite(ledPin_Y, HIGH); 
    digitalWrite(ledPin_K, LOW);
    digitalWrite(buzzer, LOW);
  }
  delay(100);
}


MPU6050 Kütüphanesi ni sitemizdeki Dosyalar sayfasında bulabilirsiniz. Dosyalar sayfasına üstteki menüden ya da direk aşağıdaki linke tıklayarak gidebilirsiniz. Wire.h  kütüphanesi Arduino içerisinde yüklü gelmektedir.

https://egitim.ahmetcandemir.com.tr/download-category/arduino-kutuphaneleri/

DEVRENİN ÇALIŞMASI:

Arduino içerisine kodları gönderdiğimizde seri monitör ekranında Toplam İvme (Sarsıntı Şiddeti) olarak kullanacağımız bir değer okuruz. Bu değer, sensörün hareketi ile değişen bir değerdir. MPU6050 yi ne kadar fazla hareket ettirir isek, bu değer belirli sınırlar içerisinde o kadar değişecektir. Bunun için kodlar içerisinde bir sarsıntı değeri belirledik. Sensörden gelen veri, bu sarsıntı değerini aştığında led diyot yanacak, buzzer ses verecektir. Sarsıntı değeri altında ise sadece yeşil led yanacak ve sarsıntı seviyesinin altında olduğunu bize gösterecektir. Sarsıntı değerini, sizin kendi belirleyeceğiniz bir değer ile değiştirebilirsiniz. 

II. DEVREMİZ

ARDUINO MPU6050+LED+BUZZER+LCD EKRAN İLE DEPREM ALARMI:

DEVRE BAĞLANTI ŞEMASI:

Arduino MPU6050 İle Deprem Alarmı LCD Ekranlı

DEVRE KURULUMU:

Malzemeler:

Arduino Uno
Deney Tahtası (Breadboard)
1 adet ivme ve gyro modülü (MPU6050)
1 adet LCD I2C Ekran
1 adet led diyot (Kırmızı)
1 adet led diyot (Yeşil)
2 adet 220 Ω direnç
1 adet buzzer
15 adet iki ucu erkek jumper kablo

MPU6050 modülü, deney tahtası (breadboard) üzerine yerleştirilir. Modülün VCC pini, deney tahtası alt kısımdaki + şeride bağlanır. Modülün GND pini, deney tahtası alt kısımdaki – şeride bağlanır. Modülün SCL pini, deney tahtası üzerinde bir şeride bağlanır. Modülün SDA pini, yine deney tahtası üzerinde başka bir şeride bağlanır. 

LCD ekran üzerinde monteli olarak gelen I2C modülü üzerine 4 adet dişi jumper kablonun uçları yerleştirilir. SDA ve SCL pinlerine bağlı kablolar, deney tahtası üzerindeki MPU6050 nin SDA ve SCL pinlerinin bağlandığı şeride bağlanır. Deney tahtası SDA ve SCL şeridinden, Arduino’nun SDA ve SCL pinlerine jumper kablo ile bağlantı yapılır. I2C modülü üzerindeki VCC kablo ucu, breadboard alt kısmındaki artı şeride bağlanır. I2C modülü üzerindeki GND kablo ucu, breadboard alt kısmındaki eksi şeride bağlanır. 

Led diyotlar ve buzzer’ ın eksi ayakları, deney tahtası üzerine eksi şeride denk gelecek şekilde yerleştirilir. Led diyotların artı bacaklarına 220 ohm dirençler bağlanır. Kırmızı led diyota bağlı direncin diğer ucu jumper kablo ile, Arduino’ da 6 numaralı pine bağlanır. Yeşil led diyota bağlı direncin diğer ucu jumper kablo ile, Arduino’ da 7 numaralı pine bağlanır. Buzzer + ucu, jumper kablo ile Arduino’ da 8 numaralı pine bağlanır.

Breadboard artı şeridinden Arduino +5 Volt pinine, breadboard eksi şeridinden Arduino GND pinine jumper kablo bağlantıları yapılır ve devre tamamlanır.

KOD BÖLÜMÜ:

NOT: Kod bölümü içerisinde yer alan ve // işareti ile başlayan satırlar açıklama satırlarıdır. O satırda, kod bloğunun ne anlama geldiği ve nasıl çalıştığı ile ilgili bilgi verir. Arduino // işaretli alanı çalıştırmaz. İsterseniz kod satırından  // işaret ile başlayan açıklama satırlarını silebilirsiniz.


// LCD Ekranlı Türkçe Karakterli Ledli Buzzer lı Deprem Alarmı

#include <Wire.h>                   // I2C haberleşme için gerekli kütüphane
#include <MPU6050.h>               // MPU6050 sensör kütüphanesi
#include <LiquidCrystalTr_I2C.h>   // I2C tipi LCD için kütüphane

MPU6050 sensor;                    // MPU6050 sensörüne sensor ismini verdik

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Bazı kartlarda arabirim adresi 0x3f olabilir.

const int buzzerPin = 8;    // buzzer Arduino 8 numaralı pine bağlı
const int ledPin_Y = 7;     // yeşil led Arduino 7 numaralı pine bağlı
const int ledPin_K = 6;     // kırmızı led Arduino 6 numaralı pine bağlı

void setup() {
  Serial.begin(9600);      // Seri haberleşmeyi başlattık 
  Wire.begin();            // I2C haberleşmesini başlattık

  sensor.initialize();     // MPU6050 sensörünü başlattık
  lcd.begin();             // LCD ekranı başlattık
  lcd.backlight();         // LCD ekran arka ışığını açtık

  pinMode(buzzerPin, OUTPUT);   //buzzer çıkış olarak ayarlandı
  pinMode(ledPin_Y, OUTPUT);    //yeşil led çıkış olarak ayarlandı
  pinMode(ledPin_K, OUTPUT);    //kırmızı led çıkış olarak ayarlandı

  lcd.setCursor(0, 0);            // LCD'de ilk satıra git
  lcd.print(" DEPREM TESPİT");    // Açılış mesajı
  lcd.setCursor(0, 1);            // LCD'de ikinci satıra git
  lcd.print("    SENSÖRÜ");       // Açılış mesajı devamı
  delay(2000);                    // 2 saniye bekle
  lcd.clear();                    // LCD ekranı verileri temizle

  if (sensor.testConnection()) {    //Eğer bağlantı kuruldu ise
  lcd.setCursor(0, 0);
  lcd.print("SENSÖR: MPU6050 ");
  lcd.setCursor(0, 1);
  lcd.print("   BAĞLANDI");
    Serial.println("MPU6050 baglandi.");    // Bağlantı başarılı
  } else {
  lcd.setCursor(0, 0);
  lcd.print("MPU6050 SENSÖR");
  lcd.setCursor(0, 1);
  lcd.print("BAĞLANTI HATASI");
    Serial.println("Sensor yok!");         // Bağlantı başarısız
    while (1);                            // Döngüyü durdur
  }

  delay(2000);
  lcd.clear();
}

void loop() {
  int16_t ax, ay, az;                        // X, Y, Z eksenlerindeki ivme değerleri
  sensor.getAcceleration(&ax, &ay, &az);     // MPU6050'den ivme verilerini al

  long ivme = abs(ax) + abs(ay) + abs(az);   // Toplam ivme miktarı (mutlak değerler)
  Serial.print("ivme: ");                   // Seri porta ivme değerlerini yaz
  Serial.println(ivme);

  lcd.setCursor(0, 0);
  lcd.print("ivme: ");                     // LCD Ekrana ivme değerlerini yaz
  lcd.print(ivme);
  lcd.print("     ");                      // önceki veriyi temizle

  if (ivme < 18250) {                     // ivme değeri belirlenen değerin altında ise
    lcd.setCursor(0, 1);  
    lcd.print("DEPREM: YOK      ");       // Ekrana yaz
    digitalWrite(ledPin_Y, HIGH);         // Yeşil ledi yak
    digitalWrite(ledPin_K, LOW);          // Kırmızı ledi sönük
    digitalWrite(buzzerPin, LOW);         // buzzer çalışmıyor
  } else if (ivme >= 18251 && ivme < 18500) {     // ivme değeri belirlenen aralıkta ise
    for(int i=0; i<5; i++){
    lcd.setCursor(0, 1);  
    lcd.print("DEPREM: HAFİF   ");        // Ekrana yaz
    digitalWrite(ledPin_Y, LOW);          // Yeşil ledi söndür
    digitalWrite(ledPin_K, HIGH);         // Kırmızı ledi yak
    digitalWrite(buzzerPin, HIGH);        // buzzer ı çalıştır.
  delay(350);                             // 350 milisaniye aralıklarla yap
    digitalWrite(ledPin_K, LOW);
    digitalWrite(buzzerPin, LOW);
  delay(350);
  }
  } else if (ivme >= 18501 && ivme < 19000) {      // ivme değeri belirlenen aralıkta ise
    for(int i=0; i<10; i++){ 
    lcd.setCursor(0, 1);  
    lcd.print("DEPREM: ORTA    ");        // Ekrana yaz
    digitalWrite(ledPin_Y, LOW);   
    digitalWrite(ledPin_K, HIGH);
    digitalWrite(buzzerPin, HIGH);
  delay(150);
    digitalWrite(ledPin_K, LOW);
    digitalWrite(buzzerPin, LOW);
  delay(150);
  }
  } else if (ivme >= 19001) {         // ivme değeri belirlenen değerin üstünde ise
    for(int i=0; i<20; i++){   
    lcd.setCursor(0, 1);  
    lcd.print("DEPREM: ŞİDDETLİ");    // Ekrana yaz
    digitalWrite(ledPin_Y, LOW);   
    digitalWrite(ledPin_K, HIGH);
    digitalWrite(buzzerPin, HIGH);
  delay(50);
    digitalWrite(ledPin_K, LOW);
    digitalWrite(buzzerPin, LOW);
  delay(50);
  }
  }
  delay(500);                  // 0.5 saniyede bir güncelle
}

MPU6050 ve LiquidCrystalTr_I2C Kütüphanesi ni sitemizdeki Dosyalar sayfasında bulabilirsiniz. Dosyalar sayfasına üstteki menüden ya da direk aşağıdaki linke tıklayarak gidebilirsiniz. Wire.h  kütüphanesi Arduino içerisinde yüklü gelmektedir.

https://egitim.ahmetcandemir.com.tr/download-category/arduino-kutuphaneleri/

DEVRENİN ÇALIŞMASI:

Arduino içerisine kodları gönderdiğimizde seri monitör ekranında Toplam İvme (Sarsıntı Şiddeti) olarak kullanacağımız bir değer okuruz. Bu değer, sensörün hareketi ile değişen bir değerdir. MPU6050 yi ne kadar fazla hareket ettirir isek, bu değer belirli sınırlar içerisinde o kadar değişecektir. Sensör düz bir zeminde ve sarsıntı yok iken ölçülen Toplam İvme değerinin altında bir değer belirleyerek yeşil led diyotun yanmasını sağladık. Bu seviyede LCD ekranda da “DEPREM: YOK” yazısı yazacaktır. Hafif bir sarsıntı, orta seviye sarsıntı ve şiddetli sarsıntı esnasında oluşan ivme değerlerine göre led diyottun yanması ve buzzer ın ses çıkarma şiddeti değişecek, ayrıca LCD ekranda yazan yazılar da değişecektir. İvme değerlerini, sizin kendi belirleyeceğiniz değerler ile değiştirebilirsiniz. 

Arduino MPU6050 İle Deprem Alarmı Yapalım

Youtube videosu yakında burada olacak. Takipte kalın.

Devre hakkında yorumlarınızı aşağıdaki yorum kısmına yazabilirsiniz. Youtube kanalımızda da mBlock ve Arduino ile ilgili ders videoları bulabileceksiniz. Youtube kanalıma abone olmayı da unutmayınız.

https://www.youtube.com/@candemirahmet

Oval@3x 2

Bu ipuçlarını kaçırmayın!

Kayıt butonuna bastıktan sonra e-postanız gelen kutunuza giderek gelen e-postayı onaylamayı unutmayınız. Gelen kutusunda görülmeyen postalar için Önemsiz -Spam klasörünü kontrol edebilirsiniz. Eğer kayıt e-postası ulaşmadıysa iletişim menüsünden bu durumu bildirebilirsiniz.

Yazan: Ahmet Candemir
Teknik Öğretmen - Cisco Instructor - Microsoft MCP - ECDL MS Office Advanced Expert - Adobe Eğitmeni - MEB Fatih Projesi Koordinatörü - Robotik Kodlama Eğitmeni