Ääretön peili LCD- ja IR -anturilla: 5 vaihetta
Ääretön peili LCD- ja IR -anturilla: 5 vaihetta
Anonim
Ääretön peili LCD- ja IR -anturilla
Ääretön peili LCD- ja IR -anturilla
Ääretön peili LCD- ja IR -anturilla
Ääretön peili LCD- ja IR -anturilla
Ääretön peili LCD- ja IR -anturilla
Ääretön peili LCD- ja IR -anturilla

Tämä projekti näyttää sinulle, kuinka voit tehdä ääretön peili. Perusajatuksena on, että peilissä olevat LEDit luovat valoa, joka pomppii taustapeilistä etupeiliin, josta osa valoa karkaa, jotta voimme nähdä sisälle ja jotkut heijastuvat takaisin peiliin ja tuottavat äärettömän vaikutuksen. Tämä perustuu Hack Sioux Fallsin opettamiin Infinity Mirror -peileihin, joissa on ultraääni -anturit, ja kuinka I2C LCD -näyttö liitetään Arduino Unoon JunezRiyazin toimesta.

Tarvikkeet

1. Varjolaatikko (50 dollaria)

2. 1-suuntainen peilikalvo (17 dollaria)

3. RGB -LED -valonauha (30 dollaria)

4. Arduino (35 dollaria)

5. peili (10 dollaria)

Valinnainen:

1. IR -anturi ja kaukosäädin (20 dollaria)

2. LCD (20 dollaria)

3. 7 Naaras -uros -liittimet

4. 3 Uros -uros -liittimet

Työkalut

1. Juotin

2. Langanleikkuri ja irrotin

3. Jotain peilin leikkaamiseen

*Huomaa, että kaikki CAD -hinnat ja koot riippuvat käyttämästäsi laatikosta.

Vaihe 1: Peilin ja peilikalvon asennus

Peilin ja peilikalvon asennus
Peilin ja peilikalvon asennus
Peilin ja peilikalvon asennus
Peilin ja peilikalvon asennus

Ensimmäinen asia on asentaa peili, joka tulee olemaan varjolaatikon takana. Haluat joko saada oikean kokoisen tai suuremman ja leikata sen sitten. Mutta tätä varten sinun on käytettävä peiliä eikä kalvoa, koska haluamme, että kaikki valo heijastuu takaisin, peilikalvo voi myös ottaa sen materiaalin kuvion, jolle se ei ole lasia.

Kun asennat peiliä, varmista, että se on varjossa, suosittelen käyttämään pieniä puukappaleita ja nauloja varmistaaksesi, että peili ei liiku. Minulla ei ollut peiliä, kun minun täytyi suorittaa tämä projekti, joten käytin elokuvaa (näet kuvista). Konsepti toimii, mutta ei kovin hyvin, ja antaa kaarevan ja kaoottisen ilmeen, joka ei mielestäni näytä hyvältä.

Jokainen peilikalvo tulee olemaan hieman erilainen, mutta se, jonka sanoin puhdistavan lasin, johon laitamme kalvon, käytä teippiä toisella puolella olevan suojakalvon poistamiseksi ja saippuavedellä suihkeessa pullo laittaa kalvon lasille. Poista sitten ilmakuplat ja ylimääräinen vesi luottokortilla tai vetolastalla. Minulla ei jälleen ollut lasia, mutta se toimii edelleen samalla tavalla. Anna sitten lasin kuivua yön yli ja se on tehtävä.

Vaihe 2: LED -nauhan asentaminen

LED -nauhan asettaminen
LED -nauhan asettaminen
LED -nauhan asettaminen
LED -nauhan asettaminen

LEDeille käytin juuri mukana toimitettua kaksipuolista teippiä kiinnittämään sen kehykseen ja tein reiän langalle. Jokaisessa kulmassa juotin johdot yhdistämään toiseen nauhaan pitämään laatikon muodon ilman pyöristettyjä reunoja. Leikkaa nauhat vain kohdista, joissa on kontakteja, jotka sallivat tämän tapahtua, äläkä vaihda LEDien yhdistämissuuntaa, joka tunnetaan napaisuuden kääntämisenä. Saamassani nauhassa oli nuolia sen varmistamiseksi, että näin ei tapahdu, joten tarkista, että kaikki osoittavat samaan suuntaan.

Tein pienen reiän viedäkseni kaapelin laatikon ulkopuolelle, LEDit, jotka minulla oli, olivat 3 -nastaisia osoitettavia LED -valoja, joten minulla oli virta-, maadoitus- ja dataliittimet. Käytin digitaaliliitintä 3 dataliittimessä, muista testata LED -nauhat varmistaaksesi, että ne toimivat, ennen kuin kiinnität ne kehykseen, ja käytä vain suositeltua jännitettä, joka on 5 - 6 V.

Vaihe 3: IR -anturin ja nestekidenäytön asennus (valinnainen)

IR -anturin ja nestekidenäytön asennus (valinnainen)
IR -anturin ja nestekidenäytön asennus (valinnainen)
IR -anturin ja nestekidenäytön asennus (valinnainen)
IR -anturin ja nestekidenäytön asennus (valinnainen)
IR -anturin ja nestekidenäytön asennus (valinnainen)
IR -anturin ja nestekidenäytön asennus (valinnainen)

Valitsin käyttää IR -anturia ja kaukosäädintä valotehosteiden muuttamiseen ja LCD -näytön avulla näyttämään käyttäjälle tehosteiden vaihtoehdot.

Asentaakseni nestekidenäytön ja infrapuna -anturin käytän kuumaa liimapistoolia ja kiinnitän ne kehyksen yläosaan ja langallistan kaiken taakse, mutta en halunnut niiden korjaamista, koska minun on ehkä poistettava ne projektin jälkeen on tehty.

Liittääkseni nestekidenäytön ja infrapunavastaanottimen käytin uros -naarasliittimiä, jotka kytkettiin Arduinoon datan sekä maan ja virran saamiseksi. Kaikkien johtimien kytkemiseen käytin nasta 12 ja 2 kΩ: n vastus IR -anturin datatapissa, analoginen nasta A4 LCD: n SDA: ssa ja analoginen nasta 5 LCD: n SCL: ssä.

Vaihe 4: Koodi

Tässä projektissa käytän muutamia kirjastoja, jotka sinun on ladattava käyttääksesi. Aion laittaa ne tänne, muista, että olen Windowsissa, joten sillä voi olla vaikutusta, jos käytät Macia tai Linuxia.

Sinun on muutettava pikselien lukumäärää sen mukaan, kuinka monta LEDiä sinulla on. Rakensin myös Serial Monitor -liittymän, jotta voit käyttää sitä tällä tavalla, jos et käytä IR -anturia.

// Kirjastot

#include Adafruit_NeoPixel.h> #include #include #include // Nastat ja vakioarvot // Nastat ja vakioarvotconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results tulokset; allekirjoittamaton pitkä avaimen_arvo = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pikseliä = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Muuttujat int IRNumb; int IRNumb2; int sateenkaari = 0; uint32_t rainbowColor = pikseliä. Väri (0, 0, 0); char -syöttö = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Alustaa elementit, joita ei tarvitse toistaa. lcd.begin (16, 2); // 16 sarakkeen ja 2 LCD -näytön rivin määrittäminen lcd. taustavalo (); // Taustavalon kytkeminen päälle Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Kirjoita 0 sammuttaaksesi valot"); // Alkuohjeet Serial.println ("Syötä 1, jotta LEDit muuttuvat valkoisiksi"); Serial.println ("Syötä 2, jotta LEDit kiertävät eri värejä"); Serial.println ("Muokkaa LED -värejä manuaalisesti syöttämällä 3"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Tarkistaa, onko merkki käytettävissä? input = (char) Serial.read (); } // Valitsee eri vaihtoehdot, jos (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Valkoinen setAll (sateenkaariVäri); // Päivittää LEDit} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (sateenkaariVäri); // Päivittää LEDit} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.

lcd.clear (); // Puhdista näyttö lcd.setCursor (0, 0); lcd.print ("Poistu käyttämällä mitä tahansa"); lcd.setCursor (0, 1); lcd.print ("tuhota se! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Tarkistaa, onko tehosteesta poistuttava rainbowColor = colourChange (0, 0, 0); setAll (sateenkaariVäri); breakCondition = 1; tauko; } sateenkaariVäri = väriMuuta (i, 0, 0); setAll (sateenkaariVäri); showStrip (); viive (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Tarkistaa, onko tehosteesta poistuttava rainbowColor = colourChange (0, 0, 0); setAll (sateenkaariVäri); breakCondition = 1; tauko; } g ++; sateenkaariVäri = väriMuuta (i, g, 0); setAll (sateenkaariVäri); showStrip (); viive (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Tarkistaa, onko tehosteesta poistuttava rainbowColor = colourChange (0, 0, 0); setAll (sateenkaariVäri); breakCondition = 1; tauko; } r+= 2; sateenkaariVäri = väriMuuta (r, g, 0); setAll (sateenkaariVäri); showStrip (); viive (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Tarkistaa, onko tehosteesta poistuttava rainbowColor = colourChange (0, 0, 0); setAll (sateenkaariVäri); breakCondition = 1; tauko; } r+= 2; g+= 5; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); viive (100); } mainOptions (); } muu jos (syöttö == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Enter n poistuaksesi");

Serial.println ("Käytä w ja s lisätäksesi tai pienentääksesi punaista väriä"); Serial.println ("Käytä r ja f vihreän värin lisäämiseen tai vähentämiseen"); Serial.println ("Käytä y ja h lisätäksesi tai pienentääksesi sinistä väriä"); lcd.clear (); // Puhdista näyttö lcd.setCursor (0, 0); lcd.print ("exit: 0, 4/7: +/- punainen"); lcd.setCursor (0, 1); lcd.print ("5/8: vihreä, 6/9: sininen");

while (input2! = 'n' || IRNumb2! = 0) {

if (Serial.available ()> 0) {// onko merkki käytettävissä? input2 = (char) Serial.read (); } // Sarja.println (IRNumb2); IRNumb2 = 10; IRScan2 ();

jos (IRNumb2 == 0) {

tauko; } jos (input2 == 'w' || IRNumb2 == 4) {r+= 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); } muu jos (input2 == 's' || IRNumb2 == 7) {r- = 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); } muu jos (input2 == 'r' || IRNumb2 == 5) {g+= 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); } muu jos (input2 == 'f' || IRNumb2 == 8) {g- = 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); }

muuten jos (input2 == 'y' || IRNumb2 == 6) {

b+= 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); }

muuten jos (input2 == 'h' || IRNumb2 == 9) {

b- = 2; sateenkaariVäri = väriMuuta (r, g, b); setAll (sateenkaariVäri); showStrip (); }} mainOptions (); } setAll (sateenkaariVäri); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, väri); }} // Syötä arvo 0–255 saadaksesi väriarvon. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Näyttää tärkeimmät tehostevaihtoehdot lcd.clear (); // Puhdista näyttö lcd.setCursor (0, 0); lcd.print ("0 Valot pois päältä"); lcd.setCursor (0, 1); lcd.print ("1: Valkoinen valo"); viive (1000); lcd.clear (); // Puhdista näyttö lcd.setCursor (0, 0); lcd.print ("2: Väritehoste"); lcd.setCursor (0, 1); lcd.print ("3: Manuaalinen"); viive (1000); } void IRScan () {if (irrecv.decode (& results)) {

jos (results.value == 0XFFFFFFFF)

results.value = avaimen_arvo; else {//Serial.println(results.value, HEX); jos (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Sarja.println ("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Sarja.println ("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Sarja.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; //Sarja.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; //Sarja.println ("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Sarja.println ("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} avaimen_arvo = tulokset.arvo; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (& results)) {

jos (results.value == 0XFFFFFFFF)

results.value = avaimen_arvo; else {// Serial.println (results.value, HEX); jos (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Sarja.println ("0 "); } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Sarja.println ("1 "); } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Sarja.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; //Sarja.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; //Sarja.println ("7 "); } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Sarja.println ("8 "); } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} avaimen_arvo = tulokset.arvo; irrecv.resume (); }}

Vaihe 5: Asennus

Asennus
Asennus

Arduinon kiinnittämiseksi runkoon liimaisin vain sen ja leipälevyn, jota käytin kehyksen takaosaan, ja yritin peittää/piilottaa kaapelit, jotta se näyttäisi hyvältä.