Isi kandungan:

Meneroka Ruang Warna: 6 Langkah
Meneroka Ruang Warna: 6 Langkah

Video: Meneroka Ruang Warna: 6 Langkah

Video: Meneroka Ruang Warna: 6 Langkah
Video: NIDJI - Laskar Pelangi (Official Music Video) 2024, Julai
Anonim
Meneroka Ruang Warna
Meneroka Ruang Warna

Mata kita melihat cahaya melalui reseptor yang sensitif terhadap warna merah, hijau, dan biru dalam spektrum visual. Orang telah menggunakan fakta ini untuk memberikan gambar warna melalui filem, televisyen, komputer, dan peranti lain selama seratus tahun yang lalu.

Pada paparan komputer atau telefon, gambar ditampilkan dalam banyak warna dengan mengubah intensitas LED merah, hijau, dan biru kecil yang saling bersebelahan di layar. Berjuta-juta warna yang berbeza dapat ditunjukkan dengan mengubah intensiti cahaya dari LED merah, hijau, atau biru.

Projek ini akan membantu anda meneroka ruang warna merah, hijau, dan biru (RGB) menggunakan Arduino, RGB LED, dan sedikit matematik.

Anda boleh memikirkan intensiti tiga warna, merah, hijau, dan biru, sebagai koordinat dalam kubus, di mana setiap warna berada di sepanjang satu paksi, dan ketiga-tiga paksi saling tegak lurus antara satu sama lain. Semakin dekat anda dengan titik sifar, atau asal, paksi, semakin sedikit warna itu ditunjukkan. Apabila nilai untuk ketiga-tiga warna berada pada titik sifar, atau asal, maka warnanya hitam, dan LED RGB mati sepenuhnya. Apabila nilai untuk ketiga-tiga warna setinggi mungkin (dalam kes kami, 255 untuk setiap tiga warna), LED RGB menyala sepenuhnya, dan mata melihat kombinasi warna ini sebagai putih.

Langkah 1: Ruang Warna RGB

Ruang Warna RGB
Ruang Warna RGB

Terima kasih kepada Kenneth Moreland kerana membenarkan penggunaan gambarnya yang bagus.

Kami ingin meneroka sudut kubus ruang warna 3D menggunakan LED RGB yang disambungkan ke Arduino, tetapi juga ingin melakukan ini dengan cara yang menarik. Kami dapat melakukannya dengan meletakkan tiga gelung (satu untuk warna merah, hijau dan biru), dan melalui setiap kombinasi warna yang mungkin, tetapi itu akan sangat membosankan. Pernahkah anda melihat corak Lissajous 2D pada osiloskop atau pertunjukan cahaya laser? Bergantung pada tetapannya, corak Lissajous boleh kelihatan seperti garis pepenjuru, bulatan, angka 8, atau corak seperti kupu-kupu runcing yang berputar perlahan. Corak lissajous dibuat dengan mengesan isyarat sinusoidal dua (atau lebih) pengayun yang diplot pada paksi x-y (atau, untuk kes kita, x-y-z atau R-G-B).

Langkah 2: Kapal Baik Lissajous

Kapal Baik Lissajous
Kapal Baik Lissajous

Corak Lissajous yang paling menarik muncul apabila frekuensi isyarat sinusoidal berbeza dengan jumlah yang sedikit. Dalam foto osiloskop di sini, frekuensi berbeza dengan nisbah 5 hingga 2 (kedua-duanya adalah nombor perdana). Corak ini merangkumi datarannya dengan cukup baik, dan masuk ke sudut dengan baik. Angka perdana yang lebih tinggi akan melakukan pekerjaan yang lebih baik lagi merangkumi alun-alun dan melangkah lebih jauh ke sudut.

Langkah 3: Tunggu - Bagaimana Kita Boleh Memacu LED Dengan Gelombang Sinusoidal?

Anda menangkap saya! Kami ingin meneroka ruang warna 3D yang berkisar dari mati (0) hingga penuh hingga (255) untuk setiap tiga warna, tetapi gelombang sinusoidal berbeza dari -1 hingga +1. Kami akan melakukan sedikit matematik dan pengaturcaraan di sini untuk mendapatkan apa yang kami mahukan.

  • Darabkan setiap nilai dengan 127 untuk mendapatkan nilai yang berkisar antara -127 hingga +127
  • Tambahkan 127 dan bulatkan setiap nilai untuk mendapatkan nilai antara 0 hingga 255 (cukup dekat hingga 255 untuk kita)

Nilai yang berkisar antara 0 hingga 255 dapat diwakili oleh angka byte tunggal (jenis data "char" dalam bahasa pengaturcaraan Arduino seperti C), jadi kami akan menyimpan memori dengan menggunakan representasi single-byte.

Tetapi bagaimana dengan sudut? Sekiranya anda menggunakan darjah, sudut dalam sinusoid berkisar antara 0 hingga 360. Sekiranya anda menggunakan radian, sudut berkisar antara 0 hingga 2 kali π ("pi"). Kami akan melakukan sesuatu yang sekali lagi menyimpan memori di Arduino kami, dan memikirkan bulatan yang terbahagi kepada 256 bahagian, dan mempunyai "sudut binari" yang berkisar antara 0 hingga 255, sehingga "sudut" untuk setiap warna dapat diwakili oleh nombor byte tunggal, atau karakter, di sini juga.

Arduino cukup menakjubkan seperti adanya, dan walaupun dapat mengira nilai sinusoidal, kita memerlukan sesuatu yang lebih cepat. Kami akan mengira terlebih dahulu nilainya, dan memasukkannya ke dalam susunan panjang 256 entri single-byte, atau nilai char dalam program kami (lihat deklarasi SineTable […] dalam program Arduino).

Langkah 4: Mari Bina Corak LIssajous 3D

Mari Bina Corak LIssajous 3D
Mari Bina Corak LIssajous 3D

Untuk menelusuri jadual pada frekuensi yang berbeza untuk masing-masing dari tiga warna, kami akan menyimpan satu indeks setiap warna, dan menambahkan ofset yang relatif utama pada setiap indeks ketika kami melangkah ke warna. Kami akan memilih 2, 5, dan 11 sebagai ofset relatif utama untuk nilai indeks Merah, Hijau, dan Biru. Keupayaan matematik dalaman Arduino akan membantu kita dengan membungkus secara automatik semasa kita menambah nilai ofset pada setiap indeks.

Langkah 5: Menggabungkan Ini Semua di Arduino

Menggabungkan Ini Semua di Arduino
Menggabungkan Ini Semua di Arduino

Sebilangan besar Arduino mempunyai sebilangan saluran PWM (atau modulasi lebar nadi). Kami memerlukan tiga di sini. Arduino UNO sangat bagus untuk ini. Malah mikrokontroler Atmel 8-bit (ATTiny85) berfungsi dengan hebat.

Setiap saluran PWM akan mendorong satu warna LED RGB menggunakan fungsi "AnalogWrite" Arduino, di mana intensiti warna pada setiap titik di sekitar kitaran sinusoidal diwakili oleh lebar nadi, atau kitaran tugas, dari 0 (semua mati) hingga 255 (semua dihidupkan). Mata kita melihat lebar nadi yang berbeza-beza ini, diulang cukup cepat, kerana intensiti atau kecerahan yang berbeza dari LED. Menggabungkan ketiga-tiga saluran PWM yang menggerakkan masing-masing tiga warna dalam LED RGB, kami dapat menampilkan 256 * 256 * 256, atau lebih dari enam belas juta warna!

Anda perlu menyiapkan Arduino IDE (Interactive Development Environment), dan menyambungkannya ke papan Arduino anda menggunakan kabel USB-nya. Jalankan pelompat dari output PWM 3, 5, dan 6 (pin pemproses 5, 11, dan 12) ke tiga perintang 1 KΩ (seribu ohm) pada papan proto atau pelindung proto anda, dan dari perintang ke LED R, G, dan pin B.

  • Sekiranya LED RGB adalah katod biasa (terminal negatif), kemudian jalankan wayar dari katod kembali ke pin GND di Arduino.
  • Sekiranya LED RGB adalah anod biasa (terminal positif), kemudian jalankan wayar dari anod ke pin + 5V di Arduino.

Lakaran Arduino akan berfungsi sama ada. Saya kebetulan menggunakan LED katod biasa SparkFun Electronics / COM-11120 RGB (gambar di atas, dari laman web SparkFun). Pin terpanjang adalah katod biasa.

Muat turun lakaran RGB-Instructable.ino, buka dengan Arduino IDE, dan uji menyusunnya. Pastikan untuk menentukan papan atau cip Arduino sasaran yang betul, kemudian muatkan program ke Arduino. Ia mesti dimulakan dengan segera.

Anda akan melihat kitaran LED RGB melalui seberapa banyak warna yang anda boleh namakan, dan berjuta-juta anda tidak boleh!

Langkah 6: Apa Seterusnya?

Kami baru sahaja mula meneroka RGB Color Space dengan Arduino kami. Beberapa perkara lain yang saya lakukan dengan konsep ini termasuk:

Menulis secara langsung ke register on-chip, bukannya menggunakan AnalogWrite, untuk benar-benar mempercepat

  • Mengubah litar supaya sensor jarak IR mempercepat atau melambatkan kitaran bergantung pada seberapa dekat anda
  • Memprogram mikrokontroler 8-pin Atmel ATTiny85 dengan bootloader Arduino dan lakaran ini

Disyorkan: