İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-23 15:13
Bu gökkuşağı projesini, kontrollü rastgele efektler oluşturan çeşitli 'gürültü' tekniklerini kullanarak oluşturduk. Biraz renk ekleyerek bir gökkuşağı efekti üretilebilir. Arduino Nano ve 128x128 OLED ekran kullanır. Efektleri TFT kütüphanesini kullanarak gösterdik. Ayrıca ekmek tahtası ve birkaç tel gibi çeşitli bileşenler de kullandık.
Adım 1: Kablolama
En temel görev, OLED'in Arduino'ya kablolanmasıydı. GND ve VCC'yi breadboard üzerindeki ilgili buslara bağladık; SCL'den dijital pin 13'e; SDA'dan dijital pin 11'e; RES'den dijital pin 8'e; DC'den dijital pin 9'a; Arduino'da CS'den dijital pin 10'a ve son olarak BL'den 3.3V'a. Arduino'nun 5v ve GND pinlerini kullanarak tüm breadboard'a güç verebildik.
2. Adım: Pürüzsüz Gürültü
TFT ekranı için gereksinimleri başlattıktan sonra. Düzgün gürültü efekti yaratmak için önce temel bir gürültü işlevine ihtiyacımız vardı. Bu, iletilen x ve y değerlerine bağlı olarak 0 ile 1 arasında nispeten rastgele bir değer döndürür. Bir bilgisayarın asla gerçekten rastgele bir sonuç üretemeyeceğini ve bu rastgeleliğin yalnızca sayıyı mümkün olduğunca değiştirerek elde edildiğini unutmamak önemlidir., dolayısıyla denklemdeki çok büyük sayılar.
kayan gürültü (int x, int y){ int n; n = x + y * 57; n += (n << 13) ^ n; dönüş (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7ffffff) / 1073741824.0); }
Daha sonra gürültüyü başka bir işlevle 'düzeltiyoruz'. Bu, yalnızca fonksiyona geçirilen koordinatın sonucuna değil, aynı zamanda çevreleyen koordinatlara da dayalı bir değer üretilerek elde edilir. Bunun sonucunda birbirine yakın koordinatlar benzer bir değer üretir.
float smoothNoise(float x, float y){ float fractX = x - (int) x; kayan noktaY = y - (int) y; int x1 = ((int) (x) + gürültüGenişliği) % gürültüGenişliği; int y1 = ((int) (y) + noiseHeight) % noiseHeight; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + noiseHeight - 1) % noiseHeight; kayan değer = 0.0f; değer += fractX * fractY * gürültü(x1, y1); değer += (1 - fractX) * fractY * gürültü(x2, y1); değer += fractX * (1 - fractY) * gürültü(x1, y2); değer += (1 - fractX) * (1 - fractY) * gürültü(x2, y2); geri dönüş değeri; }
Adım 3: Pürüzsüz Gürültü Kullanan Efektler
Bununla iki efekt oluşturduk. Bunu yapmak için, OLED üzerindeki her pikselin içinden geçtik ve bu piksellerin x ve y koordinatlarına dayalı olarak rastgele bir gürültü değeri aldık. Bu efektlerden ilkini, oluşturulan değeri kullanarak bir renk seçerek ürettik ve o pikseli yukarıda belirtilen renkle renklendirdik. İkinci etki de benzer şekilde üretildi, ancak rengi, oluşturulan gürültü değeriyle de çarptık. Bu, desene daha gölgeli bir etki verdi. Kullanılan kod aşağıda gösterilmiştir:
void Noise2n3(bool Noisy){ for (int y = 0; y < noiseHeight; y++) { for (int x = 0; x 8) absNoise = 8; if (Gürültülü) setNoisyColour(renkler[absGürültü], gürültü); else setBlockColour(renkler[absGürültü]); TFTscreen.point(x,y); } } } void setNoisyColour(Colour color, float noise) { TFTscreen.stroke(color.red * noise, color.green * noise, color.blue * noise); } void setBlockColour(Colour color) { TFTscreen.stroke(color.red, color.green, color.blue); }
Adım 4: Rastgele Gradyan Etkileri
Rastgele bir gradyan oluşturan iki efekt vardır. İlk efekt, pikselleri rgb renklerine göre yerleştirir ve ekranda yavaş yavaş bir degrade deseni oluşturur. İkincisi, birinciyle aynı renkli pikselleri kullanır, ancak bunları sabit bir sıraya yerleştirir ve ekran boyunca çapraz bir gradyan oluşturur.
İşte ilki (renklere göre):
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]; for(int x = 0; x < 128; x++) { for(int y = 0; y < 128; y++) { int R_Düşük = R - ((x + y) / 4); if(R_Düşük = 255) { R_Yüksek = 254; } int R_Offset = rastgele(R_Düşük, R_Yüksek); int G_Düşük = G - ((x + y) / 4); if(G_Düşük = 255) { G_Yüksek = 254; } int G_Offset = rastgele(G_Düşük, G_Yüksek); int B_Düşük = B - ((x + y) / 4); if(B_Düşük <1) { B_Düşük = 0; } int B_Yüksek = B + ((x + y) / 4); if(B_Yüksek>= 255) { B_Yüksek = 254; } int B_Offset = rastgele(B_Düşük, B_Yüksek); int çok = 2; if (z == 1) çok = 1; TFTscreen.stroke(R_Offset * çoklu, G_Offset * çoklu, B_Offset * çoklu); 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))); } } } }
Ve ikincisi (daha düzenli etki):
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]; for(int x = 0; x < 128; x++) { for(int y = 0; y < 128; y++) { int R_Düşük = R - ((x + y) / 4); if(R_Düşük = 255) { R_Yüksek = 254; } int R_Offset = rastgele(R_Düşük, R_Yüksek); int G_Düşük = G - ((x + y) / 4); if(G_Düşük = 255) { G_Yüksek = 254; } int G_Offset = rastgele(G_Düşük, G_Yüksek); int B_Düşük = B - ((x + y) / 4); if(B_Düşük <1) { B_Düşük = 0; } int B_Yüksek = B + ((x + y) / 4); if(B_Yüksek>= 255) { B_Yüksek = 254; } int B_Offset = rastgele(B_Düşük, B_Yüksek); int çok = 2; if (z == 1) çok = 1; TFTscreen.stroke(R_Offset * çoklu, G_Offset * çoklu, B_Offset * çoklu); TFTscreen.point(x,y); } } } }
Adım 5: Nihai Sonuç
Sonunda, bu efektleri bir tür gökkuşağı 'slayt gösterisi'nde birleştirdik. Bunu başarmak için, bir süre döngüsünde her işlevi birbiri ardına çağırdık:
while (doğru) { Noise2n3(yanlış); Gürültü2n3(doğru); TFTscreen.background(0, 0, 0); Gürültü1(); Gürültü4(); }
Önerilen:
Arduino Gürültü Makinesi: 4 Adım
Arduino Gürültü Makinesi: Eski bir PC'yi parçalarken küçük bir hoparlör buldum. geri dönüşüm için ve düşündüm ki Arduino Tone() işlevini kullanmanın neye benzediğini göreceğim. Perdeyi kontrol etmek için bir adet 10Ω potansiyometre ile başladım ve biraz ses çıkarmaya başladım. Tone() işlevi
Gürültü~Rompler / Ağustosböceği ~: 6 Adım
Gürültü~Rompler / Ağustosböceği ~:
Güvenli Olmayan Gürültü Seviyesi Ölçer veya İşareti: 4 Adım (Resimlerle)
Güvensiz Gürültü Seviyesi Ölçer veya İşareti: İnsanların yaratıcı projelerine bakmayı seviyorum. Modern araçlar & teknoloji bize pek çok yaratıcı seçenek sunuyor. Yeni Zelanda'daki bir lisede ortaokul öğrencilerine zor malzemeler öğretiyorum, bu yüzden her zaman kendimi geliştiriyorum & yeni şeyler denemek. Bu
Güvenli Olmayan Gürültü Seviyesi Uyarı Sistemi: 11 Adım (Resimlerle)
Güvenli Olmayan Gürültü Seviyesi Uyarı Sistemi: Oshman Mühendislik Tasarım Mutfağı (OEDK), Rice Üniversitesi'ndeki en büyük maker alanıdır ve tüm öğrencilerin gerçek dünyadaki zorluklara çözümler tasarlaması ve prototiplemesi için bir alan sağlar. Bu amaca hizmet etmek için OEDK, bir dizi elektrikli el aletine ev sahipliği yapmaktadır
Tam Gökkuşağı Efekti ve Daha Fazlası Olan Gökkuşağı Kelime Saati: 13 Adım (Resimlerle)
Tam Gökkuşağı Efektli Gökkuşağı Kelime Saati ve Daha Fazlası: Hedefler1) Basit2) Pahalı değil3) Mümkün olduğunca enerji verimli Gökkuşağı efektine sahip Gökkuşağı Kelime Saati. Kelime Saatinde Bir Gülümseme. Basit IR uzaktan kumanda için Güncelleme 03-nov-18 LDR NeopixelsUpdate 01-jan-…'in Parlaklık Kontrolü