Inhoudsopgave:

Infinity-spiegel met LCD- en IR-sensor - Ajarnpa
Infinity-spiegel met LCD- en IR-sensor - Ajarnpa

Video: Infinity-spiegel met LCD- en IR-sensor - Ajarnpa

Video: Infinity-spiegel met LCD- en IR-sensor - Ajarnpa
Video: Mirror touch sensor light |Mirror light|Mirror backlight|mirror led #mirrorwork #mirror #mirrordecor 2024, November
Anonim
Infinity-spiegel met LCD- en IR-sensor
Infinity-spiegel met LCD- en IR-sensor
Infinity-spiegel met LCD- en IR-sensor
Infinity-spiegel met LCD- en IR-sensor
Infinity-spiegel met LCD- en IR-sensor
Infinity-spiegel met LCD- en IR-sensor

Dit project laat je zien hoe je een Infinity Mirror kunt maken. Het basisconcept is dat de LED's op de spiegel licht creëren dat van de achteruitkijkspiegel naar de voorspiegel weerkaatst, waar wat licht ontsnapt, zodat we naar binnen kunnen kijken en sommige worden teruggekaatst naar de achterspiegel en produceren het oneindige effect. Dit is gebaseerd op de Infinity Mirror With Ultra Sonic Sensors Instructable van Hack Sioux Falls en How to Connect I2C LCD Display to Arduino Uno by JunezRiyaz.

Benodigdheden

1. Een schaduwdoos ($ 50)

2. Eenrichtingsspiegelfilm ($ 17)

3. Een RGB LED-lichtstrip ($ 30)

4. Arduino ($ 35)

5. Een spiegel ($10)

Optioneel:

1. IR-sensor en afstandsbediening ($ 20)

2. Een LCD-scherm ($ 20)

3. 7 vrouwelijke naar mannelijke connectoren

4. 3 mannelijke naar mannelijke connectoren

Gereedschap

1. Soldeerbout

2. Draadknipper en stripper

3. Iets om de spiegel mee te snijden

*Let op: alle prijzen in CAD en maten zijn afhankelijk van de doos die u gebruikt.

Stap 1: De spiegel en de spiegelfilm installeren

De spiegel en de spiegelfilm installeren
De spiegel en de spiegelfilm installeren
De spiegel en de spiegelfilm installeren
De spiegel en de spiegelfilm installeren

Het eerste dat u moet doen, is de spiegel installeren die achter in de schaduwbox komt. U wilt er een krijgen die de juiste maat heeft of er een krijgen die groter is en deze dan inkorten. Maar hiervoor moet je een spiegel gebruiken en niet de film, omdat we willen dat al het licht wordt teruggekaatst. De spiegelfilm kan ook het patroon aannemen van het materiaal waarop hij zich bevindt als het geen glas is.

Wanneer u de spiegel installeert, zorg er dan voor dat u deze in de schaduwdoos bevestigt. Ik raad aan om kleine stukjes hout en spijkers te gebruiken om ervoor te zorgen dat de spiegel niet beweegt. Ik had geen spiegel in de tijd dat ik dit project moest voltooien, dus gebruikte ik de film (u kunt zien op de foto's). Het concept werkt maar niet erg goed en geeft een schuine en chaotische uitstraling die er naar mijn mening niet goed uitziet.

Elke spiegelfilm zal een beetje anders zijn, maar degene die ik kreeg zei om het glas schoon te maken waarop we de film aanbrengen en vervolgens om tape te gebruiken om de beschermende film aan één kant te verwijderen en zeepwater in een spray te gebruiken fles zet de film op het glas. Gebruik vervolgens een creditcard of wisser om eventuele luchtbellen en overtollig water te verwijderen. Ik had weer geen glas, maar het werkt nog steeds hetzelfde. Laat het glas dan een nacht drogen en het moet klaar zijn.

Stap 2: De LED-strip instellen

De LED-strip instellen
De LED-strip instellen
De LED-strip instellen
De LED-strip instellen

Voor de LED's heb ik gewoon de meegeleverde dubbelzijdige tape gebruikt om het op het frame te plakken en een gat gemaakt om de draad eruit te laten komen. Op elke hoek heb ik draden gesoldeerd om verbinding te maken met een andere strip om de doosvorm te behouden zonder afgeronde randen. Zorg ervoor dat u de strips alleen snijdt op punten waar er contacten zijn waardoor dit kan gebeuren en verander niet de richting waarin de LED's met elkaar zijn verbonden, ook wel het omkeren van de polariteit genoemd. De strip die ik kreeg had pijlen om ervoor te zorgen dat dit niet gebeurt, dus zorg ervoor dat ze allemaal in dezelfde richting wijzen.

Ik maakte een klein gaatje om de kabel door te steken naar de buitenkant van de doos, de LED's die ik had waren 3-pins adresseerbare LED's, dus ik had stroom-, grond- en dataconnectoren. Ik heb Digital Pin 3 gebruikt voor de dataconnector, zorg ervoor dat je je LED-strips test om er zeker van te zijn dat ze werken voordat je ze op het frame plakt en zorg ervoor dat je alleen de aanbevolen spanning voor mijn strip gebruikt, namelijk 5-6 V.

Stap 3: De IR-sensor en het LCD-scherm monteren (optioneel)

De IR-sensor en het LCD-scherm monteren (optioneel)
De IR-sensor en het LCD-scherm monteren (optioneel)
De IR-sensor en het LCD-scherm monteren (optioneel)
De IR-sensor en het LCD-scherm monteren (optioneel)
De IR-sensor en het LCD-scherm monteren (optioneel)
De IR-sensor en het LCD-scherm monteren (optioneel)

Ik koos ervoor om een IR-sensor en afstandsbediening te gebruiken om de lichteffecten te wijzigen en een LCD-scherm te gebruiken om de gebruiker de opties voor de effecten te laten zien.

Om de LCD- en IR-sensor te monteren, zou ik een heet lijmpistool gebruiken en ze op de bovenkant van het frame plakken en alles aan de achterkant bedraad, maar ik wilde niet dat ze werden gerepareerd omdat ik ze misschien na het project moest verwijderen is klaar.

Om de LCD- en IR-ontvanger aan te sluiten, heb ik mannelijke naar vrouwelijke connectoren gebruikt die op de Arduino worden aangesloten voor zowel gegevens als aarde en stroom. Om alles aan te sluiten gebruikte ik pin 12 met een weerstand van 2 kΩ op de datapin voor de IR-sensor, Analog Pin A4 voor de SDA van het LCD en Analog Pin 5 voor de SCL van het LCD.

Stap 4: Coderen

Voor dit project gebruik ik een paar bibliotheken die je zou moeten downloaden om te gebruiken. Ik ga ze hier plaatsen, houd er rekening mee dat ik op Windows werk, dus dat kan een effect hebben als je op Mac of Linux werkt.

Je zult het aantal pixels moeten wijzigen, afhankelijk van het aantal LED's dat je hebt. Ik heb ook een seriële monitorinterface ingebouwd, zodat je er op die manier mee kunt communiceren als je geen IR-sensor gebruikt.

// Bibliotheken

#include Adafruit_NeoPixel.h> #include #include #include // Pinnen en constante waarden // Pinnen en constante waardenconst int RECV_PIN = 12; IRrecv irrecv(RECV_PIN); decode_results resultaten; niet-ondertekende lange key_value = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel-pixels = Adafruit_NeoPixel(NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIEF);// Variabelen int IRNumb; int IRNumb2; int regenboog = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); char-invoer = 0; tekeninvoer2 = 0; int r; intg; int b; int breakCondition = 0; void setup() { // Initialiseert elementen die niet herhaald hoeven te worden. lcd.begin(16, 2);//Definiëren van 16 kolommen en 2 rijen lcd-scherm lcd.backlight();//Om de achtergrondverlichting in te schakelen Serial.begin (9600); pixels.begin(); onrecv.enableIRIn(); Serial.println("Voer een 0 in om de lichten uit te doen"); // Begininstructies Serial.println ("Voer een 1 in om de LED's wit te maken"); Serial.println("Voer een 2 in om de LED's door verschillende kleuren te laten lopen"); Serial.println("Voer een 3 in om de LED-kleuren handmatig aan te passen"); } void loop() { IRNumb = 10; IRScan(); hoofdopties(); if (Serial.available() > 0) { // Controleert of een teken beschikbaar is? invoer = (char)Serial.read(); } // Kiest de verschillende opties if (invoer == '1' || IRNumb == 1){ rainbowColor = colorChange(255, 255, 255); // Wit setAll (rainbowColor); // Werkt de LED's bij } else if (invoer == '0' || IRNumb == 0) {rainbowColor = colorChange (0, 0, 0); // Off setAll (rainbowColor); // Werkt de LED's bij } else if (invoer == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println("Voer alles in dat geen 2 is om dit effect te verlaten, daarna een van de voorgaande opties voor een nieuw effect.");

lcd.wissen(); // Reinig het scherm lcd.setCursor (0, 0); lcd.print("Afsluiten met willekeurig-"); lcd.setCursor(0, 1); lcd.print ("verdoof dat! = 2"); for(int i = 0; i = 48 && invoer <= 57) || breakCondition == 1 || IRNumb != 2){ // Controleert of het effect moet worden afgesloten rainbowColor = colorChange (0, 0, 0); setAll (regenboogkleur); breakConditie = 1; pauze; } rainbowColor = colorChange (i, 0, 0); setAll (regenboogkleur); toonStrip(); vertraging (100); } for(int i = 0; i = 48 && invoer <= 57) || breakCondition == 1 || IRNumb != 2){ // Controleert of het effect moet worden afgesloten rainbowColor = colorChange (0, 0, 0); setAll (regenboogkleur); breakConditie = 1; pauze; } g++; regenboogKleur = kleurVeranderen (i, g, 0); setAll (regenboogkleur); toonStrip(); vertraging (100); } for(int g = 0; g = 48 && invoer <= 57) || breakCondition == 1 || IRNumb != 2){ // Controleert of het effect moet worden afgesloten rainbowColor = colorChange (0, 0, 0); setAll (regenboogkleur); breakConditie = 1; pauze; } r+= 2; regenboogKleur = kleurVeranderen (r, g, 0); setAll (regenboogkleur); toonStrip(); vertraging (100); } for(int b = 0; b = 48 && invoer <= 57) || breakCondition == 1 || IRNumb != 2){ // Controleert of het effect moet worden afgesloten rainbowColor = colorChange (0, 0, 0); setAll (regenboogkleur); breakConditie = 1; pauze; } r+= 2; g+= 5; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); vertraging (100); } mainOptions(); } else if (invoer == '3' || IRNumb == 3){ r = 0; g = 0; b = 0;

Serial.println("Voer n in om af te sluiten");

Serial.println("Gebruik w en s om de rode kleur te vergroten of te verkleinen"); Serial.println("Gebruik r en f om de groene kleur te vergroten of te verkleinen"); Serial.println("Gebruik y en h om de blauwe kleur te vergroten of te verkleinen"); lcd.clear();//Reinig het scherm lcd.setCursor(0, 0); lcd.print("afsluiten:0, 4/7:+/-rood"); lcd.setCursor(0, 1); lcd.print("5/8:groen, 6/9:blauw");

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

if (Serial.available() > 0) { // is een teken beschikbaar? input2 = (char)Serial.read(); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2();

if (IRNumb2 == 0){

pauze; } if (invoer2 == 'w' || IRNumb2 == 4){ r+= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); } else if (input2 == 's' || IRNumb2 == 7){ r-= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); } else if (input2 == 'r' || IRNumb2 == 5){ g+= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); } else if (input2 == 'f' || IRNumb2 == 8){ g-= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); }

anders if (invoer2 == 'y' || IRNumb2 == 6){

b+= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); }

anders if (invoer2 == 'h' || IRNumb2 == 9){

b-= 2; regenboogKleur = kleurVeranderen (r, g, b); setAll (regenboogkleur); toonStrip(); } } mainOptions(); } setAll(regenboogkleur); toonStrip(); } void showStrip() { pixels.show(); } void setAll(uint32_t color) { for(int i = 0; i < NUMPIXELS; i++) {pixels.setPixelColor(i, color); } } // Voer een waarde in van 0 tot 255 om een kleurwaarde te krijgen. uint32_t colorChange (int r, int g, int b) { return pixels. Color (r, g, b); } void mainOptions (){ // Sjows de belangrijkste effectopties lcd.clear();//Reinig het scherm lcd.setCursor(0, 0); lcd.print("0 Voor lichten uit"); lcd.setCursor(0, 1); lcd.print("1: Wit licht"); vertraging (1000); lcd.clear();//Reinig het scherm lcd.setCursor(0, 0); lcd.print("2: Kleureffect"); lcd.setCursor(0, 1); lcd.print("3: Handmatig"); vertraging (1000); } ongeldig IRScan (){ if (irrecv.decode(&resultaten)){

if (resultaten.waarde == 0XFFFFFFFF)

resultaten.waarde = sleutelwaarde; anders { //Serial.println (resultaten.waarde, 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; // Serieel.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; // Serieel.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb = 6; // Serieel.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; // Serieel.println ("9"); } } key_value = resultaten.waarde; irrev.resume(); } } ongeldig IRScan2 (){ if (irrecv.decode(&resultaten)){

if (resultaten.waarde == 0XFFFFFFFF)

resultaten.waarde = sleutelwaarde; anders { // Serial.println (resultaten.waarde, 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; // Serieel.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; // Serieel.println ("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb2 = 6; // Serieel.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; // Serieel.println ("9"); } } key_value = resultaten.waarde; irrev.resume(); } }

Stap 5: Montage

Montage
Montage

Om de Arduino op het frame te monteren, zou ik het gewoon en het breadboard dat ik gebruikte aan de achterkant van het frame lijmen en proberen de kabels te bedekken / verbergen om het er goed uit te laten zien.

Aanbevolen: