Բովանդակություն:

Գունավոր տարածքի ուսումնասիրություն. 6 քայլ
Գունավոր տարածքի ուսումնասիրություն. 6 քայլ

Video: Գունավոր տարածքի ուսումնասիրություն. 6 քայլ

Video: Գունավոր տարածքի ուսումնասիրություն. 6 քայլ
Video: ԳՈՒՆԱՅԻՆ ԹԵՍՏ, ՈՐԸ ԿԱՍԻ ՔՈ ՀՈԳԵՎՈՐ ՏԱՐԻՔԸ 2024, Նոյեմբեր
Anonim
Գունավոր տարածության ուսումնասիրություն
Գունավոր տարածության ուսումնասիրություն

Մեր աչքերը ընկալում են լույսը ընկալիչների միջոցով, որոնք զգայուն են տեսողական սպեկտրի կարմիր, կանաչ և կապույտ գույների նկատմամբ: Մարդիկ այս փաստն օգտագործել են ֆիլմերի, հեռուստատեսության, համակարգիչների և այլ սարքերի միջոցով գունավոր պատկերներ տրամադրելու համար մոտ հարյուր տարվա ընթացքում:

Համակարգչի կամ հեռախոսի էկրանին պատկերները ցուցադրվում են բազմաթիվ գույներով `փոխելով կարմիր, կանաչ և կապույտ LED- ների ինտենսիվությունը, որոնք գտնվում են էկրանի կողքին: Կարմիր, կանաչ կամ կապույտ LED- ներից լույսի ինտենսիվությունը փոխելով կարող են ցուցադրվել միլիոնավոր տարբեր գույներ:

Այս նախագիծը կօգնի ձեզ ուսումնասիրել կարմիր, կանաչ և կապույտ (RGB) գունային տարածքը ՝ օգտագործելով Arduino, RGB LED և մի փոքր մաթեմատիկա:

Դուք կարող եք մտածել երեք գույնի ՝ կարմիր, կանաչ և կապույտ ինտենսիվությունների մասին ՝ որպես խորանարդի կոորդինատներ, որտեղ յուրաքանչյուր գույն գտնվում է մեկ առանցքի երկայնքով, և բոլոր երեք առանցքները ուղղահայաց են միմյանց վրա: Որքան մոտ եք առանցքի զրոյական կետին կամ սկզբնաղբյուրին, այնքան քիչ է այդ գույնը: Երբ բոլոր երեք գույների արժեքները գտնվում են զրոյական կետում կամ սկզբնաղբյուրում, ապա գույնը սև է, իսկ RGB LED- ն ամբողջովին անջատված է: Երբ բոլոր երեք գույների արժեքներն այնքան բարձր են, որքան հնարավոր է (մեր դեպքում ՝ 255 երեք գույներից յուրաքանչյուրի համար), RGB LED- ն ամբողջությամբ միացված է, և աչքը գույների այս համադրությունը ընկալում է որպես սպիտակ:

Քայլ 1: RGB գունային տարածք

RGB գունային տարածք
RGB գունային տարածք

Շնորհակալություն Kenneth Moreland- ին ՝ իր գեղեցիկ կերպարն օգտագործելու թույլտվության համար:

Մենք կցանկանայինք ուսումնասիրել 3D գունային տարածության խորանարդի անկյունները ՝ օգտագործելով Arduino- ին միացված RGB LED, բայց նաև ցանկանում ենք դա անել հետաքրքիր ձևով: Մենք կարող էինք դա անել ՝ երեք օղակ տեղադրելով (մեկը ՝ կարմիրի, կանաչի և կապույտի համար), և յուրաքանչյուր հնարավոր գունային համադրությամբ անցնելը, բայց դա իսկապես ձանձրալի կլիներ: լազերային շոու? Կախված պարամետրերից, Lissajous- ի օրինակը կարող է ունենալ անկյունագծային գծի, շրջանակի, 8-ի պատկեր կամ դանդաղ պտտվող թիթեռի նմանվող դանդաղ պտտվող նախշ: Lissajous օրինաչափությունները ստեղծվում են x-y (կամ, մեր դեպքում, x-y-z կամ R-G-B) առանցքների վրա գծված երկու (կամ ավելի) տատանումների սինուսոիդային ազդանշանների հետևման միջոցով:

Քայլ 2. Լավ նավը Lissajous

Լավ նավը Lissajous
Լավ նավը Lissajous

Առավել հետաքրքիր Lissajous նախշերը հայտնվում են, երբ սինուսոիդային ազդանշանների հաճախականությունները փոքր չափով տարբերվում են: Այստեղ տատանումների լուսանկարում հաճախականությունները տարբերվում են 5 -ից 2 հարաբերությամբ (երկուսն էլ պարզ թվեր են): Այս օրինակը բավականին լավ է ծածկում իր քառակուսին և գեղեցիկ է մտնում անկյունները: Բարձրագույն պարզ թվերն ավելի լավ աշխատանք կունենային ՝ ծածկելով քառակուսին և ավելի խորը թեքվելով դեպի անկյունները:

Քայլ 3. Սպասեք. Ինչպե՞ս կարող ենք LED վարել սինուսոիդ ալիքով:

Դու բռնեցիր ինձ! Մենք ցանկանում ենք ուսումնասիրել 3D գունային տարածությունը, որը տատանվում է անջատված (0) -ից մինչև ամբողջական (255) երեք գույներից յուրաքանչյուրի համար, սակայն սինուսոիդալ ալիքները տատանվում են -1 -ից +1 -ի սահմաններում: Մենք այստեղ մի փոքր մաթեմատիկա և ծրագրավորում ենք անելու ՝ մեր ուզածին հասնելու համար:

  • Յուրաքանչյուր արժեքը բազմապատկեք 127 -ով `ստանալու արժեքներ, որոնք տատանվում են -127 -ից +127 -ի սահմաններում
  • Ավելացրեք 127 և կլորացրեք յուրաքանչյուր արժեք ՝ 0 -ից 255 -ի սահմաններում արժեքներ ստանալու համար (մեզ համար բավական մոտ 255 -ին)

0-ից 255-ի սահմաններում գտնվող արժեքները կարող են ներկայացվել մեկ բայթ թվերով (տվյալների «տեսակ» C- ի նման Arduino ծրագրավորման լեզվում), այնպես որ մենք կպահպանենք հիշողությունը ՝ օգտագործելով մեկ բայթ ներկայացում:

Բայց ինչ վերաբերում է անկյուններին: Եթե դուք օգտագործում եք աստիճաններ, ապա sinusoid- ի անկյունները տատանվում են 0 -ից 360 -ի սահմաններում: Եթե դուք օգտագործում եք ռադիաններ, ապա անկյունները տատանվում են 0 -ից 2 անգամ π («pi»): Մենք կանենք մի բան, որը կրկին կպահպանի մեր հիշողությունը մեր Արդուինոյում, և կմտածենք 256 մասի բաժանված շրջանակի մասին և կունենանք «երկուական անկյուններ», որոնք տատանվում են 0 -ից 255 -ի սահմաններում, այնպես որ յուրաքանչյուր գույնի «անկյունները» կարող են լինել այստեղ ներկայացված է նաև մեկ բայթ թվերով կամ տառերով:

Arduino- ն իր տեսքով բավականին զարմանալի է, և չնայած այն կարող է հաշվարկել սինուսոիդալ արժեքները, մեզ ավելի արագ բան է պետք: Մենք նախապես կհաշվենք արժեքները և դրանք կդնենք 256 մուտքագրված մեր ծրագրում մեկ բայթ կամ char արժեքների երկար տեսականու մեջ (տե՛ս Arduino ծրագրի SineTable […] հայտարարագիրը):

Քայլ 4: Եկեք կառուցենք եռանդուն 3D օրինաչափություն

Եկեք կառուցենք 3D Lisssajous օրինաչափություն
Եկեք կառուցենք 3D Lisssajous օրինաչափություն

Երեք գույներից յուրաքանչյուրի համար աղյուսակը տարբեր հաճախականությամբ շրջելու համար մենք կպահպանենք մեկ ինդեքս մեկ գույնի համար և գույների միջով անցնելիս յուրաքանչյուր ինդեքսին կավելացնենք համեմատաբար առաջնային փոխհատուցումներ: Մենք կընտրենք 2, 5 և 11 -ը որպես կարմիր, կանաչ և կապույտ ինդեքսի արժեքների համեմատաբար առաջնային փոխհատուցում: Arduino- ի սեփական ներքին մաթեմատիկական կարողությունները կօգնեն մեզ ՝ ինքնաբերաբար փաթաթվելով, երբ յուրաքանչյուր ինդեքսին ավելացնում ենք օֆսեթ արժեքը:

Քայլ 5: Այս ամենը միասին դնել Arduino- ի վրա

Այս ամենը միասին դնելով Arduino- ի վրա
Այս ամենը միասին դնելով Arduino- ի վրա

Arduinos- ի մեծ մասն ունի մի շարք PWM (կամ զարկերակի լայնության մոդուլյացիա) ալիքներ: Մեզ երեքը պետք կգան այստեղ: Arduino UNO- ն հիանալի է դրա համար: Նույնիսկ մի փոքր 8-բիթանոց Atmel միկրոկոնտրոլերը (ATTiny85) աշխատում է առասպելական:

PWM ալիքներից յուրաքանչյուրը կշարժի RGB LED- ի մեկ գույն ՝ օգտագործելով Arduino- ի «AnalogWrite» գործառույթը, որտեղ սինուսոիդալ ցիկլի շուրջ յուրաքանչյուր կետի գույնի ինտենսիվությունը ներկայացված է զարկերակի լայնությամբ կամ աշխատանքային ցիկլով 0 -ից (բոլորը անջատված է) մինչև 255 (բոլորը միացված): Մեր աչքերը ընկալում են այս զարկերակի տարբեր լայնությունները, որոնք կրկնվում են բավական արագ, որպես LED- ի տարբեր ինտենսիվություններ կամ պայծառություններ: Երեք գույներից յուրաքանչյուրը RGB լուսադիոդով համատեղելով բոլոր երեք PWM ալիքները, մենք ստանում ենք 256*256*256 կամ ավելի քան տասնվեց միլիոն գույներ ցուցադրելու հնարավորություն:

Դուք պետք է ստեղծեք Arduino IDE (Ինտերակտիվ զարգացման միջավայր) և միացրեք այն ձեր Arduino տախտակին ՝ օգտագործելով նրա USB մալուխը: Գործարկեք թռիչքներ PWM 3, 5 և 6 ելքերից (պրոցեսորային կապում 5, 11 և 12) մինչև երեք 1 KΩ (հազար օմ) ռեզիստորներ ձեր նախատախտակի կամ պրոտո վահանի վրա, իսկ դիմադրիչներից մինչև LED R, G, և B կապում:

  • Եթե RGB LED- ը սովորական կաթոդ է (բացասական տերմինալ), ապա կաթոդից մի մետաղալար անցեք դեպի Arduino- ի GND կապը:
  • Եթե RGB LED- ը սովորական անոդ է (դրական տերմինալ), ապա անոդից մի մետաղալար անցեք դեպի Arduino- ի +5V կապը:

Arduino- ի էսքիզը կաշխատի ցանկացած դեպքում: Ես պատահաբար օգտագործեցի SparkFun Electronics / COM-11120 RGB ընդհանուր կաթոդ LED (նկարը ՝ վերևում, SparkFun վեբ կայքից): Ամենաերկար քորոցը սովորական կաթոդն է:

Ներբեռնեք RGB-Instructable.ino ուրվագիծը, բացեք այն Arduino IDE- ով և փորձարկեք կազմեք այն: Համոզվեք, որ նշեք Arduino- ի ճիշտ թիրախը կամ չիպը, այնուհետև ծրագիրը բեռնեք Arduino- ում: Այն պետք է անմիջապես սկսվի:

Դուք կտեսնեք RGB LED ցիկլը այնքան գույներով, որքան կարող եք անվանել, իսկ միլիոնավորները ՝ ոչ:

Քայլ 6: Ի՞նչ է հաջորդը:

Մենք նոր ենք սկսել ուսումնասիրել RGB գունային տարածքը մեր Arduino- ով: Որոշ այլ բաներ, որոնք ես արել եմ այս հայեցակարգի հետ, ներառում են.

Ուղղակիորեն գրել չիպային գրանցամատյաններին, AnalogWrite- ի փոխարեն, իրերն իսկապես արագացնելու համար

  • Շրջանակի փոփոխում այնպես, որ IR հարևանության տվիչը արագացնի կամ դանդաղեցնի ցիկլը ՝ կախված նրանից, թե որքան մոտ եք մոտենում
  • Atmel ATTiny85 8-պին միկրոկառավարիչի ծրագրավորում Arduino բեռնիչով և այս էսքիզով

Խորհուրդ ենք տալիս: