#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 childTooClose = false;
bool alertActive = false;
unsigned long closeStartTime = 0;
// — إعدادات النظام —
const float SCREEN_DISTANCE_THRESHOLD = 50.0; // إذا كانت المسافة أقل من 50 سم يعني أن الطفل يقترب جداً من الشاشة
const unsigned long MAX_TIME_CLOSE = 15000; // الحد الأقصى للبقاء بالقرب من الشاشة بالملي ثانية (15 ثانية)
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(500); // فحص المسافة كل نصف ثانية
// إرسال نبضة لطلب القراءة من الحساس
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(“Child Distance: “);
Serial.print(distance);
Serial.println(” cm”);
// التحقق مما إذا كان الطفل قريباً جداً من الشاشة
if (distance < SCREEN_DISTANCE_THRESHOLD) {
// الطفل قريب الآن
if (!childTooClose) {
// رصد لحظة الاقتراب وبدء حساب الوقت
closeStartTime = millis();
childTooClose = true;
Serial.println(“الطفل قريب جداً من الشاشة، بدء المؤقت…”);
} else {
// الطفل ما زال قريباً، نتحقق من المدة المنقضية
if (millis() – closeStartTime > MAX_TIME_CLOSE) {
if (!alertActive) {
String alertMsg = “⚠️ تنبيه: الطفل يقترب جداً من الشاشة لفترة طويلة!\n”;
alertMsg += “👁️ يرجى الابتعاد عن الشاشة لحماية عينيه.”;
bot.sendMessage(CHAT_ID, alertMsg, “”);
alertActive = true;
}
// إطلاق جرس الإنذار لتنبيه الطفل بالابتعاد
digitalWrite(BUZZER, HIGH);
delay(100);
digitalWrite(BUZZER, LOW);
delay(100);
}
}
} else {
// الطفل ابتعد عن الشاشة وأصبح في مسافة آمنة
if (alertActive) {
bot.sendMessage(CHAT_ID, “✅ تم الابتعاد عن الشاشة.”, “”);
alertActive = false;
}
childTooClose = false;
digitalWrite(BUZZER, LOW);
}
}