Diy

Обновите свой рождественский венок с помощью светодиодной матрицы Motion Activated

Обновите свой рождественский венок с помощью светодиодной матрицы Motion Activated

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

В этом проекте мы будем с нуля создавать защищенную от непогоды и активирующую движение матрицу 8 x 8 светодиодов за менее чем 20 долларов. Он предназначен для размещения в центре стандартного рождественского дверного венка, хотя его можно использовать в любом месте дома. И так как он работает от батареи, в любом месте вдали от дома тоже!

Список деталей

Для этого проекта вам понадобится:

  • Arduino.
  • 64 х красные светодиоды .
  • 8 х 220 Ом резисторов.
  • ИК-датчик движения.
  • 1 кусок макетной платы .
    • Один использованный здесь был 9 х 7 см, хотя вы можете использовать любой размер, который вы хотите.
  • Аккумулятор 7-12В.
  • Ассорти короткие кусочки проволоки.
  • Коробка Tupperware или подобный защищенный от непогоды корпус.
    • Убедитесь, что он будет достаточно большим, чтобы вместить все ваши компоненты внутри!
  • Рождественский венок.
    • Любой подойдет, просто убедитесь, что коробка корпуса будет вмещаться в него.
  • Паяльник и припой.

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

Рождественский венок светодиодные матрицы частей

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

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

Настройка Arduino

Мы начнем с принципиальной схемы Arduino и проводов, которые мы будем подключать к нашему ИК-датчику и светодиодной матрице.

фризирование венка

Внутри Матрицы

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

тестирование где поставить светодиоды

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

Мы собираемся построить общую катодную матрицу строк, эта диаграмма показывает, как все это связано.

сомнение

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

Пусть пайка начнется

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

протоэластик

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

катодная складка припоя

Повторите этот процесс для всех восьми строк, и когда вы закончите, у вас должно получиться что-то вроде этого:

картина готовых рядов

Прыгающие аноды!

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

бен паяные аноды

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

закончил пайку

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

тестовая матрица

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

Давайте получим кодирование

Откройте Arduino IDE и выберите свою плату и порт. Если вы новичок в Arduino, ознакомьтесь с этим руководством по началу работы.

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

const int row[8] = { 2,3,4,5,6,7,8,9 }; const int col[8] ={ 10,11,12,14,15,16,17,18 }; int pirPin = 19; int pirState = LOW; int val = 0; bool pirTrigger = false; const int pirLockTime = 12000; int pirCountdown = pirLockTime; int pixels[8][8]; const int refreshSpeed = 500; int countDown = refreshSpeed; int currentCharIndex = 0; typedef bool CHAR_MAP_NAME[8][8]; const CHAR_MAP_NAME blank = { {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, }; const CHAR_MAP_NAME threedownthreein = { {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 1 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0}, }; const int noOfFrames = 5; const CHAR_MAP_NAME *charMap[noOfFrames] ={ &blank, &threedownthreein, &blank, &blank, &threedownthreein }; void setup(){ for (int i=0;i<8;i++){ pinMode(row[i], OUTPUT); pinMode(col[i],OUTPUT); //motion sensor pinMode(pirPin, INPUT); digitalWrite(col[i], LOW); } } void screenSetup(){ const CHAR_MAP_NAME *thisMap = charMap[currentCharIndex]; for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { bool on = (*thisMap)[x][y]; if(on) { pixels[x][y] = HIGH; } else { pixels[x][y] = LOW; } } } currentCharIndex++; if(currentCharIndex>=noOfFrames){ currentCharIndex = 0; } } void refreshScreen(){ for (int currentRow = 0; currentRow < 8; currentRow++){ digitalWrite(row[currentRow], LOW); for (int currentCol = 0; currentCol < 8; currentCol++){ int thisPixel = pixels[currentRow][currentCol]; digitalWrite(col[currentCol], thisPixel); if (thisPixel == HIGH) { digitalWrite(col[currentCol], LOW); } } digitalWrite(row[currentRow], HIGH); } } void loop(){ val = digitalRead(pirPin); if (val == HIGH){ pirTrigger = true; } else if (val == LOW && pirCountdown <=0) { pirTrigger=false; pirCountdown = pirLockTime; } if(pirTrigger==true && pirCountdown > 0) { refreshScreen(); countDown--; pirCountdown--; if(countDown <= 0) { countDown = refreshSpeed; screenSetup(); } } } 

Важные части для понимания:

Переменная refreshSpeed . Эта переменная определяет, как время между обновлениями экрана. Чем больше число, тем дольше ждать.

Const CHAR_MAP_NAME s. Здесь вы размещаете каждую карту персонажей (или фрейм, если вам проще думать о них таким образом), которую вы хотите отобразить.

Переменная noOfFrames . Это определяет, сколько кадров отображается за один полный просмотр. Обратите внимание, что оно может отличаться от количества карт персонажей. Например, если вы хотите отобразить «A CAT», вам нужно будет определить только четыре отдельных кадра: пусто, A , C и T.

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

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

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

Сделай это смелым стихии

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

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

погодостойкий

Затем сделайте небольшое отверстие под окном, затем осторожно и медленно расширяйте его до тех пор, пока ваш ИК-датчик не сможет пройти через него. Вы хотите, чтобы это соответствовало как можно более плотно.

вырезать отверстие

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

клей пир

Очистите любую ленту или клей, которые могут помешать правильному закрытию коробки, и добавьте все свои компоненты в коробку вместе с аккумулятором. Здесь был использован простой батарейный блок АА, подключенный непосредственно к выводу VCC Nano. Несколько маленьких кусочков пробки были добавлены снаружи корпуса, чтобы помочь повесить сборку в центре венка.

И мы сделали

После того, как коробка запечатана, повесьте ее с рождественским венком и дождитесь реакции посетителей на ваш высокотехнологичный персональный прием за $ 20! Вы могли бы даже сделать еще один шаг вперед и создать удивительные украшения для DIY, украшения с для других мест вокруг дома тоже!

готовая светодиодная матрица рождественский венок сделай сам

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

Вы строите что-нибудь, чтобы придать своему рождеству изюминку? Планируете ли вы рождественские подарки DIY тематические в этом году? Дайте нам знать в комментариях ниже!

Похожие посты
Diy

Вещи, которые вы должны иметь в виду, прежде чем брать ноутбук или смартфон в службу технической поддержки

Diy

Как использовать Arduino для съемки красивой скоростной фотографии

DiyLinux

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

Diy

Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программы