Obsah:
- Zásoby
- Krok 1: Instalace zrcadla a zrcadlové fólie
- Krok 2: Nastavení LED pásku
- Krok 3: Montáž infračerveného senzoru a displeje LCD (volitelně)
- Krok 4: Kód
- Krok 5: Montáž
Video: Zrcadlo Infinity s LCD a IR senzorem: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Tento projekt vám ukáže, jak si můžete vyrobit Infinity Mirror. Základní koncepce spočívá v tom, že LED diody na zrcadle vytvářejí světlo, které se odráží od zpětného zrcátka k přednímu zrcátku, odkud některé světlo uniká, takže vidíme dovnitř a některé se odráží zpět do zpětného zrcátka a vytváří nekonečný efekt. To je založeno na Infinity Mirror s ultra zvukovými senzory, které lze instruovat Hack Sioux Falls a jak připojit LCD displej I2C k Arduino Uno od JunezRiyaz.
Zásoby
1. Shadow Box (50 $)
2. Jednosměrný zrcadlový film (17 $)
3. RGB LED světelný pás (30 $)
4. Arduino (35 $)
5. Zrcadlo (10 $)
Volitelný:
1. IR senzor a dálkové ovládání (20 $)
2. LCD (20 $)
3. 7 konektorů žena - muž
4. 3 konektory muž - muž
Nástroje
1. Páječka
2. Řezačka drátu a odizolovač
3. Něčím, čím uříznu zrcadlo
*Všechny ceny v CAD a velikostech budou záviset na krabici, kterou použijete.
Krok 1: Instalace zrcadla a zrcadlové fólie
První věcí, kterou musíte udělat, je nainstalovat zrcadlo, které bude v zadní části stínového pole. Chcete buď získat ten, který má správnou velikost, nebo si pořídit větší a pak ho snížit. Ale k tomu musíte použít zrcadlo a ne film, protože chceme, aby se veškeré světlo odráželo zpět, zrcadlový film může také převzít vzor materiálu, na kterém je, pokud to není sklo.
Při instalaci zrcadla jej zajistěte ve stínítku, doporučil bych použít malé kousky dřeva a hřebíky, abyste se ujistili, že se zrcadlo nepohybuje. V době, kdy jsem měl dokončit tento projekt, jsem neměl zrcadlo, takže jsem použil film (můžete vidět na obrázcích). Koncept funguje, ale ne příliš dobře a dává šikmý a chaotický vzhled, který podle mého názoru nevypadá dobře.
Každý zrcadlový film bude trochu jiný, ale ten, o kterém jsem řekl, že vyčistí sklo, na které film dáváme, a pak pomocí pásky sundá ochrannou fólii, která je na jedné straně, a pomocí mýdlové vody ve spreji láhev položte film na sklo. Poté pomocí kreditní karty nebo stěrky odstraňte případné vzduchové bubliny a přebytečnou vodu. Znovu jsem neměl sklo, ale stále funguje stejně. Poté nechte sklenici přes noc zaschnout a mělo by být hotovo.
Krok 2: Nastavení LED pásku
U LED jsem použil přiloženou oboustrannou pásku, kterou jsem ji přilepil k rámu, a vytvořil otvor pro vyvedení drátu. V každém rohu jsem připájel vývody, abych se připojil k jinému pásu, aby tvar krabice zůstal bez zaoblených hran. Dbejte na to, abyste proužky odřezávali pouze v místech, kde jsou kontakty, které by to umožnily, a neměňte směr, ve kterém se diody LED navzájem spojují, známé jako obrácení polarity. Pruh, který jsem dostal, měl šipky, aby se to nestalo, takže zkontrolujte, zda všechny směřují stejným směrem.
Udělal jsem malý otvor, kterým prošel kabel ven z krabice, LED diody, které jsem měl, byly 3 pinové adresovatelné LED, takže jsem měl napájecí, zemní a datové konektory. Pro datový konektor jsem použil Digital Pin 3, nezapomeňte otestovat své LED pásky, abyste se ujistili, že fungují, než je přilepíte k rámu, a ujistěte se, že používáte pouze doporučené napětí pro ten, který je 5 - 6 V.
Krok 3: Montáž infračerveného senzoru a displeje LCD (volitelně)
Rozhodl jsem se použít IR senzor a dálkové ovládání pro změnu světelných efektů a použít LCD displej, abych uživateli ukázal možnosti, které má pro efekty.
K montáži senzoru LCD a IR bych použil horkou lepicí pistoli a přilepil je k horní části rámu a zapojil vše na zadní stranu, ale nechtěl jsem je opravit, protože je možná budu muset po projektu sundat je hotovo.
Pro připojení LCD a IR přijímače jsem použil konektory Male to Female, které se připojují k Arduinu pro data i uzemnění a napájení. K propojení všeho jsem použil pin 12 s odporem 2 kΩ na datovém pinu pro IR senzor, analogový pin A4 pro SDA na LCD a analogový pin 5 pro SCL LCD.
Krok 4: Kód
Pro tento projekt používám několik knihoven, které byste si museli stáhnout, abyste je mohli používat. Dám je sem, mějte na paměti, že jsem na Windows, takže to může mít účinek, pokud jste na Macu nebo Linuxu.
Budete muset změnit počet pixelů v závislosti na počtu LED, které máte. Také jsem vestavěl rozhraní sériového monitoru, takže s ním můžete komunikovat, pokud nepoužíváte IR senzor.
// Knihovny
#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv unbcv (RECV_PIN); decode_results výsledky; unsigned long key_value = 0; const int NUMPIXELS = 27;
Pixely Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZITIVNÍ); // Proměnné int IRNumb; int IRNumb2; int duha = 0; uint32_t rainbowColor = pixely. Color (0, 0, 0); char vstup = 0; char vstup2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inicializuje prvky, které není třeba opakovat. lcd.begin (16, 2); // Definování 16 sloupců a 2 řádků displeje lcd.backlight (); // Zapnutí podsvícení Serial.begin (9600); pixely.begin (); unbcv.enableIRIn (); Serial.println („Zadáním 0 vypnete světla“); // Pokyny pro začátek Serial.println ("Zadáním 1 změníte LED na bílou"); Serial.println („Zadejte 2, aby diody LED procházely různými barvami“); Serial.println („Zadejte 3 pro ruční přizpůsobení barev LED“); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Zkontroluje, zda je k dispozici znak? vstup = (char) Serial.read (); } // Volí různé možnosti if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Aktualizuje LED} else if (vstup == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Vypnuto setAll (rainbowColor); // Aktualizuje LED} else if (vstup == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Chcete -li tento efekt ukončit, zadejte cokoli, co není 2, pak některou z předchozích možností pro nový efekt.");
lcd.clear (); // Vyčištění obrazovky lcd.setCursor (0, 0); lcd.print ("Ukončit pomocí any-"); lcd.setCursor (0, 1); lcd.print ("otupit to! = 2"); pro (int i = 0; i = 48 && vstup <= 57) || breakCondition == 1 || IRNumb! = 2) {// Zkontroluje, zda je třeba efekt ukončit rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; přestávka; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); zpoždění (100); } pro (int i = 0; i = 48 && vstup <= 57) || breakCondition == 1 || IRNumb! = 2) {// Zkontroluje, zda je třeba efekt ukončit rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; přestávka; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); zpoždění (100); } pro (int g = 0; g = 48 && vstup <= 57) || breakCondition == 1 || IRNumb! = 2) {// Zkontroluje, zda je třeba efekt ukončit rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; přestávka; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); zpoždění (100); } pro (int b = 0; b = 48 && vstup <= 57) || breakCondition == 1 || IRNumb! = 2) {// Zkontroluje, zda je třeba efekt ukončit rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; přestávka; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); zpoždění (100); } mainOptions (); } else if (vstup == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Enter n to exit");
Serial.println („Pomocí w a s zvyšte nebo snižte červenou barvu“); Serial.println („Použijte r a f ke zvýšení nebo snížení zelené barvy“); Serial.println („Použijte y a h ke zvýšení nebo snížení modré barvy“); lcd.clear (); // Vyčištění obrazovky lcd.setCursor (0, 0); lcd.print ("exit: 0, 4/7: +/- red"); lcd.setCursor (0, 1); lcd.print („5/8: zelená, 6/9: modrá“);
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// is a character available? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
if (IRNumb2 == 0) {
přestávka; } 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 (); }
else if (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
else if (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixely.show (); } void setAll (barva uint32_t) {for (int i = 0; i <NUMPIXELS; i ++) {pixely.setPixelColor (i, barva); }} // Zadáním hodnoty 0 až 255 získáte hodnotu barvy. uint32_t colourChange (int r, int g, int b) {návrat pixelů. Color (r, g, b); } void mainOptions () {// Zobrazí hlavní možnosti efektu lcd.clear (); // Vyčištění obrazovky lcd.setCursor (0, 0); lcd.print („0 pro zhasnutá světla“); lcd.setCursor (0, 1); lcd.print („1: White Light“); zpoždění (1000); lcd.clear (); // Vyčištění obrazovky lcd.setCursor (0, 0); lcd.print ("2: Barevný efekt"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); zpoždění (1000); } void IRScan () {if (unbcv.decode (& results)) {
if (results.value == 0XFFFFFFFF)
results.value = hodnota_klíče; else {//Serial.println(results.value, HEX); if (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 (vysledky.hodnota == 0xFF7A85 || vysledky.hodnota == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; unbcv.resume (); }} neplatné IRScan2 () {if (unbcv.decode (& results)) {
if (results.value == 0XFFFFFFFF)
results.value = hodnota_klíče; else {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; unbcv.resume (); }}
Krok 5: Montáž
Chcete -li namontovat Arduino na rám, jednoduše bych jej nalepil a prkénko, které jsem použil na zadní stranu rámu, a pokusil se zakrýt/skrýt kabely, aby to vypadalo dobře.
Doporučuje:
Snadné zrcadlo Infinity s Arduino Gemma a NeoPixels: 8 kroků (s obrázky)
Snadné zrcadlo Infinity s Arduino Gemma a NeoPixels: Hle! Podívejte se hluboko do okouzlujícího a klamně jednoduchého zrcadla nekonečna! Jediný pruh LED svítí dovnitř na zrcadlový sendvič, aby vytvořil efekt nekonečného odrazu. Tento projekt bude využívat dovednosti a techniky z mého úvodu Arduin
Hra „Space Impact“s gyroskopickým senzorem a displejem Nokia 5110 LCD: 3 kroky
Hra „Space Impact“s gyroskopickým senzorem a displejem Nokia 5110 LCD: Poté, co můj Tamagotchi zemřel (poslední projekt), jsem začal hledat nový způsob, jak ztrácet čas. Rozhodl jsem se na Arduinu naprogramovat klasickou hru „Space Impact“. Aby byla hra o něco zajímavější a zábavnější, použil jsem gyroskopický senzor, který jsem měl
Zrcadlo a stůl Infinity (s neformálními nástroji): 7 kroků (s obrázky)
Zrcadlo a stůl Infinity (s neformálními nástroji): Hej, všichni, před chvílí jsem narazil na tento návod a okamžitě jsem ho vzal s sebou a chtěl jsem si vyrobit vlastní, ale nedostal jsem se do rukou 1) Jednosměrné zrcadlo z plexiskla ani 2) CNC router. Po chvilce hledání jsem přišel na
LCD displej Nokia 5110 s infračerveným senzorem: 4 kroky
LCD displej Nokia 5110 s infračerveným senzorem: LCD displej Nokia 5110 je úžasný LCD displej, který je kompatibilní s vývojovou deskou Arduino. Pojďme nyní ovládat jeden z těchto LCD a propojit jej s Arduino a IR senzorem
Zrcadlo ze zlomeného LCD monitoru: 3 kroky
Zrcadlo z rozbitého LCD monitoru: Pokud máte LCD, přes který prochází obrovská trhlina, vytvořte místo vyhození zrcadlo. Trhlina je po operaci téměř neviditelná, viz obrázek. Je to opravdu snadné a jde jen o roztržení obrazovky, převrácení