Innehållsförteckning:

Infinity -spegel med LCD- och IR -sensor: 5 steg
Infinity -spegel med LCD- och IR -sensor: 5 steg

Video: Infinity -spegel med LCD- och IR -sensor: 5 steg

Video: Infinity -spegel med LCD- och IR -sensor: 5 steg
Video: НЕГАТИВНАЯ РЕАКЦИЯ / РАЗОБЛАЧЕНИЕ ПЕВЦА / ДИМАШ и ПОНАСЕНКОВ 2024, November
Anonim
Infinity -spegel med LCD- och IR -sensor
Infinity -spegel med LCD- och IR -sensor
Infinity -spegel med LCD- och IR -sensor
Infinity -spegel med LCD- och IR -sensor
Infinity -spegel med LCD- och IR -sensor
Infinity -spegel med LCD- och IR -sensor

Detta projekt kommer att visa dig hur du kan göra en Infinity Mirror. Grundkonceptet är att lysdioderna på spegeln skapar ljus som studsar från backspegeln till framspegeln där lite ljus släpper ut så att vi kan se inuti och vissa reflekteras tillbaka till backspegeln och ger den oändliga effekten. Detta är baserat på Infinity Mirror With Ultra Sonic Sensors Instructable av Hack Sioux Falls och How to Connect I2C Lcd Display to Arduino Uno by JunezRiyaz.

Tillbehör

1. En Shadow Box ($ 50)

2. Envägs spegelfilm ($ 17)

3. En RGB LED -ljusremsa ($ 30)

4. Arduino ($ 35)

5. En spegel ($ 10)

Frivillig:

1. IR -sensor och fjärrkontroll ($ 20)

2. En LCD ($ 20)

3. 7 Hona till Man -kontaktdon

4. 3 han -till -han -kontakter

Verktyg

1. Lödkolv

2. Trådskärare och avdragare

3. Något att klippa spegeln med

*Observera att alla priser i CAD och storlekar beror på vilken låda du använder.

Steg 1: Installera spegeln och spegelfilmen

Installera spegeln och spegelfilmen
Installera spegeln och spegelfilmen
Installera spegeln och spegelfilmen
Installera spegeln och spegelfilmen

Det första du ska göra är att installera spegeln som kommer att finnas på baksidan av skugglådan. Du vill antingen skaffa en som har rätt storlek eller få en som är större och sedan klippa ner den. Men för detta måste du använda en spegel och inte filmen eftersom vi vill att allt ljus ska reflekteras tillbaka, spegelfilmen kan också ta mönstret på materialet den är på om det inte är glas.

När du installerar spegeln, se till att fästa den i skugglådan, jag skulle rekommendera att använda små bitar av trä och spikar för att se till att spegeln inte rör sig. Jag hade ingen spegel under tiden jag var tvungen att slutföra detta projekt så jag använde filmen (du kan se på bilderna). Konceptet fungerar men inte särskilt bra och ger ett vinklat och kaotiskt utseende som enligt mig inte ser bra ut.

Varje spegelfilm kommer att vara lite annorlunda, men den som jag fick sägs att rengöra glaset som vi lägger på filmen för att sedan använda tejp för att ta av den skyddande filmen som är på ena sidan och använda tvålvatten i en spray flaska lägg filmen på glaset. Använd sedan ett kreditkort eller en gummiskrapa för att bli av med eventuella luftbubblor och överflödigt vatten. Jag hade återigen inte glas men det fungerar fortfarande på samma sätt. Låt sedan glaset torka över natten och det ska göras.

Steg 2: Installera LED -remsan

Installera LED -remsan
Installera LED -remsan
Installera LED -remsan
Installera LED -remsan

För lysdioderna använde jag bara den medföljande dubbelsidiga tejpen för att fästa den på ramen och gjorde ett hål för tråden att komma ut. Vid varje hörn lödde jag ledningar för att ansluta till en annan remsa för att behålla lådformen utan rundade kanter. Var noga med att bara klippa av remsorna på punkter där det finns kontakter som gör att sådana kan hända och inte ändra riktningen som lysdioderna ansluter till varandra som kallas för att vända polariteten. Remsan som jag fick hade pilar för att se till att detta inte händer så se till att de alla pekar i samma riktning.

Jag gjorde ett litet hål för att sätta in kabeln på utsidan av lådan, lysdioderna som jag hade var 3 -stifts adresserbara lysdioder så jag hade ström-, jord- och datakontakter. Jag använde Digital Pin 3 för datakontakten, se till att testa dina LED -remsor för att se till att de fungerar innan du sätter fast dem på ramen och se till att bara använda den rekommenderade spänningen för min som är 5 - 6 V.

Steg 3: Montering av IR -sensorn och LCD -skärmen (tillval)

Montering av IR -sensorn och LCD -skärmen (tillval)
Montering av IR -sensorn och LCD -skärmen (tillval)
Montering av IR -sensorn och LCD -skärmen (tillval)
Montering av IR -sensorn och LCD -skärmen (tillval)
Montering av IR -sensorn och LCD -skärmen (tillval)
Montering av IR -sensorn och LCD -skärmen (tillval)

Jag valde att använda en IR -sensor och fjärrkontroll för att ändra belysningseffekter och att använda och en LCD för att visa användaren vilka alternativ de har för effekterna.

För att montera LCD- och IR -sensorn skulle jag använda en varm limpistol och fästa dem på toppen av ramen och ansluta allt till baksidan men jag ville inte att de skulle fixas eftersom jag kanske måste ta av dem efter projektet är klart.

För att ansluta LCD- och IR -mottagaren använde jag han- till honkontakter som ansluts till Arduino för data samt jord och ström. För att koppla upp allting använde jag stift 12 med ett 2 kΩ motstånd på datastiftet för IR -sensorn, Analog stift A4 för SDA på LCD -adn och Analog stift 5 för LCD -skärmens SCL.

Steg 4: Kod

För detta projekt använder jag ett fåtal bibliotek som du måste ladda ner för att använda. Jag kommer att lägga dem här, kom ihåg att jag är på Windows så att det kan ha en effekt om du är på Mac eller Linux.

Du måste ändra antalet pixlar beroende på antalet lysdioder du har. Jag har också byggt in ett seriellt bildskärmsgränssnitt så att du kan använda det på det sättet om du inte använder en IR -sensor.

// Bibliotek

#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); resultat avkodningsresultat; osignerad lång key_value = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pixlar = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIV); // Variabler int IRNumb; int IRNumb2; int regnbåge = 0; uint32_t rainbowColor = pixlar. Color (0, 0, 0); rödingång = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Initierar element som inte behöver upprepas. lcd.begin (16, 2); // Definiera 16 kolumner och 2 rader med lcd -display lcd.backlight (); // För att slå på bakgrundsbelysningen Serial.begin (9600); pixlar. börjar (); irrecv.enableIRIn (); Serial.println ("Ange en 0 för att släcka lamporna"); // Inledande instruktioner Serial.println ("Ange en 1 för att vända lysdioderna till vita"); Serial.println ("Ange en 2 för att få lysdioderna att bläddra igenom olika färger"); Serial.println ("Ange en 3 för att anpassa LED -färgerna manuellt"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Kontrollerar om ett tecken är tillgängligt? input = (char) Serial.read (); } // Väljer de olika alternativen om (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Uppdaterar lysdioderna} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Uppdaterar lysdioderna} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Ange allt som inte är ett 2 för att avsluta denna effekt, sedan något av de föreviga alternativen för en ny effekt.");

lcd.clear (); // Rengör skärmen lcd.setCursor (0, 0); lcd.print ("Avsluta med valfri-"); lcd.setCursor (0, 1); lcd.print ("numb that! = 2"); för (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerar om effekten behöver lämnas rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; ha sönder; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); fördröjning (100); } för (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerar om effekten behöver lämnas rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; ha sönder; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); fördröjning (100); } för (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerar om effekten behöver lämnas rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; ha sönder; } r+= 2; rainbowColor = colorChange (r, g, 0); setAll (rainbowColor); showStrip (); fördröjning (100); } för (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerar om effekten behöver lämnas rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; ha sönder; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); fördröjning (100); } mainOptions (); } annars if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Ange n för att avsluta");

Serial.println ("Använd w och s för att öka eller minska den röda färgen"); Serial.println ("Använd r och f för att öka eller minska den gröna färgen"); Serial.println ("Använd y och h för att öka eller minska den blå färgen"); lcd.clear (); // Rengör skärmen lcd.setCursor (0, 0); lcd.print ("exit: 0, 4/7: +/- röd"); lcd.setCursor (0, 1); lcd.print ("5/8: grön, 6/9: blå");

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

om (Serial.available ()> 0) {// är ett tecken tillgängligt? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

om (IRNumb2 == 0) {

ha sönder; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annars if (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annars if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annars if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

annars om (input2 == 'y' || IRNumb2 == 6) {

b+= 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }

annars om (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {för (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }} // Ange ett värde 0 till 255 för att få ett färgvärde. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Visar huvudeffektalternativen lcd.clear (); // Rengör skärmen lcd.setCursor (0, 0); lcd.print ("0 för lamporna släckta"); lcd.setCursor (0, 1); lcd.print ("1: vitt ljus"); fördröjning (1000); lcd.clear (); // Rengör skärmen lcd.setCursor (0, 0); lcd.print ("2: Färgseffekt"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); fördröjning (1000); } ogiltigför IRScan () {if (irrecv.decode (& resultat)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; annars {//Serial.println(results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } annars if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } annars if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } annars if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } annars if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } annars if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } annars if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } annars if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } annars if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } annars if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }} ogiltigför IRScan2 () {if (irrecv.decode (& resultat)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; annars {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } annars if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } annars if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } annars if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } annars if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } annars if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } annars if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } annars if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } annars if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } annars if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}

Steg 5: Montering

Montering
Montering

För att montera Arduino på ramen skulle jag bara limma den och brödbrädan som jag använde på baksidan av ramen och försöka täcka/gömma kablarna för att den ska se bra ut.

Rekommenderad: