#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
// — إعدادات حساس المسافة HC-SR04 —
#define TRIG_PIN D3 // الدبوس المتصل بـ TRIG
#define ECHO_PIN D4 // الدبوس المتصل بـ ECHO
// — بيانات الشبكة وتلجرام —
const char* ssid = “Redmi A1”;
const char* pass = “19041904”;
const char* BOT_TOKEN = “8604308627:AAEJnHjAbfa1r5z-g2zrNaVRiXmMn1wlNw0”;
const char* CHAT_ID = “-1004337592927”;
const int BUZZER = D2;
bool alertActive = false;
// عتبة المسافة بالسنتيمتر (إذا كانت القراءة أكبر من 10 سم يعني فتح الصندوق أو تحريك المقتنيات)
const float BOX_OPEN_THRESHOLD = 10.0;
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void setup() {
Serial.begin(115200);
// إعداد دبابيس الحساس والجرس
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
WiFi.begin(ssid, pass);
client.setInsecure();
Serial.print(“Connecting to WiFi…”);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“\nConnected!”);
bot.sendMessage(CHAT_ID, “🔐 نظام حماية أطقم المجوهرات والمقتنيات الثمينة نشط ويعمل الآن لتأمين ممتلكاتكم.”, “”);
}
void loop() {
delay(200); // سرعة فحص عالية جداً (كل 0.2 ثانية) لضمان المراقبة اللحظية والمستمرة لأي اقتراب
// إرسال نبضة لطلب القراءة من الحساس
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
// حساب المسافة بالسنتيمتر
float distance = duration * 0.0343 / 2.0;
// التحقق من صحة القراءة لتفادي الإنذارات الخاطئة
if (duration == 0 || distance > 400) {
return;
}
Serial.print(“Sensor Distance: “);
Serial.print(distance);
Serial.println(” cm”);
// حالة الخطر: إذا تجاوزت المسافة الحدود الآمنة والمسموح بها
if (distance > BOX_OPEN_THRESHOLD) {
if (!alertActive) {
// صياغة رسالة التنبيه الجديدة المطلوبة
String alertMsg = “🚨🚨 إنذار أمني عاجل: تم رصد محاولة لتحريك القطع الثمينة!\n”;
alertMsg += “⚠️ يرجى من المسؤولين اتخاذ الإجراء اللازم فوراً.”;
bot.sendMessage(CHAT_ID, alertMsg, “”);
alertActive = true;
}
// تفعيل إنذار محلي (Buzzer) لتنبيه المتواجدين
digitalWrite(BUZZER, HIGH);
delay(80);
digitalWrite(BUZZER, LOW);
delay(80);
} else {
// بمجرد إغلاق الصندوق وإعادته إلى النطاق الآمن
if (alertActive) {
// رسالة العودة إلى الوضع الآمن الجديدة المطلوبة
bot.sendMessage(CHAT_ID, “✅ تم عودة الوضع إلى النطاق الآمن المستقر.”, “”);
alertActive = false;
}
digitalWrite(BUZZER, LOW);
}
}