Mundarija:

Rang maydonini o'rganish: 6 qadam
Rang maydonini o'rganish: 6 qadam

Video: Rang maydonini o'rganish: 6 qadam

Video: Rang maydonini o'rganish: 6 qadam
Video: Fundament hisoblash, Kvadrat м², va Kuba chiqarish м³ Arxitektor va Ustalar uchun 2024, Iyul
Anonim
Rang kosmosini o'rganish
Rang kosmosini o'rganish

Bizning ko'zlarimiz yorug'lik spektridagi qizil, yashil va ko'k ranglarga sezgir bo'lgan retseptorlar orqali nurni sezadi. Odamlar so'nggi yuz yil ichida kino, televizor, kompyuter va boshqa qurilmalar orqali rangli tasvirlarni taqdim etish uchun bu faktdan foydalanganlar.

Kompyuter yoki telefon displeyida tasvirlar bir -birining yonida joylashgan qizil, yashil va ko'k rangli LEDlarning qizg'inligini o'zgartirib, ko'p ranglarda ko'rsatiladi. Qizil, yashil yoki ko'k LEDlardan yorug'lik qizg'inligini o'zgartirish orqali millionlab turli ranglarni ko'rsatish mumkin.

Ushbu loyiha Arduino, RGB LED va kichik matematikadan foydalanib, qizil, yashil va ko'k (RGB) ranglar oralig'ini o'rganishga yordam beradi.

Siz qizil, yashil va ko'k ranglarning intensivligini kubdagi koordinatalar sifatida tasavvur qilishingiz mumkin, bu erda har bir rang bitta o'q bo'ylab joylashgan va uchta o'q bir -biriga perpendikulyar. Siz o'qning nol nuqtasiga yoki kelib chiqishiga qanchalik yaqin bo'lsangiz, shuncha kam rang ko'rsatiladi. Qachonki uchta rangning qiymatlari nol nuqtada yoki kelib chiqish nuqtasida bo'lsa, u holda rang qora bo'ladi va RGB LED to'liq o'chadi. Qachonki uchta rangning qiymatlari iloji boricha yuqori bo'lsa (bizda uchta rangning har biri uchun 255), RGB LED to'liq yonadi va ko'z ranglarning bu kombinatsiyasini ko'z sifatida qabul qiladi.

1 -qadam: RGB rang maydoni

RGB rang maydoni
RGB rang maydoni

Kennet Morelandga o'zining chiroyli tasviridan foydalanishga ruxsat bergani uchun rahmat.

Biz 3D rangli kosmik kubning burchaklarini Arduino -ga ulangan RGB LED yordamida o'rganmoqchimiz, lekin buni qiziqarli tarzda qilishni xohlaymiz. Biz buni uchta halqa (har biri qizil, yashil va ko'k uchun) joylashtirib, har qanday rang kombinatsiyasidan o'tib bajarishimiz mumkin edi, lekin bu juda zerikarli bo'lardi. Siz osiloskop yoki lazer nurli shou? Sozlamalarga qarab, Lissajous naqsh diagonali chiziq, aylana, raqam 8 yoki sekin aylanuvchi, kapalakka o'xshash naqshga o'xshash bo'lishi mumkin. Lissajous naqshlar x-y (yoki bizning holatimizda x-y-z yoki R-G-B) o'qlariga chizilgan ikkita (yoki undan ko'p) osilatorlarning sinusoidal signallarini kuzatish orqali yaratiladi.

2 -qadam: Yaxshi kema Lissajous

Yaxshi kema Lissajous
Yaxshi kema Lissajous

Eng qiziqarli Lissajous naqshlar sinusoidal signallarning chastotalari oz miqdorda farq qilganda paydo bo'ladi. Fotosuratda osiloskopda chastotalar 5 dan 2 gacha farq qiladi (ikkalasi ham oddiy sonlar). Bu naqsh o'z maydonini juda yaxshi yopib qo'yadi va burchaklarga yaxshi kiradi. Yuqori boshlang'ich raqamlar maydonni yopish va burchaklarni yanada chuqurroq burish vazifasini bajaradi.

3 -qadam: kuting - sinusoidal to'lqinli LEDni qanday boshqarish mumkin?

Siz meni ushladingiz! Biz uchta rangning har biri uchun yopiq (0) dan to'liq (255) gacha bo'lgan 3D rang maydonini o'rganmoqchimiz, lekin sinusoidal to'lqinlar -1 dan +1 gacha o'zgarib turadi. Biz xohlagan narsaga erishish uchun bu erda kichik matematika va dasturlash bilan shug'ullanamiz.

  • -127 dan +127 gacha bo'lgan qiymatlarni olish uchun har bir qiymatni 127 ga ko'paytiring
  • 0 dan 255 gacha bo'lgan qiymatlarni olish uchun 127 qo'shing va har bir qiymatni aylantiring (biz uchun 255 ga yaqin)

0 dan 255 gacha bo'lgan qiymatlar bitta baytli raqamlar bilan ifodalanishi mumkin ("char" ma'lumot turi C-ga o'xshash Arduino dasturlash tilida), shuning uchun biz bitta baytli tasvir yordamida xotirani saqlaymiz.

Ammo burchaklar haqida nima deyish mumkin? Agar siz graduslardan foydalansangiz, sinusoiddagi burchaklar 0 dan 360 gacha. Agar siz radianlardan foydalansangiz, burchaklar 0 dan 2 martagacha di ("pi"). Biz yana Arduino -da xotirani saqlaydigan narsa qilamiz va 256 qismga bo'lingan 0 dan 255 gacha bo'lgan "ikkilik burchaklarga" ega bo'lgan doira haqida o'ylaymiz, shuning uchun har bir rang uchun "burchaklar" bo'lishi mumkin. bu erda ham bitta baytli raqamlar yoki belgilar bilan ifodalanadi.

Arduino xuddi shunday ajoyib va sinusoidal qiymatlarni hisoblay olsa ham, bizga tezroq narsa kerak. Biz qiymatlarni oldindan hisoblab chiqamiz va ularni 256 ta uzunlikdagi bitta baytli yoki char qiymatli dasturga joylashtiramiz (Arduino dasturidagi SineTable […] deklaratsiyasiga qarang).

4 -qadam: Keling, 3D Lissajous naqshini yarataylik

Keling, 3D Lissajous naqshini yarataylik
Keling, 3D Lissajous naqshini yarataylik

Jadvalni har uchta rang uchun har xil chastotada aylantirish uchun biz har bir rang uchun bitta indeksni saqlaymiz va ranglarni bosib o'tishda har bir indeksga nisbatan asosiy ofsetlarni qo'shamiz. Qizil, yashil va ko'k indeks qiymatlari uchun 2, 5 va 11 ni tanlaymiz. Arduino -ning ichki matematik qobiliyatlari, har bir indeksga ofset qiymatini qo'shganda, avtomatik ravishda o'rash orqali bizga yordam beradi.

5 -qadam: bularning barchasini Arduino -da birlashtirish

Bularning barchasini Arduino -ga qo'shish
Bularning barchasini Arduino -ga qo'shish

Ko'pgina Arduinolarda bir nechta PWM (yoki puls kengligi modulyatsiyasi) kanallari mavjud. Bu erda bizga uchta kerak bo'ladi. Buning uchun Arduino UNO juda yaxshi. Hatto kichik 8 bitli Atmel mikrokontroller (ATTiny85) ham ajoyib ishlaydi.

PWM kanallarining har biri Arduino "AnalogWrite" funktsiyasidan foydalangan holda RGB LEDning bitta rangini boshqaradi, bu erda sinusoidal tsiklning har bir nuqtasida rangning qizg'inligi 0 dan puls kengligi yoki ish aylanishi bilan ifodalanadi.) 255 gacha (barchasi yoqilgan). Bizning ko'zlarimiz turli xil puls kengliklarini, LEDning har xil intensivligi yoki yorqinligi kabi, etarlicha tez takrorlanadi. Uchta PWM kanalini birlashtirib, har uchta rangni RGB LED -da boshqaramiz, biz 256*256*256 yoki o'n olti milliondan ortiq rangni ko'rsatish imkoniyatiga ega bo'lamiz!

Siz Arduino IDE (Interaktiv rivojlanish muhiti) ni sozlashingiz va uni USB kabelidan foydalanib Arduino kartasiga ulashingiz kerak bo'ladi. PWM 3, 5 va 6 -chi chiqindilaridan (protsessor pinlari 5, 11 va 12) proto taxtangizdagi yoki proto -qalqoningizdagi uchta 1 KΩ (ming ohm) rezistorlarga va rezistorlardan LED R, G ga o'tkazing. va B pinlari.

  • Agar RGB LED umumiy katod (manfiy terminal) bo'lsa, u holda simni katoddan Arduino GND piniga qaytaring.
  • Agar RGB LED umumiy anod (musbat terminal) bo'lsa, u holda simni anoddan Arduino +5V piniga qaytaring.

Arduino eskizi har qanday usulda ishlaydi. Men SparkFun Electronics / COM-11120 RGB umumiy katotli LEDni ishlatdim (yuqoridagi rasmda, SparkFun veb-saytidan). Eng uzun pin umumiy katoddir.

RGB-Instructable.ino eskizini yuklab oling, uni Arduino IDE bilan oching va sinovdan o'tkazing. To'g'ri maqsadli Arduino kartasi yoki chipini ko'rsatganingizga ishonch hosil qiling, so'ngra dasturni Arduino -ga yuklang. U darhol ishga tushishi kerak.

Siz RGB LED tsiklini ko'rishingiz mumkin, shuncha ko'p ranglarni, va millionlab siz qila olmaysiz!

6 -qadam: Keyin nima bo'ladi?

Biz Arduino yordamida RGB rang maydonini o'rganishni boshladik. Men bu kontseptsiya bilan qilgan boshqa narsalar qatoriga quyidagilar kiradi:

Haqiqatan ham ishni tezlashtirish uchun AnalogWrite-ni ishlatish o'rniga, chipdagi registrlarga to'g'ridan-to'g'ri yozish

  • IQ yaqinlik sensori qanchalik yaqin bo'lishingizga qarab tsiklni tezlashtiradi yoki sekinlashtiradi, shunday qilib sxemani o'zgartirish
  • Arduino bootloader va bu eskiz bilan Atmel ATTiny85 8-pinli mikrokontrollerni dasturlash.

Tavsiya: