Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Installere speilet og speilfilmen
- Trinn 2: Sette opp LED -stripen
- Trinn 3: Montering av IR -sensoren og LCD -skjermen (valgfritt)
- Trinn 4: Kode
- Trinn 5: Montering
Video: Uendelig speil med LCD og IR -sensor: 5 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Dette prosjektet skal vise deg hvordan du kan lage et uendelig speil. Det grunnleggende konseptet er at lysdiodene på speilet skaper lys som spretter fra bakspeilet til frontspeilet der noe lys slipper ut slik at vi kan se innvendig og noen reflekteres tilbake til bakspeilet og gir den uendelige effekten. Dette er basert på Infinity Mirror With Ultra Sonic Sensors Instructable av Hack Sioux Falls og How to Connect I2C Lcd Display to Arduino Uno by JunezRiyaz.
Rekvisita
1. En Shadow Box ($ 50)
2. Enveis speilfilm ($ 17)
3. En RGB LED -lysstrimmel ($ 30)
4. Arduino ($ 35)
5. Et speil ($ 10)
Valgfri:
1. IR -sensor og fjernkontroll ($ 20)
2. En LCD ($ 20)
3. 7 kvinnelige til mannlige kontakter
4. 3 mannlige til mannlige kontakter
Verktøy
1. Loddejern
2. Wire Cutter og stripper
3. Noe å klippe speilet med
*Vær oppmerksom på at alle priser i CAD og størrelser avhenger av esken du bruker.
Trinn 1: Installere speilet og speilfilmen
Det første du må gjøre er å installere speilet som skal være på baksiden av skyggeboksen. Du vil enten få en som er i riktig størrelse, eller få en som er større og deretter kutte den ned. Men for dette må du bruke et speil og ikke filmen fordi vi vil at alt lyset skal reflekteres tilbake, speilfilmen kan også ta mønsteret på materialet den er på hvis det ikke er glass.
Når du installerer speilet, må du sørge for å feste det i skyggeboksen. Jeg vil anbefale å bruke små trebiter og spiker for å sikre at speilet ikke beveger seg. Jeg hadde ikke et speil på den tiden jeg måtte fullføre dette prosjektet, så jeg brukte filmen (du kan se på bildene). Konseptet fungerer, men ikke veldig bra, og gir et vinklet og kaotisk utseende som etter min mening ikke ser bra ut.
Hver speilfilm kommer til å være litt annerledes, men den jeg fikk sagt å rengjøre glasset som vi legger filmen på for å bruke tape for å fjerne beskyttelsesfilmen som er på den ene siden og bruke såpevann i en spray flaske sette filmen på glasset. Bruk deretter et kredittkort eller en nal for å bli kvitt luftbobler og overflødig vann. Jeg hadde nok en gang ikke glass, men det fungerer fortsatt det samme. La deretter glasset tørke over natten, og det skal gjøres.
Trinn 2: Sette opp LED -stripen
For lysdiodene brukte jeg bare det medfølgende dobbeltsidige båndet til å feste det til rammen og laget et hull for ledningen for å komme ut. I hvert hjørne loddet jeg ledninger for å koble til en annen stripe for å beholde boksformen uten avrundede kanter. Sørg for at du bare kutter stripene på steder der det er kontakter som gjør at slike kan skje, og ikke bytt retningen lysdiodene kobler til hverandre, kjent som å snu polariteten. Stripen jeg fikk hadde piler for å sikre at dette ikke skjer, så sørg for å sjekke at de alle peker i samme retning.
Jeg laget et lite hull for å sette kabelen gjennom på utsiden av boksen, lysdiodene jeg hadde var 3 -pins adresserbare lysdioder, så jeg hadde strøm-, jord- og datakontakter. Jeg brukte Digital Pin 3 for datakontakten. Sørg for å teste LED -stripene dine for å sikre at de fungerer før du fester dem til rammen, og sørg for å bare bruke den anbefalte spenningen for min som er 5 - 6 V.
Trinn 3: Montering av IR -sensoren og LCD -skjermen (valgfritt)
Jeg valgte å bruke en IR -sensor og fjernkontroll for å endre lyseffekter og å bruke og en LCD for å vise brukeren alternativene de har for effektene.
For å montere LCD- og IR -sensoren ville jeg bruke en varm limpistol og feste dem til toppen av rammen og koble alt til baksiden, men jeg ville ikke at de skulle fikses fordi jeg kanskje måtte ta dem av etter prosjektet er ferdig.
For å koble til LCD- og IR -mottakeren brukte jeg mannlige til kvinnelige kontakter som kobles til Arduino for data, så vel som jord og strøm. For å koble alt sammen brukte jeg pin 12 med en 2 kΩ motstand på datapinnen for IR -sensoren, Analog Pin A4 for SDA på LCD -en og Analog Pin 5 for SCL på LCD -en.
Trinn 4: Kode
For dette prosjektet bruker jeg noen få biblioteker som du må laste ned for å bruke. Jeg kommer til å sette dem her, husk at jeg er på windows, så det kan ha en effekt hvis du er på Mac eller Linux.
Du må endre antall piksler avhengig av antall lysdioder du har. Jeg har også bygd inn et seriell monitor -grensesnitt, slik at du kan grensesnittet på den måten med det hvis du ikke bruker en IR -sensor.
// Biblioteker
#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); resultater for dekoderesultater; usignert lang nøkkelverdi = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel piksler = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Variabler int IRNumb; int IRNumb2; int regnbue = 0; uint32_t rainbowColor = piksler. Farge (0, 0, 0); char input = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Initialiserer elementer som ikke trenger å gjentas. lcd.begin (16, 2); // Definere 16 kolonner og 2 rader med lcd -display lcd.backlight (); // For å slå på bakgrunnsbelysningen Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println ("Skriv inn en 0 for å slå av lysene"); // Beginning Instructions Serial.println ("Skriv inn en 1 for å slå lysdiodene til hvite"); Serial.println ("Skriv inn en 2 for å få lysdiodene til å gå gjennom forskjellige farger"); Serial.println ("Skriv inn en 3 for å tilpasse LED -fargene manuelt"); } hulrom () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Sjekker om et tegn er tilgjengelig? input = (char) Serial.read (); } // Velger de forskjellige alternativene hvis (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Oppdaterer lysdiodene} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Oppdaterer lysdiodene} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Skriv inn noe som ikke er et 2 for å gå ut av denne effekten, deretter noen av de fordrevne alternativene for en ny effekt.");
lcd.clear (); // Rengjør skjermen lcd.setCursor (0, 0); lcd.print ("Avslutt med hvilken som helst"); lcd.setCursor (0, 1); lcd.print ("nummen det! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerer om effekten må forlates rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; gå i stykker; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); forsinkelse (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerer om effekten må forlates rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; gå i stykker; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); forsinkelse (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerer om effekten må forlates rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; gå i stykker; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); forsinkelse (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontrollerer om effekten må forlates rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; gå i stykker; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); forsinkelse (100); } mainOptions (); } annet hvis (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Skriv n for å gå ut");
Serial.println ("Bruk w og s for å øke eller redusere den røde fargen"); Serial.println ("Bruk r og f for å øke eller redusere den grønne fargen"); Serial.println ("Bruk y og h for å øke eller redusere den blå fargen"); lcd.clear (); // Rengjør skjermen lcd.setCursor (0, 0); lcd.print ("exit: 0, 4/7: +/- rød"); lcd.setCursor (0, 1); lcd.print ("5/8: grønn, 6/9: blå");
mens (input2! = 'n' || IRNumb2! = 0) {
hvis (Serial.available ()> 0) {// er et tegn tilgjengelig? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
hvis (IRNumb2 == 0) {
gå i stykker; } hvis (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annet hvis (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annet hvis (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } annet hvis (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
annet hvis (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }
annet hvis (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); 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); }} // Skriv inn verdien 0 til 255 for å få en fargeverdi. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Viser hovedeffektalternativene lcd.clear (); // Rengjør skjermen lcd.setCursor (0, 0); lcd.print ("0 For lys slukket"); lcd.setCursor (0, 1); lcd.print ("1: hvitt lys"); forsinkelse (1000); lcd.clear (); // Rengjør skjermen lcd.setCursor (0, 0); lcd.print ("2: fargeeffekt"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); forsinkelse (1000); } ugyldig IRScan () {if (irrecv.decode (& resultater)) {
hvis (results.value == 0XFFFFFFFF)
results.value = nøkkelverdi; annet {//Serial.println(results.value, HEX); hvis (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } annet hvis (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } annet hvis (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } annet hvis (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } annet hvis (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } annet hvis (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } annet hvis (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } annet hvis (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } annet hvis (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } annet hvis (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }} ugyldig IRScan2 () {if (irrecv.decode (& resultater)) {
hvis (results.value == 0XFFFFFFFF)
results.value = nøkkelverdi; annet {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } annet hvis (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } annet hvis (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } annet hvis (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } annet hvis (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } annet hvis (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } annet hvis (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } annet hvis (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } annet hvis (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } annet hvis (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}
Trinn 5: Montering
For å montere Arduino på rammen ville jeg bare lime den og brødbrettet som jeg brukte på baksiden av rammen og prøve å dekke/skjule kablene for å få det til å se bra ut.
Anbefalt:
Lag en uendelig speilklokke: 15 trinn (med bilder)
Lag en Infinity Mirror Clock: I et tidligere prosjekt bygde jeg et uendelig speil, der mitt endelige mål for det var å gjøre det til en klokke. (Lag et fargerikt uendelig speil) Jeg forfulgte ikke det etter å ha bygd det, for selv om det så kult ut, var det noen ting med
Lag et tosidig, uendelig speil på skrivebordet: 14 trinn (med bilder)
Lag et tosidig, stasjonært uendelig speil: De fleste uendelig speilene jeg har sett er ensidige, men jeg ønsket å bygge en litt annerledes. Denne kommer til å være tosidig og designet slik at den kan vises på et skrivebord eller en hylle. Det er et enkelt, veldig kult prosjekt å lage
Hvordan lage et uendelig speilhjerte med Arduino og RGB -lysdioder: 8 trinn (med bilder)
Hvordan lage et uendelig speilhjerte med Arduino og RGB -lysdioder: En gang i en fest så jeg og kona et uendelig speil, og hun ble fascinert av utseendet og sa stadig at jeg vil ha det! En god mann lytter og husker alltid, så jeg bestemte meg for å bygge en til henne som en valentinsdag
Lag et fargerikt uendelig speil: 12 trinn (med bilder)
Lag et fargerikt uendelig speil: I min siste instruksjon, laget jeg et uendelig speil med hvite lys. Denne gangen skal jeg lage en med fargerike lys, ved hjelp av en LED -stripe med adresserbare lysdioder. Jeg kommer til å følge mange av de samme trinnene fra den siste instruksjonen, så jeg vil ikke
Interaktivt uendelig speil: 9 trinn (med bilder)
Interactive Infinity Mirror: Oppgaven for denne klassen var enkel, men komplisert: Lag noe interaktivt med en Arduino. Den måtte være designet godt, teknisk utfordrende nok og original for så langt originale ideer går i disse dager på nettsteder som Instructables. Fro