Оглавление:

Зеркало Infinity с ЖК-дисплеем и ИК-датчиком: 5 шагов
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком: 5 шагов

Видео: Зеркало Infinity с ЖК-дисплеем и ИК-датчиком: 5 шагов

Видео: Зеркало Infinity с ЖК-дисплеем и ИК-датчиком: 5 шагов
Видео: У Кремля снесло строительные леса , обрушившие зубцы ( 2024, Ноябрь
Anonim
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком
Зеркало Infinity с ЖК-дисплеем и ИК-датчиком

Этот проект покажет вам, как можно сделать зеркало бесконечности. Основная концепция заключается в том, что светодиоды, которые находятся на зеркале, создают свет, который отражается от заднего зеркала к переднему зеркалу, где часть света уходит, чтобы мы могли видеть внутри, а некоторые отражались обратно в заднее зеркало и производили бесконечный эффект. Это основано на Infinity Mirror с ультразвуковыми датчиками, инструктируемых Hack Sioux Falls и How to Connect I2C Lcd Display to Arduino Uno by JunezRiyaz.

Запасы

1. Коробка с тенями (50 долларов).

2. Односторонняя зеркальная пленка (17 долларов США).

3. Светодиодная лента RGB (30 долларов США).

4. Arduino (35 долларов).

5. Зеркало (10 долларов).

По желанию:

1. ИК-датчик и пульт дистанционного управления (20 долларов США)

2. ЖК-дисплей (20 долларов).

3. 7 штекерных разъемов

4. 3 штекерных разъема

Инструменты

1. Паяльник

2. Кусачки и стриппер.

3. Что-нибудь, чем можно разрезать зеркало.

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

Шаг 1: Установка зеркала и зеркальной пленки

Установка зеркала и зеркальной пленки
Установка зеркала и зеркальной пленки
Установка зеркала и зеркальной пленки
Установка зеркала и зеркальной пленки

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

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

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

Шаг 2: Установка светодиодной ленты

Установка светодиодной ленты
Установка светодиодной ленты
Установка светодиодной ленты
Установка светодиодной ленты

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

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

Шаг 3. Установка ИК-датчика и ЖК-дисплея (необязательно)

Установка ИК-датчика и ЖК-дисплея (дополнительно)
Установка ИК-датчика и ЖК-дисплея (дополнительно)
Установка ИК-датчика и ЖК-дисплея (дополнительно)
Установка ИК-датчика и ЖК-дисплея (дополнительно)
Установка ИК-датчика и ЖК-дисплея (дополнительно)
Установка ИК-датчика и ЖК-дисплея (дополнительно)

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

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

Для подключения ЖК-дисплея и ИК-приемника я использовал разъемы «папа-мама», которые подключаются к Arduino для передачи данных, а также заземления и питания. Чтобы подключить все, я использовал контакт 12 с резистором 2 кОм на контакте данных для ИК-датчика, аналоговый контакт A4 для SDA ЖК-дисплея и аналоговый контакт 5 для SCL ЖК-дисплея.

Шаг 4: Код

Для этого проекта я использую несколько библиотек, которые вам придется загрузить для использования. Я собираюсь разместить их здесь, имейте в виду, что я работаю в Windows, поэтому это может повлиять на вас, если вы используете Mac или Linux.

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

// Библиотеки

#include Adafruit_NeoPixel.h> #include #include #include // Пины и постоянные значения // Пины и постоянные значенияconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results результаты; беззнаковый длинный key_value = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel пикселей = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, ПОЛОЖИТЕЛЬНЫЙ); // Переменные int IRNumb; int IRNumb2; int радуга = 0; uint32_t rainbowColor = пикселей. Цвет (0, 0, 0); ввод символа = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Инициализирует элементы, которые не нужно повторять. lcd.begin (16, 2); // Определение 16 столбцов и 2 строк ЖК-дисплея lcd.backlight (); // Для включения подсветки Serial.begin (9600); pixel.begin (); irrecv.enableIRIn (); Serial.println («Введите 0, чтобы выключить свет»); // Начало инструкций Serial.println («Введите 1, чтобы светодиоды стали белыми»); Serial.println («Введите 2, чтобы светодиоды меняли разные цвета»); Serial.println («Введите 3, чтобы настроить цвета светодиодов вручную»); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Проверяет, доступен ли символ? input = (char) Serial.read (); } // Выбирает различные варианты if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Белый setAll (rainbowColor); // Обновляет светодиоды} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Выкл. SetAll (rainbowColor); // Обновляет светодиоды} else if (input == '2' || IRNumb == 2) {breakCondition = 0; г = 0; г = 0; b = 0;

Serial.println («Введите что-нибудь, кроме 2, чтобы выйти из этого эффекта, затем любой из предыдущих вариантов для нового эффекта.»);

lcd.clear (); // Очистить экран lcd.setCursor (0, 0); lcd.print («Выйти с помощью любого-»); lcd.setCursor (0, 1); lcd.print ("замолчать! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Проверяет необходимость выхода из эффекта rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; перерыв; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); задержка (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Проверяет необходимость выхода из эффекта rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; перерыв; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); задержка (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Проверяет необходимость выхода из эффекта rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; перерыв; } r + = 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); задержка (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Проверяет необходимость выхода из эффекта rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; перерыв; } r + = 2; г + = 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); задержка (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; г = 0; b = 0;

Serial.println («Введите n для выхода»);

Serial.println («Используйте w и s, чтобы увеличить или уменьшить красный цвет»); Serial.println («Используйте r и f, чтобы увеличить или уменьшить зеленый цвет»); Serial.println («Используйте y и h для увеличения или уменьшения синего цвета»); lcd.clear (); // Очистить экран lcd.setCursor (0, 0); lcd.print («выход: 0, 4/7: +/- красный»); lcd.setCursor (0, 1); lcd.print («5/8: зеленый, 6/9: синий»);

while (input2! = 'n' || IRNumb2! = 0) {

if (Serial.available ()> 0) {// доступен ли символ? input2 = (символ) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

if (IRNumb2 == 0) {

перерыв; } if (input2 == 'w' || IRNumb2 == 4) {r + = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'r' || IRNumb2 == 5) {g + = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

иначе if (input2 == 'y' || IRNumb2 == 6) {

б + = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

иначе if (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {пикселей.show (); } void setAll (uint32_t color) {для (int я = 0; я <NUMPIXELS; я ++) {пикселей.setPixelColor (я, цвет); }} // Введите значение от 0 до 255, чтобы получить значение цвета. uint32_t colourChange (int r, int g, int b) {вернуть пиксели. Color (r, g, b); } void mainOptions () {// Просмотр основных параметров эффекта lcd.clear (); // Очистка экрана lcd.setCursor (0, 0); lcd.print («0 для выключенного света»); lcd.setCursor (0, 1); lcd.print («1: Белый свет»); задержка (1000); lcd.clear (); // Очистить экран lcd.setCursor (0, 0); lcd.print («2: Цветовой эффект»); lcd.setCursor (0, 1); lcd.print («3: Руководство»); задержка (1000); } void IRScan () {if (irrecv.decode (& results)) {

если (results.value == 0XFFFFFFFF)

results.value = key_value; else {//Serial.println(results.value, HEX); если (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } иначе, если (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } иначе, если (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } иначе, если (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } иначе, если (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } иначе, если (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } иначе, если (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (& results)) {

если (results.value == 0XFFFFFFFF)

results.value = key_value; else {// Serial.println (results.value, HEX); если (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } иначе, если (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } иначе, если (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } иначе, если (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } иначе, если (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } иначе, если (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } иначе, если (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } иначе, если (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } иначе, если (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}

Шаг 5: Монтаж

Монтаж
Монтаж

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

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