الأردوينو و مستشعر الضوء

مقدمة :
في هذه التدوينة سنتعلم سويا كيفية قراءة شدة الضوء بإستخدام مستشعر الضوء ( أو ما يعرف بالمقاومة الضوئية) وطباعتها على شاشة الحاسب بعد ذلك سنقوم بالتحكم في إضاءة مصباح اعتمادا
على قراءة المستشعر
على قراءة المستشعر
كيف يعمل مستشعر الضوء ؟
- المستشعر هو جهاز يقوم بتحويل شكل من أشكال الطاقة (حرارة , ضوء , حركة ) إلى نبضات كهربائية يمكن قياسها .
- مستشعر الضوء (Photo Cell) هو عبارة عن مقاومة تصنع من نوع خاص من السيليكون المعالج, تتغير قيمتها بتغير كمية الضوء الساقطة عليها .
- من الأمثلة الشائعة لهذا المستشعر استخدامه في ضبط سطوع شاشة الهواتف الذكية .. حيث يقوم النظام بتعديل سطوع الشاشة اعتمادا على شدة الإضاءة في البيئة المحيطة .
المتطلبات :
- أردوينو Arduino
- حساس الضوء Photo Cell (Photo Resistor)
- مقاومة 220 أو 330
- مقاومة 10KΩ
- لوح تجارب Bread Board
- أسلاك توصيل Wire Jumpers
الدائرة :

قمنا بتوصيل الدايود الضوئي إلى Pin رقم 11 , لأنه أحد المداخل التي تدعم ما يسمى بال PWM اختصار ل Pulse Width Modulation . وهي طريقة للتحايل على عدم قدرة الأردوينو على إنتاج نبضات تماثلية , عن طريق انتاج موجات مربعة تنتقل بين حالتي ال 0 و 1 بسرعة .. و على حسب هذه السرعة تظهر لنا كإشارة تماثلية .. يمكن معرفة المداخل التي تدعم هذه الخاصية بوجود علامة ' ~ ' أمامها . أما المقاومة الضوئية فقد قمنا بتوصيلها إلى المدخل التماثلي A0 لأنها تنتج اشارة تماثلية .. و هذه المداخل تحتوي على ADC (Analog to Digital Converter)وهو ما يقوم بتحويل هذه الإشارة إلى رقمية .. مع العلم بإمكانية استخدام هذه المداخل للإشارات الرقمية أيضا ..
الكود :
const int LEDpin = 11; //LED will be connected to pin 11; int LEDvalue; //The value that wil be assigned to the LED; int sensorValue; // The value read by the sensor; void setup() { // put your setup code here, to run once: Serial.begin(9600); //Start Serial Communication with the computer pinMode(LEDpin, OUTPUT); //Setting the LED pin as output; } void loop() { // put your main code here, to run repeatedly: sensorValue = analogRead(A0); //read the value at the sensor pin LEDvalue = map(sensorValue, 0, 1023, 0, 255);//mapping the value from the sensor to be valid analogWrite(LEDpin, LEDvalue); //Writing the value to the LED Serial.print(sensorValue); //printing the value to the screen delay(100); //put a delay }
الآن لنقم بشرح الكود :
const int LEDpin = 11; int LEDvalue; int sensorValue;في الأسطر الأولى قمنا بتعريف ثابت LEDpin و الذي سيحمل القيمة 11 و هو المدخل الذي سيوصل به الدايود المضئ .. و المتغير LEDvalue و الذي سيخزن القيمة التي سترسل إلى الدايود .. و أخيرا المتغير sensorValue و الذي سنستقبل فيه قراءة المستشعر ..
Serial.begin(9600); pinMode(LEDpin, OUTPUT);
داخل دالة setup و هي الدالة التي تنفذ مرة واحدة فقط لذلك تستخدكم في تهيأة المداخل و المخارج .. الأمر Serial.begin(9600) هو المسؤول عن بداية التخاطب بين الأردوينو و الحاسب عن طريق وصلة الUSB و سيمكننا من طباعة شدة الإضاءة على ما يعرف بال Serial Monitor في بيئة الأردوينو .. أما الأمر pinMode(LEDpin, OUTPUT) فهو الذي يقوم بتعريف وظيفة الPin كمخرج أو مدخل .. و تستقبل الدالة pinMode عنصرين .. الأول هو رقم المدخل أو اسمه اذا سبق و قمنا بتعريف اسم له كما فعلنا مع الPin رقم 11 .. و العنصر الثاني هو وظيفة هذا الPin وهي اما OUTPUT أو INPUT ..
sensorValue = analogRead(A0); LEDvalue = map(sensorValue, 0, 1023, 0, 255); analogWrite(LEDpin, LEDvalue); Serial.print(sensorValue); delay(100);أما دالة loop فهي الدالة التي سيتم تكرارها لذلك سنقوم بكتابة ما على الأردوينو أن تفعله بداخلها .. الأمر analogRead(A0) هو المسؤول عن قراءة قيمة المستشعر التماثلية و تحويلها إلى قيمة رقمية بين 0 - 1023 .. وتستقبل الدالة عنصر واحد فقط و هو رقم المدخل التماثلي .. بعد ذلك سيتم تخزين الناتج في المتغير sensorValue .. الدالة map(sensorValue, 0, 1023, 0, 255) .. تقوم هذه الدالة بتحويل القيمة المستقبلة في المدى 0 - 1023 إلى المدى 0 - 255 (الشرح غير واضح أليس كذلك :) ) .. الدالة التي بعدها analogWrite(LEDpin, LEDvalue) هي المسؤولة عن توليد الخرج التماثلي بإستخدام خاصية ال PWM التي تحدثنا عنها .. و هي تستقبل عنصرين .. الأول هو اسم أو رقم الPin و الثاني هو القيمة المراد اخراجها و يجب أن تكون بين 0 - 255 (لذلك احتجنا دالة الmap ) حيث تعني القيمة 0 صفر فولت و القيمة 255 تعني 5 فولت .. Serial.print(sensorValue) تستقبل عنصر واحد و تقوم بطباعة قيمة هذا العنصر على شاشة الحاسب .. delay(100) تقوم هذه الدالة بإيقاف الأردوينو لمدة 100 ملي ثانية .. قبل أن تبدأ بتنفيذ دالة loop مجددا و السبب هو أن الأردوينو سريع جدا و لسنا بحاجة إلى قراءات بتلك السرعة .. الآن قم بتحميل الكود على الأردوينو و افتح شاشة الSerial Monitor الموجودة في أعلى الجهة اليمنى في بيئة الأردوينو IDE لتشاهد قراءة المستشعر .. رابط الكود في حسابي على Github : أتمنى أن أكون قد وفقت في الشرح .. " سبحانك اللهم و بحمدك .. أشهد أن لا إله إلا أنت أستغفرك و أتوب إليك "
تعليقات
إرسال تعليق