دمج الوحدات · الدرس 3.4

المقاومة الضوئية (Photoresistor)

العودة إلى الدروس

قياس شدة الضوء

ستقيس الضوء بمدخل تناظري، وتستخدم مستواه للتحكم في عدد LEDs المضاءة، بناءً على 3.3.

المكونات المطلوبة

المقاومة الضوئية (Photoresistor)
المقاومة الضوئية (Photoresistor)

مبدأ LDR

تسمى مقاومة تعتمد على الضوء (LDR). تتغير مقاومتها بحسب الإضاءة؛ يقارب النوع المستخدم 50kΩ في الظلام و 500Ω في الضوء الساطع.

للقراءة من UNO نحول المقاومة المتغيرة (Pot) إلى جهد، وأبسط طريقة جمعها مع مقاومة ثابتة (Resistor). يعمل الاثنان بوصفهما مقسم جهد: في الضوء الساطع تكون مقاومة (LDR) صغيرة مقارنة بالثابتة، فتزداد قيمة الجهد المقروء؛ وفي الضوء الخافت تتجاوز 1kΩ الثابتة، فيقترب الجهد المقروء من جهد الأرضي.

مقسم الجهد بين المقاومة الضوئية (Photoresistor) ومقاومة 1kΩ
مقسم الجهد بين المقاومة الضوئية (Photoresistor) ومقاومة 1kΩ

بعد رفع المثال غطِّ الحساس بإصبعك ثم قربه من مصدر ضوء.

توصيل الدائرة

مخطط الدائرة مع LDR و 74HC595
مخطط الدائرة مع LDR و 74HC595
التوصيل العملي لحساس الضوء (Photoresistor) و LEDs
التوصيل العملي لحساس الضوء (Photoresistor) و LEDs

شرح البرنامج

افتح ملف البرنامج Photocell.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.

إذا تعذر نقل البرنامج إلى اللوحة، فراجع قسم «رفع البرنامج ومعالجة خطأ الاتصال» في الدرس 1.5 «وميض LED وإضافة المكتبات» للتحقق من اتصال USB واختيار نوع اللوحة والمنفذ التسلسلي في بيئة Arduino IDE.

تغير اسم المدخل التناظري من potPin إلى lightPin لأننا لم نعد نستخدم مقاومة متغيرة (Pot).

مقتطف من الشرح
int numLEDSLit = reading / 57; // all LEDs lit at 1k

التغيير الآخر تقسيم القراءة على 57 بدل 114، أي على نصف المقسوم عليه السابق. يتيح تقسيمها إلى تسع مناطق من دون LEDs إلى إضاءة الثمانية. يعوض العامل الإضافي المقاومة الثابتة (Resistor) 1kΩ: عندما تكون LDR أيضًا 1kΩ، تكون القراءة الخام نحو 1023/2 = 511، ويصبح numLEDSLit مقدار 8 فتضاء المجموعة.

الكود

Photocell/Photocell.ino

//www.elegoo.com
//2016.12.9

int lightPin = 0;
int latchPin = 11;
int clockPin = 9;
int dataPin = 12;

int leds = 0;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}
/*   The most common method of using 74CH595
 *   lctchPin->LOW : Begin transmitting signals.
 *   shiftOut(dataPin, clockPin, bitOrder, value)
 *   dataPin: the pin on which to output each bit. Allowed data types: int.
 *   clockPin: the pin to toggle once the dataPin has been set to the correct value. Allowed data types: int.
 *   bitOrder: which order to shift out the bits; either MSBFIRST or LSBFIRST. (Most Significant Bit First, or, Least Significant Bit First).
 *   value: the data to shift out. Allowed data types: byte. 
 *   lctchPin->HIch : The end of the transmission signal.
*/
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}
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();
}

ملفات الدرس والمكتبات

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.