Tartalomjegyzék:

Végtelen tükör LCD és IR érzékelővel: 5 lépés
Végtelen tükör LCD és IR érzékelővel: 5 lépés

Videó: Végtelen tükör LCD és IR érzékelővel: 5 lépés

Videó: Végtelen tükör LCD és IR érzékelővel: 5 lépés
Videó: Эта вещь в доме защитит от черной полосы. Как привлечь достаток и деньги. Денежная практика 2024, December
Anonim
Végtelen tükör LCD és IR érzékelővel
Végtelen tükör LCD és IR érzékelővel
Végtelen tükör LCD és IR érzékelővel
Végtelen tükör LCD és IR érzékelővel
Végtelen tükör LCD és IR érzékelővel
Végtelen tükör LCD és IR érzékelővel

Ez a projekt megmutatja, hogyan készíthet Infinity Mirror -t. Az alapkoncepció az, hogy a tükrön lévő LED -ek olyan fényt hoznak létre, amely visszapattan a hátsó tükörről az első tükörre, ahol némi fény kiszökik, így belátunk, néhány pedig visszaverődik a hátsó tükörbe, és végtelen hatást kelt. Ennek alapja az Infinity Mirror Ultra Sonic érzékelőkkel, amelyeket a Hack Sioux Falls utasít, és hogyan lehet az I2C LCD -kijelzőt az Arduino Uno -hoz csatlakoztatni JunezRiyaz.

Kellékek

1. Árnyékdoboz ($ 50)

2. 1-utas tükörfilm (17 USD)

3. RGB LED fénycsík ($ 30)

4. Arduino (35 dollár)

5. Tükör ($ 10)

Választható:

1. IR érzékelő és távirányító ($ 20)

2. LCD ($ 20)

3. 7 Nő -férfi csatlakozók

4. 3 Férfi - férfi csatlakozók

Eszközök

1. Forrasztópáka

2. Drótvágó és csupaszító

3. Valami, amivel levághatod a tükröt

*Vegye figyelembe, hogy a CAD -ban és a méretekben megadott árak a használt doboztól függenek.

1. lépés: A tükör és a tükörfilm felszerelése

A tükör és a tükörfilm felszerelése
A tükör és a tükörfilm felszerelése
A tükör és a tükörfilm felszerelése
A tükör és a tükörfilm felszerelése

Az első dolog az, hogy telepítse a tükröt, amely az árnyékdoboz hátsó részében lesz. Szeretne beszerezni egy megfelelő méretű vagy nagyobbat, majd vágja le. Ehhez azonban tükröt kell használnia, nem pedig a fóliát, mert azt akarjuk, hogy az összes fény visszaverődjön, a tükörfilm is felveheti az anyag mintáját, amelyen van, ha nem üveg.

A tükör felszerelésekor ügyeljen arra, hogy rögzítse az árnyékdobozban. Javaslom, hogy kis fadarabokat és szögeket használjon annak biztosítására, hogy a tükör ne mozduljon el. A projekt befejezésekor nem volt tükör, ezért a filmet használtam (a képeken látható). A koncepció működik, de nem túl jól, és olyan szögletes és kaotikus megjelenést kölcsönöz, amely véleményem szerint nem néz ki jól.

Minden tükörfilm kicsit más lesz, de azt mondtam, hogy akkor tisztítsuk meg az üveget, amelyre rátesszük a fóliát, hogy szalaggal távolítsuk el az egyik oldalon lévő védőfóliát, és szappanos vizet használjunk spray -ben üveg tegye a fóliát az üvegre. Ezután használjon hitelkártyát vagy gumibetétet, hogy megszabaduljon a légbuborékoktól és a felesleges víztől. Ismét nem volt üveg, de még mindig ugyanúgy működik. Ezután hagyja az üveget egy éjszakán át száradni, és meg kell tenni.

2. lépés: A LED csík beállítása

A LED csík beállítása
A LED csík beállítása
A LED csík beállítása
A LED csík beállítása

A LED -ekhez csak a mellékelt kétoldalas ragasztószalagot használtam a kerethez való ragasztáshoz, és lyukat készítettem a huzal kijutásához. Minden sarokban vezetéket forrasztottam egy másik csíkhoz való csatlakozáshoz, hogy a doboz alakja lekerekített élek nélkül maradjon. Ügyeljen arra, hogy a csíkokat csak azokon a helyeken vágja le, ahol vannak érintkezők, amelyek lehetővé teszik ezt, és ne változtassa meg a LED -ek egymáshoz való csatlakoztatásának irányát, amelyet polaritás megfordításának neveznek. A csíkon, amelyet kaptam, nyilak voltak, hogy ez ne történjen meg, ezért ellenőrizze, hogy mindegyik ugyanabba az irányba mutat -e.

Csináltam egy kis lyukat, hogy áthelyezzem a kábelt a doboz külsejére, a LED -eim 3 tűs címezhető LED -ek voltak, így volt táp-, föld- és adatcsatlakozóm. Az adatcsatlakozóhoz a Digitális 3 -as tűt használtam, ellenőrizze a LED -szalagokat, hogy megbizonyosodjon arról, hogy működnek -e, mielőtt a kerethez rögzítené, és győződjön meg róla, hogy csak az ajánlott feszültséget használja, az én 5-6 V -os feszültséget.

3. lépés: Az infravörös érzékelő és az LCD felszerelése (opcionális)

Az infravörös érzékelő és az LCD felszerelése (opcionális)
Az infravörös érzékelő és az LCD felszerelése (opcionális)
Az infravörös érzékelő és az LCD felszerelése (opcionális)
Az infravörös érzékelő és az LCD felszerelése (opcionális)
Az infravörös érzékelő és az LCD felszerelése (opcionális)
Az infravörös érzékelő és az LCD felszerelése (opcionális)

Úgy döntöttem, hogy infravörös érzékelőt és távirányítót használok a fényhatások megváltoztatásához, és egy LCD -t, hogy megmutassam a felhasználónak az effektusokkal kapcsolatos lehetőségeit.

Az LCD- és infravörös érzékelő felszereléséhez forró ragasztópisztolyt használnék, és a keret tetejére ragasztanám, és mindent a hátsó részhez kötnék, de nem akartam, hogy rögzítsék, mert a projekt után le kell vennem őket kész.

Az LCD és az infravörös vevő csatlakoztatásához férfi -női csatlakozókat használtam, amelyek az Arduino -hoz csatlakoznak az adatok, valamint a föld és a tápellátás érdekében. Az összes vezeték bekötéséhez a 12 -es tűt használtam 2 kΩ -os ellenállással az infravörös érzékelő adatcsapján, az A4 -es analóg tűt az LCD SDA -jához, és az analóg 5 -ös tűt az LCD SCL -hez.

4. lépés: Kód

Ehhez a projekthez kevés könyvtárat használok, amelyeket letöltenie kell a használatához. Ide fogom tenni őket, ne feledje, hogy Windows -on vagyok, ami hatással lehet, ha Mac vagy Linux operációs rendszert használ.

A képpontok számát a LED -ek számától függően módosítania kell. Beépítettem egy soros monitor interfészt is, így így is interfészelhet vele, ha nem használ infravörös érzékelőt.

// Könyvtárak

#include Adafruit_NeoPixel.h> #include #include #include // Tűk és állandó értékek // Pins és Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results eredmények; előjel nélküli hosszú kulcsérték = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pixelek = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Változók int IRNumb; int IRNumb2; int szivárvány = 0; uint32_t rainbowColor = pixel. Color (0, 0, 0); char input = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Olyan elemeket inicializál, amelyeket nem kell megismételni. lcd.begin (16, 2); // 16 oszlop és 2 sor LCD kijelzés meghatározása lcd.backlight (); // A háttérvilágítás bekapcsolása Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Írja be a 0 -t a lámpák kikapcsolásához"); // Kezdeti utasítások Serial.println ("Írja be az 1 -et, hogy a LED -ek fehérek legyenek"); Serial.println ("Írja be a 2 -t, hogy a LED -ek különböző színekben ciklusozhassanak"); Serial.println ("Írjon be egy 3 -at a LED -színek manuális testreszabásához"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Ellenőrzi, hogy elérhető -e egy karakter? input = (char) Serial.read (); } // A különböző beállításokat választja, ha (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Fehér setAll (rainbowColor); // Frissíti a LED -eket} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Frissíti a LED -eket} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Írjon be mindent, ami nem 2, hogy kilépjen ebből a hatásból, majd az új hatás bármelyikét.");

lcd.clear (); // A képernyő tisztítása lcd.setCursor (0, 0); lcd.print ("Kilépés bármelyik használatával"); lcd.setCursor (0, 1); lcd.print ("érzéketlen, hogy! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ellenőrzi, hogy ki kell -e lépni a hatásból rainbowColor = colourChange (0, 0, 0); setAll (szivárványSzín); breakCondition = 1; szünet; } szivárványSzín = színVáltozás (i, 0, 0); setAll (szivárványSzín); showStrip (); késleltetés (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ellenőrzi, hogy ki kell -e lépni a hatásból rainbowColor = colourChange (0, 0, 0); setAll (szivárványSzín); breakCondition = 1; szünet; } g ++; szivárványSzín = színVáltozás (i, g, 0); setAll (szivárványSzín); showStrip (); késleltetés (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ellenőrzi, hogy ki kell -e lépni a hatásból rainbowColor = colourChange (0, 0, 0); setAll (szivárványSzín); breakCondition = 1; szünet; } r+= 2; szivárványSzín = színVáltozás (r, g, 0); setAll (szivárványSzín); showStrip (); késleltetés (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Ellenőrzi, hogy ki kell -e lépni a hatásból rainbowColor = colourChange (0, 0, 0); setAll (szivárványSzín); breakCondition = 1; szünet; } r+= 2; g+= 5; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); késleltetés (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Enter n, hogy kilépjen");

Serial.println ("Használja a w és az s gombot a piros szín növeléséhez vagy csökkentéséhez"); Serial.println ("Használja az r és f gombokat a zöld szín növeléséhez vagy csökkentéséhez"); Serial.println ("Az y és h gombokkal növelheti vagy csökkentheti a kék színt"); lcd.clear (); // A képernyő tisztítása lcd.setCursor (0, 0); lcd.print ("kilépés: 0, 4/7: +/- piros"); lcd.setCursor (0, 1); lcd.print ("5/8: zöld, 6/9: kék");

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

if (Serial.available ()> 0) {// elérhető egy karakter? input2 = (char) Serial.read (); } // Sorozat.println (IRNumb2); IRNumb2 = 10; IRScan2 ();

ha (IRNumb2 == 0) {

szünet; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); } else if (input2 == 's' || IRNumb2 == 7) {r- = 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); } else if (input2 == 'r' || IRNumb2 == 5) {g+= 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); }

egyébként if (input2 == 'y' || IRNumb2 == 6) {

b+= 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); }

egyébként if (input2 == 'h' || IRNumb2 == 9) {

b- = 2; szivárványSzín = színVáltozás (r, g, b); setAll (szivárványSzín); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Adjon meg 0 és 255 közötti értéket, hogy színértéket kapjon. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Megjeleníti a fő hatásbeállításokat lcd.clear (); // A képernyő tisztítása lcd.setCursor (0, 0); lcd.print ("0 For Lights off"); lcd.setCursor (0, 1); lcd.print ("1: Fehér fény"); késleltetés (1000); lcd.clear (); // A képernyő tisztítása lcd.setCursor (0, 0); lcd.print ("2: Színhatás"); lcd.setCursor (0, 1); lcd.print ("3: Kézi"); késleltetés (1000); } void IRScan () {if (irrecv.decode (és eredmények)) {

if (results.value == 0XFFFFFFFF)

results.value = kulcsérték; 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"); }} kulcs_érték = eredmények.érték; irrecv.resume (); }} void IRScan2 () {if (irrecv.decode (és eredmények)) {

if (results.value == 0XFFFFFFFF)

results.value = kulcsérték; 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"); }} kulcs_érték = eredmények.érték; irrecv.resume (); }}

5. lépés: Szerelés

Beépítési
Beépítési

Ahhoz, hogy az Arduino -t a kerethez rögzítsem, csak ragasztanám azt és a kenyérsütőt, amit használtam a keret hátuljához, és megpróbálnám lefedni/elrejteni a kábeleket, hogy jól nézzen ki.

Ajánlott: