Kazalo:
- Zaloge
- 1. korak: Namestitev ogledala in zrcalnega filma
- 2. korak: Namestitev LED traku
- 3. korak: Namestitev IR senzorja in LCD -ja (neobvezno)
- 4. korak: Koda
- 5. korak: Montaža
Video: Neskončno ogledalo z LCD in IR senzorjem: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Ta projekt vam bo pokazal, kako lahko naredite ogledalo neskončnosti. Osnovni koncept je, da LED diode, ki so na ogledalu, ustvarjajo svetlobo, ki se od zadnjega ogledala odbija do sprednjega ogledala, kjer nekaj svetlobe uhaja, tako da lahko vidimo v notranjosti, nekatere pa se odbijejo nazaj do zadnjega ogledala in ustvarijo neskončen učinek. To temelji na Infinity Mirror z ultrazvočnimi senzorji, ki jih je izvedel Hack Sioux Falls in Kako povezati JunezRiyaz z LCD zaslonom I2C na Arduino Uno.
Zaloge
1. Shadow Box (50 USD)
2. Enosmerni zrcalni film (17 USD)
3. RGB LED svetlobni trak (30 USD)
4. Arduino (35 USD)
5. Ogledalo (10 USD)
Neobvezno:
1. IR senzor in daljinski upravljalnik (20 USD)
2. LCD (20 USD)
3. 7 Priključki ženski na moški
4. 3 priključki moški na moški
Orodja
1. Spajkalnik
2. Rezalnik in odstranjevalec žice
3. Nekaj, s čimer bi razrezali ogledalo
*Upoštevajte, da so vse cene v CAD in velikosti odvisne od škatle, ki jo uporabljate.
1. korak: Namestitev ogledala in zrcalnega filma
Najprej morate namestiti ogledalo, ki bo v ozadju senčne škatle. Če želite, da dobite tisto, ki je prave velikosti, ali večjo, jo nato zmanjšajte. Toda za to morate uporabiti ogledalo in ne filma, ker želimo, da se vsa svetloba odbije nazaj, tudi ogledalo lahko prevzame vzorec materiala, na katerem je, če ni steklo.
Ko nameščate ogledalo, ga namestite v senčni okvir, priporočam uporabo majhnih kosov lesa in žebljev, da se ogledalo ne premakne. V času, ko sem moral dokončati ta projekt, nisem imel ogledala, zato sem uporabil film (vidite ga na slikah). Koncept deluje, vendar ne zelo dobro in daje koten in kaotičen videz, ki po mojem mnenju ne izgleda dobro.
Vsak zrcalni film bo nekoliko drugačen, toda tisti, ki sem ga dobil, je rekel, da očistimo steklo, ki ga polagamo, nato pa s trakom odstranimo zaščitno folijo na eni strani in z milnico v razpršilu steklenico položite film na steklo. Nato s kreditno kartico ali otiralnikom odstranite zračne mehurčke in odvečno vodo. Spet nisem imel stekla, vendar še vedno deluje enako. Nato pustite steklo, da se posuši čez noč in to je treba storiti.
2. korak: Namestitev LED traku
Za LED diode sem samo uporabil priloženi dvostranski trak, da sem ga prilepil na okvir in naredil luknjo, da žica pride ven. Na vsakem vogalu sem spajkala vodila za povezavo z drugim trakom, da ohrani obliko škatle brez zaobljenih robov. Pazite, da trakove odrežete samo na mestih, kjer so stiki, ki bi to omogočili, in ne preklapljajte smeri, ko se LED diode povežeta med seboj, kar je znano kot obračanje polarnosti. Na traku, ki sem ga dobil, so bile puščice, da se to ne zgodi, zato se prepričajte, da vsi kažejo v isto smer.
Naredil sem majhno luknjo, skozi katero sem napeljal kabel do zunanje strani škatle, svetleče diode, ki sem jih imel, so bile 3 -polne naslovljive LED, tako da sem imel napajalne, ozemljitvene in podatkovne priključke. Za podatkovni priključek sem uporabil digitalni pin 3. Preden jih prilepite na okvir, preverite, ali delujejo LED -trakovi in uporabite le priporočeno napetost za moj 5 - 6 V.
3. korak: Namestitev IR senzorja in LCD -ja (neobvezno)
Za spremembo svetlobnih učinkov sem se odločil uporabiti IR senzor in daljinski upravljalnik ter LCD in uporabniku prikazati možnosti, ki jih imajo za učinke.
Za namestitev LCD in IR senzorja bi uporabil pištolo za vroče lepilo in jih prilepil na vrh okvirja ter vse ožičil na hrbtni strani, vendar nisem želel, da bi jih popravili, ker jih bom morda moral po projektu odstraniti je narejeno.
Za povezavo LCD in IR sprejemnika sem uporabil moške in ženske priključke, ki so priključeni v Arduino za podatke, pa tudi ozemljitev in napajanje. Za povezovanje vsega sem uporabil pin 12 z uporom 2 kΩ na podatkovnem zatiču za IR senzor, analogni pin A4 za SDA LCD in analogni pin 5 za SCL LCD.
4. korak: Koda
Za ta projekt uporabljam nekaj knjižnic, ki bi jih morali prenesti za uporabo. Tu jih bom dal, ne pozabite, da sem na oknih, tako da lahko to vpliva, če uporabljate Mac ali Linux.
Število slikovnih pik boste morali spremeniti glede na število LED, ki jih imate. Vgradil sem tudi vmesnik serijskega monitorja, tako da lahko z njim vmesite, če ne uporabljate IR senzorja.
// Knjižnice
#include Adafruit_NeoPixel.h> #include #include #include // Vrednosti zatiči in konstante // Vrednosti zatiči in konstantaconst int RECV_PIN = 12; IRrecv unrecv (RECV_PIN); decode_results rezultati; brez podpisa dolga key_value = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel slikovnih pik = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZITIVNO); // spremenljivke int IRNumb; int IRNumb2; int mavrica = 0; uint32_t rainbowColor = pik. Color (0, 0, 0); char vnos = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Inicializira elemente, ki jih ni treba ponavljati. lcd.begin (16, 2); // Določanje 16 stolpcev in 2 vrstic LCD zaslona lcd.backlight (); // Za vklop osvetlitve ozadja Serial.begin (9600); pixels.begin (); unrecv.enableIRIn (); Serial.println ("Vnesite 0, da ugasnete luči"); // Začetna navodila Serial.println ("Vnesite 1, da LED sveti v belo"); Serial.println ("Vnesite 2, da LED diode prehajajo skozi različne barve"); Serial.println ("Vnesite 3, da ročno prilagodite barve LED"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Preveri, če je na voljo znak? input = (char) Serial.read (); } // Izbere različne možnosti if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Bela setAll (rainbowColor); // Posodobi LED diode} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // off setAll (rainbowColor); // Posodobi LED diode} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Za izhod iz tega učinka vnesite vse, kar ni 2, nato katero koli od preventivnih možnosti za nov učinek.");
lcd.clear (); // Očistite zaslon lcd.setCursor (0, 0); lcd.print ("Izhod z uporabo katere koli-"); lcd.setCursor (0, 1); lcd.print ("omrtvičeno! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Preveri, ali je treba učinek zapustiti rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; zlom; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); zamuda (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Preveri, ali je treba učinek zapustiti rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; zlom; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); zamuda (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Preveri, ali je treba učinek zapustiti rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; zlom; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); zamuda (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Preveri, ali je treba učinek zapustiti rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; zlom; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); zamuda (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Vnesite n za izhod");
Serial.println ("Uporabite w in s za povečanje ali zmanjšanje rdeče barve"); Serial.println ("Uporabite r in f za povečanje ali zmanjšanje zelene barve"); Serial.println ("Uporabite y in h za povečanje ali zmanjšanje modre barve"); lcd.clear (); // Počistite zaslon lcd.setCursor (0, 0); lcd.print ("izhod: 0, 4/7: +/- rdeča"); lcd.setCursor (0, 1); lcd.print ("5/8: zelena, 6/9: modra");
medtem ko (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// je na voljo znak? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
if (IRNumb2 == 0) {
zlom; } 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 (); }
sicer če (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
sicer če (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (barva uint32_t) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, barva); }} // Vnesite vrednost od 0 do 255, da dobite barvno vrednost. uint32_t colourChange (int r, int g, int b) {povratne slikovne pike. Barva (r, g, b); } void mainOptions () {// Preklopi možnosti glavnega učinka lcd.clear (); // Počisti zaslon lcd.setCursor (0, 0); lcd.print ("0 Za ugasnjene luči"); lcd.setCursor (0, 1); lcd.print ("1: Bela svetloba"); zamuda (1000); lcd.clear (); // Počistite zaslon lcd.setCursor (0, 0); lcd.print ("2: Barvni učinek"); lcd.setCursor (0, 1); lcd.print ("3: Priročnik"); zamuda (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 "); } drugače če (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } drugače če (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println(" 2 "); } drugače če (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } drugače če (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println(" 4 "); } drugače če (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } drugače če (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } drugače če (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println(" 7 "); } drugače če (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println(" 8 "); } drugače če (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 "); } drugače če (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } drugače če (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println(" 2 "); } drugače če (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } drugače če (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println(" 4 "); } drugače če (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } drugače če (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } drugače če (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println(" 7 "); } drugače če (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println(" 8 "); } drugače če (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; unrecv.resume (); }}
5. korak: Montaža
Če želite Arduino pritrditi na okvir, bi ga lepil in ploščo, ki sem jo uporabil, na zadnji strani okvirja in poskušal pokriti/skriti kable, da bi izgledal dobro.
Priporočena:
Naredite dvostransko, namizno neskončno ogledalo: 14 korakov (s slikami)
Naredite dvostransko, namizno neskončno ogledalo: Večina neskončnih ogledal, ki sem jih videl, je enostranskih, vendar sem jih želel zgraditi nekoliko drugače. Ta bo dvostranski in oblikovan tako, da ga lahko prikažete na namizju ali polici. To je enostaven, zelo kul projekt!
Kockasto neskončno ogledalo: 5 korakov
Cube Infinity Mirror: Ste si kdaj predstavljali, da ste po nesreči padli v neskončni prostor in se podali na čudovito potovanje? Predstavljajte si neskončno velikost, lahko naredimo tudi svoje neskončno ogledalo z neskončno kocko. naredimo to
Vortex ura: ogledalo z neskončno uro: 10 korakov (s slikami)
Vortex Watch: Neskončna zrcalna ročna ura: Cilj tega projekta je bil ustvariti nosljivo različico zrcalne ure z neskončnostjo. S svojimi LED diodami RGB označuje čas z dodelitvijo ur, minut in sekund rdečim, zelenim in modrim lučem ter prekriva te odtenke t
Zvočno reaktivno neskončno ogledalo: 5 korakov
Zvočno reaktivno ogledalo neskončnosti: V tem navodilu vam bom pokazal, kako lahko naredite to ogledalo neskončnosti. Pa začnimo
Neskončno ogledalo in miza (s priložnostnimi orodji): 7 korakov (s slikami)
Ogledalo in miza Infinity (s priložnostnimi orodji): Pozdravljeni, pred kratkim sem naletel na to navodilo in me takoj vzel s sabo ter si želel narediti svojega, a mi ni uspelo priti v roke 1) enosmerno ogledalo iz pleksi stekla niti 2) CNC usmerjevalnik. Po kratkem iskanju sem prišel do