Sadržaj:

Beskonačno ogledalo s LCD i IR senzorom: 5 koraka
Beskonačno ogledalo s LCD i IR senzorom: 5 koraka

Video: Beskonačno ogledalo s LCD i IR senzorom: 5 koraka

Video: Beskonačno ogledalo s LCD i IR senzorom: 5 koraka
Video: SCP-093 Красное море Объект (Все тесты и вторичного сырья Журналы) 2024, Studeni
Anonim
Beskonačno ogledalo s LCD i IR senzorom
Beskonačno ogledalo s LCD i IR senzorom
Beskonačno ogledalo s LCD i IR senzorom
Beskonačno ogledalo s LCD i IR senzorom
Beskonačno ogledalo s LCD i IR senzorom
Beskonačno ogledalo s LCD i IR senzorom

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 zrcala do prednjeg ogledala gdje nešto svjetla izlazi pa možemo vidjeti unutra, a neke se reflektiraju natrag prema stražnjem ogledalu i stvaraju beskonačan učinak. Ovo se temelji na Infinity Mirror -u s ultrasoničnim senzorima kojega može uputiti Hack Sioux Falls i Kako spojiti I2C LCD zaslon na Arduino Uno by JunezRiyaz.

Pribor

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)

Izborno:

1. IC senzor i daljinski upravljač (20 USD)

2. LCD (20 USD)

3. 7 Priključci ženski na muški

4. 3 priključka muško -muško

Alati

1. Lemilica

2. Rezač i skidač žice

3. Nešto čime ćete izrezati ogledalo

*Imajte na umu da sve cijene u CAD -ima i veličine ovise o kutiji koju koristite.

Korak 1: Ugradnja zrcala i zrcalnog filma

Ugradnja ogledala i zrcalnog filma
Ugradnja ogledala i zrcalnog filma
Ugradnja ogledala i zrcalnog filma
Ugradnja ogledala i zrcalnog filma

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, a zatim je izrezati. No, za to morate koristiti ogledalo, a ne film jer želimo da se cijela svjetlost reflektira natrag. Zrcalna folija također može uzeti uzorak materijala na kojem se nalazi ako nije staklo.

Prilikom postavljanja zrcala svakako ga pričvrstite u kutiju za sjene, preporučio bih korištenje malih komada drveta i čavala kako se ogledalo ne bi pomaklo. Nisam imao ogledalo u vremenu koje sam morao dovršiti ovaj projekt pa sam upotrijebio 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 koji sam dobio rekao je da očistimo staklo na koje stavljamo film, a zatim da upotrijebimo traku za skidanje zaštitnog filma s jedne strane i sapunsku vodu u spreju bocu 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

Postavljanje LED trake
Postavljanje LED trake
Postavljanje LED trake
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 kutu sam lemio vodiče za spajanje na drugu traku kako bi okvir 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 do vanjske strane kutije, LED diode koje sam imao bile su 3 -polne adresabilne LED -ice tako da sam imao priključke za napajanje, uzemljenje i podatke. Koristio sam Digital Pin 3 za podatkovni konektor, provjerite rade li vaše LED trake prije nego što ih zalijepite na okvir i provjerite da li koriste samo preporučeni napon od 5 - 6 V.

Korak 3: Montiranje IC senzora i LCD -a (opcionalno)

Ugradnja IC senzora i LCD -a (opcionalno)
Ugradnja IC senzora i LCD -a (opcionalno)
Ugradnja IC senzora i LCD -a (opcionalno)
Ugradnja IC senzora i LCD -a (opcionalno)
Ugradnja IC senzora i LCD -a (opcionalno)
Ugradnja 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 ugradnju 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 nakon projekta možda morati skinuti Gotovo je.

Za povezivanje LCD i IC prijemnika koristio sam muški i ženski konektor koji se priključuju na Arduino za podatke, kao i uzemljenje i napajanje. Za povezivanje sam upotrijebio pin 12 s otpornikom od 2 kΩ na podatkovnom pinu za IC senzor, analogni pin A4 za SDA LCD i analogni pin 5 za SCL na LCD -u.

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 učinka ako koristite Mac ili Linux.

Morat ćete promijeniti broj piksela ovisno o broju LED dioda koje imate. Također sam ugradio sučelje serijskog monitora 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 // Vrijednosti pinova i konstanti // Vrijednosti pinova i konstanticonst int RECV_PIN = 12; IRrecv unrecv (RECV_PIN); decode_results rezultate; unsigned long key_value = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pikseli = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZITIVNO); // Promjenljive int IRNumb; int IRNumb2; int duga = 0; uint32_t rainbowColor = pikseli. Boja (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 zaslona lcd.backlight (); // Za uključivanje pozadinskog osvjetljenja Serial.begin (9600); pikseli.begin (); unrecv.enableIRIn (); Serial.println ("Unesite 0 za gašenje svjetla"); // Upute 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 da biste ručno prilagodili LED boje"); } 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); // Bijeli 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 učinka, zatim bilo koju od preventivnih opcija za novi učinak.");

lcd.clear (); // Očistite zaslon lcd.setCursor (0, 0); lcd.print ("Izlaz pomoću bilo kojeg-"); lcd.setCursor (0, 1); lcd.print ("otupio to! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izlaz napustiti efekt rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauza; } 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 izlaz napustiti efekt rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauza; } 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 izlaz napustiti efekt rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauza; } 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 izlaz napustiti efekt rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; pauza; } 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 zaslon 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) {

pauza; } 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 () {piksela.show (); } void setAll (uint32_t boja) {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 učinaka lcd.clear (); // Očisti zaslon lcd.setCursor (0, 0); lcd.print ("0 za isključena svjetla"); lcd.setCursor (0, 1); lcd.print ("1: Bijelo svjetlo"); kašnjenje (1000); lcd.clear (); // Očistite zaslon lcd.setCursor (0, 0); lcd.print ("2: Učinak 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 "); } inače 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"); } inače 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 "); } inače 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"); } inače 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: Montaža

Montaža
Montaža

Za montiranje Arduina na okvir samo bih ga zalijepio i ploču za kruh koju sam koristio na stražnju stranu okvira i pokušao pokriti/sakriti kabele kako bi izgledao dobro.

Preporučeni: