ضوء ليلي من مصباح كهربائي قديم، يعتمد على Arduino وWS2812. مهام الحل المستقل

ربما كان لدى الجميع حلم في مرحلة الطفولة (وأكثر من حلم). يمكنك حتى أن تحاول أن تتذكر الشعور الذي يملأ روح الطفل عندما يتحقق حلمه، أو ذلك البريق البعيد المألوف في عينيه... عندما كنت طفلاً، حلمت أن يكون لدي ضوء ليلي خاص بي.

الآن أنا طالب في السنة الرابعة في BSUIR، وعندما قيل لنا أن مشروع الدورة التدريبية في تصميم الدوائر لا يمكن تنفيذه على الورق، ولكن على قطعة من الأجهزة، خطر لي: الضوء الليلي الذي كنت أرغب فيه بشدة يمكن أن أصنع طفلاً بنفسي. علاوة على ذلك، لا تصنع فقط شيئًا يضيء الغرفة في الظلام، بل اصنع جهازًا يمكن التحكم فيه بسهولة ليناسب أي مزاج. ولم لا؟ قررت أن أضيف القدرة على تغيير الألوان باستخدام يدي: كلما اقتربت يدي من ضوء الليل، كلما أضاء أحد الألوان (RGB) الأكثر سطوعًا. أود أيضًا التحكم في الإضاءة الليلية باستخدام جهاز التحكم عن بعد.

سأعترف على الفور أنني لاحظت الفكرة على موقع الويب cxem.net. باختصار، استخدم هذا المثال مصفوفة RGB، والتي تم التحكم فيها باستخدام مسجلات التحول، وأجهزة استشعار المسافة بالموجات فوق الصوتية. لكنني اعتقدت أن المصفوفة تشرق في اتجاه واحد فقط، لكنني أردت أن يسطع ضوء الليل على الجوانب.

مبررات عناصر الدائرة


لقد وجهت انتباهي إلى وحدات التحكم الدقيقة Arduino. تعد UNO خيارًا مناسبًا تمامًا لفكرتي، أولاً لأنها المنصة الأكثر شعبية وعدد المنافذ ليس كبيرًا جدًا، على عكس Mega، وثانيًا، يمكنك توصيل مصدر طاقة خارجي بها، في حالتي هو 12 فولت. ، على عكس نانو، ثالثًا... حسنًا، أعتقد أنه يمكننا التوقف عند هاتين النقطتين. تحظى المنصة بشعبية كبيرة في جميع أنحاء العالم بسبب سهولة وبساطة لغة البرمجة، فضلاً عن بنيتها المفتوحة وكود البرنامج.

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

لذلك، المتطلبات الأساسية للنظام. مطلوب:
- أجهزة الاستشعار التي ستتتبع المسافة إلى أي عائق للتحكم في النظام؛
– حساس لقراءة الإشارات من جهاز التحكم عن بعد جهاز التحكم;
- مصابيح LED، التي ستوفر وظائف الإضاءة اللازمة؛
- وحدة تحكم تتحكم في النظام بأكمله.

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

أجهزة تحديد المدى الأكثر شعبية على هذه اللحظةهذه هي Sharp GP2Y0A21YK وHC-SR04. Sharp GP2Y0A21YK هو جهاز تحديد المدى بالأشعة تحت الحمراء. وهي مجهزة بباعث الأشعة تحت الحمراء ومستقبل الأشعة تحت الحمراء: الأول بمثابة مصدر الشعاع، الذي يلتقط الثاني انعكاسه. وفي الوقت نفسه، تكون أشعة الأشعة تحت الحمراء الخاصة بالمستشعر غير مرئية للعين البشرية وفي مثل هذه الكثافة تكون غير ضارة.

بالمقارنة مع مستشعر الموجات فوق الصوتية HC-SR04، فإن هذا المستشعر له مزايا وعيوب. وتشمل المزايا الحياد وعدم الضرر. أما عيوبه فهي قصر المدى والاعتماد على التداخل الخارجي بما في ذلك بعض أنواع الإضاءة.

تستخدم كأجهزة استشعار عن بعد للمشروع: أجهزة تحديد المدى بالموجات فوق الصوتية HC-SR04.
يعتمد مبدأ تشغيل HC-SR04 على ظاهرة تحديد الموقع بالصدى المعروفة. عند استخدامه، يقوم الباعث بإنشاء إشارة صوتية، والتي تنعكس من العائق، وتعود إلى المستشعر ويتم تسجيلها بواسطة جهاز الاستقبال. بمعرفة سرعة انتشار الموجات فوق الصوتية في الهواء (حوالي 340 م/ث) ووقت التأخير بين الإشارة المرسلة والمستقبلة، من السهل حساب المسافة إلى الحاجز الصوتي.

يتصل مدخل TRIG بأي دبوس من وحدة التحكم الدقيقة. يجب تطبيق نبض على هذا الدبوس. الإشارات الرقميةالمدة 10 ميكروثانية. واستنادًا إلى الإشارة عند مدخل TRIG، يرسل المستشعر حزمة من النبضات فوق الصوتية. بعد تلقي الإشارة المنعكسة، يقوم المستشعر بإنشاء إشارة نبضية عند طرف ECHO، وتتناسب مدتها مع المسافة إلى العائق.

مستشعر الأشعة تحت الحمراء. وبطبيعة الحال، سيتم قراءة الإشارة المطلوبة لجهاز التحكم عن بعد وفك تشفيرها من هذا المستشعر. تختلف TSOP18 عن بعضها البعض فقط في التردد. تم اختيار المستشعر VS1838B TSOP1838 للمشروع.

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

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

يتم تشغيل شرائط LED المستخدمة في المشروع بجهد 12 فولت.

نظرًا لحقيقة أن الجهد الكهربي الموجود على مصابيح LED في حالة "إيقاف التشغيل" يبلغ 6 فولت ومن الضروري تنظيم مصدر الطاقة الذي يتجاوز 5 فولت، فمن الضروري إضافة ترانزستورات إلى الدائرة في وضع التبديل. وقع اختياري على طراز BC547c.

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

يتم استخدام هاتين الحالتين، التشبع والقطع، عندما يعمل الترانزستور في وضع التبديل، مثل جهة اتصال التتابع العادية. المعنى الرئيسي لهذا الوضع هو أن تيار قاعدة صغير يتحكم في تيار مجمع كبير، وهو أكبر بعشرات المرات من تيار القاعدة. يتم الحصول على تيار جامع كبير بسبب مصدر خارجيالطاقة، ولكن لا يزال المكاسب الحالية، كما يقولون، واضحة. في حالتنا، تشتمل الدائرة الدقيقة، التي يبلغ جهد تشغيلها 5 فولت، على 3 شرائح مزودة بمصابيح LED تعمل من 12 فولت.

دعونا نحسب وضع التشغيل لسلسلة المفاتيح. من الضروري حساب قيمة المقاوم في الدائرة الأساسية حتى تحترق مصابيح LED بكامل طاقتها. الشرط الضروري عند الحساب هو أن يكون الكسب الحالي أكبر من أو يساوي حاصل قسمة الحد الأقصى لتيار المجمع المحتمل على الحد الأدنى المحتمل للتيار الأساسي:

لذلك، يمكن أن يكون للشرائط جهد تشغيل يبلغ 220 فولت، ويمكن التحكم في الدائرة الأساسية من خلال دائرة كهربائية دقيقة بجهد 5 فولت. إذا تم تصميم الترانزستور للعمل مع مثل هذا الجهد في المجمع، فسوف تضيء مصابيح LED دون مشاكل.
يكون انخفاض الجهد عبر وصلة الباعث والقاعدة 0.77 فولت، بشرط أن يكون تيار القاعدة 5 مللي أمبير وتيار المجمع 0.1 أمبير.
الجهد عبر المقاومة الأساسية سيكون:

وفقا لقانون أوم:

من النطاق القياسي للمقاومات نختار المقاوم 8.2 كيلو أوم. هذا يكمل الحساب.

أود أن ألفت انتباهكم إلى مشكلة واحدة واجهتني. عند استخدام مكتبة IRremote، يتجمد الاردوينو عند ضبط اللون الأزرق. بعد بحث طويل وشامل على الإنترنت، اتضح أن هذه المكتبة تستخدم Timer 2 افتراضيًا لنموذج Arduino هذا. يتم استخدام الموقتات للتحكم في مخرجات PWM.

المؤقت 0 (وقت النظام، PWM 5 و6)؛
مؤقت 1 (PWM 9 و10)؛
مؤقت 2 (PWM 3 و11).

في البداية استخدمت PWM 11 لتنظيم اللون الأزرق. لذلك، كن حذرًا عند العمل مع PWM وأجهزة ضبط الوقت ومكتبات الجهات الخارجية التي قد تستخدمها. من الغريب ذلك الصفحة الرئيسيةلم يكن هناك شيء يقال عن هذا الفارق الدقيق على جيثب. إذا كنت ترغب في ذلك، يمكنك إلغاء التعليق على السطر الذي يحتوي على المؤقت 1 والتعليق على 2.

يبدو توصيل العناصر الموجودة على اللوح كما يلي:

بعد الاختبار على اللوح، بدأت مرحلتا "وضع العناصر على السبورة" و"العمل بمكواة اللحام". بعد الاختبار الأول للوحة النهائية، تتسلل فكرة إلى رأسي: حدث خطأ ما. وهنا تبدأ المرحلة المألوفة لدى الكثيرين، "العمل المضني مع المُختبر". ومع ذلك، تم حل المشاكل بسرعة (تم لحام العديد من جهات الاتصال المجاورة معًا عن طريق الخطأ) وهنا ظهر ضوء LED المؤذي الذي طال انتظاره.

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

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

لتركيب الشرائط المزودة بمصابيح LED الغطاء العلويتم إدخال أنبوب تمر من خلاله جميع الأسلاك بشكل مثالي.

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

ماذا تريد أن تقول في النهاية؟

ما الذي يجب أن أغيره في المشروع؟ لتزويد إشارة TRIG إلى مستشعرات المسافة، يمكن استخدام مخرج Arduino واحد بدلاً من ثلاثة. أود أيضًا توفير ثقب لمستشعر الأشعة تحت الحمراء (الذي نسيته)، والذي، للأسف، لا يزال مخفيًا في الحالة التي لا يمكنه، بطبيعة الحال، قراءة الإشارات من جهاز التحكم عن بعد. ومع ذلك، من قال أنه لا يمكنك لحام أو حفر أي شيء؟

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

لمهمة إضافية

    1 LED إضافي

    1 مقاومة إضافية بقيمة اسمية 220 أوم

    2 أسلاك أخرى

رسم تخطيطى

مخطط على اللوح

ملحوظة

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

    حاول وضع المكونات بحيث لا يضيء مؤشر LED المقاوم الضوئي.

رسم

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) حلقة باطلة() ( // قراءة مستوى الضوء. بالمناسبة، أعلن // يمكنك تعيين متغير وقيمة له في وقت واحدخفة كثافة العمليات =analogRead(LDR_PIN) ؛ // اقرأ القيمة من مقياس الجهد الذي ننظم به // قيمة العتبة بين الظلام المشروط والنورعتبة int = قراءة تمثيلية (POT_PIN) ؛ // أعلن عن متغير منطقي وقم بتعيين قيمة له // "هل هي ظلام الآن." المتغيرات المنطقية، بدلا من // الأعداد الصحيحة يمكن أن تحتوي على قيمة واحدة فقط من اثنتين: // صحيحة أو خاطئة. مثل هذه القيم // يُسمى أيضًا منطقيًا.منطقية أيضًاDark = (lightness< threshold) ; // استخدم برنامج التفريع: سيقوم المعالج بتنفيذ أحد البرامج // كتلتان من التعليمات البرمجية اعتمادًا على تنفيذ الشرط. // إذا كانت (بالإنجليزية "if") داكنة جدًا...إذا (مظلم جدًا) ( // ... قم بتشغيل الإضاءةالكتابة الرقمية (LED_PIN، عالية)؛ ) آخر ( // ...وإلا فلن تكون هناك حاجة إلى الضوء - أطفئهالكتابة الرقمية (LED_PIN، LOW)؛ ))

توضيحات للكود

    نحن نستخدم نوعًا جديدًا من المتغيرات - المنطقية، التي تخزن فقط القيم الصحيحة (صحيح، 1) أو الخاطئة (خطأ، 0). هذه القيم هي نتيجة تقييم التعبيرات المنطقية. في هذا المثال، التعبير المنطقي هو الخفة< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

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

    في تجربتنا، سيكون التعبير المنطقي صحيحًا عندما تكون قيمة الخفة أقل من قيمة العتبة لأننا استخدمنا العامل< . Мы можем использовать операторы > , <= , >= , == , != والتي تعني "أكبر من" و"أقل من أو يساوي" و"أكبر من أو يساوي" و"يساوي" و"لا يساوي" على التوالي.

    كن حذرًا بشكل خاص مع العامل المنطقي == ولا ​​تخلط بينه وبين عامل التخصيص = . في الحالة الأولى نقوم بمقارنة قيم التعبيرات ونحصل على قيمة منطقية (صواب أو خطأ)، وفي الحالة الثانية نقوم بإسناد قيمة المعامل الأيمن إلى المعامل الأيسر. لا يعرف المترجم نوايانا ولن يصدر خطأ، ولكن يمكننا عن طريق الخطأ تغيير قيمة بعض المتغيرات ثم قضاء وقت طويل في البحث عن خطأ.

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

    خفة التعبير المنطقي< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    وبنفس النجاح يمكننا أن نقول "إذا كانت الإضاءة أقل من مستوى العتبة، فقم بتشغيل مؤشر LED"، أي. قم بتمرير التعبير المنطقي بالكامل إلى إذا:

إذا (خفة< threshold) { // ... }

    خلف عامل مشروطإذا كان يتبع بالضرورة كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان التعبير المنطقي صحيحًا. لا تنسى كلا الأقواس المتعرجة ()!

    إذا كان التعبير صحيحًا، فما علينا سوى التنفيذ واحدالتعليمات، يمكن كتابتها مباشرة بعد إذا (...) بدون الأقواس المعقوفة:

إذا (خفة< threshold) digitalWrite(LED_PIN, HIGH) ;

    يمكن تمديد عبارة if باستخدام بناء آخر. لن يتم تنفيذ كتلة التعليمات البرمجية، أو العبارة الفردية التي تليها، إلا إذا تم تقييم التعبير المنطقي if إلى false. القواعد المتعلقة بالأقواس المتعرجة هي نفسها. في تجربتنا، كتبنا "إذا كان الظلام شديدًا، قم بتشغيل مؤشر LED، وإلا قم بإيقاف تشغيل مؤشر LED".

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

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

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

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

ما هي المقاومات الضوئية التي يمكن شراؤها من المتاجر عبر الإنترنت

الأكثر شعبية و خيار بأسعار معقولةأجهزة الاستشعار الموجودة في السوق هي نماذج للإنتاج الضخم من الشركات الصينية، واستنساخ المنتجات من الشركة المصنعة VT. ليس من الممكن دائمًا معرفة من وماذا ينتج هذا المورد أو ذاك بالضبط، ولكن للبدء في استخدام المقاومات الضوئية، فإن الخيار الأبسط مناسب تمامًا.

يمكن نصح مستخدم Arduino المبتدئ بشراء وحدة صور جاهزة تبدو كما يلي:


تحتوي هذه الوحدة بالفعل على كافة العناصر الضرورية لـ اتصال سهلالمقاوم الضوئي إلى لوحة اردوينو. تنفذ بعض الوحدات دائرة مقارنة وتوفر مخرجًا رقميًا ومقاومًا للتحكم.

يمكن نصح أحد هواة الراديو الروس باللجوء إلى مستشعر PA الروسي. المتاحة للبيع هي FR1-3، FR1-4، الخ. - تم إنتاجها في العصر السوفيتي. ولكن على الرغم من هذا، فإن FR1-3 هو تفاصيل أكثر دقة. من هذا يأتي الفرق في السعر، بالنسبة لـ FR يطلبون ما لا يزيد عن 400 روبل. سيكلف FR1-3 أكثر من ألف روبل للقطعة الواحدة.

وضع علامات على المقاوم الضوئي

إن وضع العلامات الحديثة على النماذج المنتجة في روسيا أمر بسيط للغاية. أول حرفين هما PhotoResistor، والأرقام الموجودة بعد الشرطة تشير إلى رقم التطوير. FR -765 - مقاوم ضوئي، تطوير 765. عادة ما يتم وضع علامة مباشرة على جسم الجزء

يحتوي مستشعر VT على نطاق مقاومة موضح في مخطط العلامات. على سبيل المثال:

  • VT83N1 - 12-100 كيلو أوم (12 كيلو - مضاء، 100 كيلو - في الظلام)
  • VT93N2 - 48-500 كيلو أوم (48 كيلو - مضاء، 100 كيلو - في الظلام).

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

وفي المصنع، يتم ضبط الأجزاء على أطوال موجية تتراوح من الضوء الأحمر إلى الضوء الأخضر. معظم الناس أيضًا "يرون" الأشعة تحت الحمراء. يمكن للأجزاء الدقيقة بشكل خاص اكتشاف الضوء فوق البنفسجي.

مزايا وعيوب أجهزة الاستشعار

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

وتشمل المزايا البساطة وسهولة الوصول. يتيح لك تغيير المقاومة بشكل مباشر اعتمادًا على الضوء الساقط عليها التبسيط رسم بياني كهربائيروابط. يعتبر المقاوم الضوئي نفسه رخيصًا جدًا، ويتم تضمينه في العديد من مجموعات Arduino ومصمميه، وبالتالي فهو متاح لأي صانع Arduino مبتدئ تقريبًا.

توصيل المقاومة الضوئية بالاردوينو

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

مخطط اتصال مستشعر الضوء بـ Arduino بسيط للغاية. إذا استخدمنا مقاومًا ضوئيًا، فسيتم تنفيذ المستشعر في مخطط الاتصال كمقسم للجهد. يتغير أحد الذراعين اعتمادًا على مستوى الإضاءة، بينما يقوم الذراع الثاني بتزويد الجهد الكهربي للمدخل التناظري. في شريحة التحكم، يتم تحويل هذا الجهد إلى بيانات رقمية من خلال ADC. لأن عندما تنخفض مقاومة المستشعر عند سقوط الضوء عليه، فإن قيمة الجهد الساقط عبره ستنخفض أيضًا.

اعتمادًا على ذراع المقسم الذي وضعنا فيه المقاوم الضوئي، سيتم توفير الجهد الزائد أو المنخفض للمدخل التناظري. إذا تم توصيل إحدى ساقي المقاوم الضوئي بالأرض، فستتوافق قيمة الجهد الأقصى مع الظلام (مقاومة المقاوم الضوئي هي الحد الأقصى، وينخفض ​​الجهد بأكمله تقريبًا عبرها)، وستتوافق القيمة الدنيا مع الإضاءة الجيدة (المقاومة هي بالقرب من الصفر، والجهد هو الحد الأدنى). إذا قمنا بتوصيل ذراع المقاومة الضوئية بمصدر الطاقة، فسيكون السلوك عكس ذلك.

تركيب اللوحة نفسها لا ينبغي أن يسبب أي صعوبات. نظرًا لعدم وجود قطبية للمقاوم الضوئي، فيمكن توصيله من أي جانب، ويمكن لحامه باللوحة، أو توصيله بأسلاك باستخدام لوحة دائرة كهربائية، أو استخدامه مع مشابك عادية (مشابك التمساح) للتوصيل. مصدر الطاقة في الدائرة هو الاردوينو نفسه. مقاوم ضوئيإحدى الساقين متصلة بالأرض، والأخرى متصلة بلوحة ADC (في مثالنا - AO). نقوم بتوصيل مقاومة 10 كيلو أوم بنفس الساق. بطبيعة الحال، يمكنك توصيل المقاوم الضوئي ليس فقط بالطرف التناظري A0، ولكن أيضًا بأي طرف آخر.

بضع كلمات بخصوص المقاومة الإضافية 10 K. لها وظيفتان في دائرتنا: الحد من التيار في الدائرة وتشكيل الجهد المطلوبفي دائرة مع مقسم. يعد تقييد التيار ضروريًا في الحالة التي يؤدي فيها المقاوم الضوئي المضاء بالكامل إلى تقليل مقاومته بشكل حاد. ويتم توليد الجهد للقيم التي يمكن التنبؤ بها على المنفذ التناظري. في الواقع ل عملية عاديةمع مقاوماتنا الضوئية، تكون المقاومة التي تبلغ 1K كافية.

من خلال تغيير قيمة المقاوم يمكننا "تحويل" مستوى الحساسية إلى الجانبين "المظلم" و"الفاتح". لذلك، سوف يعطي 10K التبديل السريعبداية الضوء. في حالة 1K، سيكتشف مستشعر الضوء مستويات الإضاءة العالية بدقة أكبر.

إذا كنت تستخدم وحدة جاهزةمستشعر الضوء، فسيكون الاتصال أسهل. نقوم بتوصيل مخرج وحدة VCC بموصل 5V الموجود على اللوحة، GND بالأرض. نقوم بتوصيل المسامير المتبقية بموصلات Arduino.

إذا كانت اللوحة تحتوي على مخرج رقمي، فإننا نرسله إلى المنافذ الرقمية. إذا كان تناظريًا، فانتقل إلى التناظرية. في الحالة الأولى، سنتلقى إشارة الزناد - تم تجاوز مستوى الإضاءة (يمكن ضبط عتبة الزناد باستخدام مقاوم التعديل). ومن خلال الأطراف التناظرية سنكون قادرين على الحصول على قيمة جهد تتناسب مع مستوى الإضاءة الفعلي.

مثال على رسم تخطيطي لمستشعر الضوء على المقاوم الضوئي

لقد قمنا بتوصيل الدائرة بالمقاوم الضوئي إلى Arduino وتأكدنا من أن كل شيء تم بشكل صحيح. الآن كل ما تبقى هو برمجة وحدة التحكم.

إن كتابة رسم تخطيطي لمستشعر الضوء أمر بسيط للغاية. نحتاج فقط إلى إزالة قيمة الجهد الحالي من الطرف التناظري الذي يتصل به المستشعر. يتم ذلك باستخدام الدالة AnalogRead() التي نعرفها جميعًا. يمكننا بعد ذلك تنفيذ بعض الإجراءات حسب مستوى الضوء.

دعونا نكتب رسمًا تخطيطيًا لمستشعر الضوء الذي يقوم بتشغيل أو إيقاف تشغيل مؤشر LED المتصل وفقًا للدائرة التالية.

خوارزمية التشغيل هي كما يلي:

  • تحديد مستوى الإشارة من الدبوس التناظري.
  • نقارن المستوى بقيمة العتبة. الحد الأقصى للقيمة سوف يتوافق مع الظلام، والحد الأدنى للقيمة سوف يتوافق مع الحد الأقصى للإضاءة. دعونا نختار قيمة عتبة تساوي 300.
  • إذا كان المستوى أقل من العتبة، فهو مظلم، فأنت بحاجة إلى تشغيل LED.
  • بخلاف ذلك، قم بإيقاف تشغيل مؤشر LED.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) حلقة باطلة() ( int val =analogRead(PIN_PHOTO_SENSOR); Serial.println(val); if ( فال< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

من خلال تغطية المقاوم الضوئي (بيديك أو بجسم مقاوم للضوء)، يمكننا ملاحظة تشغيل وإيقاف تشغيل LED. من خلال تغيير معلمة العتبة في الكود، يمكننا إجبار المصباح الكهربائي على التشغيل/الإيقاف عند مستويات إضاءة مختلفة.

عند التثبيت، حاول وضع المقاوم الضوئي وLED بعيدًا عن بعضهما البعض قدر الإمكان بحيث يسقط ضوء أقل من LED الساطع على مستشعر الضوء.

مستشعر الضوء والتغيير السلس في سطوع الإضاءة الخلفية

يمكنك تعديل المشروع بحيث يتغير سطوع LED حسب مستوى الإضاءة. سنضيف التغييرات التالية إلى الخوارزمية:

  • سوف نقوم بتغيير سطوع المصباح الكهربائي عبر PWM، وإرسال القيم من 0 إلى 255 إلى الدبوس مع LED باستخدام AnalogWrite ().
  • لتحويل القيمة الرقمية لمستوى الضوء من مستشعر الضوء (من 0 إلى 1023) إلى نطاق PWM لسطوع LED (من 0 إلى 255)، سنستخدم وظيفة الخريطة ().

مثال للرسم:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() ( Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) حلقة باطلة() ( int val =analogRead(PIN_PHOTO_SENSOR); Serial.println(val); int ledPower = Map(val, 0, 1023, 0, 255); // تحويل القيمة الناتجة إلى مستوى إشارة PWM. كلما انخفضت قيمة الإضاءة، قلت الطاقة التي يجب أن نزودها إلى LED عبر PWM.analogWrite(PIN_LED, ledPower) ؛ // تغيير السطوع)

في حالة طريقة اتصال أخرى، حيث تكون الإشارة من المنفذ التناظري متناسبة مع درجة الإضاءة، ستحتاج أيضًا إلى "عكس" القيمة عن طريق طرحها من الحد الأقصى:

إنت فال = 1023 - تناظريريد (PIN_PHOTO_RESISTOR)؛

دائرة حساس الضوء باستخدام المقاوم الضوئي والمرحل

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

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); ) حلقة باطلة() ( int val =analogRead(PIN_PHOTO_SENSOR); if (val< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

خاتمة

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

في هذه التجربة، يجب أن يتم تشغيل مؤشر LED عندما ينخفض ​​مستوى الضوء إلى أقل من العتبة التي يحددها مقياس الجهد.

قائمة أجزاء التجربة

- 1 لوحة اردوينو أونو؛

- 1 لوح تجارب غير قابل للحام؛

- 1 إل إي دي؛

- 1 مقاوم ضوئي؛

- مقاوم واحد بقيمة اسمية 220 أوم، مقاوم واحد بقيمة اسمية 10 كيلو أوم؛

- 1 المقاوم المتغير (الجهد)؛

- 10 أسلاك ذكر-ذكر.

تفاصيل عن مهمة إضافية

1 LED إضافي؛

مقاوم واحد آخر بقيمة اسمية 220 أوم؛

2 أسلاك أخرى.

مخطط الرسم البياني

رسم تخطيطي على اللوح

رسم

تحميل رسم تخطيطي لاردوينو IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) حلقة باطلة() ( // قراءة مستوى الضوء. بالمناسبة، // يمكنك الإعلان عن متغير وتعيينه قيمة له مرة واحدة int lightness =analogRead(LDR_PIN); // اقرأ القيمة من مقياس الجهد، الذي نستخدمه لضبط // قيمة العتبة بين الظلام المشروط والضوء int عتبة =analogRead(POT_PIN); // أعلن عن المتغير المنطقي وقم بتعيين القيمة // "هل أصبح الظلام الآن". المتغيرات المنطقية، على عكس المتغيرات الصحيحة //، يمكن أن تحتوي على واحدة فقط من القيمتين: // صحيح أو خطأ. وتسمى هذه القيم // أيضًا منطقية. منطقية أيضًاDark = (lightness< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

شرح الكود

  • نحن نستخدم نوعًا جديدًا من المتغيرات - منطقية، والتي تخزن القيم فقط حقيقي (صحيح، 1) أو خطأ شنيع (كاذبة، 0). هذه القيم هي نتيجة تقييم التعبيرات المنطقية. في هذا المثال، التعبير المنطقي هو خفة< threshold . في اللغة البشرية يبدو هذا مثل: "الإضاءة تحت مستوى العتبة". سيكون مثل هذا البيان صحيحًا عندما تكون الإضاءة أقل من مستوى العتبة. يستطيع المتحكم الدقيق مقارنة قيم المتغيرات خفةو عتبةوالتي بدورها هي نتائج القياس، وحساب صدق التعبير المنطقي.
  • لقد وضعنا هذا التعبير المنطقي بين قوسين للتوضيح فقط. من الأفضل دائمًا كتابة تعليمات برمجية قابلة للقراءة. وفي حالات أخرى، يمكن أن تؤثر الأقواس على ترتيب العمليات، كما هو الحال في الحساب العادي.
  • في تجربتنا، سيكون التعبير المنطقي صحيحًا عندما تكون القيمة خفةأقل من القيمة عتبةلأننا استخدمنا المشغل < . يمكننا استخدام المشغلين > , <= , >= , = = , != والتي تعني "أكبر من" و"أقل من أو يساوي" و"أكبر من أو يساوي" و"يساوي" و"لا يساوي" على التوالي.
  • كن حذرًا بشكل خاص مع العامل المنطقي = = ولا تخلط بينه وبين عامل المهمة = . في الحالة الأولى نقوم بمقارنة قيم التعبيرات ونحصل على قيمة منطقية (صواب أو خطأ)، وفي الحالة الثانية نقوم بإسناد قيمة المعامل الأيمن إلى المعامل الأيسر. لا يعرف المترجم نوايانا ولن يصدر خطأ، ولكن يمكننا عن طريق الخطأ تغيير قيمة بعض المتغيرات ثم قضاء وقت طويل في البحث عن خطأ.
  • العامل الشرطي لولو") هي إحدى المفاتيح الأساسية في معظم لغات البرمجة. وبمساعدتها، لا يمكننا تنفيذ تسلسل محدد بدقة من الإجراءات فحسب، بل يمكننا أيضًا اتخاذ قرارات بشأن فرع الخوارزمية الذي يجب اتباعه، اعتمادًا على شروط معينة.
  • للتعبير المنطقي خفة< threshold هناك معنى: حقيقيأو خطأ شنيع. لقد حسبناها ووضعناها في متغير منطقي مظلمة جدا("مظلمة جدا") وبالتالي، يبدو أننا نقول "إذا كان الظلام شديدًا، فقم بتشغيل مؤشر LED"
  • وبنفس النجاح يمكننا أن نقول "إذا كانت الإضاءة أقل من مستوى العتبة، فقم بتشغيل مؤشر LED"، أي. حول إلى لوكل التعبير المنطقي:
إذا (خفة< threshold) { // ... }
  • وراء البيان الشرطي لويجب أن يكون هناك كتلة من التعليمات البرمجية التي يتم تنفيذها إذا كان التعبير المنطقي صحيحًا. لا تنسى كلا الأقواس المتعرجة {} !
  • إذا كان التعبير صحيحًا، فما علينا سوى التنفيذ واحد التعليمات، ويمكن كتابتها مباشرة بعد ذلك لو (…)بدون الأقواس المتعرجة:
إذا (خفة< threshold) digitalWrite(LED_PIN, HIGH);
  • المشغل أو العامل لويمكن تمديدها حسب التصميم آخر("خلاف ذلك"). لن يتم تنفيذ كتلة من التعليمات البرمجية أو عبارة واحدة تليها إلا إذا كان التعبير المنطقي موجودًا لوله معنى خطأ شنيع , « كذب" القواعد المتعلقة بالأقواس المتعرجة هي نفسها. في تجربتنا، كتبنا "إذا كان الظلام شديدًا، قم بتشغيل مؤشر LED، وإلا قم بإيقاف تشغيل مؤشر LED".

أسئلة لاختبار نفسك

  1. إذا قمنا بتركيب مقاوم ضوئي بين المدخل التناظري والأرضي، فسيعمل جهازنا في الاتجاه المعاكس: سوف يضيء مؤشر LED عندما تزيد كمية الضوء. لماذا؟
  2. ما هي نتيجة تشغيل الجهاز التي سنحصل عليها إذا سقط ضوء LED على المقاومة الضوئية؟
  3. إذا قمنا بتركيب المقاومة الضوئية كما ذكرنا في السؤال السابق، فكيف نحتاج إلى تغيير البرنامج حتى يعمل الجهاز بشكل صحيح؟
  4. لنفترض أن لدينا الرمز إذا (الشرط) (الإجراء؛). وفي أي الحالات سيتم ذلك؟ فعل ?
  5. في أي القيم ذتعبير س + ص > 0سيكون صحيحا إذا س> 0 ?
  6. هل من الضروري الإشارة إلى التعليمات التي يجب تنفيذها إذا كان الشرط موجودًا في البيان لوخطأ شنيع؟
  7. ما هو الفرق بين المشغل = = من المشغل = ?
  8. إذا استخدمنا البناء إذا (شرط) الإجراء 1؛ إجراء آخر 2؛هل يمكن أن يكون هناك موقف لا يتم فيه تنفيذ أي من الإجراءات؟ لماذا؟

مهام الحل المستقل

  1. أعد كتابة البرنامج دون استخدام المتغير مظلمة جدامع الحفاظ على وظائف الجهاز.
  2. أضف مؤشر LED آخر إلى الدائرة. أكمل البرنامج بحيث عندما تنخفض الإضاءة عن قيمة العتبة، يتم تشغيل مؤشر LED واحد، وعندما تنخفض الإضاءة عن نصف قيمة العتبة، يتم تشغيل كلا مؤشري LED.
  3. قم بتغيير الدائرة والبرنامج بحيث تعمل مصابيح LED وفقًا لنفس المبدأ، ولكنها تتوهج كلما زادت كثافة الضوء الذي يسقط على المقاوم الضوئي.




قمة