Mündəricat:

Rəng Məkanını Kəşf edin: 6 addım
Rəng Məkanını Kəşf edin: 6 addım

Video: Rəng Məkanını Kəşf edin: 6 addım

Video: Rəng Məkanını Kəşf edin: 6 addım
Video: Pərdə arxası #2 - Fahişə həyatı - uşaqlar baxmasın 2024, Noyabr
Anonim
Rəng Məkanını Kəşf edin
Rəng Məkanını Kəşf edin

Gözlərimiz vizual spektrdə qırmızı, yaşıl və mavi rənglərə həssas olan reseptorlar vasitəsilə işığı qəbul edir. İnsanlar son yüz il ərzində film, televiziya, kompüter və digər qurğular vasitəsilə rəngli görüntülər təqdim etmək üçün bu həqiqəti istifadə etdilər.

Bir kompüter və ya telefonun ekranında, görüntülər ekranda bir -birinin yanında olan kiçik qırmızı, yaşıl və mavi LED -lərin intensivliyini dəyişdirərək bir çox rəngdə göstərilir. Qırmızı, yaşıl və ya mavi LED -lərdən işığın intensivliyi dəyişdirilərək milyonlarla fərqli rəng göstərilə bilər.

Bu layihə Arduino, RGB LED və kiçik bir riyaziyyat istifadə edərək qırmızı, yaşıl və mavi (RGB) rəng sahəsini araşdırmağa kömək edəcək.

Qırmızı, yaşıl və mavi olan üç rəngin intensivliyini, hər rəngin bir ox boyunca olduğu və hər üç oxun bir -birinə dik olduğu bir kubdakı koordinatlar kimi düşünə bilərsiniz. Eksenin sıfır nöqtəsinə və ya mənşəyinə nə qədər yaxın olsanız, o rəng daha az göstərilir. Hər üç rəng üçün dəyərlər sıfır nöqtəsində və ya mənşəyində olduqda, rəng qara olur və RGB LEDi tamamilə sönür. Hər üç rəngin dəyərləri bacardıqları qədər yüksək olduqda (bizim vəziyyətimizdə üç rəngin hər biri üçün 255), RGB LED tamamilə yanır və göz bu rəng birləşməsini ağ kimi qəbul edir.

Addım 1: RGB Rəng Məkanı

RGB Rəng Məkanı
RGB Rəng Məkanı

Kenneth Moreland -a gözəl görüntüsünü istifadə etməyə icazə verdiyi üçün təşəkkür edirəm.

Arduino -ya qoşulmuş bir RGB LED -dən istifadə edərək 3D rəngli kosmik kubun künclərini araşdırmaq istərdik, həm də bunu maraqlı bir şəkildə etmək istərdik. Üç döngəni (hər biri qırmızı, yaşıl və mavi üçün) içəri qoyaraq və mümkün olan hər rəng kombinasiyasından keçərək edə bilərdik, amma bu çox darıxdırıcı olardı. Osiloskopda və ya lazer işıq şousu? Ayarlardan asılı olaraq, Lissajous naxışı diaqonal xətt, dairə, rəqəm 8 və ya yavaş-yavaş fırlanan sivri kəpənək kimi naxışa bənzəyə bilər. Lissajous nümunələr, x-y (və ya bizim vəziyyətimiz üçün x-y-z və ya R-G-B) oxları üzərində qurulmuş iki (və ya daha çox) osilatorun sinusoidal siqnallarını izləməklə yaradılır.

Addım 2: Yaxşı Gəmi Lissajous

Yaxşı Gəmi Lissajous
Yaxşı Gəmi Lissajous

Ən maraqlı Lissajous nümunələri sinusoidal siqnalların tezliyi az miqdarda fərqləndikdə ortaya çıxır. Buradakı osiloskop fotoşəkildə tezliklər 5 ilə 2 nisbətində fərqlənir (hər ikisi də sadə ədədlərdir). Bu model öz meydanını olduqca yaxşı örtür və künclərə gözəl daxil olur. Daha yüksək ədədlər, meydanı örtmək və künclərə daha da soxmaq üçün daha yaxşı bir iş görərdi.

Addım 3: Gözləyin - Sinusoidal Dalğa ilə Bir LED -i Necə Sürə bilərik?

Məni tutdun! Üç rəngin hər biri üçün (0) tamdan (255) qədər dəyişən 3D rəng məkanını araşdırmaq istəyirik, lakin sinusoidal dalğalar -1 ilə +1 arasında dəyişir. İstədiyimizi əldə etmək üçün burada kiçik bir riyaziyyat və proqramlaşdırma edəcəyik.

  • -127 ilə +127 arasında dəyişən dəyərlər əldə etmək üçün hər bir dəyəri 127 ilə çarpın
  • 127 əlavə edin və 0 -dan 255 -ə qədər olan dəyərləri əldə etmək üçün hər bir dəyəri yuvarlayın (bizim üçün 255 -ə yaxın)

0-dan 255-ə qədər olan dəyərlər tək baytlı nömrələrlə (C kimi Arduino proqramlaşdırma dilində "char" məlumat növü) təmsil oluna bilər, buna görə də tək baytlı təsvirdən istifadə edərək yaddaşa qənaət edəcəyik.

Bəs açılar? Bir dərəcə istifadə edirsinizsə, sinusoiddəki açılar 0 ilə 360 arasındadır. Radian istifadə edirsinizsə, açılar 0 ilə 2 dəfə range ("pi") arasında dəyişir. Yenidən Arduino yaddaşımızı qoruyacaq bir şey edəcəyik və 256 hissəyə bölünmüş bir dairə düşünəcəyik və 0 ilə 255 arasında dəyişən "ikili açılara" sahibik, buna görə rənglərin hər biri üçün "açılar" ola bilər. burada da tək baytlı nömrələrlə və ya işarələrlə təmsil olunur.

Arduino olduğu kimi olduqca gözəldir və sinusoidal dəyərləri hesablaya bilsə də, daha sürətli bir şeyə ehtiyacımız var. Dəyərləri əvvəlcədən hesablayacağıq və proqramımızda 256 girişdən ibarət uzun bir bayt və ya char dəyərlərinə qoyacağıq (Arduino proqramında SineTable […] bəyannaməsinə baxın).

Addım 4: Gəlin, 3D -dən çox olmayan bir nümunə yaradaq

Gəlin, 3D Lissajous Nümunə Yarataq
Gəlin, 3D Lissajous Nümunə Yarataq

Üç rəngin hər biri üçün fərqli bir tezlikdə cədvəldə gəzmək üçün rəng başına bir indeks saxlayacağıq və rəngləri keçdikcə hər bir indeksə nisbətən əsas ofsetlər əlavə edəcəyik. Qırmızı, Yaşıl və Mavi indeks dəyərləri üçün nisbətən əsas kompensasiya olaraq 2, 5 və 11 seçəcəyik. Arduino -nun öz daxili riyazi qabiliyyətləri, hər bir indeksə ofset dəyərini əlavə edərkən avtomatik olaraq dolanaraq bizə kömək edəcək.

Addım 5: Bunların hamısını Arduinoya qoyun

Bunların hamısını Arduino -ya qoyun
Bunların hamısını Arduino -ya qoyun

Əksər Arduinolarda bir neçə PWM (və ya nəbz genişliyi modulyasiyası) kanalı var. Burada üçə ehtiyacımız var. Bunun üçün bir Arduino UNO əladır. Hətta kiçik bir 8 bitlik Atmel mikro nəzarətçisi (ATTiny85) inanılmaz dərəcədə işləyir.

PWM kanallarının hər biri, Arduino'nun "AnalogWrite" funksiyasından istifadə edərək RGB LED -in bir rəngini idarə edəcək, burada sinusoidal dövrünün hər nöqtəsindəki rəngin intensivliyi 0 -dan nəbz genişliyi və ya vəzifə dövrü ilə təmsil olunur.) 255 -ə (hamısı açıqdır). Gözlərimiz, LED -in fərqli intensivliyi və ya parlaqlığı olaraq kifayət qədər tez təkrarlanan bu dəyişən nəbz genişliklərini qəbul edir. RGB LED -də üç rəngin hər birini idarə edən hər üç PWM kanalını birləşdirərək 256*256*256 və ya on altı milyondan çox rəng göstərmək imkanı əldə edirik!

Arduino IDE (İnteraktiv İnkişaf Ortamı) qurmalı və USB kabelindən istifadə edərək Arduino lövhəsinə qoşmalısınız. PWM 3, 5 və 6 çıxışlarından (prosessor pinləri 5, 11 və 12) proto lövhənizdə və ya proto qalxanınızdakı üç 1 KΩ (min ohm) rezistora və rezistorlardan LED R, G -yə qədər işləyin. və B pinləri.

  • RGB LED ümumi bir katoddursa (mənfi terminal), o zaman katoddan Arduino üzərindəki GND pininə qədər bir tel çəkin.
  • RGB LED ümumi bir anoddursa (pozitiv terminal), o zaman anoddan Arduino üzərindəki +5V pininə qədər bir tel çəkin.

Arduino eskizi hər iki şəkildə də işləyəcək. Bir SparkFun Electronics / COM-11120 RGB ümumi katot LEDindən istifadə etdim (yuxarıdakı şəkil, SparkFun veb saytından). Ən uzun pin ümumi katoddur.

RGB-Instructable.ino eskizini yükləyin, Arduino IDE ilə açın və test tərtib edin. Doğru hədəf Arduino lövhəsini və ya çipini təyin etdiyinizə əmin olun, sonra proqramı Arduinoya yükləyin. Dərhal başlamalıdır.

Adlandıra biləcəyiniz qədər çox rəngdə RGB LED dövrəsini görəcəksiniz və milyonlarca adam edə bilməzsiniz!

Addım 6: Sonrakı Nədir?

Arduino ilə RGB Rəng Məkanını kəşf etməyə yeni başladıq. Bu konsepsiya ilə etdiyim digər işlər arasında:

İşi sürətləndirmək üçün AnalogWrite istifadə etmək əvəzinə birbaşa çip qeydlərinə yazmaq

  • Bir IR yaxınlıq sensoru, nə qədər yaxınlaşdığınıza bağlı olaraq dövrəni sürətləndirir və ya yavaşlatır ki, dövrə dəyişdirin
  • Arduino bootloader və bu eskiz ilə bir Atmel ATTiny85 8 pinli mikrokontrolörün proqramlaşdırılması

Tövsiyə: