
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-06-01 06:10


Так что мой сын Дун замечает очень крутой свет для вечеринки, сделанный из старых бутылок из-под кокса и липких внутренностей светящихся палочек, и спрашивает, можем ли мы сделать такой светильник для его предстоящих школьных экзаменов Are Over Blowout PartAYYY !!! Я говорю, конечно, но разве ты не предпочел бы некоторые из тех элегантных колец Adafruit Neopixel, о которых мы читали… Он смотрит на меня пустым взглядом. Потому что факт в том, что он не знает, о чем я говорю, но папа заметил возможность поиграть с теми кольцами Neopixel, о которых он читал, и все мы знаем одну из 10 основных причин, по которым отцы-компьютерщики производят потомство, - это иметь извините, чтобы поиграть с крутыми гаджетами, которые, по их словам, созданы для их детей.
Это супер-простой проект, который выглядит действительно здорово. Мы построили нашу из 3 старых бутылок из-под кокса, деревянной тарелки и кронштейна для столба игровой площадки - всякие вещи валяются в подвале - в сочетании с Arduino (Леонардо в нашем случае, но подойдет любая плата Genuino!) И трех колец Neopixel. Я заказал кольцо с 9 светодиодами, но в итоге получил кольцо с 12 светодиодами по той же цене. Это было мило, но означало переделку отверстий для колодцев - кольца с 12 светодиодами имеют ширину 35 мм, а не 23 мм. Что вам понадобится:
- Плата Genuino / Arduino (мы использовали Леонардо, но подойдет почти любая плата)
- 3 кольца Neopixel (по 12 светодиодов в каждом): приобретите их у Adafruit и поддержите этих прекрасных людей
- Конденсатор емкостью 1000 мкФ 6,3 В или лучше
- Резистор 300-500 Ом
- Деревянная тарелка, или квадрат из лома, или что-нибудь, на что вы можете поместить неопиксели и поставить бутылки из-под кокса сверху.
- Какая-то форма крепления для пластины - нам отлично подошел кронштейн для детской площадки.
- Настенная бородавка 9в
- Сверлильный станок 40мм
- Болты, гайки, шайбы, распорки
- Проволока с твердым сердечником
- Паяльник и припой
- Макетная плата
- Пластиковый корпус для Arduino. Вы можете пойти и купить действительно красивый, идеально подогнанный пластиковый футляр, сделанный из нефти, которой миллион лет назад пробурено из земли в какой-то хрупкой среде, произведено на другой стороне планеты и отправлено в контейнере на склад рядом с вами со всеми необходимыми принадлежностями. порты вырезаны идеально совмещены, и он будет доставлен к вашей двери на фургоне, выбрасывающем углекислый газ в атмосферу. Или вы можете сделать то же самое, что и я, и использовать старую выброшенную пластиковую коробку… в данном случае мадагаскарский пластырь, лежащий в аптечке… и просверлить в ней несколько отверстий. Здесь заканчивается лекция. Давайте сделаем…
Шаг 1: Сделайте основу


Вы можете импровизировать свою базу из того хлама, что есть в вашем собственном подвале, или даже просто использовать деревянный ящик или что-нибудь, что скроет вашу электронику.
Сначала мы просверлили три отверстия, равномерно расположенных на деревянной пластине, достаточно больших, чтобы в них поместились кольца Neopixel. На изображении отверстия - это лунки, просверленные перфоратором. В конце концов, из-за большего размера колец с 12 светодиодами пришлось сверлить отверстия сверлом. Это означало пройти через пластину полностью, и вместо того, чтобы аккуратно затягивать кольца в их тонко обработанные маленькие лунки глубиной 2 мм с центральным отверстием для аккуратной прокладки проволоки, я закончил тем, что закрепил кольца … кхм … изолентой по дну пластины. Не судите. В любом случае в моем дизайне нижнюю часть тарелки не видно. И темно, когда он включен. А кроме того - что не так с изолентой?
Мне нужен был зазор между пластиной и кронштейном для макета в нижней части пластины и одного компонента - конденсатора, а также для проводов, которые должны были пройти от макета к Arduino, которые я планировал поместить внутри кронштейна. Поэтому я поставил набор самодельных проставок на оси болтов, чтобы обеспечить достаточный зазор - около 3 см, высота макета и немного, чтобы не сломать проводку. Я использовал по два деревянных анкерных болта на каждый угол, потому что они были подходящей высоты и лежали в мужском ящике … эта коробка с незакрепленными винтами, болтами, гвоздями, ржавыми звеньями цепи, шланговыми муфтами, старыми монетами, неожиданно острыми предметами и всем прочим. кусочков и бобов, которые могут волшебным образом спасти вас от похода в строительный магазин, предлагая если не то, что вам нужно, то то, что вам подойдет.
Счастливый случай с столбиком для детской площадки, который я нашел в подвале, потому что в пластине уже были дыры. Не нужно сверлить железо! В основании было четыре отверстия для болтов, и мы просверлили четыре отверстия с утопленной в деревянной пластине, чтобы они соответствовали друг другу.
Затем мы раскрасили все это спреем Gothic Black.
Шаг 2: подготовка колец Neopixel

Вам нужно будет припаять провода к вашим кольцам neopixel: провод для ввода данных для всех, провод для вывода данных для двух из них, а также питание и заземление для каждого. Какой бы длины вы ни считали нужной, добавьте немного. Лишнюю проволоку всегда можно отрезать, слишком короткую нельзя растягивать. И помните о предупреждении от Adafruit:
При пайке проводов к этим кольцам нужно проявлять особую бдительность в отношении пятен припоя и коротких замыканий. Расстояние между компонентами очень маленькое! Часто проще всего вставить провод спереди и припаять сзади.
Я бы хотел прочитать это до того, как припаял к передней панели. Мне удалось не пережечь ни один из моих светодиодов, но я опалил край одного так, что я вспотел, пока не включил его. Кроме того, если бы я прочитал прекрасное руководство, я бы также прочитал предупреждение не ставить зажим из крокодиловой кожи на светодиод. Пусть мои близкие к кораблекрушению останки будут твоим маяком.
Neopixel подключается к шлейфу, что означает, что вы можете управлять всеми их светодиодами одновременно с Arduino, подключив провод от ВЫХОДА одного кольца к ВХОДУ другого. Каждому кольцу также нужны провода питания и заземления.
Шаг 3: Электромонтаж

Подключите его, как в приведенном выше описании Fritzing - контакт 6 Arduino передает данные в первое кольцо, выход данных из этого кольца идет на вход данных следующего, выход данных из этого кольца идет в Данные последнего звонка. Вам не нужен провод вывода данных последнего кольца.
Емкость 1000 мкФ проходит между положительной и отрицательной шинами макетной платы. Этот колпачок защищает кольца от скачков напряжения и рекомендован разделом лучших практик Adafruit NeoPixel Uberguide. Резистор на Data in до первого неопикселя также рекомендован Adafruit - он 1K для Fritzing, но рекомендуемое сопротивление составляет 300-500 Ом.
В моей сборке я проложил провода от Neopixels через заднюю часть пластины к макетной плате, закрепленной в центре. Таким образом, вам нужно будет провести к базовому блоку только три длинных провода: питание, заземление и данные. Я сделал эти провода сверхдлинными - в основании достаточно места для хранения вещей, и это позволяет удобно вытаскивать плату для перепрограммирования.
Шаг 4: Код
"loading =" lazy "упомянул, что моему сыну нужна музыкально-реактивная версия этого. Потребовалось до своего 18-летия, чтобы дойти до этого, но вот оно!
Дополнительное оборудование:
1 однополюсный переключатель двойного направления 1 микрофон с автоматической регулировкой усиления (я использовал MAX9184 от AdaFruit) 1 конденсатор 1 мкФ-100 мкФ (любое значение)
Для правильной работы микрофон действительно должен иметь автоматическую регулировку усиления. AGC будет постоянно измерять окружающий шум и повышать и понижать порог, который он считает фоном, поэтому ваш свет будет реагировать на всплески на этом фоне. Микрофон AdaFruit великолепен: вы можете перейти из тихой комнаты, в которой звук одного голоса вызовет его, в полноценный режим вечеринки с комнатой, полной подростков и ревущей музыки, и он просто улавливает ритм музыки отлично. Альтернатива, микрофон с регулируемым усилением, имеет крошечный потенциометр на плате, который невероятно тонкий и неудобный. Чтобы сделать устройство бесполезным, не требуется больших изменений в окружающем звуке: постоянно горит свет или постоянно темно. AGC работает как по волшебству.
Мне нужна была возможность использовать тестовый образец завихрения или музыку, поэтому я подключил центральный вывод переключателя к VIN, а один вывод - к контакту 4, другой - к контакту 8 Леонардо. Проверяя эти контакты на HIGH или LOW, мы можем узнать, в каком состоянии находится переключатель, и соответственно код ветвления.
Шаг 7: Подключение микрофона

Подайте микрофонный вход через этот конденсатор 1-100 мкФ на аналоговый вывод 0. Если ваш конденсатор поляризован, выходной вывод идет на положительную сторону (зеленый провод).
Спасибо CodeGirlJP за ее программу раскраски безделушек по звуку, которую я адаптировал ниже:
// Звуковые активируемые светодиоды с Arduino и NeoPixels
#включают
#define MIC_PIN A0 // Микрофон подключен к контакту a0 на Leonardo
#define LED_PIN 6 // Нить светодиода NeoPixel подключена к контакту 6 на плате Leonardo #define N_PIXELS 36 // количество пикселей в нити светодиода !!!!!! Отрегулируйте количество пикселей в вашей настройке. Это верно для 3-х колец Neopixel !!!!!! #define N 100 // Количество выборок, которые нужно брать каждый раз, когда вызывается readSamples #define fadeDelay 5 // время задержки для каждой величины затухания #define noiseLevel 30 // крутизна среднего шума микрофона без звука
// Инициализируем полосу NeoPixel с указанными выше значениями:
Полоса Adafruit_NeoPixel = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
int samples [N]; // хранилище для набора образцов
int periodFactor = 0; // отслеживаем количество мс для расчета периода int t1 = -1; // время наклона> 100 обнаружено. int T; // период между временами масштабируется до миллисекунд int slope; // наклон двух точек выборки собранных данных byte periodChanged = 0; const int SwitchPinMusic = 4; // Пин для положения переключателя чувствительности к музыке const int SwitchPinSwirl = 8; // Пин для положения переключателя Test Pattern (swirl) int MusicbuttonState = 0; // Вкл. Логическая переменная для чувствительности к музыке
// Метод настройки Arduino
void setup () {
strip.begin ();
ledsOff (); задержка (500); displayColor (Колесо (100)); strip.show (); задержка (500); oddWheel (Колесо (100)); strip.show (); задержка (500); pinMode (SwitchPinMusic, ВХОД); pinMode (SwitchPinSwirl, ВХОД); // attachInterrupt (4, Switched, ПАДЕНИЕ);
}
// Метод цикла Arduino
недействительный цикл () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // ВЫСОКИЙ, если переключатель установлен в положение Чувствительность к музыке MusicbuttonState = digitalRead (SwitchPinMusic); // ВЫСОКИЙ, если переключатель установлен в положение Тестовый образец while (SwirlbuttonState == LOW) {readSamples (); // Запускаем процедуру сэмплирования музыки SwirlbuttonState = digitalRead (SwitchPinSwirl); // Проверяем, был ли изменен переключатель} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); в то время как (SwirlbuttonState == HIGH) {Dance (); // Запускаем процедуру тестового шаблона SwirlbuttonState = digitalRead (SwitchPinSwirl); // Проверяем, был ли изменен переключатель
}
}
void Dance () {
в то время как (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Красный SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (strip. Color (0, 255, 0), 50); // Зеленый SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (strip. Color (0, 0, 255), 50); // Синий SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Белый RGBW // Отправляем погоню за пикселями театра в… SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (127, 127, 127), 50); // Белый SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (127, 0, 0), 50); // Красный SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (0, 0, 127), 50); // Синий SwirlbuttonState = digitalRead (SwitchPinSwirl); радуга (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); rainbowCycle (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Считываем и обрабатываем образцы данных из микрофона void readSamples () {for (int i = 0; i0) {slope = samples - samples [i-1]; } else {slope = samples - образцы [N-1]; } // Проверяем, больше ли Slope, чем noiseLevel - обнаружен звук не на уровне шума if (abs (slope)> noiseLevel) {if (slope <0) {calculatePeriod (i); если (periodChanged == 1) {displayColor (getColor (T)); }}} еще {ledsOff (); // TheaterChaseRainbow (50); } periodFactor + = 1; задержка (1); }}
недействителен calculatePeriod (int i)
{if (t1 == -1) {// t1 не установлен t1 = i; } else {// t1 было установлено так: calc period int period = periodFactor * (i - t1); periodChanged = T == период? 0: 1; T = период; //Serial.println(T); // сбрасываем t1 на новое значение i t1 = i; periodFactor = 0; }}
uint32_t getColor (период int)
{if (period == -1) return Wheel (0); иначе, если (период> 400) return Wheel (5); else return Wheel (map (-1 * период, -400, -1, 50, 255)); }
void fadeOut ()
{для (int я = 0; я <5; я ++) {strip.setBrightness (110 - я * 20); strip.show (); // Обновление задержки полосы (fadeDelay); periodFactor + = fadeDelay; }}
void fadeIn ()
{strip.setBrightness (100); strip.show (); // Обновление полосы // постепенное увеличение цвета for (int i = 0; i <5; i ++) {//strip.setBrightness(20*i + 30); //strip.show (); // Обновление задержки полосы (fadeDelay); periodFactor + = fadeDelay; }}
void ledsOff ()
{ исчезать(); для (int i = 0; i
void displayColor (цвет uint32_t)
{для (int i = 0; i
void oddWheel (цвет uint32_t)
{for (int j = 0; j <256; j ++) {// цикл всех 256 цветов в колесе for (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i + 3) {strip.setPixelColor (i + q, Wheel ((i + j)% 255)); // включаем каждый третий пиксель} strip.show ();
задержка (1);
для (uint16_t я = 24; я <36; я = я + 3) {strip.setPixelColor (я + q, 0); // отключаем каждый третий пиксель}}} fadeIn (); }
// Заливаем точки одну за другой цветом
void colorWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i
пустая радуга (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 <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); задержка (ждать); }}
// Ползущие огни в театральном стиле.
void TheaterChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// делаем 10 циклов погони за (int q = 0; q <3; q ++) {for (uint16_t i = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, c); // включаем каждый третий пиксель} strip.show ();
задержка (ждать);
для (uint16_t я = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, 0); // выключаем каждый третий пиксель}}}}
// Ползущие огни в театральном стиле с эффектом радуги
void TheaterChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// цикл всех 256 цветов в колесе for (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i + 3) {strip.setPixelColor (i + q, Wheel ((i + j)% 255)); // включаем каждый третий пиксель} strip.show ();
задержка (ждать);
для (uint16_t я = 0; я <strip.numPixels (); я = я + 3) {strip.setPixelColor (я + q, 0); // выключаем каждый третий пиксель}}}}
// Введите значение от 0 до 255, чтобы получить значение цвета.
// Цвета представляют собой переход r - g - b - обратно к r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos - = 85; возвратная полоса. Color (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos - = 170; возвратная полоса. Цвет (WheelPos * 3, 255 - WheelPos * 3, 0); }
void Switched () {
strip.show (); readSamples (); }
Прежде чем меня забьют в комментариях (помните политику Be Nice !!), я понял, после того как загрузил это, насколько небрежным является мой код. Нет необходимости постоянно проверять контакты 4 и 8 на ВЫСОКИЙ. Поскольку переключатель является однополюсным, с двойным переключением, значение одного можно вывести из другого: вам нужно только проверить один. Таким образом, вы можете пройти и удалить все ссылки на чтение и запись MusicButtonState и просто запустить все это более эффективно, протестировав SwirlButtonState, если у вас мало памяти или расширение с помощью других подпрограмм. Но приведенный выше код работает.
И если кто-то хочет настроить эти звуковые подпрограммы, чтобы определять не только уровни шума, но и частоту, и написать некоторый плавный код, чтобы скользить вверх и вниз по световому спектру в ответ на движения по звуковому спектру, оставьте ссылку в комментариях на как ты это сделал.
Наслаждаться!
Рекомендуемые:
FuseLight: превратите старый / Fused Tubelight в студийный / Party Light: 3 шага (с изображениями)

FuseLight: превратите старый / Fused Tubelight в Studio / Party Light: здесь я превратил Fused Tubelight в Studio / Part light, используя некоторые основные инструменты, RGB-освещение и 3D-печать. Благодаря использованию светодиодных лент RGB мы можем иметь несколько цветов и оттенков
Игрушки Switch-Adapt: Luditek LED Party Light: 7 шагов

Игрушки Switch-Adapt: Luditek LED Party Light: адаптация игрушек открывает новые возможности и индивидуальные решения, позволяющие детям с ограниченными двигательными способностями или нарушениями развития самостоятельно взаимодействовать с игрушками. Во многих случаях дети, которым требуются адаптированные игрушки, не могут
Neopixel Ws2812 Радужный светодиодный светильник с ручкой M5stick-C - Запуск Rainbow на Neopixel Ws2812 с использованием M5stack M5stick C с использованием Arduino IDE: 5 шагов

Neopixel Ws2812 Радужный светодиодный светильник с ручкой M5stick-C | Запуск Rainbow на Neopixel Ws2812 с использованием M5stack M5stick C с использованием Arduino IDE: Привет, ребята, в этой инструкции мы узнаем, как использовать светодиоды neopixel ws2812 или светодиодную ленту, светодиодную матрицу или светодиодное кольцо с платой разработки m5stack m5stick-C с Arduino IDE, и мы сделаем радуга с этим
Neopixel Night Light: 14 шагов (с изображениями)

Neopixel Night Light: Через несколько недель я провожу несколько семинаров по электронике, посвященных недорогому, но полезному проекту в реальном мире. Когда я пытался придумать что-то, я хотел задействовать микроконтроллер, светодиоды NeoPixel (потому что они классные)
Сервировочная доска для суши Neopixel Light Up: 6 шагов (с изображениями)

Доска для обслуживания суши Neopixel Light Up: производитель должен делать. &Ldquo; Но одна из вещей, ради которой люди будут приходить, - это каждый должен есть ” Кристи Канида on InstructablesНа пересечении еды, технологий и зоны голода, сделайте эту светящуюся доску для сервировки суши, чтобы лучше