Оглавление:

HALO: Handy Arduino Lamp Rev1.0 с NeoPixels: 9 шагов (с изображениями)
HALO: Handy Arduino Lamp Rev1.0 с NeoPixels: 9 шагов (с изображениями)

Видео: HALO: Handy Arduino Lamp Rev1.0 с NeoPixels: 9 шагов (с изображениями)

Видео: HALO: Handy Arduino Lamp Rev1.0 с NeoPixels: 9 шагов (с изображениями)
Видео: DIY HALO Lamp Rev1.0 - Powered by Arduino Nano, 15+ Color Modes 2024, Сентябрь
Anonim
Image
Image
HALO: Handy Arduino Lamp Rev1.0 с NeoPixels
HALO: Handy Arduino Lamp Rev1.0 с NeoPixels
HALO: Handy Arduino Lamp Rev1.0 с NeoPixels
HALO: Handy Arduino Lamp Rev1.0 с NeoPixels

В этом руководстве я покажу вам, как собрать HALO или Handy Arduino Lamp Rev1.0.

HALO - это простая лампа, работающая на Arduino Nano. Он имеет общую площадь около 2 на 3 дюйма и утяжеленное деревянное основание для максимальной устойчивости. Гибкая шейка и 12 супер-ярких NeoPixels позволяют легко осветить каждую деталь на любой поверхности. HALO имеет две кнопки для переключения между различными режимами освещения, 15 из которых предварительно запрограммированы. Благодаря использованию Arduino Nano в качестве процессора, у вас есть возможность перепрограммировать его с дополнительными функциями. Одиночный потенциометр используется для регулировки яркости и / или скорости отображения режима. Простая металлическая конструкция делает HALO очень прочным светильником, пригодным для использования в любой мастерской. Простота использования усугубляется встроенным регулятором мощности Nano, поэтому HALO может питаться либо через USB, либо через стандартный 5-миллиметровый цилиндрический разъем на задней панели.

Я надеюсь увидеть, что многие люди будут использовать эти лампы в ближайшем будущем, потому что такая конструкция открывает так много возможностей. Пожалуйста, оставьте голос в конкурсе микроконтроллеров, если вам это нравится или в чем-то это полезно, я был бы очень признателен.

Прежде чем мы перейдем к этой инструкции, я хотел бы вкратце поблагодарить всех моих последователей и всех, кто когда-либо комментировал, добавлял в избранное или голосовал по любому из моих проектов. Благодаря вам, ребята, моя инструкция Cardboard стала огромным успехом, и сейчас, когда я напечатал ее, набрав почти 100 подписчиков, я считаю, что это большая веха. Я действительно ценю всю поддержку, которую я получаю от вас, ребята, когда выставляю свой Ible, и, когда дело доходит до этого, я бы не был там, где я сейчас, без вас. С учетом сказанного, спасибо всем!

ПРИМЕЧАНИЕ. В данном Руководстве фразы выделены жирным шрифтом. Это важные части каждого шага, и их нельзя игнорировать. Это не я кричу или намеренно грубо, я просто пробую новую технику письма, чтобы лучше подчеркнуть, что нужно сделать. Если вам это не нравится и вы предпочитаете, как я раньше писал свои шаги, дайте мне знать в комментариях, и я вернусь к своему старому стилю.

Шаг 1. Сбор материалов

Сбор материалов
Сбор материалов
Сбор материалов
Сбор материалов
Сбор материалов
Сбор материалов
Сбор материалов
Сбор материалов

Сколько раз я должен это повторять? Всегда имейте то, что вам нужно, и вы гарантированно сможете построить что-то до конца.

Примечание. Некоторые из них являются партнерскими ссылками (помечены «al»). Я получу небольшой откат, если вы купите через них, без каких-либо дополнительных затрат для вас. Спасибо, если купите по ссылкам

Части:

1x Arduino Nano Nano - al

1x 10k поворотный потенциометр 5 шт. В упаковке 10k потенциометры - al

1x 5-миллиметровый бочкообразный домкрат (мой переработан из жареной Arduino Uno) женский бочкообразный домкрат (5 шт.) - al

2x 2-контактные кнопки мгновенного действия, 10 шт., Кнопочный переключатель SPST - al

12x NeoPixels из 60 светодиодов на метр (подойдет любой эквивалент, например WS2812B) Adafruit NeoPixels

Лист алюминия 0,5 мм.

Гибкая шея от старой зажигалки.

Верхнее кольцо крышки от светодиодного светильника "Stick and Click" Светодиодный светильник для шкафа - al

Небольшой лист фанеры толщиной 1/4 дюйма

Тяжелая плоская металлическая гиря размером (примерно) 1,5 дюйма на 2,5 дюйма на 0,25 дюйма

Многожильный электрический провод

Инструменты:

Пистолет для горячего клея и клей

Паяльник и припой

Аккумуляторная дрель и небольшие поворотные насадки в ассортименте

X-acto нож (или универсальный нож)

Инструмент для зачистки проводов

Плоскогубцы

Кусачки / ножницы

Ножницы для тяжелых условий эксплуатации

Если у вас нет плоского металлического груза, вам также понадобятся:

1 рулон дешевого припоя (не тот, который вы будете использовать для пайки) Дешевый бессвинцовый припой

Алкогольная свеча (или горелка Бунзена)

Маленькая закаленная стальная тарелка, которую вы не прочь испортить (или небольшой тигель, если он у вас есть)

Штатив для указанной посуды / тигля (я сделал свой из стальной проволоки 12-го калибра)

Глиняная посуда для растений (одна из тех штуковин, которые идут под горшок)

Немного алюминиевой фольги

ПРИМЕЧАНИЕ. Если у вас есть сварочный комплект или 3D-принтер, вам могут не понадобиться все перечисленные здесь инструменты.

Шаг 2: Делаем гирю

Делаем вес
Делаем вес
Делаем вес
Делаем вес
Делаем вес
Делаем вес

Это довольно сложный шаг, и при его выполнении нужно соблюдать особую осторожность. Если у вас есть тяжелый металлический груз или плоский неодимовый магнит размером 2,75 на 1,75 на 0,25 дюйма, я бы порекомендовал использовать его вместо него (и магнит даже позволит вам расположить лампу боком на металлических поверхностях!).

Отказ от ответственности: я не несу ответственности за какие-либо травмы с вашей стороны, поэтому, пожалуйста, руководствуйтесь здравым смыслом

Кроме того, делайте это на улице, на бетонной поверхности, и вы не будете возражать, если она немного пригорит (это всего лишь мера предосторожности). У меня нет снимков для этого процесса, потому что камера была бы лишним отвлечением, которое мне не нужно и не нужно.

Сначала сделайте небольшую форму из алюминиевой фольги или влажной глины, примерно 2 3/4 дюйма на 1 3/4 дюйма на 1/4 дюйма с внутренними размерами. Это может быть яйцевидная форма, как у меня, или прямоугольник. Используйте несколько слоев фольги или толстые слои глины.

Поместите форму в керамическую посуду для растений и залейте и форму, и поддон холодной водой.

Возьмите незажженную спиртовую свечу / горелку Бунзена и поместите стальную тарелку / тигель на штатив так, чтобы пламя нагревало центр блюда (когда он горит). Перед розжигом горелки убедитесь, что у вас под рукой есть хотя бы 1 пара плоскогубцев или щипцов для металлообработки, если не 2.

При выполнении следующих нескольких шагов рекомендуется надеть кожаные перчатки, длинные рукава, длинные брюки, обувь с закрытым носком и защитные очки

Сверните и отломите пучок дешевого припоя от катушки и поместите его в стальную тарелку, затем зажгите горелку. Подождите, пока катушка полностью расплавится, затем начните подавать остаток припоя в блюдо в умеренном темпе. Если в припое есть канифоль, она может самопроизвольно воспламениться при нагревании, образуя бледно-желтое пламя и черный дым. Не волнуйтесь, это случалось со мной несколько раз, и это совершенно нормально.

Продолжайте подавать припой в блюдо, пока последний из него не расплавится.

Дайте любому пламени от горящей канифоли полностью погаснуть, используйте плоскогубцы / щипцы, чтобы схватить блюдо и аккуратно перемешать расплавленный металл внутри, осторожно удерживая его в пламени.

Убедившись, что весь припой полностью разжижен и нагрелся до хорошей температуры, быстро и осторожно снимите его с огня и вылейте в форму. Будет слышен громкий шипящий звук и пар, поскольку часть воды испаряется, а остальная часть вытесняется из формы для замены расплавленным припоем.

Дайте припою остыть, выключите горелку / задуйте свечу и поместите стальную посуду в безопасное место для охлаждения. Вы можете полить охлаждающий припой холодной водой, чтобы ускорить охлаждение и еще больше затвердеть. (Холодная вода заставляет внешнюю часть остывать быстрее, чем внутреннюю, создавая внутреннее напряжение, которое делает металл более твердым и жестким, подобно капле принца Руперта.) Вы также можете полить водой металлическую посуду, но это приведет к ее хрупкости., особенно если сделать несколько раз.

После того, как припой полностью остынет (примерно через 20 минут для безопасности), выньте его из формы из фольги.

Моя в итоге оказалась толще с одной стороны, чем с другой, поэтому я использовал молоток, чтобы выровнять ее и сгладить края (в результате получилась форма, которую вы видите на фотографиях). Затем я слегка отшлифовал его под проточной водой, чтобы отполировать, и отложил на потом.

Шаг 3: Сборка корпуса электроники, шаг 1

Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1
Сборка корпуса электроники, шаг 1

Это части оболочки, в которой будет размещаться Nano, крепление интерфейса и, по сути, то, что удерживает вместе лампу HALO. Я сделал свой с помощью алюминия 0,5 мм и горячего клея, но если у вас есть 3D-принтер (что-то, что я пытался получить для своего магазина некоторое время), я сделал версию. STL в Tinkercad, которую я прикрепил сюда для вас. скачать. Поскольку у меня самого нет принтера, мне не удалось протестировать печать модели, чтобы убедиться, что все печатается должным образом, но я думаю, что все будет хорошо, если вы добавите соответствующие структуры поддержки в свой слайсер. Вы также можете скопировать и отредактировать исходный файл здесь, если вам нужен или вы хотите немного другой дизайн или эстетику.

Размеры на самом деле были основаны на весе металла, который я отлил себе из припоя, а не на размере электроники, но в любом случае это оказалось неплохо, а размеры довольно оптимальны.

На рисунках показан порядок действий, который немного отличается от того, что я напишу здесь, потому что я разработал улучшенный метод, основанный на результатах моего первоначального метода.

Если вы собираете из листового металла, как я, вам нужно сделать следующее:

Шаг 1: лицевые пластины

Вырежьте два одинаковых полукруга примерно 1,5 дюйма в высоту и 3 дюйма в ширину. (Я снял свои, так что они немного похожи на переднюю часть музыкального автомата).

В одной из двух пластин просверлите три отверстия для кнопок и потенциометра. Мои были диаметром 1/4 дюйма каждая. Они могут быть в любой конфигурации, но я предпочитаю, чтобы мой потенциометр был слегка приподнят в центре, а кнопки с обеих сторон образовывали равнобедренный треугольник. При сверлении я всегда делаю небольшое пилотное отверстие перед тем, как перейти к сверлу необходимого размера, это помогает центрировать отверстия и делает их немного чище.

Шаг 2: арочная крышка

Согните кусок алюминия, чтобы он соответствовал изгибу одной из лицевых панелей, и отметьте правильную длину края.

Вырежьте полоску этой длины и шириной около 2 дюймов и сформируйте из нее дугу, которая соответствует форме изгиба лицевых пластин с обеих сторон.

Найдите центральную точку в верхней части кривой и просверлите отверстие, соответствующее гибкой шейке зажигалки. Я сместил отверстие в мою заднюю часть, потому что у моей лампы в большинстве случаев шейка будет наклонена вперед во время использования, поэтому я хотел добавить к этому немного противовеса. Моя гибкая шея была чуть более 1/4 дюйма в диаметре, поэтому я использовал сверло 1/4 дюйма (самое большое сверло, которое у меня есть, оно составляет менее 3/4 дюйма), и просто осторожно наклонило и скрутило просверлите отверстие, чтобы оно подошло к шейке.

Теперь, когда у нас есть детали для оболочки, следующий шаг - добавить электронику и собрать ее вместе!

Шаг 4: Сборка корпуса электроники, шаг 2

Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2
Сборка корпуса электроники, шаг 2

Теперь мы добавляем кнопки и потенциометр и соединяем все вместе.

Шаг 1: кнопки и болты

Отвинтите шестигранные гайки от кнопок и потенциометра. Под гайкой должно быть зажимное кольцо, оставьте его на месте.

Проденьте каждый из компонентов в соответствующее отверстие, затем снова закрутите гайки, чтобы зафиксировать каждый из них на месте. Затяните гайки до точки, при которой каждый компонент будет надежно закреплен.

Шаг 2. Согните шею.

Проденьте гибкую шейку через отверстие в верхней части изогнутой детали. Горячим клеем или привариваем (если у вас есть оборудование) шейку надежно на месте.

Если вы используете горячий клей, как я, неплохо было бы приклеить его с большим количеством клея с обеих сторон, распределенного по большой площади, чтобы клей не отклеился позже.

Шаг 3. Сборка корпуса (не относится к корпусу, напечатанному на 3D-принтере)

С помощью сварочного стержня или горячего клея закрепите переднюю и заднюю лицевые панели в соответствующих местах на арочной крышке. Мне потребовалось несколько попыток, чтобы клей прилип, и, как и раньше, хитрость заключается в использовании большого количества клея с обеих сторон стыка, как и на шее. Чем больше будет площадь, покрытая клеем, тем лучше он будет держаться.

Теперь, когда у нас есть оболочка, мы можем перейти к добавлению всех битов схемы.

Шаг 5: Добавление электроники

Добавление электроники
Добавление электроники
Добавление электроники
Добавление электроники
Добавление электроники
Добавление электроники

А вот самое интересное: пайка! В последние недели я, честно говоря, немного устал от пайки, потому что в последнее время я так много делал, чтобы попытаться закончить еще один проект, который я должен был реализовать в ближайшее время (следите за радикальной новой версией моего роботизированного дисплея платформы), что привело к тому, что я испортил одно железо и получил другое … В любом случае, паять здесь особо нечего, так что это должно быть довольно просто.

Примечание. Если на вашем Nano уже есть штыревые заголовки, я бы порекомендовал распаять их для этого проекта, они будут только мешать.

На картинках выше есть диаграмма, вы можете следовать ей, если хотите.

Шаг 1: Интерфейс

От каждого переключателя припаяйте провод от одиночного контакта к боковому контакту потенциометра. Припаяйте провод от этого же бокового контакта к контакту заземления на Nano.

Припаяйте провод от центрального контакта потенциометра к A0 на Nano.

Припаяйте провод от неподключенного контакта любого переключателя к A1 на Nano.

Припаяйте провод от неподключенного контакта на другом переключателе к A2 на Nano.

Примечание: не имеет значения, какой переключатель есть, вы можете очень легко изменить их в коде, помимо того факта, что один переключатель просто выполняет противоположное действие другого.

Отрежьте кусок проволоки на 4 дюйма длиннее гибкой шейки и зачистите обе стороны. Используя Sharpie, отметьте одну сторону одной линией.

Припаяйте провод к последнему неподключенному боковому контакту потенциометра, скрутите неподключенный конец этого провода вместе с немаркированным концом провода из последнего подшага.

Припаяйте этот соединенный конец к 5V на Nano.

Шаг 2: Дисплей и провода питания

Отрежьте 2 отрезка проволоки на 4 дюйма длиннее гибкой шейки и зачистите оба конца.

С помощью Sharpie отметьте концы каждого провода: один провод двумя линиями, а другой - тремя.

Припаяйте провод с двумя линиями к цифровому выводу 9 на Nano.

На 5-миллиметровом цилиндрическом разъеме припаяйте провод от центрального контакта (положительного) к Vin на Nano.

Припаяйте другой провод к боковому контакту (земля / минус) цилиндрического гнезда.

Скрутите длинный провод тремя линиями вместе с проводом от бокового штифта бочкообразного домкрата.

Припаяйте эти провода к открытому контакту GND на Nano.

При необходимости изолируйте соединения изолентой или горячим клеем.

Шаг 3: Вырезание отверстий (только в металлической версии, если вы распечатали обложку на 3D-принтере, все будет в порядке)

Используя сверло и X-acto или универсальный нож, осторожно проделайте отверстие в боковой стороне крышки для порта USB Nano.

Сделайте еще одно отверстие размером примерно с лицевую часть цилиндрического разъема на задней стороне крышки, желательно ближе к стороне, противоположной отверстию для порта USB.

Шаг 4: Монтаж компонентов

Пропустите три длинных провода через гибкую шейку и выведите их с другой стороны.

Используя большое количество горячего клея, установите цилиндрический домкрат на место так, чтобы штифты были обращены к верхней части крышки.

Опять же, используя большое количество горячего клея, закрепите Nano на месте так, чтобы кнопка сброса была обращена вниз, а порт USB - в соответствующий слот. Я сделал «мостик из горячего клея» между домкратом и Nano, благодаря чему они надежно удерживают друг друга на месте.

Теперь мы можем перейти к созданию взвешенной базы!

Шаг 6: Взвешенная база

Взвешенная база
Взвешенная база
Взвешенная база
Взвешенная база
Взвешенная база
Взвешенная база

Я уверен в своих навыках пайки и хорошо спланировал это, поэтому я пошел дальше и добавил базу перед тестированием кода. Если вы менее уверены в своих навыках, я бы посоветовал пропустить этот шаг и вернуться к нему в конце, когда вы узнаете, что все работает.

Если вы сделали 3D-печатную версию, вы можете пропустить первый шаг и перейти ко второму.

Шаг 1: дерево

Из листа фанеры толщиной 1/4 дюйма вырежьте основу размером примерно 3 на 2 дюйма.

Отшлифуйте края, чтобы сгладить их, и удалите заусенцы.

Шаг 2: Вес

Во-первых, убедитесь, что выбранный вами вес, будь то магнит, металл или специальный припой, подходит к краям металлической крышки, которую мы сделали. Мой был немного большим в одном направлении, поэтому я немного сбрил сбоку ножом X-acto. Если ваш не тот, в котором вы можете это сделать, возможно, вам придется повозиться с другим базовым дизайном.

Приклейте ваш вес горячим клеем в центр куска фанеры или, в случае 3D-печатного дизайна, в центральную область «лотка», которую я разработал для этой цели.

Шаг 3: База

Наденьте металлическую крышку на груз и отцентрируйте ее на деревянной основе. (В случае дизайна, напечатанного на 3D-принтере, вставьте его в предварительно сделанные канавки.)

Убедитесь, что вес не мешает работе электроники

Используйте горячий клей, чтобы закрепить основу на месте. Используйте достаточно, чтобы обеспечить надежное соединение.

Теперь, когда мы полностью создали наш блок управления, перейдем к источникам света.

Шаг 7: кольцо NeoPixel Halo Ring

Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo
Кольцо NeoPixel Halo

Вдохновением для названия этой лампы послужило гало-кольцо NeoPixel, которое мы будем использовать в качестве источника освещения. Этот конкретный элемент может быть изменен или заменен любым светодиодным кольцом NeoPixel или индивидуально адресуемым светодиодным кольцом, если это необходимо.

Шаг 1: пайка

Отрежьте полоску NeoPixels длиной 12 светодиодов.

Припаяйте контакт GND к проводу гибкой шейки, имеющему 3 линии.

Припаяйте контакт Din к проводу с двумя линиями.

Припаяйте вывод 5V к проводу, имеющему 1 линию.

Шаг 2: проверьте свет

Загрузите и установите библиотеку Adafruit_NeoPixel и откройте код "strandtest".

Измените постоянный PIN-код на 9.

Измените строку, в которой определяется полоса, так, чтобы она была сконфигурирована для 12 светодиодов.

Загрузите код в Nano и убедитесь, что все ваши светодиоды работают правильно.

Любые неисправные светодиоды заменяйте исправными, пока не заработает вся полоса.

Шаг 3: кольцо

Возьмите верхнее кольцо от фонаря «Stick and Click» и отрежьте все винты на внутреннем ободе.

Сделайте небольшую выемку на краю ленты для проводов.

Снимите крышку с липкой ленты на задней части NeoPixels (если есть) и вставьте их внутрь кольца так, чтобы любой конец полосы был прямо на выемке, которую мы сделали.

Используйте горячий клей, чтобы надежно закрепить края полоски

После того, как клей полностью остынет, проверьте пиксели еще раз. Это сделано для того, чтобы никто не привередничал с теплом и завивкой (некоторые из моих были).

Шаг 4: Установите

Вырежьте два небольших прямоугольника из дерева толщиной 1/4 дюйма, примерно равной высоте кольца и в 1 2/3 раза шире.

Приклейте их параллельно друг другу по обе стороны проводов от кольца, заполняя зазор и полностью покрывая провода между собой клеем.

Осторожно протолкните излишек проволоки обратно в шейку гибкого элемента, а затем приклейте деревянные части к концу шейки, используя большое количество клея и осторожно заполняя все зазоры (не заполняя шейку клеем).

Шаг 6: Завершение

Вы можете покрасить кольцо и установить любой цвет, если хотите, я предпочел серебряную отделку, поэтому я использовал только Sharpie, чтобы скрыть логотип, который был (раздражающе) напечатан на кольце. То же самое и с остальной частью лампы.

Теперь мы можем перейти к окончательному коду!

Шаг 8: коды и тесты

Коды и тесты
Коды и тесты
Коды и тесты
Коды и тесты

Итак, теперь все, что нам нужно сделать, это запрограммировать лампу и проверить ее. Прилагается текущая версия кода (rev1.0), я довольно тщательно протестировал этот код, и он работает очень хорошо. Я работаю над rev2.0, где кнопки настроены как внешние прерывания, чтобы было легче переключаться между режимами, но эта версия содержит ошибки и еще не готова к выпуску. В текущей версии вы должны удерживать кнопку, пока она не запустит цикл Debounce и не распознает изменение состояния, что может раздражать в более длинных «динамических» циклах. Ниже приведен код с некоторыми пояснениями (такие же объяснения есть в загружаемой версии).

#include #ifdef _AVR_ #include #endif

#define PIN 9

#define POT A0 #define BUTTON1 A1 #define BUTTON2 A2

// Параметр 1 = количество пикселей в полосе

// Параметр 2 = номер вывода Arduino (большинство из них действительны) // Параметр 3 = флаги типа пикселя, при необходимости сложите вместе: // NEO_KHZ800 800 кГц битовый поток (большинство продуктов NeoPixel со светодиодами WS2812) // NEO_KHZ400 400 кГц (классический ' v1 '(не v2) Пиксели FLORA, драйверы WS2811) // Пиксели NEO_GRB подключены для битового потока GRB (большинство продуктов NeoPixel) // Пиксели NEO_RGB подключены для потока битов RGB (пиксели FLORA v1, не v2) // Пиксели NEO_RGBW подключены для Битовый поток RGBW (продукты NeoPixel RGBW) Adafruit_NeoPixel halo = Adafruit_NeoPixel (12, PIN, NEO_GRB + NEO_KHZ800);

// А теперь сообщение о безопасности от наших друзей из Adafruit:

// ВАЖНО: чтобы снизить риск выгорания NeoPixel, добавьте конденсатор емкостью 1000 мкФ

// выводы питания пикселя, добавляем резистор 300-500 Ом на ввод данных первого // пикселя и минимизируем расстояние между Arduino и первым пикселем. Избегайте подключения // в цепи под напряжением … если необходимо, сначала подключите GND.

// Переменные

int buttonState1; int buttonState2; // текущее чтение с входного вывода int lastButtonState1 = LOW; // предыдущее чтение с входного вывода int lastButtonState2 = LOW; int mode; // режим наших источников света может быть одним из 16 значений (от 0 до 15) int brightVal = 0; // яркость / скорость, установленная потенциометром

// следующие переменные являются длинными, потому что время, измеряемое в миллисекундах, // быстро станет большим числом, чем может быть сохранено в int. long lastDebounceTime = 0; // последний раз, когда выходной контакт был переключен long debounceDelay = 50; // время дребезга; увеличивать, если вывод мерцает

void debounce () {

// считываем состояние переключателя в локальную переменную: int read1 = digitalRead (BUTTON1); int read2 = digitalRead (КНОПКА2); // Если одна из кнопок изменилась из-за шума или нажатия: if (чтение1! = LastButtonState1 || чтение2! = LastButtonState2) {// сброс таймера противодействия lastDebounceTime = millis (); } if ((millis () - lastDebounceTime)> debounceDelay) {// если состояние кнопки определенно изменилось из-за нажатия / отпускания: if (reading1! = buttonState1) {buttonState1 = reading1; // установить его как показание, если оно изменилось if (buttonState1 == LOW) {// они установлены как активные переключатели низкого уровня mode ++; если (режим == 16) {режим = 0; }}} если (чтение2! = buttonState2) {buttonState2 = чтение2; если (buttonState2 == LOW) {режим = режим - 1; если (режим == -1) {режим = 15; }}}} // сохраняем показания для следующего раза в цикле lastButtonState1 = reading1; lastButtonState2 = чтение2; }

void getBright () {// наш код для чтения потенциометра принимает значение от 0 до 255. Используется для установки яркости в одних режимах и скорости в других.

int potVal = аналоговое чтение (POT); brightVal = map (potVal, 0, 1023, 0, 255); }

// Вот наши цветовые режимы. Некоторые из них взяты из примера Strandtest, другие являются оригинальными.

// Заливаем точки одну за другой цветом (удаление цвета, полученное из strandtest)

void colorWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

// функции радуги (также производные от strandtest)

пустая радуга (uint8_t wait) {

uint16_t i, j;

for (j = 0; j <256; j ++) {for (i = 0; i

// Слегка отличается, поэтому радуга равномерно распределяется по

void rainbowCycle (uint8_t wait) {uint16_t i, j;

for (j = 0; j <256 * 5; j ++) {// 5 циклов всех цветов на колесе for (i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, Wheel (((я * 256 / halo.numPixels ()) + j) & 255)); } halo.show (); задержка (ждать); }}

// Введите значение от 0 до 255, чтобы получить значение цвета.

// Цвета представляют собой переход r - g - b - обратно к r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {вернуть halo. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos - = 85; вернуть halo. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos - = 170; вернуть halo. Color (WheelPos * 3, 255 - WheelPos * 3, 0); }

void setup () {

// Это для Trinket 5V 16MHz, вы можете удалить эти три строки, если не используете Trinket #if defined (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // Конец специального кода брелка pinMode (POT, INPUT); pinMode (BUTTON1, INPUT_PULLUP); pinMode (BUTTON2, INPUT_PULLUP); pinMode (PIN, ВЫХОД); Serial.begin (9600); // отладка материала halo.begin (); halo.show (); // Инициализируем все пиксели как "выключено"}

void loop () {

debounce ();

//Serial.println(mode); // дополнительная отладка //Serial.println(lastButtonState1); //Serial.println(lastButtonState2);

if (mode == 0) {

getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, brightVal, brightVal)); // устанавливаем все пиксели в белый цвет} halo.show (); }; если (режим == 1) {getBright (); для (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, 0, 0)); // устанавливаем все пиксели в красный цвет} halo.show (); }; если (режим == 2) {getBright (); для (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, brightVal, 0)); // устанавливаем все пиксели в зеленый цвет} halo.show (); }; если (режим == 3) {getBright (); для (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, 0, brightVal)); // устанавливаем все пиксели в синий цвет} halo.show (); }; если (режим == 4) {getBright (); for (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (0, brightVal, brightVal)); // устанавливаем все пиксели в голубой цвет} halo.show (); }; если (режим == 5) {getBright (); для (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, 0, brightVal)); // устанавливаем все пиксели на фиолетовый / пурпурный} halo.show (); }; если (режим == 6) {getBright (); для (int i = 0; i <halo.numPixels (); i ++) {halo.setPixelColor (i, halo. Color (brightVal, brightVal, 0)); // устанавливаем все пиксели в оранжевый / желтый цвет} halo.show (); }; if (mode == 7) {// теперь динамические режимы getBright (); colorWipe (halo. Color (brightVal, 0, 0), 50); // Красный }; если (режим == 8) {getBright (); colorWipe (halo. Color (0, brightVal, 0), 50); // Зеленый }; если (режим == 9) {getBright (); colorWipe (halo. Color (0, 0, brightVal), 50); // Синий }; если (режим == 10) {getBright (); colorWipe (halo. Color (brightVal, brightVal, brightVal), 50); // белый }; если (режим == 11) {getBright (); colorWipe (halo. Color (brightVal, brightVal, 0), 50); // оранжевый / желтый}; если (режим == 12) {getBright (); colorWipe (halo. Color (0, brightVal, brightVal), 50); // голубой}; если (режим == 13) {getBright (); colorWipe (halo. Color (brightVal, 0, brightVal), 50); // фиолетовый / пурпурный}; if (mode == 14) {// последние два - это регулировка скорости, потому что яркость динамическая getBright (); радуга (brightVal); }; если (режим == 15) {getBright (); rainbowCycle (яркийВал); }; задержка (10); // даем процессору немного отдохнуть}

Шаг 9: грандиозный финал

Гранд Финал
Гранд Финал

И теперь у нас есть фантастическая сверхъяркая лампочка!

Вы можете изменить его дальше или оставить как есть. Вы можете изменить код или даже полностью написать новый. Вы можете увеличить базу и добавить батарейки. Вы могли добавить поклонника. Вы можете добавить больше NeoPixels. Список всего, что вы могли бы с этим сделать, почти бесконечен. Я говорю «почти», потому что я почти уверен, что у нас все еще нет технологий, чтобы преобразовать это в генератор мини-порталов (к сожалению), но помимо подобных вещей, единственным ограничением является ваше воображение (и в некоторой степени, как я недавно обнаружил, инструменты у вас в мастерской). Но если у вас нет инструментов, не позволяйте этому останавливать вас, если вы действительно хотите что-то сделать, всегда есть способ.

Это часть цели этого проекта - доказать себе (и, в меньшей степени, миру), что я могу создавать полезные вещи, которые также понравятся другим людям, даже если все, что у меня есть, - это настоящая куча старого и сломанного мусора. компоненты и корзину с расходными материалами Arduino.

На этом я остановлюсь, потому что считаю, что это получилось неплохо. Если у вас есть предложения по улучшению или вопросы о моих методах, оставьте комментарий ниже. Если вы сделали это, сделайте снимок, мы все хотим это увидеть!

Пожалуйста, не забудьте проголосовать, если вам это нравится!

Как всегда, это проекты Dangerously Explosive, его миссии всей жизни: «Смело строить то, что вы хотите построить, и многое другое!»

Остальные мои проекты вы можете найти здесь.

Спасибо за чтение и удачи!

Рекомендуемые: