Оглавление:

Светодиодные глаза с дистанционным управлением и капюшон: 7 шагов (с изображениями)
Светодиодные глаза с дистанционным управлением и капюшон: 7 шагов (с изображениями)

Видео: Светодиодные глаза с дистанционным управлением и капюшон: 7 шагов (с изображениями)

Видео: Светодиодные глаза с дистанционным управлением и капюшон: 7 шагов (с изображениями)
Видео: У Кремля снесло строительные леса , обрушившие зубцы ( 2024, Ноябрь
Anonim

By bekathwiaBecky Stern Follow Еще от автора:

Веб-камера Privacy Friend
Веб-камера Privacy Friend
Веб-камера Конфиденциальность Друг
Веб-камера Конфиденциальность Друг
Рулетка Yagi Antenna с 3D-печатными муфтами
Рулетка Yagi Antenna с 3D-печатными муфтами
Рулетка Yagi Antenna с 3D-печатными муфтами
Рулетка Yagi Antenna с 3D-печатными муфтами
Вышивка Зодиака
Вышивка Зодиака
Вышивка Зодиака
Вышивка Зодиака

О себе: Создавать и делиться - две мои самые большие страсти! Всего я опубликовал сотни уроков обо всем, от микроконтроллеров до вязания. Я мотоциклист из Нью-Йорка и упорная мама-собака. Мое горе… Подробнее о bekathwia »

Twin Jawas! Двойной Орко! Два волшебника-призрака из Bubble-Bobble! Этим капюшоном костюма может быть любое существо со светодиодными глазами, которое вы выберете, просто изменив цвет. Я впервые сделал этот проект в 2015 году с очень простой схемой и кодом, но в этом году я хотел создать обновленную версию с одновременным управлением анимацией для двух костюмов. В этой схеме используется один простой радиочастотный пульт ближнего действия для управления двумя приемниками на одной и той же частоте и код Arduino, использующий прерывания для обеспечения отзывчивых изменений анимации, на основе учебного кода Билла Эрла.

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

  • Два камня NeoPixel
  • Микроконтроллер GEMMA M0
  • Беспроводной приемник 315 МГц, фиксируемый
  • Беспроводной РЧ-пульт 315 МГц в конфигурации с четырьмя, двумя или одной кнопкой
  • Многожильный провод с силиконовым покрытием (рекомендуется 30 AWG)
  • Паяльник и припой
  • Инструмент для зачистки проводов
  • Фрезы заподлицо
  • Пинцет
  • Помощь сторонним инструментом (по желанию)
  • Швейные булавки
  • Портновский мел (по желанию)
  • 19awg оцинкованная стальная проволока
  • Плотная ткань для капюшона / накидки (для этой версии я использовала два слоя белой табачной ткани и один слой белой марли, а затем выстилала внутреннюю часть капюшона сплошным черным цветом, чтобы заблокировать свет)
  • Полупрозрачная ткань черного цвета для лицевой панели
  • Швейная машина
  • Ножницы
  • Иголка и нитка
  • 3D-принтер с гибкой нитью (опционально)

Чтобы быть в курсе того, над чем я работаю, подписывайтесь на меня на YouTube, Instagram, Twitter, Pinterest и подписывайтесь на мою рассылку. Как партнер Amazon я зарабатываю на соответствующих покупках, которые вы совершаете с помощью моих партнерских ссылок.

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

  • Представляем Gemma M0
  • NeoPixel Uberguide
  • Первая версия проекта вытяжки (построена в 2015 году с классической Gemma и без беспроводного управления)
  • Многозадачность Arduino, часть 3

Шаг 1: принципиальная схема и код

Принципиальная схема и код
Принципиальная схема и код

Схемы подключения следующие:

  • Gemma D2 к беспроводному ресиверу D0
  • Gemma D0 к беспроводному приемнику D1
  • Gemma 3V на беспроводной приемник + 5V
  • Gemma GND для беспроводного приемника GND и NeoPixel jewels GND
  • Gemma D1 в данные драгоценного камня NeoPixel IN
  • Gemma Vout для NeoPixel jewels PWR
  • Данные NeoPixel jewel ВЫХОДЯТ на другие данные NeoPixel Jewel ВХОДЯТ

Примечания по сборке см. В следующем шаге.

Код основан на многозадачности эскиза Arduino Билла Эрла и модифицирован для управления двумя камнями NeoPixel с двумя цифровыми входами. Таким образом, вам не нужно использовать беспроводной приемник - вместо этого вы можете использовать кнопки на самой схеме. Загрузите этот файл кода Arduino из вложений этого шага или скопируйте и вставьте отсюда в пустой эскиз Arduino:

#include "Adafruit_NeoPixel.h"

// Поддерживаемые типы шаблонов: шаблон перечисления {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE}; // Поддерживаемые патерновые направления: enum direction {FORWARD, REVERSE}; // Класс NeoPattern - производный от класса Adafruit_NeoPixel class NeoPatterns: public Adafruit_NeoPixel {public: // Переменные-члены: pattern ActivePattern; // направление движения какого паттерна Direction; // направление запуска паттерна unsigned long Interval; // миллисекунды между обновлениями unsigned long lastUpdate; // последнее обновление позиции uint32_t Color1, Color2; // Какие цвета используются uint16_t TotalSteps; // общее количество шагов в шаблоне uint16_t Index; // текущий шаг в шаблоне void (* OnComplete) (); // Обратный вызов при завершении шаблона // Конструктор - вызывает конструктор базового класса для инициализации полосы NeoPatterns (uint16_t пикселей, uint8_t pin, uint8_t type, void (* callback) ()): Adafruit_NeoPixel (пикселей, pin, type) {OnComplete = Перезвоните; } // Обновляем шаблон void Update () {if ((millis () - lastUpdate)> Interval) // время обновления {lastUpdate = millis (); переключатель (ActivePattern) {case RAINBOW_CYCLE: RainbowCycleUpdate (); перерыв; case THEATER_CHASE: TheaterChaseUpdate (); перерыв; case COLOR_WIPE: ColorWipeUpdate (); перерыв; case SCANNER: ScannerUpdate (); перерыв; case FADE: FadeUpdate (); перерыв; по умолчанию: перерыв; }}} // Увеличиваем индекс и сбрасываем в конце void Increment () {if (Direction == FORWARD) {Index ++; если (Индекс> = TotalSteps) {Индекс = 0; если (OnComplete! = NULL) {OnComplete (); // вызываем обратный вызов comlpetion}}} else // Направление == REVERSE {--Index; если (Индекс <= 0) {Индекс = TotalSteps-1; если (OnComplete! = NULL) {OnComplete (); // вызываем обратный вызов comlpetion}}}} // Обратное направление шаблона void Reverse () {if (Direction == FORWARD) {Direction = REVERSE; Индекс = TotalSteps-1; } else {Направление = ВПЕРЕД; Индекс = 0; }} // Инициализируем для RainbowCycle void RainbowCycle (интервал uint8_t, направление dir = FORWARD) {ActivePattern = RAINBOW_CYCLE; Интервал = интервал; TotalSteps = 255; Индекс = 0; Направление = dir; } // Обновляем шаблон цикла радуги void RainbowCycleUpdate () {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, Wheel (((i * 256 / numPixels ()) + Index) & 255)); } Показать(); Приращение (); } // Инициализация для Theater Chase void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD) {ActivePattern = THEATER_CHASE; Интервал = интервал; TotalSteps = numPixels (); Color1 = color1; Color2 = color2; Индекс = 0; Направление = dir; } // Обновляем шаблон Theater Chase void TheaterChaseUpdate () {for (int i = 0; i <numPixels (); i ++) {if ((i + Index)% 3 == 0) {setPixelColor (i, Color1); } еще {setPixelColor (i, Color2); } } Показать(); Приращение (); } // Инициализируем ColorWipe void ColorWipe (цвет uint32_t, интервал uint8_t, направление dir = FORWARD) {ActivePattern = COLOR_WIPE; Интервал = интервал; TotalSteps = numPixels (); Color1 = цвет; Индекс = 0; Направление = dir; } // Обновляем шаблон вытеснения цвета void ColorWipeUpdate () {setPixelColor (Index, Color1); Показать(); Приращение (); } // Инициализируем сканер пустоты SCANNNER (uint32_t color1, uint8_t interval) {ActivePattern = SCANNER; Интервал = интервал; TotalSteps = (numPixels () - 1) * 2; Color1 = color1; Индекс = 0; } // Обновляем шаблон сканера void ScannerUpdate () {for (int i = 0; i > 1, зеленый (цвет) >> 1, синий (цвет) >> 1); return dimColor; } // Устанавливаем все пиксели в цвет (синхронно) void ColorSet (uint32_t color) {for (int i = 0; i> 16) & 0xFF; } // Возвращает зеленый компонент 32-битного цвета uint8_t Green (uint32_t color) {return (color >> 8) & 0xFF; } // Возвращает синий компонент 32-битного цвета uint8_t Blue (uint32_t color) {return color & 0xFF; } // Введите значение от 0 до 255, чтобы получить значение цвета. // Цвета представляют собой переход r - g - b - обратно к r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return Color (255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos <170) {WheelPos - = 85; return Color (0, WheelPos * 3, 255 - WheelPos * 3); } else {WheelPos - = 170; вернуть Color (WheelPos * 3, 255 - WheelPos * 3, 0); }}}; void JewelsComplete (); // Определить несколько NeoPatterns для двух колец и палки // а также несколько подпрограмм завершения NeoPatterns Jewels (14, 1, NEO_GRBW + NEO_KHZ800, & JewelsComplete); const int ЯРКОСТЬ = 50; // Инициализируем все и готовимся к запуску void setup () {Serial.begin (115200); pinMode (2, ВХОД); pinMode (0, ВХОД); // Инициализируем все пиксели Jewels.setBrightness (ЯРКОСТЬ); Jewels.begin (); // Запуск шаблона Jewels. TheaterChase (Jewels. Color (255, 50, 0), Jewels. Color (0, 0, 0, 50), 100); } // Основной цикл void loop () {// Обновляем драгоценности. Jewels. Update (); // Переключение шаблонов при нажатии кнопки: if (digitalRead (2) == HIGH) // Кнопка №1 нажата {Jewels. Color1 = Jewels. Color (255, 50, 0); Jewels. ActivePattern = FADE; Jewels. TotalSteps = 100; Драгоценности. Интервал = 1; } else if (digitalRead (0) == HIGH) // Кнопка № 2 нажата {Jewels. Color1 = Jewels. Color (255, 0, 0); Jewels. ActivePattern = СКАНЕР; Jewels. TotalSteps = Jewels.numPixels (); Драгоценности. Интервал = 100; } else // Вернуться к нормальной работе {// Восстановить все параметры шаблона до нормальных значений Jewels. Color1 = Jewels. Color (255, 50, 0); Jewels. ActivePattern = THEATER_CHASE; Jewels. TotalSteps = Jewels.numPixels (); Драгоценности. Интервал = 100; }} // ---------------------------------------------- -------------- // Процедуры завершения - вызываются по завершении шаблона // ---------------------- -------------------------------------- // Обратный вызов завершения драгоценностей void JewelsComplete () {// Случайное изменение цвета для следующего сканирования //Jewels. Color1 = Jewels. Wheel (random (255)); Драгоценности. Реверс (); }

Шаг 2: соберите схему

Собрать схему
Собрать схему
Собрать схему
Собрать схему

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

Используйте тонкие куски многожильного провода (длиной около 6 дюймов / 15 см) для соединения двух драгоценных камней NeoPixel (диаграмма на предыдущем шаге). Если вы используете слишком короткие провода, вы не сможете расположить светодиодные глаза достаточно далеко друг от друга, а если вы используете слишком много провода, провисание будет попадать вам в лицо, пока вы носите костюм.

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

Для соединения Gemma и беспроводного приемника я решил использовать провода для прототипирования с гнездовыми разъемами, поскольку к беспроводному приемнику уже прикреплены контакты.

Шаг 3: Питание от аккумулятора

Заряд батареи
Заряд батареи
Заряд батареи
Заряд батареи

Для питания схемы я использовал липолиевый аккумулятор емкостью 500 мАч. При использовании липолиевой батареи разумно защитить ее от царапин, проколов, ссадин, изгибов и других злоупотреблений. Вы можете обернуть его прочной тканевой лентой или сделать для него 3D-печатный держатель.

Вместо этого вы можете легко использовать держатель 3xAAA (носите его в кармане, а не внутри отворота).

Шаг 4: Выкройка и раскрой ткани

Выкройки и раскрой ткани
Выкройки и раскрой ткани

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

Сложите ткань, совместив кромки кромки, чтобы выровнять волокна ткани, и разместите / приколите детали рисунка вдоль сгиба, как указано. С помощью маркировочного мела или карандаша нарисуйте припуск на шов за пределами выкройки (кроме складки) примерно 5/8 дюйма / 3 см. Поскольку моя ткань была тонкой, я хотел сложить ее вдвое, и, поскольку я сделал два капюшона, в итоге я вырезал четыре части каждого выкройки на основной ткани, затем еще один слой из прозрачной марли, чтобы добавить текстуру снаружи, и в конечном итоге слой черной ткани в качестве подкладки, блокирующей попадание света. Думаю, если бы я заранее планировал это, я мог бы отбросить один из начальных белых слоев, и капюшоны состояли бы только из трех слоев каждый вместо четырех.

Шаг 5: соберите кусочки ткани

Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани
Соберите кусочки ткани

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

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

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

Шаг 6: Установите схему в вытяжку

Установить цепь в вытяжку
Установить цепь в вытяжку

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

Промойте и повторите, если вы делаете вторую вытяжку.

Шаг 7: Носите

Носи это!
Носи это!
Носи это!
Носи это!
Носи это!
Носи это!
Носи это!
Носи это!

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

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

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

  • 13 идей для рассеивания светодиодов
  • Вывеска с рассеянной светодиодной лентой с Arduino / Bluetooth
  • Счетчик подписчиков YouTube с ESP8266
  • Зеркало Easy Infinity
  • 3 ошибки начинающих Arduino

Чтобы не отставать от того, над чем я работаю, подписывайтесь на меня на YouTube, Instagram, Twitter и Pinterest.

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