#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:
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:
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
Yorum Yap