hello here is the code:
#include <Wire.h>
#include <MS5611.h>
#include <SD.h>
// Röle pinlerini tanımla
int rolePin1 = 6; // X ekseni için röle 1
int rolePin2 = 7; // X ekseni için röle 2
int rolePin3 = 8; // Y ekseni için röle 3
int rolePin4 = 9; // Y ekseni için röle 4
int rolePinBaro = 11; // Barometre için röle (11 numaralı pin kullanılıyor)
// LED ve Buzzer pinlerini tanımla
int ledPin = 13; // LED için pin
int buzzerPin = 10; // Buzzer için pin
// MPU6050 I2C adresi
const int MPU6050_ADDR = 0x68;
// MPU6050 register adresleri
const int ACCEL_XOUT_H = 0x3B;
const int PWR_MGMT_1 = 0x6B;
// MS5611 barometre nesnesi
MS5611 baro;
int32_t pressure;
float altitude;
// SD kart için dosya nesnesi
File dataFile;
void setup() {
// Seri iletişimi başlat
Serial.begin(9600);
while (!Serial); // Seri bağlantının başlamasını bekle
Serial.println("MPU6050 ve MS5611 Sensör Verisi");
// Röle pinlerini çıkış olarak ayarla
pinMode(rolePin1, OUTPUT);
pinMode(rolePin2, OUTPUT);
pinMode(rolePin3, OUTPUT);
pinMode(rolePin4, OUTPUT);
pinMode(rolePinBaro, OUTPUT); // Barometre rölesi için çıkış olarak ayarla
// LED ve Buzzer pinlerini çıkış olarak ayarla
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// LED'i aç ve buzzer'ı 1 saniye çalıştır
digitalWrite(ledPin, HIGH); // LED'i yak
digitalWrite(buzzerPin, HIGH); // Buzzer'ı çalıştır
delay(1000); // 1 saniye bekle
digitalWrite(buzzerPin, LOW); // Buzzer'ı kapat
// I2C bus'ı başlat (Wire1, Pin 16 ve Pin 17)
Wire1.begin();
// MPU6050'yi uyandır (PWR_MGMT_1 register'ını sıfırla)
Wire1.beginTransmission(MPU6050_ADDR);
Wire1.write(PWR_MGMT_1);
Wire1.write(0); // 0 yazmak, uyku modundan çıkarır
Wire1.endTransmission(true);
// MS5611 barometreyi başlat
Wire.begin();
baro = MS5611();
if (baro.begin()) {
Serial.println("MS5611 başlatıldı.");
} else {
Serial.println("MS5611 başlatılamadı!");
}
// SD kartı başlat
if (!SD.begin(BUILTIN_SDCARD)) {
Serial.println("SD kart başlatılamadı!");
return;
} else {
Serial.println("SD kart başlatıldı.");
}
// Verileri kaydetmek için dosyayı aç
dataFile = SD.open("sensor_data.txt", FILE_WRITE);
if (!dataFile) {
Serial.println("Dosya açılamadı!");
} else {
Serial.println("Veri kaydı başlatıldı.");
}
}
void loop() {
int16_t accx, accy, accz;
// MPU6050'den ivme verilerini al
Wire1.beginTransmission(MPU6050_ADDR);
Wire1.write(ACCEL_XOUT_H); // İlk veri register'ını belirt
Wire1.endTransmission(false);
Wire1.requestFrom(MPU6050_ADDR, 6, true); // 6 byte veri iste
// Verileri oku
accx = Wire1.read() << 8 | Wire1.read();
accy = Wire1.read() << 8 | Wire1.read();
accz = Wire1.read() << 8 | Wire1.read();
// X ekseni verilerini eşle
int degerx = map(accx, -17000, 17000, 0, 180);
// Y ekseni verilerini eşle
int degery = map(accy, -17000, 17000, 0, 180);
// Seri monitöre ivme verilerini yazdır
Serial.print("X: ");
Serial.print(degerx);
Serial.print(" Y: ");
Serial.println(degery);
// X ekseni için röle kontrolü
if (degerx < 75) {
digitalWrite(rolePin1, LOW); // X ekseni 75'ten küçükse röle 1 kapalı
digitalWrite(rolePin2, HIGH); // Röle 2 açık
} else if (degerx > 105) {
digitalWrite(rolePin1, HIGH); // Röle 1 açık
digitalWrite(rolePin2, LOW); // X ekseni 105'ten büyükse röle 2 kapalı
} else {
digitalWrite(rolePin1, HIGH); // Diğer durumlarda röle 1 açık
digitalWrite(rolePin2, HIGH); // Diğer durumlarda röle 2 açık
}
// Y ekseni için röle kontrolü
if (degery < 70) {
digitalWrite(rolePin3, LOW); // Y ekseni 70'ten küçükse röle 3 kapalı
digitalWrite(rolePin4, HIGH); // Röle 4 açık
} else if (degery > 96) {
digitalWrite(rolePin3, HIGH); // Röle 3 açık
digitalWrite(rolePin4, LOW); // Y ekseni 96'dan büyükse röle 4 kapalı
} else {
digitalWrite(rolePin3, HIGH); // Diğer durumlarda röle 3 açık
digitalWrite(rolePin4, HIGH); // Diğer durumlarda röle 4 açık
}
// MS5611 barometreden basınç ve yükseklik verilerini al
pressure = baro.readPressure(); // Basıncı oku
altitude = (1.0 - pow((float)pressure / 101325, 0.190284)) * 44330.77; // Yüksekliği hesapla
// Seri monitöre basınç ve yükseklik verilerini yazdır
Serial.print("Pressure: ");
Serial.print(pressure);
Serial.print(" Pa, Altitude: ");
Serial.print(altitude);
Serial.println(" meters");
// Barometre için röle kontrolü
if (altitude >= 256.30) {
digitalWrite(rolePinBaro, LOW); // Yükseklik 256.30 metre veya daha büyükse röleyi kapat
} else if (altitude <= 255.88) {
digitalWrite(rolePinBaro, HIGH); // Yükseklik 255.88 metre veya daha düşükse röleyi aç
}
// SD karta verileri yaz
if (dataFile) {
dataFile.print("X: ");
dataFile.print(degerx);
dataFile.print(" Y: ");
dataFile.print(degery);
dataFile.print(" Pressure: ");
dataFile.print(pressure);
dataFile.print(" Pa, Altitude: ");
dataFile.print(altitude);
dataFile.println(" meters");
dataFile.flush(); // Veriyi hemen SD karta yaz
} else {
Serial.println("Dosya yazılamadı!");
}
delay(1000); // Bir sonraki okuma öncesi bir saniye bekle
}
ATTENTION:There is a problem when you feed the circuit from the battery, otherwise it works.