Innehållsförteckning:
- Tillbehör
- Steg 1: Installera spegeln och spegelfilmen
- Steg 2: Installera LED -remsan
- Steg 3: Montering av IR -sensorn och LCD -skärmen (tillval)
- Steg 4: Kod
- Steg 5: Montering
Video: Infinity -spegel med LCD- och IR -sensor: 5 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
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
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
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)
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
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:
Easy Infinity Mirror med Arduino Gemma & NeoPixels: 8 steg (med bilder)
Easy Infinity Mirror With Arduino Gemma & NeoPixels: Se! Titta djupt in i den förtrollande och bedrägligt enkla oändliga spegeln! En enda remsa av lysdioder lyser inåt på en spegelsmörgås för att skapa effekten av oändlig reflektion. Detta projekt kommer att tillämpa färdigheter och tekniker från mitt intro Arduin
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): 8 steg
Akustisk levitation med Arduino Uno Steg-för-steg (8-steg): ultraljudsgivare L298N Dc kvinnlig adapter strömförsörjning med en manlig DC-pin Arduino UNOBreadboardHur det fungerar: Först laddar du upp kod till Arduino Uno (det är en mikrokontroller utrustad med digital och analoga portar för att konvertera kod (C ++)
I2C / IIC LCD -skärm - Använd en SPI LCD till I2C LCD -skärmen Använd SPI till IIC -modulen med Arduino: 5 steg
I2C / IIC LCD -skärm | Använd en SPI LCD till I2C LCD -skärmen Använda SPI till IIC -modulen med Arduino: Hej killar eftersom en vanlig SPI LCD 1602 har för många trådar att ansluta så det är mycket svårt att ansluta den till arduino men det finns en modul på marknaden som kan konvertera SPI -display till IIC -display så då behöver du bara ansluta 4 ledningar
I2C / IIC LCD -skärm - Konvertera en SPI LCD till I2C LCD Display: 5 steg
I2C / IIC LCD -skärm | Konvertera en SPI LCD -skärm till I2C LCD -skärm: Användning av spi -lcd -skärm behöver för många anslutningar att göra vilket är riktigt svårt att göra så jag hittade en modul som kan konvertera i2c lcd till spi lcd så låt oss komma igång
RGB Infinity Clock med egen BT -app: 15 steg (med bilder)
RGB Infinity -klocka med egen BT -app: Normala digitala och analoga klockor är tråkiga, så planera att utveckla en cool klocka med anpassade färger för Dial, timme, minutvisare och second hand. För detta första vill utveckla klockan med hjälp av adresserbar RGB LED -remsa. Sedan för kommunikation med A