مشروع لتقليل إجهاد العين من الشاشات باستخدام أردوينو اكتب تعليقُا

تم نشر هذا المشروع لجميع الأشخاص المهتمين في مجال تصنيع وابتكار المشاريع الإلكترونية والبرمجية، و نود التنويه أن موقع انا الكتروني يخلي مسؤوليته التامة في حال لم يعمل المشروع لدى العميل أو في حال الاستخدام الخاطئ للمكونات الإلكترونية والكهربائية التي قد تؤدي لحدوث الحرائق أو غيرها لا سمح الله.

شرح فكرة المشروع

  • في هذا المشروع سنُصمم نظامًا بسيطًا باستخدام الأردوينو لتقليل إجهاد العين الناتج عن استخدام الشاشات لفترات طويلة.

  • عند الضغط على الزر، يبدأ العد التنازلي لمدة العمل المحددة (3 ثوانٍ في هذا النموذج).

  • عند انتهاء الوقت، يعرض النظام تنبيهًا يطلب من المستخدم النظر إلى مكان يبعد 20 مترًا لمدة 20 ثانية، وذلك وفق قاعدة 20-20-20 المعروفة لإراحة العينين.

  • يُعد هذا النظام وسيلة فعّالة لتشجيع المستخدمين على تبني عادات صحية أثناء استخدام الأجهزة الإلكترونية، مما يُقلل من الإجهاد البصري ويحافظ على صحة النظر.

  • وعليه نسأل الله أن ينفع به كل شخص يستخدم الشاشات كثيرا ليحافظ على صحة عيونه.

أدوات المشروع

مخطط المشروع

الكود البرمجي

تنبيه : في حال لم تكن متأكد من قدرتك على تنفيذ خطوات المشروع يرجى استشارة شخص متخصص في هذا المجال.
  • للتعرف على تجهيز لوحة أردوينو للبرمجة قم بزيارة الرابط التالي.
  • للإطلاع على كيفية تحميل وتنصيب المكتبات قم بزيارة الرابط التالي.
  • تحميل مكتبة الشاشة من هنا.
  • في حال لم يعمل هذا الكود البرمجي، قم بتحميل ملف الكود بالضغط على زر التحميل الموجود في الأسفل.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define BUTTON_PIN 2
#define BUZZER_PIN 4
#define LED_PIN 3

LiquidCrystal_I2C lcd(0x27, 16, 2); // ضبط عنوان I2C حسب الشاشة

const char* eyeCareTips[] = {
“Focus far away”,
“Blink your eyes”,
“Close eyes 20s”,
“Relax & breathe”,
“Roll your eyes”,
“Stretch a bit”
};
const int tipsCount = sizeof(eyeCareTips) / sizeof(eyeCareTips[0]);

bool timerStarted = false;

void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);

lcd.init();
lcd.backlight();
showStartMessage();
}

void loop() {
if (digitalRead(BUTTON_PIN) == LOW) {
delay(200);
while (digitalRead(BUTTON_PIN) == LOW); // انتظار تحرير الزر

if (!timerStarted) {
startTimer();
}
}

if (timerStarted) {
for (int i = 0; i < 1200; i++) { // 1200 ثانية = 20 دقيقة
delay(1000);
}

timerStarted = false;
startBreakPeriod();
}
}

void startTimer() {
timerStarted = true;

// تنبيه عند بدء المؤقت
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000); // نغمة 1 كيلوهرتز
delay(500);
noTone(BUZZER_PIN);
digitalWrite(LED_PIN, LOW);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Timer started!”);
delay(1000);
}

void startBreakPeriod() {
const char* tip = eyeCareTips[random(tipsCount)];

// تنبيه بداية الراحة
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1500);
delay(1000);
noTone(BUZZER_PIN);

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Look 20ft away!”);

// فترة الراحة 20 ثانية
for (int i = 20; i > 0; i–) {
lcd.setCursor(0, 1);
lcd.print(“Rest: “);
lcd.print(i);
lcd.print(“s “);
delay(1000);
}

digitalWrite(LED_PIN, LOW); // إطفاء الليد بعد الراحة

lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Tip:”);
lcd.setCursor(0, 1);
lcd.print(tip);

delay(5000);
showStartMessage();
}

void showStartMessage() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(“Press button”);
lcd.setCursor(0, 1);
lcd.print(“to begin”);
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

تحديثات مهمة للعملاء في السعودية بدءًا من 1 يناير 2026م

يرجى الاطلاع على تفاصيل التحديثات عبر الرابط التالي:

اضغط هنا
إغلاق هذا الإشعار يُعد تأكيدًا على أنك قرأت التحديثات وفهمتها.