مقدمة
في هذا الدرس ستتعلم كيفية قياس قوة الاضاءة باستخدام المستشعر الضوئي مع المدخل التناظري ‘analog input’.
ستستخدم ما تعلمته في الدرس التاسع، واستخدام قوة الاضاءة بالغرفة للتحكم في عدد مصابيح الـLEDs التي يتم اضاءتها.
تم استبدال المقاوم المتغير ‘pot’ في الدرس التاسع ووضع مكانه المستشعر الضوئي ‘photocell’.
المواد والأدوات
8× (5mm LED)
1× رقاقة مسجل الإزاحة (74HC595 shift register)
1× المستشعر الضوئي (Photocell)
1× لوحة التجارب (Half-size Breadboard)
1× اردوينو اونو
1× سلك اردوينو
المستشعر الضوئي photocell
المستشعر الضوئي ‘photocell’ يعتبر مقاوم يعتمد على الضوء ويدعى احيانا بـ’LDR’ وذلك اختصار لـ Light Dependent Resistor.
المستشعر الضوئي يملك قوة مقاومه تصل حتى 50kΩ في الظلام الدامس و 500 Ω عند وجود الاضاءة يمكن ان بواسطة متحكم الأردوينو أن تقرأ قيمة المقاومة للمستشعر عبر مدخل تناظري ‘Analog input’
أسهل طريقة للقيام بهذا هو ربطها مع مقاوم ثابث
المقاوم الثابت والمستشعر الضوئي ‘photocell’ معًا يعتبرون كالمقاوم المتغير ‘pot’، اعتمادًا على كمية الضوء المسلطة عليه ‘photocell’ يتغير قدر المقاومة التي يقوم بها المستشعر الضوئي ‘photocell’
فاذا كانت كمية الضوء مشعة بالقدر الكافي فإن كمية المقاومه التي ينتجها المستشعر الضوئي أقل من المقاومه الثابته وبالتالي فكأنها عباره عن مقاوم متغير ‘pot’ تم رفع قيمة للقيمه القصوى. والعكس صحيح..
توصيل الدائرة
تصميم الدائرة في هذا الدرس هو نفس التصميم بالدرس التاسع ولكن قمنا باستبدال المقاوم المتغير ‘pot’ بـالمستشعر الضوئي ‘photocell’ و مقاومة 1 kΩ :
فقط نقوم بازالة المقاوم المتغير ‘pot’ واستبداله بالمستشعر الضوئي’photocell’ ومقاوم ..كالتالي:
الكود البرمجي
الكود التالي مشابه للدرس التاسع ولكن نظرًا لإستخدامنا للمستشعر الضوئي قمنا ببعض التغيرات البسيطة:
ارفع الكود البرمجي التالي بمتحكم الأردوينو وقم بتغطيه المستشعر الضوئي بيدك وارفعها مرة اخرى لترى مدى التأثير.
int lightPin = 0; int latchPin = 5; int clockPin = 6; int dataPin = 4; int leds = 0; void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { int reading = analogRead(lightPin); int numLEDSLit = reading / 57; //1023 / 9 / 2 if (numLEDSLit > 8) numLEDSLit = 8; leds = 0; // no LEDs lit to start for (int i = 0; i < numLEDSLit; i++) { leds = leds + (1 << i); // sets the i'th bit } updateShiftRegister(); } void updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }
أول شيء قمنا بتغييره هو تسمية المنفذ التناظري ‘analog pin’ من ‘potPin’ إلى ‘lightPin’ وذلك قمنا بتبديل المقاوم المتغير ‘pot’ بالمستشعر الضوئي ‘photocell’ .
التغيير الآخر هو السطر الذي يقوم باحتساب عدد مصابيح الـLEDs لإضاءتها
int numLEDSLit = reading / 57; // all LEDs lit at 1k
هذه المره قمنا بقسمة القراءة على 57 بدلاً من 114 من الدرس التاسع . بمعنى آخر قمنا بقسمتها على نصف القيمة السابقة حتى نقوم بتوزيعها على 9 مجموعات، ابتداءاً من (حيث لايتم اضاءة أي من المصابيح الثمانية) وحتى (اضاءة جميع المصابيح الثمانية) ، العامل الاضافي هو حساب قيمة المقاومه الثابته 1kΩ
هذا يعني انه عندما تكون قيمة المستشعر الضوئي ‘photocell’ هي 1kΩ (نفس قيمة المقاوم الثابت ) يتم قراءة الصف 1023 وقسمته على 2 = 511 . بذلك يتم اضاءة جميع المصابيح (numLEDSLit ستكون 9)
أنشطة أخرى
لتغيير مقدار حساسية المستشعر للضوء غير القيمة 57 التي يتم قسمة القراءه عليها.
زيادة القيمه ستجعل من المستشعر أقل حساسية.