Мазмуну:

Түс мейкиндигин изилдөө: 6 кадам
Түс мейкиндигин изилдөө: 6 кадам

Video: Түс мейкиндигин изилдөө: 6 кадам

Video: Түс мейкиндигин изилдөө: 6 кадам
Video: КАК НАСТРОИТЬ L4D2 2024, Ноябрь
Anonim
Түс мейкиндигин изилдөө
Түс мейкиндигин изилдөө

Көзүбүз жарыкты көрүү спектриндеги кызыл, жашыл жана көк түскө сезгич кабылдагычтар аркылуу кабылдайт. Адамдар бул чындыкты акыркы жүз жыл ичинде кино, телевизор, компьютер жана башка түзмөктөр аркылуу түстүү сүрөттөрдү берүү үчүн колдонушкан.

Компьютердин же телефондун дисплейинде сүрөттөр экрандын жанындагы кичинекей кызыл, жашыл жана көк диоддордун интенсивдүүлүгүн өзгөртүү аркылуу көптөгөн түстөрдө көрсөтүлөт. Миллиондогон түрдүү түстөрдү жарыктын интенсивдүүлүгүн кызыл, жашыл же көк диоддордон өзгөртүү аркылуу көрсөтүүгө болот.

Бул долбоор сизге Arduino, RGB LED жана кичине математиканы колдонуу менен кызыл, жашыл жана көк (RGB) түс мейкиндигин изилдөөгө жардам берет.

Сиз кызыл, жашыл жана көк түстөрдүн интенсивдүүлүгүн кубанын координаттары катары элестете аласыз, бул жерде ар бир түс бир огунун боюнда жана үч огу тең перпендикуляр. Октун нөлдүк чекитине же келип чыгышына канчалык жакын болсоңуз, ошол түстүн азыраагы көрсөтүлөт. Үч түстүн тең мааниси нөлгө жеткенде, же түсү кара, ал эми RGB LED толугу менен өчүк. Бардык үч түстүн мааниси мүмкүн болушунча жогору болгондо (биздин учурда, үч түстүн ар бири үчүн 255), RGB LED толугу менен күйүп турат жана көз түстөрдүн бул айкалышын кабылдайт.

1 -кадам: RGB Color Space

RGB түс мейкиндиги
RGB түс мейкиндиги

Кеннет Мореландга рахмат, анын жакшы сүрөтүн колдонууга уруксат.

Биз 3D түстүү космостук кубдун бурчтарын Arduino менен туташкан RGB LEDди колдонуп көргүбүз келет, бирок муну кызыктуу жол менен жасоону каалайбыз. Биз муну үч укурукту (кызыл, жашыл жана көк үчүн бири) уялоо менен жана мүмкүн болгон түстөрдүн айкалышынан өтүү менен кыла алмакпыз, бирок бул чынында эле кызыксыз болмок. Осциллографта же лазердик жарык шоу? Орнотууларга жараша, Lissajous үлгүсү диагоналдуу сызыкка, тегерекке, фигурага 8 же акырын айлануучу көпөлөккө окшош үлгүгө окшош болушу мүмкүн. Lissajous үлгүлөрү x-y (же биздин учурда, x-y-z же R-G-B) окторуна чегилген эки (же андан көп) осциллятордун синусоидалык сигналдарын көзөмөлдөө аркылуу түзүлөт.

2 -кадам: Жакшы кеме Lissajous

Жакшы кеме Lissajous
Жакшы кеме Lissajous

Эң кызыктуу Lissajous үлгүлөрү синусоидалдык сигналдардын жыштыктары аз өлчөмдө айырмаланган учурда пайда болот. Бул жердеги осциллограф сүрөтүндө жыштыктар 5тен 2ге чейин айырмаланат (экөө тең жөнөкөй сандар). Бул үлгү анын квадратын абдан жакшы жабат жана бурчтарга жакшынакай кирет. Жогорку жөнөкөй сандар аянтты жаап, бурчтарга ого бетер чукулураак иштейт.

3 -кадам: Күтө туруңуз - Биз синусоидалык толкун менен LEDди кантип айдай алабыз?

Сен мени кармадың! Биз үч түстүн ар бири үчүн (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 Lisajous үлгүсүн куралы

3D Lisajous үлгүсүн куралы
3D Lisajous үлгүсүн куралы

Үстөлдү үч түстүн ар башка жыштыгында айландыруу үчүн, биз бир түстө бир индексти сактайбыз жана түстөрдү аралап өткөндө ар бир индексте салыштырмалуу эң негизги орундарды кошобуз. Биз 2, 5 жана 11ди Кызыл, Жашыл жана Көк индекстин маанилери үчүн салыштырмалуу эң негизги орун катары тандайбыз. Ардуинонун өзүнүн ички математикалык мүмкүнчүлүктөрү, биз ар бир индекстин ордун толтуруу менен автоматтык түрдө оролуп, бизге жардам берет.

5 -кадам: Мунун бардыгын Arduinoго кошуу

Мунун бардыгын Arduinoго кошуу
Мунун бардыгын Arduinoго кошуу

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

Ар бир PWM каналы Arduino "AnalogWrite" функциясын колдонуп, RGB LEDдин бир түсүн айдайт, мында синусоидалык циклдин айланасындагы ар бир чекиттеги түстүн интенсивдүүлүгү импульстун туурасы же кызмат цикли менен 0 (бардыгы өчүк)) 255ке чейин (бардыгы күйгүзүлгөн). Биздин көзүбүз диапазондогу ар кандай импульстун кеңдигин, тездик менен кайталанып, диоддун ар кандай интенсивдүүлүгүн же жарыктыгын кабыл алат. Бардык үч PWM каналын RGB светодиодунда айкалыштырып, биз 256*256*256 же он алты миллиондон ашык түстү көрсөтүү мүмкүнчүлүгүнө ээ болобуз!

Сиз Arduino IDE (Interactive Development Environment) орнотуп, аны USB кабели аркылуу Arduino тактасына туташтырышыңыз керек. PWM 3, 5 жана 6дан (5, 11 жана 12 -процессор пиндери) 3 протоколго же прото калкандагы үч 1 КОм (миң ом) резисторго чейин жана резисторлордон 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 -кадам: Кийинкиде эмне болот?

Биз Arduino менен RGB түс мейкиндигин изилдей баштадык. Мен бул түшүнүк менен кылган башка нерселерге төмөнкүлөр кирет:

AnalogWrite колдонуунун ордуна, чип реестрине түз жазуу, ишти тездетүү үчүн

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

Сунушталууда: