جدول المحتويات:

استكشاف مساحة اللون: 6 خطوات
استكشاف مساحة اللون: 6 خطوات

فيديو: استكشاف مساحة اللون: 6 خطوات

فيديو: استكشاف مساحة اللون: 6 خطوات
فيديو: شاهد ماذا حدث عندما قام رائد فضاء بفرك منشفته ف الفضاء #shorts 2024, يوليو
Anonim
استكشاف فضاء اللون
استكشاف فضاء اللون

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

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

سيساعدك هذا المشروع على استكشاف مساحة اللون الأحمر والأخضر والأزرق (RGB) باستخدام Arduino و RGB LED وقليل من الرياضيات.

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

الخطوة 1: مساحة ألوان RGB

مساحة ألوان RGB
مساحة ألوان RGB

شكراً لكينيث مورلاند للسماح له باستخدام صورته الجميلة.

نود استكشاف زوايا مكعب الفضاء اللوني ثلاثي الأبعاد باستخدام RGB LED المتصل بـ Arduino ، ولكننا نريد أيضًا القيام بذلك بطريقة مثيرة للاهتمام. يمكننا القيام بذلك عن طريق تداخل ثلاث حلقات (واحدة لكل من الأحمر والأخضر والأزرق) ، وتشغيل كل مجموعة ألوان ممكنة ، لكن هذا سيكون مملًا حقًا. عرض ضوء الليزر؟ اعتمادًا على الإعدادات ، يمكن أن يبدو نمط Lissajous كخط قطري ، أو دائرة ، أو شكل 8 ، أو نمط يشبه الفراشة المدببة التي تدور ببطء. يتم إنشاء أنماط Lissajous من خلال تتبع الإشارات الجيبية لاثنين (أو أكثر) من المذبذبات المرسومة على محاور x-y (أو ، في حالتنا ، x-y-z أو R-G-B).

الخطوة 2: السفينة الجيدة Lissajous

السفينة الجيدة Lissajous
السفينة الجيدة Lissajous

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

الخطوة 3: انتظر - كيف يمكننا قيادة مصباح بموجة جيبية؟

امسكت بي! نريد استكشاف مساحة الألوان ثلاثية الأبعاد التي تتراوح من إيقاف (0) إلى كامل (255) لكل لون من الألوان الثلاثة ، لكن الموجات الجيبية تختلف من -1 إلى +1. سنقوم ببعض الرياضيات والبرمجة هنا لنحصل على ما نريد.

  • اضرب كل قيمة في 127 للحصول على القيم التي تتراوح من -127 إلى +127
  • أضف 127 وقم بتقريب كل قيمة للحصول على قيم تتراوح من 0 إلى 255 (قريبة بدرجة كافية من 255 بالنسبة لنا)

يمكن تمثيل القيم التي تتراوح من 0 إلى 255 بأرقام أحادية البايت (نوع البيانات "char" في لغة البرمجة C-like Arduino) ، لذلك سنحفظ الذاكرة باستخدام التمثيل أحادي البايت.

لكن ماذا عن الزوايا؟ إذا كنت تستخدم الدرجات ، فإن الزوايا في نطاق الجيب من 0 إلى 360. إذا كنت تستخدم الراديان ، فإن الزوايا تتراوح من 0 إلى 2 مرات π ("pi"). سنفعل شيئًا يحفظ الذاكرة مرة أخرى في Arduino ، ونفكر في دائرة مقسمة إلى 256 جزءًا ، ولديها "زوايا ثنائية" تتراوح من 0 إلى 255 ، لذلك يمكن أن تكون "الزوايا" لكل لون ممثلة بأرقام أحادية البايت أو أحرف هنا أيضًا.

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

الخطوة 4: لنقم ببناء نموذج لايساجوس ثلاثي الأبعاد

لنقم ببناء نمط LIssajous ثلاثي الأبعاد
لنقم ببناء نمط LIssajous ثلاثي الأبعاد

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

الخطوة 5: وضع كل هذا معًا على Arduino

وضع كل هذا معًا على Arduino
وضع كل هذا معًا على Arduino

تحتوي معظم Arduinos على عدد من قنوات PWM (أو تعديل عرض النبض). سنحتاج ثلاثة هنا. يعد Arduino UNO رائعًا لهذا الغرض. حتى متحكم Atmel الصغير 8 بت (ATTiny85) يعمل بشكل رائع.

ستقود كل قناة من قنوات PWM لونًا واحدًا من RGB LED باستخدام وظيفة "AnalogWrite" في Arduino ، حيث يتم تمثيل كثافة اللون في كل نقطة حول الدورة الجيبية بعرض النبض أو دورة العمل ، من 0 (الكل متوقف) إلى 255 (الكل في). تدرك أعيننا هذه النبضات المتفاوتة في عرض النبض ، والتي تتكرر بسرعة كافية ، مثل شدة مختلفة ، أو سطوع ، من الصمام الثنائي الباعث للضوء. من خلال الجمع بين جميع قنوات PWM الثلاثة التي تقود كل لون من الألوان الثلاثة في RGB LED ، نحصل على القدرة على عرض 256 * 256 * 256 ، أو أكثر من ستة عشر مليون لون!

ستحتاج إلى إعداد Arduino IDE (بيئة التطوير التفاعلية) ، وتوصيله بلوحة Arduino باستخدام كابل USB الخاص به. قم بتشغيل وصلات العبور من مخرجات PWM 3 و 5 و 6 (دبابيس المعالج 5 و 11 و 12) إلى ثلاثة مقاومات 1 KΩ (ألف أوم) على اللوحة الأولية أو الدرع الأولي ، ومن المقاومات إلى LED R و G ، ودبابيس B.

  • إذا كان RGB LED عبارة عن كاثود شائع (طرف سالب) ، فقم بتشغيل سلك من الكاثود مرة أخرى إلى دبوس GND على Arduino.
  • إذا كان RGB LED عبارة عن أنود شائع (طرف موجب) ، فقم بتشغيل سلك من الأنود مرة أخرى إلى دبوس + 5V في Arduino.

سيعمل رسم Arduino في كلتا الحالتين. لقد استخدمت SparkFun Electronics / COM-11120 RGB LED الكاثود المشترك (في الصورة أعلاه ، من موقع الويب SparkFun). أطول دبوس هو الكاثود المشترك.

قم بتنزيل مخطط RGB-Instructable.ino وافتحه باستخدام Arduino IDE واختبر تجميعه. تأكد من تحديد لوحة أو شريحة Arduino الصحيحة ، ثم قم بتحميل البرنامج في Arduino. يجب أن تبدأ على الفور.

سترى دورة RGB LED من خلال العديد من الألوان التي يمكنك تسميتها ، والملايين التي لا يمكنك تسميتها!

الخطوة 6: ماذا بعد؟

لقد بدأنا للتو في استكشاف RGB Color Space باستخدام Arduino. تتضمن بعض الأشياء الأخرى التي قمت بها مع هذا المفهوم ما يلي:

الكتابة مباشرة إلى السجلات الموجودة على الرقاقة ، بدلاً من استخدام AnalogWrite ، لتسريع الأمور حقًا

  • تعديل الدائرة بحيث يسرع مستشعر القرب من الأشعة تحت الحمراء أو يبطئ الدورة اعتمادًا على مدى قربك
  • برمجة متحكم Atmel ATTiny85 ذي 8 سنون مع محمل الإقلاع من Arduino وهذا الرسم التخطيطي

موصى به: