#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
Adafruit_MPU6050 mpu;
// --- 1. مجموعة (يمين / يسار - المحور Y) ---
const int LED_GREEN_Y = 3; // استواء Y
const int LED_LEFT = 2; // يسار
const int LED_RIGHT = 4; // يمين
// --- 2. مجموعة (أمام / خلف - المحور X) ---
const int LED_GREEN_X = 6; // استواء X
const int LED_FORWARD = 5; // أمام
const int LED_BACK = 7; // خلف
// --- 3. البزر ---
const int BUZZER = 8; // Buzzer
void setup() {
Serial.begin(9600);
pinMode(LED_GREEN_Y, OUTPUT);
pinMode(LED_LEFT, OUTPUT);
pinMode(LED_RIGHT, OUTPUT);
pinMode(LED_GREEN_X, OUTPUT);
pinMode(LED_FORWARD, OUTPUT);
pinMode(LED_BACK, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Wire.begin() تلقائياً يستخدم A4 (SDA) و A5 (SCL) في النانو
Wire.begin();
if (!mpu.begin()) {
Serial.println("❌ خطأ: لم يتم العثور على MPU6050!");
while (1) { delay(10); }
}
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
}
void loop() {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
// حساب زوايا الإمالة
float angleY = atan2(a.acceleration.y, a.acceleration.z) * 180.0 / PI; // يمين / يسار
float angleX = atan2(a.acceleration.x, a.acceleration.z) * 180.0 / PI; // أمام / خلف
clearAll();
bool isLevelY = false;
bool isLevelX = false;
// --- فحص اتجاه يمين / يسار ---
if (angleY < -10.0) {
digitalWrite(LED_LEFT, HIGH);
}
else if (angleY > 10.0) {
digitalWrite(LED_RIGHT, HIGH);
}
else {
digitalWrite(LED_GREEN_Y, HIGH);
isLevelY = true;
}
// --- فحص اتجاه أمام / خلف ---
if (angleX < -10.0) {
digitalWrite(LED_FORWARD, HIGH);
}
else if (angleX > 10.0) {
digitalWrite(LED_BACK, HIGH);
}
else {
digitalWrite(LED_GREEN_X, HIGH);
isLevelX = true;
}
// --- التحكم بالبزر ---
if (isLevelY && isLevelX) {
digitalWrite(BUZZER, LOW); // ينطفئ عند الاستواء التام
} else {
digitalWrite(BUZZER, HIGH); // يشتغل عند وجود أي ميلان
}
delay(50);
}
void clearAll() {
digitalWrite(LED_GREEN_Y, LOW);
digitalWrite(LED_LEFT, LOW);
digitalWrite(LED_RIGHT, LOW);
digitalWrite(LED_GREEN_X, LOW);
digitalWrite(LED_FORWARD, LOW);
digitalWrite(LED_BACK, LOW);
digitalWrite(BUZZER, LOW);
}
:رابط فديو الشرح
https://youtube.com/shorts/CMzF_4Elh54?si=phLDAzu7E3N9hJ15