Съдържание:

Безкрайно огледало с LCD и IR сензор: 5 стъпки
Безкрайно огледало с LCD и IR сензор: 5 стъпки

Видео: Безкрайно огледало с LCD и IR сензор: 5 стъпки

Видео: Безкрайно огледало с LCD и IR сензор: 5 стъпки
Видео: Xiaomi MIBRO A1 Smart Watch Review: A Great Budget Smartwatch for Fitness and Health 2024, Ноември
Anonim
Безкрайно огледало с LCD и IR сензор
Безкрайно огледало с LCD и IR сензор
Безкрайно огледало с LCD и IR сензор
Безкрайно огледало с LCD и IR сензор
Безкрайно огледало с LCD и IR сензор
Безкрайно огледало с LCD и IR сензор

Този проект ще ви покаже как можете да направите огледало за безкрайност. Основната концепция е, че светодиодите, които се намират на огледалото, създават светлина, която отскача от задното огледало към предното огледало, където част от светлината изтича, така че можем да видим вътре, а някои се отразяват обратно към задното огледало и произвеждат безкраен ефект. Това се основава на Infinity Mirror с ултразвукови сензори, инструктирани от Hack Sioux Falls и Как да свържете I2C LCD дисплей към Arduino Uno от JunezRiyaz.

Консумативи

1. Shadow Box ($ 50)

2. Еднопосочен огледален филм ($ 17)

3. RGB LED светлинна лента ($ 30)

4. Arduino ($ 35)

5. Огледало ($ 10)

По избор:

1. IR сензор и дистанционно управление ($ 20)

2. LCD ($ 20)

3. 7 Женски към мъжки конектори

4. 3 конектора мъжки към мъжки

Инструменти

1. Поялник

2. Резачка за тел и стриптизьор

3. Нещо, с което да режеш огледалото

*Обърнете внимание, че всички цени в CAD и размери ще зависят от кутията, която използвате.

Стъпка 1: Инсталиране на огледалото и огледалния филм

Инсталиране на огледалото и огледалния филм
Инсталиране на огледалото и огледалния филм
Инсталиране на огледалото и огледалния филм
Инсталиране на огледалото и огледалния филм

Първото нещо, което трябва да направите, е да инсталирате огледалото, което ще бъде в задната част на сенчестата кутия. Искате или да вземете такъв, който е с правилния размер, или да вземете такъв, който е по -голям и след това да го отрежете. Но за това трябва да използвате огледало, а не филм, защото искаме цялата светлина да се отразява обратно, огледалният филм също може да вземе модела на материала, върху който е, ако не е стъкло.

Когато инсталирате огледалото, не забравяйте да го закрепите в кутията за сянка, бих препоръчал да използвате малки парчета дърво и нокти, за да сте сигурни, че огледалото не се движи. Нямах огледало, докато трябваше да завърша този проект, затова използвах филма (Можете да видите на снимките). Концепцията работи, но не много добре и дава ъглов и хаотичен вид, който според мен не изглежда добре.

Всеки огледален филм ще бъде малко по -различен, но този, който получих, каза, че почистваме стъклото, върху което поставяме филма, след което използваме лента, за да свалим защитния филм, който е от едната страна, и използвайки сапунена вода в спрей бутилка поставете филма върху стъклото. След това използвайте кредитна карта или чистачка, за да се отървете от въздушните мехурчета и излишната вода. За пореден път нямах стъкло, но все пак работи по същия начин. След това оставете чашата да изсъхне за една нощ и това трябва да стане.

Стъпка 2: Настройка на LED лентата

Настройка на LED лентата
Настройка на LED лентата
Настройка на LED лентата
Настройка на LED лентата

За светодиодите просто използвах включената двустранна лента, за да я залепя към рамката и направих дупка, за да излезе жицата. На всеки ъгъл запоявах кабели, за да се свържа с друга лента, за да запазя формата на кутията без заоблени ръбове. Не забравяйте да изрежете лентите само на места, където има контакти, които биха позволили това да се случи, и не превключвайте посоката, в която светодиодите се свързват един с друг, известна като обръщане на полярността. Лентата, която получих, имаше стрелки, за да се увери, че това не се случва, затова се уверете, че всички те сочат в една и съща посока.

Направих малка дупка, за да прокарам кабела към външната страна на кутията, светодиодите, които имах, бяха 3 -пинови адресируеми светодиоди, така че имах конектори за захранване, заземяване и данни. Използвах Digital Pin 3 за конектора за данни, не забравяйте да тествате вашите LED ленти, за да се уверите, че работят, преди да ги залепите за рамката и не забравяйте да използвате само препоръчителното напрежение за моя, което е 5 - 6 V.

Стъпка 3: Монтиране на IR сензора и LCD дисплея (по избор)

Монтиране на IR сензора и LCD дисплея (по избор)
Монтиране на IR сензора и LCD дисплея (по избор)
Монтиране на IR сензора и LCD дисплея (по избор)
Монтиране на IR сензора и LCD дисплея (по избор)
Монтиране на IR сензора и LCD дисплея (по избор)
Монтиране на IR сензора и LCD дисплея (по избор)

Избрах да използвам IR сензор и дистанционно, за да променя светлинните ефекти и да използвам и LCD, за да покажа на потребителя опциите, които имат за ефектите.

За да монтирам LCD и IR сензора, щях да използвам пистолет за горещо лепило и да ги залепя към горната част на рамката и да свържа всичко отзад, но не исках да бъдат фиксирани, защото може да се наложи да ги сваля след проекта готово е.

За да свържа LCD и IR приемника, използвах мъжки към женски конектори, които се включват в Arduino за данни, както и заземяване и захранване. За да свържа всичко, използвах щифт 12 с 2 kΩ резистор на пина за данни за IR сензора, аналогов щифт A4 за SDA на LCD и аналогов щифт 5 за SCL на LCD.

Стъпка 4: Код

За този проект използвам няколко библиотеки, които ще трябва да изтеглите, за да използвате. Ще ги поставя тук, имайте предвид, че съм на Windows, така че това може да има ефект, ако сте на Mac или Linux.

Ще трябва да промените броя на пикселите в зависимост от броя на светодиодите, които имате. Също така вградих интерфейс за сериен монитор, така че можете да взаимодействате по този начин с него, ако не използвате IR сензор.

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

#include Adafruit_NeoPixel.h> #include #include #include // Стойности на пинове и константи // Стойности на щифтове и константаconst int RECV_PIN = 12; IRrecv unrecv (RECV_PIN); decode_results резултати; unsigned long 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 = пиксели. Color (0, 0, 0); char вход = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Инициализира елементи, които не трябва да се повтарят. lcd.begin (16, 2); // Дефиниране на 16 колони и 2 реда на LCD дисплей lcd.backlight (); // За включване на подсветката Serial.begin (9600); pixels.begin (); unrecv.enableIRIn (); Serial.println ("Въведете 0, за да изключите светлините"); // Начални инструкции Serial.println ("Въведете 1, за да превърнете светодиодите в бяло"); Serial.println ("Въведете 2, за да светодиодите преминават през различни цветове"); Serial.println ("Въведете 3, за да персонализирате цветовете на светодиодите ръчно"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Проверява дали е наличен знак? вход = (char) Serial.read (); } // Избира различните опции, ако (вход == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Бял setAll (rainbowColor); // Актуализира светодиодите} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Актуализира светодиодите} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 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; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); забавяне (100); } mainOptions (); } иначе ако (вход == '3' || IRNumb == 3) {r = 0; g = 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 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

ако (IRNumb2 == 0) {

прекъсване; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } иначе ако (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } иначе ако (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } иначе ако (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

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

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

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

b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Въведете стойност от 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 (unrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; else {//Serial.println(results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } иначе ако (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } иначе ако (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println(" 2 "); } иначе ако (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; unrecv.resume (); }} void IRScan2 () {if (unrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; else {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } иначе ако (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } иначе ако (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; unrecv.resume (); }}

Стъпка 5: Монтаж

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

За да монтирам Arduino към рамката, просто щях да залепя него и платката, която използвах, към задната част на рамката и да се опитам да покрия/скрия кабелите, за да изглежда добре.

Препоръчано: