Sadržaj:
- Supplies
- Korak 1: Ugradnja ogledala i ogledala
- Korak 2: Postavljanje LED trake
- Korak 3: Montiranje IC senzora i LCD -a (opcionalno)
- Korak 4: Kodirajte
- Korak 5: Montiranje
Video: Beskonačno ogledalo sa LCD i IC senzorom: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Ovaj će vam projekt pokazati kako možete napraviti beskonačno ogledalo. Osnovni koncept je da LED diode koje se nalaze na ogledalu stvaraju svjetlost koja se odbija od stražnjeg ogledala do prednjeg ogledala gdje nešto svjetlosti izlazi tako da možemo vidjeti unutra, a neke se reflektiraju natrag prema stražnjem ogledalu i stvaraju beskonačan efekt. Ovo je zasnovano na Infinity Mirror -u sa ultrasoničnim senzorima koje može uputiti Hack Sioux Falls i Kako povezati June2Riyaz LCD ekran I2C sa Arduino Uno.
Supplies
1. Shadow Box (50 USD)
2. Jednosmjerni zrcalni film (17 USD)
3. RGB LED svjetlosna traka (30 USD)
4. Arduino (35 USD)
5. Ogledalo (10 USD)
Opciono:
1. IC senzor i daljinski upravljač (20 USD)
2. LCD (20 USD)
3. 7 Konektori ženski na muški
4. 3 konektora muški na muški
Alati
1. Lemilica
2. Rezač žice i skidač žice
3. Nešto čime se može izrezati ogledalo
*Imajte na umu da sve cijene u CAD -ima i veličine ovise o kutiji koju koristite.
Korak 1: Ugradnja ogledala i ogledala
Prvo što trebate učiniti je instalirati ogledalo koje će se nalaziti na stražnjoj strani kutije sjena. Želite ili nabaviti onu odgovarajuće veličine ili veću, pa je izrezati. Ali za to morate koristiti ogledalo, a ne film jer želimo da se cijela svjetlost reflektira unatrag. Zrcalna folija također može uzeti uzorak materijala na kojem se nalazi ako nije staklo.
Kad instalirate ogledalo, obavezno ga pričvrstite u kutiju za sjene, preporučio bih vam da koristite male komade drveta i eksere kako biste bili sigurni da se ogledalo ne pomiče. Nisam imao ogledalo u vremenu koje mi je trebalo da završim ovaj projekat pa sam koristio film (možete vidjeti na slikama). Koncept funkcionira, ali ne baš dobro i daje ukošen i kaotičan izgled koji po mom mišljenju ne izgleda dobro.
Svaki zrcalni film bit će malo drugačiji, ali onaj za koji sam rekao rekao je da očistimo staklo na koje stavljamo film, a zatim da upotrebimo traku za skidanje zaštitnog filma koji se nalazi s jedne strane i koristeći vodu sa sapunom u spreju boca staviti film na staklo. Zatim upotrijebite kreditnu karticu ili brisač da biste se riješili mjehurića zraka i viška vode. Još jednom nisam imao staklo, ali i dalje radi isto. Zatim ostavite staklo da se osuši preko noći i to je potrebno učiniti.
Korak 2: Postavljanje LED trake
Za LED diode samo sam upotrijebio priloženu dvostranu traku da je zalijepim na okvir i napravio rupu za izlazak žice. Na svakom uglu sam lemio vodiče za spajanje na drugu traku kako bi oblik kutije ostao bez zaobljenih rubova. Pazite da režete trake samo na mjestima gdje postoje kontakti koji bi dopustili da se to dogodi i nemojte mijenjati smjer spajanja LED dioda, što je poznato kao mijenjanje polariteta. Traka koju sam dobio imala je strelice kako bi se osiguralo da se to ne dogodi, stoga provjerite jesu li sve usmjerene u istom smjeru.
Napravio sam malu rupu da provučem kabel sa vanjske strane kutije, LED diode koje sam imao bile su 3 pin adresirane LED diode, tako da sam imao priključke za napajanje, uzemljenje i podatke. Koristio sam Digital Pin 3 za konektor za podatke, provjerite rade li vaše LED trake kako bi se uvjerili da rade prije nego što ih zalijepite na okvir i upotrijebite samo preporučeni napon za moj napon od 5 - 6 V.
Korak 3: Montiranje IC senzora i LCD -a (opcionalno)
Odabrao sam korištenje IC senzora i daljinskog upravljača za promjenu svjetlosnih efekata te korištenje i LCD -a za prikazivanje korisniku mogućnosti za efekte.
Za montiranje LCD i IC senzora upotrijebio bih pištolj za vruće ljepilo i zalijepio ih na vrh okvira i sve spojio sa stražnje strane, ali nisam želio da se poprave jer ću ih možda morati skinuti nakon projekta je učinjeno.
Za povezivanje LCD i IC prijemnika koristio sam muški i ženski konektor koji se priključuju na Arduino radi prijenosa podataka, kao i uzemljenja i napajanja. Da bih sve povezao, koristio sam pin 12 sa 2 kΩ otpornikom na podatkovnom pinu za IC senzor, analogni pin A4 za SDA LCD i analogni pin 5 za SCL LCD -a.
Korak 4: Kodirajte
Za ovaj projekt koristim nekoliko biblioteka koje biste morali preuzeti da biste ih koristili. Stavit ću ih ovdje, imajte na umu da sam na Windowsima, pa bi to moglo imati efekta ako ste na Mac -u ili Linux -u.
Morat ćete promijeniti broj piksela ovisno o broju LED dioda koje imate. Ugradio sam i sučelje za serijski monitor tako da se na taj način možete povezati s njim ako ne koristite IC senzor.
// Knjižnice
#include Adafruit_NeoPixel.h> #include #include #include // Vrednosti pinova i konstanti // Vrednosti pinova i konstanticonst int RECV_PIN = 12; IRrecv unrecv (RECV_PIN); decode_results rezultati; unsigned long key_value = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel piksela = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZITIVNO); // Varijable int IRNumb; int IRNumb2; int duga = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); char ulaz = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Poništava elemente koje nije potrebno ponavljati. lcd.begin (16, 2); // Definiranje 16 stupaca i 2 reda lcd prikaza lcd.backlight (); // Za uključivanje pozadinskog osvjetljenja Serial.begin (9600); pixels.begin (); unrecv.enableIRIn (); Serial.println ("Unesite 0 za gašenje svjetla"); // Uputstva za početak Serial.println ("Unesite 1 za okretanje LED dioda u bijelo"); Serial.println ("Unesite 2 da LED diode prolaze kroz različite boje"); Serial.println ("Unesite 3 za ručno prilagođavanje LED boja"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Provjerava je li znak dostupan? input = (char) Serial.read (); } // Bira različite opcije if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Bijela setAll (rainbowColor); // Ažurira LED diode} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // isključeno setAll (rainbowColor); // Ažurira LED diode} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Unesite sve što nije 2 za izlaz iz ovog efekta, zatim bilo koju od preventivnih opcija za novi efekat.");
lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("Izlaz pomoću bilo kojeg-"); lcd.setCursor (0, 1); lcd.print ("numb that! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); kašnjenje (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Unesite n za izlaz");
Serial.println ("Koristite w i s za povećanje ili smanjenje crvene boje"); Serial.println ("Koristite r i f za povećanje ili smanjenje zelene boje"); Serial.println ("Koristite y i h za povećanje ili smanjenje plave boje"); lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("izlaz: 0, 4/7: +/- crveno"); lcd.setCursor (0, 1); lcd.print ("5/8: zelena, 6/9: plava");
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// je li znak dostupan? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
if (IRNumb2 == 0) {
break; } 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 (); }
inače if (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
inače if (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (boja uint32_t) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, boja); }} // Unesite vrijednost od 0 do 255 da biste dobili vrijednost boje. uint32_t colourChange (int r, int g, int b) {povrat piksela. Boja (r, g, b); } void mainOptions () {// Prebacuje opcije glavnih efekata lcd.clear (); // Očisti ekran lcd.setCursor (0, 0); lcd.print ("0 za isključeno svjetlo"); lcd.setCursor (0, 1); lcd.print ("1: Bijelo svjetlo"); kašnjenje (1000); lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("2: Efekat boje"); lcd.setCursor (0, 1); lcd.print ("3: Priručnik"); kašnjenje (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 "); } 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"); } 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; 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 "); } 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; unrecv.resume (); }}
Korak 5: Montiranje
Za montiranje Arduina na okvir samo bih ga zalijepio i ploču koju sam koristio na stražnju stranu okvira i pokušao pokriti/sakriti kabele kako bi izgledao dobro.
Preporučuje se:
Jednostavno beskonačno ogledalo s Arduino Gemmom i NeoPikselima: 8 koraka (sa slikama)
Lako beskonačno ogledalo s Arduino Gemmom i NeoPikselima: Gle! Pogledajte duboko u očaravajuće i varljivo jednostavno ogledalo beskonačnosti! Jedna traka LED dioda svijetli prema unutra na sendviču s ogledalom kako bi stvorila efekt beskrajnog odraza. Ovaj projekt će primijeniti vještine i tehnike iz mog uvoda Arduin
Napravite dvostrano, beskonačno ogledalo za radnu površinu: 14 koraka (sa slikama)
Napravite dvostrano, beskonačno ogledalo za radnu površinu: Većina beskonačnih ogledala koja sam vidio su jednostrani, ali sam htio da napravim jedno malo drugačije. Ova će biti dvostrana i dizajnirana tako da se može prikazati na radnoj površini ili polici. To je jednostavan, jako kul projekt za napraviti
Kockasto beskonačno ogledalo: 5 koraka
Cube Infinity Mirror: Jeste li ikada zamislili da ste slučajno upali u beskonačni prostor i krenuli na divno putovanje? Zamislite beskonačnu veličinu, možemo napraviti i vlastito ogledalo beskonačne kocke. uradimo ovo
Zvučno reaktivno beskonačno ogledalo: 5 koraka
Zvučno reaktivno beskonačno ogledalo: U ovom uputstvu ću vam pokazati kako možete napraviti ovo beskonačno ogledalo. Pa krenimo
Beskonačno ogledalo i stol (sa ležernim alatima): 7 koraka (sa slikama)
Beskonačno ogledalo i stol (sa ležernim alatima): Hej svima, Prije nekog vremena naišao sam na ovu instrukciju i odmah su me uzeli sa sobom i htjeli sam napraviti svoju, ali nisam uspio doći u ruke 1) Jednosmjerno ogledalo od pleksiglasa niti 2) CNC ruter. Nakon malo pretraživanja, došao sam do