جدول المحتويات:
- الخطوة 1: الأسلاك
- الخطوة الثانية: ضوضاء سلسة
- الخطوة 3: التأثيرات باستخدام الضجيج السلس
- الخطوة 4: تأثيرات التدرج العشوائي
- الخطوة 5: النتيجة النهائية
فيديو: عرض ضوضاء قوس قزح بتقنية TFT من Arduino: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
لقد أنشأنا مشروع قوس قزح هذا باستخدام تقنيات "ضوضاء" مختلفة ، والتي تخلق تأثيرات عشوائية محكومة. بإضافة بعض الألوان ، يمكن إنتاج تأثير قوس قزح. يستخدم Arduino Nano وشاشة OLED بحجم 128 × 128. عرضنا التأثيرات باستخدام مكتبة TFT. استخدمنا أيضًا بعض المكونات المتنوعة مثل لوح الخبز وبعض الأسلاك.
الخطوة 1: الأسلاك
كانت المهمة الأساسية هي توصيل أسلاك OLED بـ Arduino. قمنا بتوصيل GND و VCC بالحافلات المعنية على لوح الخبز ؛ SCL إلى رقم التعريف الشخصي 13 ؛ SDA إلى الرقم الرقمي 11 ؛ RES إلى الرقم الرقمي 8 ؛ DC إلى الرقم الرقمي 9 ؛ CS إلى الرقم الرقمي 10 وأخيراً BL إلى 3.3V على Arduino. باستخدام دبابيس 5v و GND من Arduino ، تمكنا من تشغيل لوحة الخبز بالكامل.
الخطوة الثانية: ضوضاء سلسة
بعد تهيئة متطلبات شاشة TFT. لإنشاء تأثير ضوضاء سلس ، احتجنا أولاً إلى وظيفة ضوضاء أساسية. يُرجع هذا قيمة عشوائية نسبيًا بين 0 و 1 بناءً على قيم x و y التي تم تمريرها. من المهم ملاحظة أن الكمبيوتر لا يمكنه أبدًا إنتاج نتيجة عشوائية حقًا ، ويتم تحقيق هذه العشوائية فقط عن طريق تغيير الرقم قدر الإمكان ، ومن هنا تأتي الأعداد الكبيرة جدًا في المعادلة.
ضوضاء عائمة (int x، int y) {int n؛ ن = س + ص * 57 ؛ ن + = (ن << 13) ^ ن ؛ إرجاع (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0) ؛ }
ثم نقوم بـ "تلطيف" الضوضاء بوظيفة أخرى. يتم تحقيق ذلك من خلال إنتاج قيمة لا تستند فقط إلى النتيجة من الإحداثيات التي تم تمريرها إلى الوظيفة ، ولكن أيضًا على الإحداثيات المحيطة. نتيجة لذلك ، تنتج الإحداثيات القريبة من بعضها البعض قيمة مماثلة.
float smoothNoise (float x، float y) {float fractX = x - (int) x؛ تعويم fractY = y - (int) y ؛ int x1 = ((int) (x) + NoiseWidth)٪ NoiseWidth ؛ int y1 = ((int) (y) + NoiseHeight)٪ NoiseHeight ؛ int x2 = (x1 + NoiseWidth - 1)٪ NoiseWidth ؛ int y2 = (y1 + NoiseHeight - 1)٪ NoiseHeight ؛ قيمة تعويم = 0.0f ؛ القيمة + = fractX * fractY * الضوضاء (x1 ، y1) ؛ القيمة + = (1 - fractX) * fractY * الضوضاء (x2 ، y1) ؛ القيمة + = fractX * (1 - fractY) * الضوضاء (x1 ، y2) ؛ القيمة + = (1 - fractX) * (1 - fractY) * الضوضاء (x2 ، y2) ؛ قيمة الإرجاع؛ }
الخطوة 3: التأثيرات باستخدام الضجيج السلس
مع هذا أنشأنا تأثيرين. للقيام بذلك ، قمنا بإجراء حلقات عبر كل بكسل على OLED وأخذنا قيمة ضوضاء عشوائية بناءً على إحداثيات x و y لهذه البكسلات. أول هذه التأثيرات أنتجناها باستخدام القيمة التي تم إنشاؤها لاختيار لون ، وقمنا بتلوين هذا البكسل باللون المذكور أعلاه. تم إنتاج التأثير الثاني بطريقة مماثلة ، لكننا قمنا أيضًا بضرب اللون بقيمة الضوضاء الناتجة. أعطى هذا النمط تأثيرًا أكثر تظليلًا. يظهر الرمز المستخدم أدناه:
void Noise2n3 (bool Noisy) {لـ (int y = 0؛ y <NoiseHeight؛ y ++) {for (int x = 0؛ x 8) absNoise = 8 ؛ إذا (صاخبة) setNoisyColour (الألوان [absNoise] ، الضوضاء) ؛ آخر setBlockColour (الألوان [absNoise]) ؛ TFTscreen.point (x، y) ؛ }}} void setNoisyColour (Color color، floatنسية) {TFTscreen.stroke (colour.red * الضوضاء، colour.green * Noise، colour.blue * Noise)؛ } void setBlockColour (Color color) {TFTscreen.stroke (colour.red، colour.green، colour.blue)؛ }
الخطوة 4: تأثيرات التدرج العشوائي
هناك نوعان من التأثيرات التي تنتج تدرج عشوائي. يضع التأثير الأول وحدات البكسل بالنسبة إلى لون rgb الخاص بهم ، مما يؤدي ببطء إلى عرض نمط التدرج على الشاشة. تستخدم الثانية نفس وحدات البكسل الملونة مثل الأولى ، ولكنها تضعها في ترتيب ثابت ، مما يؤدي إلى إنشاء تدرج قطري على طول الشاشة.
ها هو الأول (بناءً على الألوان):
void Noise1 () {for (int z = 0؛ z <3؛ z ++) {TFTscreen.background (0، 0، 0)؛ int CurrentColour [3] [3] = {{64، 35، 26}، {24، 64، 34}، {20، 18، 64}} ؛ R = CurrentColour [z] [0] ، G = CurrentColour [z] [1] ، B = CurrentColour [z] [2] ، لـ (int x = 0؛ x <128؛ x ++) {for (int y = 0؛ y <128؛ y ++) {int R_Lower = R - ((x + y) / 4) ؛ إذا (R_Lower = 255) {R_Higher = 254 ؛ } int R_Offset = random (R_Lower، R_Higher) ؛ int G_Lower = G - ((x + y) / 4) ؛ إذا (G_Lower = 255) {G_Higher = 254 ؛ } int G_Offset = عشوائي (G_Lower ، G_Higher) ؛ int B_Lower = B - ((x + y) / 4) ؛ إذا (B_Lower <1) {B_Lower = 0 ؛ } int B_Higher = B + ((x + y) / 4) ؛ إذا (B_Higher> = 255) {B_Higher = 254 ؛ } int B_Offset = random (B_Lower، B_Higher) ؛ int مولت = 2 ؛ إذا (ض == 1) متعدد = 1 ؛ TFTscreen.stroke (R_Offset * mult ، G_Offset * mult ، B_Offset * mult) ؛ TFTscreen.point ((R_Offset * (B_Offset / 32)) ، (G_Offset * (B_Offset / 32))) ؛ TFTscreen.point ((G_Offset * (B_Offset / 32)) ، (R_Offset * (B_Offset / 32))) ؛ TFTscreen.point ((B_Offset * (G_Offset / 32)) ، (R_Offset * (G_Offset / 32))) ؛ }}}}
والثاني (التأثير الأكثر تنظيماً):
void Noise4 () {for (int z = 0؛ z <3؛ z ++) {TFTscreen.background (0، 0، 0)؛ int CurrentColour [3] [3] = {{64، 35، 26}، {24، 64، 34}، {20، 18، 64}} ؛ R = CurrentColour [z] [0] ، G = CurrentColour [z] [1] ، B = CurrentColour [z] [2] ، لـ (int x = 0؛ x <128؛ x ++) {for (int y = 0؛ y <128؛ y ++) {int R_Lower = R - ((x + y) / 4) ؛ إذا (R_Lower = 255) {R_Higher = 254 ؛ } int R_Offset = random (R_Lower، R_Higher) ؛ int G_Lower = G - ((x + y) / 4) ؛ إذا (G_Lower = 255) {G_Higher = 254 ؛ } int G_Offset = عشوائي (G_Lower ، G_Higher) ؛ int B_Lower = B - ((x + y) / 4) ؛ إذا (B_Lower <1) {B_Lower = 0 ؛ } int B_Higher = B + ((x + y) / 4) ؛ إذا (B_Higher> = 255) {B_Higher = 254 ؛ } int B_Offset = random (B_Lower، B_Higher) ؛ int مولت = 2 ؛ إذا (ض == 1) متعدد = 1 ؛ TFTscreen.stroke (R_Offset * mult ، G_Offset * mult ، B_Offset * mult) ؛ TFTscreen.point (x، y) ؛ }}}}
الخطوة 5: النتيجة النهائية
في النهاية ، قمنا بدمج هذه التأثيرات في نوع من "عرض الشرائح" لأقواس قزح. لتحقيق ذلك ، قمنا ببساطة باستدعاء كل دالة بعد الأخرى في حلقة while:
بينما (صواب) {Noise2n3 (خطأ) ؛ Noise2n3 (صحيح) ؛ TFTscreen.background (0 ، 0 ، 0) ؛ Noise1 () ؛ الضوضاء 4 () ؛ }
موصى به:
نرد قوس قزح: 6 خطوات (مع صور)
قوس قزح النرد: هذا يجعل صندوق ألعاب النرد مع 5 قوالب مكونة من smd LEDs في 5 ألوان. يسمح البرنامج الذي يقودها بأوضاع ألعاب مختلفة مع تضمين نرد متعدد. يسمح مفتاح رئيسي واحد باختيار اللعبة ودحرجة النرد. مفاتيح فردية بجوار جهاز
Digispark & WS2812 عجلة قوس قزح في صندوق: 4 خطوات (مع صور)
Digispark & WS2812 Rainbow Wheel in a Box: تم إنشاء هذا المشروع الصغير حول صندوق خشبي منحوت بشكل رائع مقاس 10x6x5 سم وجدته في أحد المتاجر ، وأفضل ميزة له ، والتي لم يتم التقاطها بشكل صحيح بالكاميرا ، هي أن تضيء بمشرق مشبع. الألوان ، وجوانب الغطاء المنحوت بالأشجار
DIY شجرة قوس قزح RGB ليد: 4 خطوات
DIY شجرة قوس قزح RGB ليد: تشرفت بمقابلتك مرة أخرى. اليوم أشارككم كيفية صنع ضوء ليلي جميل. تستخدم الأضواء الليلية Rainbow RGB Led لتغيير الألوان بنفسها. سيتم تشغيل الضوء تلقائيًا عندما يحل الظلام. المكونات الضرورية التي سأدرجها أدناه ، أتمنى
ساعة قوس قزح للرياضيات والفيزياء: 3 خطوات (بالصور)
ساعة قوس قزح للرياضيات والفيزياء: منذ فترة ، كانت لدي فكرة لإنشاء ساعة فيزيائية / رياضية خاصة بي ، لذلك بدأت في تصميمها في إنكسكيب. كل ساعة ، من 1 إلى 12 ، استبدلت بصيغة الفيزياء / الرياضيات: 1 - معادلة أويلر 2 - التكامل 3 - الدالة المثلثية 4 - تكامل المثلثات
ساعة كلمة قوس قزح بتأثير قوس قزح كامل والمزيد: 13 خطوة (مع صور)
ساعة كلمة قوس قزح بتأثير قوس قزح كامل والمزيد: الأهداف 1) بسيط 2) غير باهظ 3) موفر للطاقة بقدر الإمكان ساعة كلمة قوس قزح مع تأثير قوس قزح كامل. التحكم في سطوع NeopixelsUpdate 01-jan