عندما تأخذ هاتفك في ضوء الشمس أو في الإضاءة العالية ، فإنه يقوم تلقائيًا بضبط السطوع وفقًا لظروف الإضاءة. معظم أجهزة العرض الآن يومًا ما ، سواء كانت تلفازًا أو هاتفًا محمولًا ، تحتوي على مستشعر الإضاءة المحيطة بداخلها لضبط السطوع تلقائيًا. اليوم في هذا البرنامج التعليمي ، سنستخدم وحدة مستشعر الضوء BH1750 ونقوم بربطها مع Arduino وإظهار قيمة Lux على شاشة 16x2 LCD.
مقدمة عن وحدة استشعار الضوء الرقمية BH1750
BH1750 هو مستشعر رقمي للضوء المحيط أو مستشعر شدة الضوء ، والذي يمكن استخدامه لضبط سطوع الشاشة تلقائيًا في الهواتف المحمولة أو شاشات LCD أو لتشغيل / إيقاف تشغيل المصابيح الأمامية في السيارات بناءً على ظروف الإضاءة الخارجية.
يستخدم المستشعر بروتوكول الاتصال التسلسلي I 2 C مما يسهل استخدامه مع وحدات التحكم الدقيقة. بالنسبة لاتصالات I2C ، تحتوي على دبابيس SDI و SDA. يظهر طرف مستشعر الضوء المحيط BH1750 أدناه:
ناتج هذا المستشعر هو LUX (lx) ، لذلك لا يتطلب أي حسابات أخرى. لوكس هي وحدة قياس شدة الضوء. يقيس الشدة وفقًا لكمية الضوء التي تسقط على منطقة معينة. لوكس واحد يساوي لومن واحد لكل متر مربع.
جهاز استشعار يعمل على الفولتية من 2.4V إلى 3.6V (عادة 3.0V) وأنها تستهلك الحالي 0.12mA. يحتوي هذا المستشعر على نطاق واسع ودقة عالية (1-65535lx) بالإضافة إلى أن تباين القياس صغير أيضًا (حوالي +/- 20٪). يمكنه أيضًا العمل بشكل مستقل دون أي مكون خارجي.
على الرغم من أنه يمكن أيضًا استخدام مستشعر LDR للتحكم في الأجهزة بناءً على ظروف الإضاءة ، إلا أنها ليست دقيقة. لقد استخدمنا مستشعر LDR لبناء العديد من التطبيقات التي يتم التحكم فيها بالضوء:
- دائرة مستشعر الضوء اردوينو باستخدام LDR
- كاشف الظلام باستخدام LDR و 555 Timer IC
- دارة LDR بسيطة لاكتشاف الضوء
- مصباح خلط ألوان اردوينو باستخدام RGB LED و LDR
اردوينو
يظهر أدناه مخطط الدائرة لتوصيل مستشعر الضوء BH1750 بـ Arduino.
يتم توصيل دبابيس اتصالات I2C SDA و SCL لـ BH1750 بـ Arduino pin A4 و A5 على التوالي لاتصالات I 2 C. كما نعلم ، فإن جهد التشغيل للمستشعر هو 3.3 فولت ، لذا فإن VCC و GND لـ BH1750 متصلان بـ 3.3V و GND من Arduino. بالنسبة لشاشات الكريستال السائل ، يتم توصيل دبابيس البيانات (D4-D7) بالمسامير الرقمية D2-D5 من Arduino ويتم توصيل دبابيس RS و EN بـ D6 و D7 من Arduino. V0 من LCD متصل بالوعاء ويستخدم وعاء 10 كيلو للتحكم في سطوع شاشة LCD.
برمجة Arduino للتفاعل مع مستشعر الضوء BH1750
جزء البرمجة لاستخدام مستشعر LUX مع Arduino سهل للغاية. على الرغم من وجود مكتبة متاحة لهذا المستشعر ، إلا أنه يمكننا أيضًا استخدامها بدون ذلك.
أولاً ، قمنا بتضمين ملفات رأس لشاشات الكريستال السائل وبروتوكول I 2 C.
#تضمن
في وظيفة الإعداد ، قمنا بتهيئة كل من LCD والمستشعر وطباعة الرسالة الافتتاحية على شاشة LCD.
إعداد باطل () { Wire.begin () ؛ lcd.begin (16.2) ؛ lcd.print ("BH1750 Light") ؛ lcd.setCursor (0،1) ؛ lcd.print ("مستشعر الكثافة") ؛ تأخير (2000) ؛ }
هنا BH1750_Read و BH1750_Init وظائف وتستخدم لقراءة وكتابة القيم لوكس على التوالي. تُستخدم الوظيفة Wire.beginTransmission () لبدء الإرسال وتستخدم وظيفة Wire.requestFrom (العنوان ، 2) لقراءة السجلات حيث يشير 2 إلى عدد السجلات.
يتم استخدام مزيد من Wire.endTransmission () لإنهاء الإرسال ويتم استخدام وظيفة Wire.write () للانتقال إلى السجل المطلوب عن طريق إدخال عنوان ذلك السجل فيه.
int BH1750_Read (عنوان int) { int i = 0 ؛ Wire.beginTransmission (العنوان) ؛ Wire.request From (العنوان ، 2) ؛ while (Wire.available ()) { buff = Wire.read () ؛ أنا ++ ؛ } Wire.endTransmission () ؛ العودة أنا } باطل BH1750_Init (عنوان int) { Wire.beginTransmission (العنوان) ؛ Wire.write (0x10) ؛ Wire.endTransmission () ؛ }
في وظيفة الحلقة ، نقوم بطباعة قيم لوكس في الوقت الحقيقي عبر شاشة LCD. قارن أولاً قيمة الإرجاع من دالة BH1750_Read مع 2 ، ثم ابدأ في طباعة قيم Lux إذا كانت تساوي 2. هنا تتم مقارنة القيم مع 2 لأن الدالة BH1750_Read ترجع قيمة عدد التسجيل ونحن نقرأ فقط سجلين . لذلك عندما تصل إلى 2 ، يبدأ البرنامج في طباعة قيم LUX لشدة الضوء.
ثم يتم استخدام صيغة للحصول على القيم من كلتا المسجلات وقسمتها على 1.2 ، وهي دقة القياس.
حلقة باطلة () { int i؛ قيمة uint16_t = 0 ؛ BH1750_Init (BH1750address) ؛ تأخير (200) ؛ if (2 == BH1750_Read (BH1750address)) { value = ((buff << 8) -buff) /1.2 ؛ lcd.clear () ؛ lcd.print ("Intensity in LUX") ؛ lcd.setCursor (6،1) ؛ lcd.print (قيمة) ؛ } تأخير (150)؛ }
أخيرًا ، قم بتشغيل Arduino وتحميل البرنامج إلى Arduino. بمجرد تحميل البرنامج ، تبدأ شاشة LCD في إظهار شدة الضوء بوحدات LUX. يمكنك أيضًا تغيير القيم عن طريق تغيير شدة الضوء حول المستشعر كما هو موضح في الفيديو أدناه.