Inhoudsopgave:
- Benodigdheden
- Stap 1: De spiegel en de spiegelfilm installeren
- Stap 2: De LED-strip instellen
- Stap 3: De IR-sensor en het LCD-scherm monteren (optioneel)
- Stap 4: Coderen
- Stap 5: Montage
Video: Infinity-spiegel met LCD- en IR-sensor - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
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
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
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)
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
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:
Maak een Infinity Mirror Clock: 15 stappen (met afbeeldingen)
Maak een Infinity Mirror Clock: In een vorig project bouwde ik een oneindige spiegel, waar mijn uiteindelijke doel was om er een klok van te maken. (Maak een kleurrijke oneindigheidsspiegel) Ik heb dat niet nagestreefd nadat ik het had gebouwd, want hoewel het er cool uitzag, waren er een paar dingen met de
Maak een EENVOUDIGE Infinity Mirror Cube - GEEN 3D-printen en GEEN programmering: 15 stappen (met afbeeldingen)
Maak een EENVOUDIGE Infinity Mirror Cube | GEEN 3D-printen en GEEN programmering: iedereen houdt van een goede infinity-kubus, maar ze zien eruit alsof ze moeilijk te maken zijn. Mijn doel voor deze Instructable is om je stap voor stap te laten zien hoe je er een kunt maken. Niet alleen dat, maar met de instructies die ik je geef, kun je er een maken o
Maak een Infinity Mirror Cube: 12 stappen (met afbeeldingen)
Een oneindige spiegelkubus maken: terwijl ik informatie opzocht bij het maken van mijn eerste oneindige spiegel, kwam ik enkele afbeeldingen en video's van oneindige kubussen tegen, en ik wilde er zeker een van mijn eigen maken. Het belangrijkste dat me tegenhield, was dat ik het anders wilde doen
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino - Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter - RC Helikopter - RC-vliegtuig met Arduino: 5 stappen (met afbeeldingen)
Draadloze afstandsbediening met 2,4 GHz NRF24L01-module met Arduino | Nrf24l01 4-kanaals / 6-kanaals zenderontvanger voor quadcopter | RC Helikopter | Rc-vliegtuig met Arduino: een Rc-auto besturen | Quadcopter | Drone | RC vliegtuig | RC-boot, we hebben altijd een ontvanger en zender nodig, stel dat we voor RC QUADCOPTER een 6-kanaals zender en ontvanger nodig hebben en dat type TX en RX is te duur, dus we gaan er een maken op onze
Infinity-oorbellen: 3 stappen (met afbeeldingen)
Infinity oorbellen: hergebruik van wat overgebleven spy mirror acryl (omdat we geen spullen wilden weggooien) en experimenteren met UV-licht. Terwijl de grote led-kubussen gemakkelijk kunnen worden opgeschaald, worden kleinere kubussen met behulp van LED-strepen te ingewikkeld en nemen ze te veel ruimte in beslag