Мазмұны:

Түс кеңістігін зерттеу: 6 қадам
Түс кеңістігін зерттеу: 6 қадам

Бейне: Түс кеңістігін зерттеу: 6 қадам

Бейне: Түс кеңістігін зерттеу: 6 қадам
Бейне: Басқа тышты деген осы 😡 2024, Шілде
Anonim
Түс кеңістігін зерттеу
Түс кеңістігін зерттеу

Біздің көздер сәулені көру спектріндегі қызыл, жасыл және көк түстерге сезімтал рецепторлар арқылы қабылдайды. Адамдар бұл фактіні соңғы жүз жыл ішінде фильм, теледидар, компьютер және басқа құрылғылар арқылы түрлі -түсті суреттермен қамтамасыз ету үшін қолданды.

Компьютерде немесе телефонның дисплейінде суреттер экранда бір -біріне жақын орналасқан кішкентай қызыл, жасыл және көк жарық диодтарының қарқындылығын өзгерту арқылы көптеген түстерде көрсетіледі. Миллиондаған түрлі түстерді қызыл, жасыл немесе көк жарық диодтарынан жарық қарқындылығын өзгерту арқылы көрсетуге болады.

Бұл жоба Arduino, RGB светодиоды мен кішкене математиканы пайдаланып қызыл, жасыл және көк (RGB) түс кеңістігін зерттеуге көмектеседі.

Сіз қызыл, жасыл және көк түстің қарқындылығын текшедегі координаталар деп ойлай аласыз, онда әр түс бір ось бойында, ал үш ось бір -біріне перпендикуляр орналасқан. Осьтің нөлдік нүктесіне немесе шығу тегіне неғұрлым жақын болсаңыз, түс аз болады. Егер барлық үш түстің мәндері нөлдік нүктеде немесе бастапқы нүктеде болса, онда түс қара болады, ал RGB жарық диоды толығымен сөнеді. Барлық үш түстің мәндері мүмкіндігінше жоғары болғанда (біздің жағдайда үш түстің әрқайсысы үшін 255), RGB светодиоды толық қосылады, ал көз түстердің бұл комбинациясын қабылдайды.

1 -қадам: RGB түс кеңістігі

RGB түс кеңістігі
RGB түс кеңістігі

Кеннет Мореландқа өзінің жақсы бейнесін пайдалануға рұқсат бергені үшін рахмет.

Біз Arduino -ға қосылған RGB жарықдиодты көмегімен 3D түсті ғарыштық текшенің бұрыштарын зерттегіміз келеді, сонымен қатар мұны қызықты етіп жасағымыз келеді. Біз мұны үш ілмекті ұяға салу арқылы жасай аламыз (әрқайсысы қызылға, жасылға және көкке), және түстердің барлық мүмкін комбинациясынан өту арқылы, бірақ бұл өте скучно болар еді. Осциллографта 2D Lissajous үлгісін көргенсіз бе? лазерлік жарық шоуы? Параметрлерге байланысты Lissajous үлгісі қиғаш сызыққа, шеңберге, фигураға 8 немесе көбелекке ұқсас баяу айналатын өрнекке ұқсауы мүмкін. Лиссаузды үлгілер x-y (немесе біздің жағдайда x-y-z немесе R-G-B) осьтеріне салынған екі (немесе одан да көп) осциллятордың синусоидальды сигналдарын бақылау арқылы құрылады.

2 -қадам: Lissajous жақсы кемесі

Жақсы кеме Lissajous
Жақсы кеме Lissajous

Ең қызықты Lissajous үлгілері синусоидалы сигналдардың жиіліктері аз мөлшерде ерекшеленген кезде пайда болады. Осциллограф фотосуретінде жиіліктер 5 -тен 2 -ге дейінгі арақатынаспен ерекшеленеді (екеуі де жай сандар). Бұл өрнек өз алаңын жақсы жабады және бұрыштарға жақсы енеді. Жоғарғы сандар алаңды жабу және одан әрі бұрыштарға кіргізу үшін жақсы жұмыс жасайды.

3 -қадам: Күте тұрыңыз - біз синусоидальды толқынмен жарықдиодты қалай жүргізе аламыз?

Сіз мені ұстадыңыз! Біз үш түстің әрқайсысы үшін 0 -ден толық қосуға (255) дейінгі 3D түс кеңістігін зерттегіміз келеді, бірақ синусоидальды толқындар -1 -ден +1 -ге дейін өзгереді. Біз мұнда қалаған нәрсеге жету үшін кішкене математика мен бағдарламалауды жүргізбекпіз.

  • -127 -ден +127 -ге дейінгі мәндерді алу үшін әр мәнді 127 -ге көбейтіңіз
  • 127 қосыңыз және 0 -ден 255 -ке дейінгі мәндерді алу үшін әр мәнді дөңгелектеңіз (біз үшін 255 -ке жақын)

0-ден 255-ке дейінгі мәндер бір байтты сандармен ұсынылуы мүмкін (C түріндегі Arduino бағдарламалау тіліндегі «char» деректер түрі), сондықтан біз бір байтты ұсыну арқылы жадты сақтаймыз.

Бірақ бұрыштар туралы не деуге болады? Егер сіз градус қолдансаңыз, синусоиданың бұрыштары 0 -ден 360 -қа дейін. Егер сіз радианды қолдансаңыз, бұрыштар 0 -ден 2 -ге дейін π («pi») аралығында болады. Біз қайтадан Arduino -да есте сақтайтын нәрсені жасаймыз және 256 бөлікке бөлінген шеңберді ойлап көреміз және 0 -ден 255 -ке дейінгі «екілік бұрыштары» бар, сондықтан түстердің әрқайсысының «бұрыштары» болуы мүмкін. мұнда да бір байтты сандармен немесе таңбалармен ұсынылған.

Arduino өте керемет, және ол синусоидальды мәндерді есептей алатын болса да, бізге тезірек нәрсе қажет. Біз мәндерді алдын ала есептеп шығарамыз және оларды 256 жазбадан тұратын бір байтты немесе char мәндерінің бағдарламасына енгіземіз (Arduino бағдарламасындағы SineTable […] декларациясын қараңыз).

4 -қадам: 3D Lissajous үлгісін құрайық

3D Lissajous үлгісін құрайық
3D Lissajous үлгісін құрайық

Үш түстің әрқайсысы үшін әр түрлі жиілікте кестені айналдыру үшін, біз бір түске бір индексті сақтаймыз және түстерді аралаған сайын әр индекске салыстырмалы бастапқы ығысуларды қосамыз. Біз 2, 5 және 11 -ді қызыл, жасыл және көк индекс мәндерінің салыстырмалы негізгі есептері ретінде таңдаймыз. Ардуиноның ішкі математикалық мүмкіндіктері әр индекске ығысу мәнін қосқанда автоматты түрде орау арқылы бізге көмектеседі.

5 -қадам: Осының барлығын Arduino -ға қосыңыз

Мұның барлығын Arduino -ға қосу
Мұның барлығын Arduino -ға қосу

Көптеген Arduino -да PWM (немесе импульстік ені модуляциясы) арналары бар. Бізге мұнда үшеуі қажет. Бұл үшін Arduino UNO тамаша. Тіпті кішкене 8 биттік Atmel микроконтроллері (ATTiny85) керемет жұмыс істейді.

PWM арналарының әрқайсысы Arduino -ның «AnalogWrite» функциясын қолдана отырып, RGB светодиоды бір түске айналдырады, мұнда синусоидальды циклдің әр нүктесіндегі түс қарқындылығы импульстік ені немесе жұмыс циклімен 0 -ден (барлығы өшірілген)) 255 дейін (барлығы қосылады). Біздің көздер импульстің әр түрлі енін қабылдайды, олар жеткілікті жылдамдықпен жарық диодты әр түрлі қарқындылықта немесе жарықтықта қабылдайды. RGB жарықдиодты үш түстің әрқайсысын басқаратын барлық PWM арналарын біріктіре отырып, біз 256*256*256 немесе он алты миллионнан астам түстерді көрсету мүмкіндігіне ие боламыз!

Сізге Arduino IDE (Interactive Development Environment) орнатып, оны USB кабелі арқылы Arduino тақтасына қосу керек. PWM 3, 5 және 6 шығуларынан (процессорлық түйреуіштер 5, 11 және 12) прото тақтасындағы немесе прото қалқандағы 1 КОм (мың ом) үш резисторға дейін, резистордан LED, R, G дейін және В түйреуіштері.

  • Егер RGB светодиод жалпы катод болса (теріс терминал), онда сымды катодтан Arduino -дағы GND түйреуішіне дейін өткізіңіз.
  • Егер RGB светодиод жалпы анод болса (оң терминал), онда сымды анодтан +5В түйреуішке дейін Arduino -ға қосыңыз.

Arduino эскизі кез келген жағдайда жұмыс істейді. Мен SparkFun Electronics / COM-11120 RGB жалпы катодты жарықдиодты қолдандым (жоғарыдағы суретте, SparkFun веб-сайтынан). Ең ұзын түйреуіш - жалпы катод.

RGB-Instructable.ino эскизін жүктеп алыңыз, оны Arduino IDE көмегімен ашыңыз және тест құрастырыңыз. Дұрыс Arduino тақтасын немесе чипін көрсетіңіз, содан кейін бағдарламаны Arduino -ға жүктеңіз. Ол бірден іске қосылуы керек.

Сіз RGB жарықдиодты циклды қанша түстер арқылы көре аласыз, ал миллиондаған мүмкін емес!

6 -қадам: Әрі қарай не болады?

Біз Arduino көмегімен RGB түс кеңістігін зерттей бастадық. Мен осы тұжырымдамамен жасаған басқа нәрселерге мыналар жатады:

AnalogWrite бағдарламасын қолданудың орнына, жылдамдықты жоғарылату үшін чиптік регистрлерге тікелей жазу

  • IR жақындық сенсоры қаншалықты жақын болғаныңызға байланысты циклды жылдамдатады немесе баяулатады деп тізбекті өзгерту
  • Arduino жүктеушісімен Atmel ATTiny85 8 істікшелі микроконтроллерді бағдарламалау және осы эскиз

Ұсынылған: