İçindekiler:

Renk Uzayını Keşfetmek: 6 Adım
Renk Uzayını Keşfetmek: 6 Adım

Video: Renk Uzayını Keşfetmek: 6 Adım

Video: Renk Uzayını Keşfetmek: 6 Adım
Video: Gezegenler - Eğitici Çocuk Şarkıları 2024, Temmuz
Anonim
Renk Uzayını Keşfetmek
Renk Uzayını Keşfetmek

Gözlerimiz ışığı görsel spektrumdaki kırmızı, yeşil ve mavi renklere duyarlı reseptörler aracılığıyla algılar. İnsanlar bu gerçeği film, televizyon, bilgisayarlar ve diğer cihazlar aracılığıyla yaklaşık yüz yıl boyunca renkli görüntüler sağlamak için kullandılar.

Bir bilgisayar veya telefonun ekranında, ekranda yan yana bulunan minik kırmızı, yeşil ve mavi LED'lerin yoğunluğu değiştirilerek görüntüler birçok renkte görüntülenir. Kırmızı, yeşil veya mavi LED'lerden gelen ışığın yoğunluğu değiştirilerek milyonlarca farklı renk gösterilebilir.

Bu proje, bir Arduino, bir RGB LED ve biraz matematik kullanarak kırmızı, yeşil ve mavi (RGB) renk uzayını keşfetmenize yardımcı olacaktır.

Üç rengin, kırmızı, yeşil ve mavinin yoğunluğunu, her rengin bir eksen boyunca olduğu ve üç eksenin de birbirine dik olduğu bir küpteki koordinatlar olarak düşünebilirsiniz. Eksenin sıfır noktasına veya orijine ne kadar yakınsanız, o renk o kadar az gösterilir. Üç rengin tümü için değerler sıfır noktasında veya orijin olduğunda, renk siyahtır ve RGB LED'i tamamen kapalıdır. Üç rengin tümü için değerler olabildiğince yüksek olduğunda (bizim durumumuzda, üç rengin her biri için 255), RGB LED tamamen yanar ve göz bu renk kombinasyonunu beyaz olarak algılar.

Adım 1: RGB Renk Alanı

RGB Renk Alanı
RGB Renk Alanı

Güzel imajını kullanma izni için Kenneth Moreland'a teşekkürler.

Arduino'ya bağlı bir RGB LED kullanarak 3B renk alanı küpünün köşelerini keşfetmek istiyoruz, ancak bunu ilginç bir şekilde yapmak istiyoruz. Bunu üç döngüyü (birer kırmızı, yeşil ve mavi için) iç içe geçirerek ve olası tüm renk kombinasyonlarından geçerek yapabilirdik, ancak bu gerçekten sıkıcı olurdu. lazer ışık gösterisi? Ayarlara bağlı olarak, bir Lissajous deseni çapraz çizgi, daire, 8 rakamı veya yavaş dönen sivri kelebek benzeri bir desen gibi görünebilir. Lissajous desenleri, x-y (veya bizim durumumuz için, x-y-z veya R-G-B) eksenlerinde çizilen iki (veya daha fazla) osilatörün sinüzoidal sinyallerinin izlenmesiyle oluşturulur.

2. Adım: İyi Gemi Lissajous

İyi Gemi Lissajous
İyi Gemi Lissajous

En ilginç Lissajous kalıpları, sinüzoidal sinyallerin frekansları az miktarda farklılık gösterdiğinde ortaya çıkar. Buradaki osiloskop fotoğrafında, frekanslar 5'e 2 oranında farklılık gösterir (her ikisi de asal sayıdır). Bu desen karesini oldukça iyi kaplar ve köşelere güzel girer. Daha yüksek asal sayılar, kareyi kaplamak ve köşelere daha da fazla sokmak için daha iyi bir iş çıkarırdı.

Adım 3: Bekleyin - Sinüzoidal Dalgalı Bir LED'i Nasıl Sürebiliriz?

Beni yakaladın! Üç rengin her biri için kapalı (0) ile tam açık (255) arasında değişen 3B renk uzayını keşfetmek istiyoruz, ancak sinüzoidal dalgalar -1 ile +1 arasında değişir. Burada istediğimizi elde etmek için biraz matematik ve programlama yapacağız.

  • -127 ile +127 arasında değişen değerler elde etmek için her değeri 127 ile çarpın
  • 127 ekleyin ve 0 ile 255 arasında değişen değerler elde etmek için her değeri yuvarlayın (bizim için 255'e yeterince yakın)

0 ile 255 arasında değişen değerler, tek baytlı sayılarla (C benzeri Arduino programlama dilinde "char" veri türü) temsil edilebilir, bu nedenle tek baytlık gösterimi kullanarak bellekten tasarruf edeceğiz.

Ama açılar nasıl? Derece kullanıyorsanız, 0 ile 360 arasında sinüzoid aralığındaki açılar. Radyan kullanıyorsanız, açılar 0 ile 2 çarpı π ("pi") arasındadır. Arduino'muzda tekrar hafızayı koruyan bir şey yapacağız ve 256 parçaya bölünmüş ve 0 ile 255 arasında değişen "ikili açılara" sahip bir daire düşüneceğiz, böylece renklerin her biri için "açılar" olabilir. burada da tek baytlık sayılar veya karakterlerle temsil edilir.

Arduino, olduğu gibi oldukça şaşırtıcı ve sinüzoidal değerleri hesaplayabilmesine rağmen, daha hızlı bir şeye ihtiyacımız var. Değerleri önceden hesaplayacağız ve bunları programımızda 256 girişli uzun tek baytlık diziye veya char değerlerine koyacağız (Arduino programında SineTable[…] bildirimine bakın).

Adım 4: Bir 3D LIssajous Modeli Oluşturalım

Bir 3D LIssajous Modeli Oluşturalım
Bir 3D LIssajous Modeli Oluşturalım

Tabloda üç rengin her biri için farklı bir frekansta dolaşmak için, renk başına bir dizin tutacağız ve renkler arasında adım adım ilerlerken her dizine nispeten asal ofsetler ekleyeceğiz. Kırmızı, Yeşil ve Mavi indeks değerleri için görece asal ofsetler olarak 2, 5 ve 11'i seçeceğiz. Arduino'nun kendi dahili matematik yetenekleri, her bir dizine ofset değerini eklerken otomatik olarak sarmalayarak bize yardımcı olacaktır.

Adım 5: Bunları Arduino'da Bir Araya Getirmek

Bunları Arduino'da Bir Araya Getirmek
Bunları Arduino'da Bir Araya Getirmek

Çoğu Arduino'nun bir dizi PWM (veya darbe genişlik modülasyonu) kanalı vardır. Burada üç taneye ihtiyacımız olacak. Bir Arduino UNO bunun için harika. Küçük bir 8 bitlik Atmel mikro denetleyicisi (ATTiny85) bile harika bir şekilde çalışıyor.

PWM kanallarının her biri, Arduino'nun "AnalogWrite" işlevini kullanarak, sinüzoidal döngü etrafındaki her noktadaki rengin yoğunluğunun 0'dan (tümü kapalı) bir darbe genişliği veya görev döngüsü ile temsil edildiği RGB LED'in bir rengini sürecektir.) - 255 (tümü açık). Gözlerimiz, yeterince hızlı tekrarlanan bu değişen darbe genişliklerini LED'in farklı yoğunlukları veya parlaklıkları olarak algılar. Üç rengin her birini bir RGB LED'de çalıştıran üç PWM kanalını birleştirerek, 256*256*256 veya on altı milyondan fazla renk görüntüleme yeteneğine sahibiz!

Arduino IDE'yi (Etkileşimli Geliştirme Ortamı) kurmanız ve USB kablosunu kullanarak Arduino kartınıza bağlamanız gerekir. PWM çıkışları 3, 5 ve 6'dan (işlemci pinleri 5, 11 ve 12) proto kartınızdaki veya proto kalkanınızdaki üç 1 KΩ (bin ohm) dirence ve dirençlerden LED R, G'ye jumper çalıştırın, ve B pinleri.

  • RGB LED'i ortak bir katot (negatif terminal) ise, katottan Arduino'daki GND pinine bir kablo çekin.
  • RGB LED'i ortak bir anot (pozitif terminal) ise, anottan Arduino'daki +5V pinine bir kablo çekin.

Arduino taslağı her iki şekilde de çalışacaktır. Bir SparkFun Electronics / COM-11120 RGB ortak katot LED'i kullandım (yukarıda SparkFun web sitesinden resmedilmiştir). En uzun pim ortak katottur.

RGB-Instructable.ino taslağını indirin, Arduino IDE ile açın ve derlemeyi test edin. Doğru hedef Arduino kartını veya çipini belirttiğinizden emin olun, ardından programı Arduino'ya yükleyin. Hemen başlamalıdır.

RGB LED'in adlandırabildiğiniz kadar çok renk ve sayamayacağınız milyonlarca renk arasından geçtiğini göreceksiniz!

Adım 6: Sırada Ne Var?

Arduino ile RGB Renk Uzayını keşfetmeye başladık. Bu konseptle yaptığım diğer bazı şeyler şunlardır:

İşleri gerçekten hızlandırmak için AnalogWrite kullanmak yerine doğrudan çip üzerindeki kayıtlara yazma

  • Devreyi, bir IR yakınlık sensörünün, ne kadar yaklaştığınıza bağlı olarak döngüyü hızlandıracak veya yavaşlatacak şekilde değiştirme
  • Bir Atmel ATTiny85 8-pin mikrodenetleyiciyi Arduino bootloader ile programlamak ve bu çizim

Önerilen: