Литофановая лампа
Эта модель вмещает 2 литофана размером 100х70 мм и 1 литофан размером 100х60 мм. К сожалению, в этой конструкции все еще есть несколько проблем, которые я хочу исправить в будущем.
Я использовал светодиод WS2812B и Arduino nano. Если у вас есть вопросы, задавайте их в комментариях.
Я использовал этот сайт для создания литофана https://tool.itslitho.com/CreateModel.
Вам нужно выбрать Границу в качестве Рамки.
Руководство по строительству:
что вам нужно:
Версия 1:
Ардуино Нано
6 светодиодных лент по 5 светодиодов.
1 кнопка 6x6x4,5 мм
соединительный кабель
6 винтов
Версия 2:
Ардуин�� Нано
6 светодиодных лент по 5 светодиодов.
1 кнопка 6x6x4,5 мм
соединительный кабель
4 круглых магнита 5x1 мм.
Версию 1 построить намного проще.
также используйте изображения на обложке, чтобы получить лучшее представление.
Шаг 1:
3x подключения 5 В к 5 В, Din к Dout и GND к GND
следите за стрелкой на светодиодной ленте.
Шаг 2:
3x подключения 1 соединительного кабеля «мама» t 5 В, Din и GND
Шаг 3:
возьмите один из светодиодных наконечников и подключите соединительные кабели, как показано на рисунке.
Шаг 4:
Возьмите кнопку и подключите к ней соединительные кабели с внутренней резьбой, как показано на рисунке.
Шаг 5:
теперь можно клеить светодиодные ленты в рамки
Базовый кадр:
Шаг 6:
возьмите подставку и нажмите кнопку в отверстии.
возможно, отверстие нужно немного увеличить, для этого можно использовать напильник или паяльник.
Шаг 7:
теперь можно все соединить и прикрутить.
Шаг 8:
наконец, вам нужно подключить все к Arduino Nano и загрузить код.
Светодиодная лента:
DIN к контакту 6 (D6)
от 5 В до 5 В
Земля к земле
кнопка:
один кабель с контактом 3 (D3)
другой кабель с GND
/ анимация. В исходном состоянии все пиксели отключены — нажмите кнопку один раз, чтобы
// запускаем первую анимацию. Как написано, кнопка не прерывает
// анимация в процессе, работает только в режиме ожидания.
#include
#ifdef __AVR__
#include // Требуется для Adafruit Trinket с частотой 16 МГц
#endif
// Цифровой вывод ввода-вывода, подключенный к кнопке. Это будет осуществляться с помощью
// подтягивающий резистор, чтобы переключатель на мгновение замыкал контакт на землю.
// При переходе от высокого к низкому будет выполняться логика нажатия кнопки.
#define BUTTON_PIN 3
#define PIXEL_PIN 6 // Цифровой вывод ввода-вывода, подключенный к NeoPixels.
#define PIXEL_COUNT 30 // Количество неопикселей
// Объявляем наш объект полосы NeoPixel:
Полоса Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
// Аргумент 1 = Количество пикселей в полосе NeoPixel
// Аргумент 2 = номер контакта Arduino (большинство из них действительны)
// Аргумент 3 = Флаги типа пикселя, суммируйте по мере необходимости:
// NEO_KHZ800 Битовый поток 800 кГц (большинство продуктов NeoPixel со светодиодами WS2812)
// NEO_KHZ400 400 кГц (классические пиксели FLORA 'v1' (не v2), драйверы WS2811)
// Пиксели NEO_GRB подключены к битовому потоку GRB (большинство продуктов NeoPixel)
// Пиксели NEO_RGB подключены к битовому потоку RGB (пиксели v1 FLORA, а не v2)
// NEO_RGBW Пиксели подключены к битовому потоку RGBW (продукты NeoPixel RGBW)
логическое значение oldState = ВЫСОКИЙ;
режим int = 0; // Активный в данный момент режим анимации, 0-9
недействительная настройка() {
pinMode (BUTTON_PIN, INPUT_PULLUP);
полоса.начать(); // Инициализируем объек�� полосы NeoPixel (ОБЯЗАТЕЛЬНО)
полоса.шоу(); // Инициализируем все пиксели как «выключенные»
}
недействительный цикл() {
// Получаем текущее состояние кнопки.
логическое значение newState = digitalRead(BUTTON_PIN);
// Проверяем, изменилось ли состояние с высокого на низкое (нажатие кнопки).
if((newState == LOW) && (oldState == HIGH)) {
// Короткая задержка для кнопки устранения дребезга.
задержка(20);
// Проверяем, находится ли кнопка в низком состоянии после устранения дребезга.
newState = digitalRead (BUTTON_PIN);
if(newState == LOW) { // Да, все еще низкий
если (++режим > 5) режим = 0; // Переход к следующему режиму, переход после #8
switch(mode) { // Запускаем новую анимацию...
случай 0:
colorWipe(strip.Color(0, 0, 0), 50); // Черный/выкл.
перерыв;
случай 1:
colorWipe(strip.Color(255, 0, 0), 50); // Красный
перерыв;
случай 2:
colorWipe(strip.Color(0, 255, 0), 50); // Зеленый
перерыв;
случай 3:
colorWipe(strip.Co