Створення візерунків із різдвяних гірлянд

Ще є час встигнути реалізувати святковий проект до великого дня, і, на щастя для вас, останній номер нашого офіційного журналу "Raspberry Pi Official Magazine" просто переповнений такими ідеями. У цьому посібнику Бен Еверард пояснює, як збалансувати яскравість, колір і рух, щоб створити ідеальний візерунок для ваших різдвяних вогників.

У минулому випуску офіційного журналу Raspberry Pi Official Magazine ми розглянули різні типи світлодіодів WS2812B (також відомих як NeoPixels), які можна використовувати для створення різдвяних гірлянд. А тепер давайте подивимося, як їх налаштувати. Ми не будемо занадто заглиблюватися в програмне забезпечення — існують бібліотеки практично для кожної мови, з якою ви можете зіткнутися, і ви можете керувати ними на Raspberry Pi, Raspberry Pi Pico або більшості інших платформ, на яких ви маєте фізичний доступ до GPIO (ми будемо використовувати CircuitPython на Pico, але ви можете досить легко перенести це на іншу мову або платформу). Натомість ми поміркуємо над тим, що ми хочемо, щоб вони робили. Іншими словами, замість того, щоб надто зосереджуватися на тому, як змусити їх працювати, ми зосередимося на тому, як зробити їх гарними.

Базова схема для тестування NeoPixels

Балансування

З нашого досвіду, щоб отримати гарний світловий малюнок, потрібно досягти балансу між трьома різними факторами:

Рух: У спільноті майстрів існує поширений жарт, що всім пристроям не вистачає миготливих вогників. Однак різке миготіння може виглядати надто кричуще, відволікати увагу і рідко виглядає естетично. Натомість ми зазвичай прагнемо, щоб рух був більш плавним. Потрібно знайти баланс між плавністю руху та швидкістю.

Колір: За допомогою світлодіодів WS2812B можна створити практично будь-який колір. Однак це не означає, що можна просто змішати всі кольори воєдино й отримати приємний для ока результат. Добре продумана кольорова палітра — це, мабуть, найважливіший елемент у створенні гарної різдвяної ілюмінації.

Яскравість: Світлодіоди WS2812B зазвичай випускаються великими блоками — ланцюжками, що складаються з сотень таких елементів. Кожен окремий світлодіод може бути не надто яскравим, але велика кількість їх разом швидко створює дуже яскраве світло. Те, що у вас є всі ці світлодіоди, не означає, що вони всі мають світитися одночасно. Чорний колір — один із найпотужніших у світлодіодному малюнку. Ви можете переміщати кольорові ділянки або просто створити малюнок, на який користувачі зможуть дивитися, не нашкодивши своїм очам.

Наш шаблон у дії на гірлянді NeoPixel

Кольоровість

Спочатку давайте поговоримо про кольори. Звісно, найкласичніше різдвяне поєднання — це червоний і зелений, і це класика не дарма. Кольори є компліментарними, якщо при їхньому поєднанні виходить сірий. Вони сильно контрастують один з одним, але при цьому створюють відчуття рівноваги.

Теорію кольорів часто ілюструють за допомогою колірного кола, на якому всі відтінки розташовані по периметру. Доповнювальні кольори — це протилежні кольори. Відтінок часто позначають як кут у градусах, який потрібно пройти по периметру колірного кола.

Ви можете розширити цей основний принцип створення палітри, додавши до кольорів, що поєднуються у сірий, ще більше відтінків. Якщо ви використовуєте три кольори, вам слід підібрати відтінки, розташовані на відстані 120 і 240 градусів один від одного. Ви можете продовжувати додавати кольори, розташовуючи їх рівномірно по всьому колірному колу.

Однак відстань по зовнішньому колу колірного кола визначає лише відтінок, а це лише одна зі складових кольору. Наприклад, ви не знайдете рожевого кольору на зовнішньому колі колірного кола, оскільки рожевий має той самий відтінок, що й червоний, але меншу насиченість. Насиченість визначає, наскільки «чистим» є колір. Насиченість зменшується шляхом додавання білого кольору. Якщо ми визначаємо нашу палітру за відтінками, розташованими по колу колірного кола, зазвичай ми прагнемо, щоб усі вони мали однакову насиченість.

Наш NeoPixel Pico має два роз'єми (хоча в цьому проєкті ми використовуємо лише один); кабельна стяжка допомагає зменшити навантаження на паяні з'єднання.

Існує також дещо незвичайний підхід до цього питання, який може виявитися ефективним: палітра кольорів з необмеженим діапазоном. Якщо вибирати відтінки навмання, але завжди дотримуватися однакової насиченості, можна створити збалансовану палітру. Найкраще це працює при низькій насиченості; в іншому випадку палітра може вийти занадто кричущою.

Не обов'язково підбирати кольори саме таким чином. Інший варіант — використовувати послідовність кольорів, які знаходяться поруч на колірному колі. Таку палітру називають аналогічною.

Існує безліч способів складання палітри, яку ви можете використовувати, і тут ми розглянули лише деякі з них. Це ті варіанти, якими ми любимо користуватися, але це частково залежить від особистих уподобань. На завершення варто зазначити, що ідеальної теорії кольору не існує (хоча існує чимало речей, які називаються теорією кольору). Існує безліч ідей — таких, як ті, що ми навели вище, — і багато з них вже довели свою ефективність. Однак це лише те, що, на думку людей, зазвичай виглядає добре. Якщо ви віддаєте перевагу чомусь, що не вписується в чиюсь теорію кольору, це не має значення. Це ваші ліхтарики, і те, що подобається вам, важливіше за те, що говорить якась теорія.

Мабуть, головне, що ми хотіли б, щоб ви запам’ятали з цього, — це те, що існують методи формування палітр для створення різних ефектів у візерунку, і якщо ви створюєте візерунок із змінною палітрою, це дає вам можливість експериментувати та знайти варіант, який підійде саме вам.

Від теорії до практики

Давайте тепер подивимося, як це все працює на практиці. Минулого місяця ми розглянули різні варіанти підключення світлодіодів до Pico, тому тут не будемо занадто заглиблюватися в деталі. Ми підключили наш ланцюжок до GPIO 0, але це легко змінити, якщо ви хочете підключити свій ланцюжок іншим способом.

Ми написали наш код на CircuitPython, тому вам потрібно буде встановити цю бібліотеку. Також знадобляться модулі «neopixel» та «adafruit_fancyled», які входять до пакету бібліотек CircuitPython. Все це можна завантажити з сайту circuitpython.org. Вам також знадобиться комп'ютер із встановленим редактором коду Mu, який можна завантажити з сайту codewith.mu. Якщо ви раніше не користувалися CircuitPython, радимо швидко ознайомитися з посібником для початківців, щоб зрозуміти, як все працює.

Ми розробили тестовий шаблон, який дозволяє експериментувати з усіма цими параметрами, щоб побачити, як вони впливають на зображення — дивіться фрагмент коду «test_pattern.py». Коли ви визначитеся зі своїми уподобаннями щодо балансу руху, кольору та яскравості, ви зможете з легкістю створити власний шаблон.

CircuitPython має дуже докладну документацію — якщо вам потрібна допомога, перейдіть на circuitpython.org

Це дозволить створити палітру двома різними способами: або збалансовану (з рівномірним розміщенням кольорів по колірному колу), або аналогічну (згруповану навколо однієї точки). Однак це не єдині способи створення палітри; ви можете написати власну функцію для її створення або скласти палітру вручну й ввести значення вручну. У будь-якому випадку ви можете вибрати кількість кольорів, базовий колір і (у випадку аналогічної палітри) варіацію (тобто відстань між сусідніми кольорами у вашій палітрі).

Ви також можете налаштувати рух у візерунку двома способами: змінивши кількість кроків (тобто кількість відтінків яскравості між повним вимкненням і повним увімкненням) або змінивши час паузи. Збільште одне або обидва значення, щоб отримати повільнішу та плавнішу анімацію, або зменште їх, щоб отримати швидшу анімацію з більш частим блиманням. Також є змінна «new_colour_prob», яка змінює як рух, так і яскравість. У кожному циклі вона випадково вибирає піксель і або підсвічує його новим кольором, або вимикає. Збільшення цього числа збільшує ймовірність того, що піксель стане чорним. Більше число означає темніший візерунок — але в межах цього темнішого візерунка є більше можливостей для руху.

Вивчення різних варіантів цього шаблону допоможе вам зрозуміти, що саме вам подобається, а це, у свою чергу, створить чудові передумови для створення власного варіанту.

Завантажити повний код ви можете тут: rpimag.co/github

Новий випуск офіційного журналу "Raspberry Pi Official Magazine" #160 вже в продажу!

Цей номер можна придбати в Tesco, Sainsbury’s, Asda, WHSmith та інших газетних кіосках, зокрема в магазині Raspberry Pi Store у Кембриджі. Його також можна замовити в нашому інтернет-магазині, який здійснює доставку по всьому світу. Крім того, цифрову версію можна завантажити через наш додаток для Android або iOS.

Ви також можете оформити підписку на друковану версію нашого журналу. Ми не тільки здійснюємо доставку по всьому світу, але й даруємо БЕЗКОШТОВНИЙ Raspberry Pi Pico 2 W усім, хто оформить передплату на шість або дванадцять місяців!