Spisu treści:
- Kieszonkowe dzieci
- Krok 1: instalowanie lustra i folii lustrzanej
- Krok 2: Konfiguracja taśmy LED
- Krok 3: Montaż czujnika podczerwieni i wyświetlacza LCD (opcjonalnie)
- Krok 4: Kod
- Krok 5: Montaż
Wideo: Lustro nieskończoności z czujnikiem LCD i IR: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
Ten projekt pokaże Ci, jak możesz zrobić Lustro Infinity. Podstawowa koncepcja polega na tym, że diody LED na lusterku wytwarzają światło, które odbija się od lusterka wstecznego do lusterka przedniego, gdzie część światła ucieka, dzięki czemu możemy zajrzeć do środka, a niektóre są odbijane z powrotem do lusterka tylnego i dają nieskończony efekt. Jest to oparte na lustrze Infinity z czujnikami ultradźwiękowymi instruktażowymi przez Hacka Sioux Fallsa i sposobie podłączenia wyświetlacza LCD I2C do Arduino Uno autorstwa JunezRiyaz.
Kieszonkowe dzieci
1. Pudełko Cienia (50 USD)
2. Jednokierunkowa folia lustrzana (17 USD)
3. Pasek świetlny LED RGB (30 USD)
4. Arduino (35 USD)
5. Lustro (10 USD)
Opcjonalny:
1. Czujnik podczerwieni i pilot (20 USD)
2. LCD (20 USD)
3. 7 złączy żeńskich na męskie
4. 3 złącza męskie na męskie
Narzędzia
1. Lutownica
2. Przecinak do drutu i ściągacz izolacji
3. Coś do wycięcia lustra
*Uwaga: wszystkie ceny w CAD i rozmiary będą zależeć od używanego pudełka.
Krok 1: instalowanie lustra i folii lustrzanej
Pierwszą rzeczą do zrobienia jest zainstalowanie lustra, które będzie znajdować się z tyłu pudełka z cieniami. Chcesz mieć taki, który ma odpowiedni rozmiar lub większy, a następnie go przyciąć. Ale w tym celu musisz użyć lustra, a nie folii, ponieważ chcemy, aby całe światło było odbijane z powrotem, folia lustrzana może również przybrać wzór materiału, na którym się znajduje, jeśli nie jest to szkło.
Podczas montażu lustra upewnij się, że jest ono zabezpieczone w pudełku z cieniem, polecam użyć małych kawałków drewna i gwoździ, aby upewnić się, że lustro się nie poruszy. Nie miałem lustra w czasie, kiedy musiałem ukończyć ten projekt, więc użyłem filmu (widać na zdjęciach). Koncepcja działa, ale niezbyt dobrze i daje pod kątem i chaotyczny wygląd, który moim zdaniem nie wygląda dobrze.
Każda folia lustrzana będzie trochę inna, ale ta, o której kazano mi wyczyścić szybę, na którą nakładamy folię, a następnie użyć taśmy do zdjęcia folii ochronnej, która jest po jednej stronie i użyć wody z mydłem w sprayu butelka połóż film na szkle. Następnie użyj karty kredytowej lub ściągaczki, aby pozbyć się pęcherzyków powietrza i nadmiaru wody. Po raz kolejny nie miałem szkła, ale nadal działa tak samo. Następnie pozostaw szkło do wyschnięcia na noc i należy to zrobić.
Krok 2: Konfiguracja taśmy LED
W przypadku diod LED po prostu użyłem dołączonej dwustronnej taśmy, aby przykleić ją do ramy i zrobiłem otwór, aby wyszedł drut. W każdym rogu przylutowałem przewody, aby połączyć je z innym paskiem, aby zachować kształt pudełka bez zaokrąglonych krawędzi. Upewnij się, że przecinasz paski tylko w miejscach, w których znajdują się styki, które mogłyby na to pozwolić, i nie zmieniaj kierunku, w którym diody LED łączą się ze sobą, co nazywa się odwróceniem polaryzacji. Pasek, który dostałem, miał strzałki, aby upewnić się, że tak się nie stanie, więc upewnij się, że wszystkie są skierowane w tym samym kierunku.
Zrobiłem mały otwór, aby przełożyć kabel na zewnątrz pudełka, diody LED, które miałem, były adresowalnymi diodami LED 3 pin, więc miałem złącza zasilania, uziemienia i danych. Użyłem Digital Pin 3 do złącza danych, upewnij się, że przetestowałeś swoje paski LED, aby upewnić się, że działają przed przyklejeniem ich do ramy i upewnij się, że używasz tylko zalecanego napięcia dla mojego, które wynosi 5 - 6 V.
Krok 3: Montaż czujnika podczerwieni i wyświetlacza LCD (opcjonalnie)
Zdecydowałem się użyć czujnika podczerwieni i pilota, aby zmienić efekty świetlne i użyć oraz LCD, aby pokazać użytkownikowi opcje, jakie mają dla efektów.
Do zamontowania czujnika LCD i IR użyłbym pistoletu do klejenia na gorąco i przykleiłem je do górnej części ramy i podłączyłem wszystko z tyłu, ale nie chciałem ich naprawiać, bo być może będę musiał je zdjąć po projekcie skończone.
Do podłączenia wyświetlacza LCD i odbiornika podczerwieni użyłem złączy męskich do żeńskich, które podłącza się do Arduino w celu przesyłania danych, a także uziemienia i zasilania. Aby połączyć wszystko, użyłem pinu 12 z rezystorem 2 kΩ na pinie danych czujnika podczerwieni, pinu analogowego A4 dla SDA wyświetlacza LCD i pinu analogowego 5 dla SCL wyświetlacza LCD.
Krok 4: Kod
Do tego projektu używam kilku bibliotek, które musiałbyś pobrać, aby móc korzystać. Umieszczę je tutaj, pamiętaj, że jestem w systemie Windows, więc może to mieć wpływ na Maca lub Linuksa.
Będziesz musiał zmienić liczbę pikseli w zależności od liczby posiadanych diod LED. Wbudowałem również interfejs monitora szeregowego, dzięki czemu możesz się z nim łączyć, jeśli nie używasz czujnika podczerwieni.
// Biblioteki
#include Adafruit_NeoPixel.h> #include #include #include // Piny i wartości stałe // Piny i wartości stałeconst int RECV_PIN = 12; IRrecv nieodwoł.(RECV_PIN); decode_results wyniki; unsigned long key_value = 0; const int LICZBA PIKSELÓW = 27;
Adafruit_NeoPixel piksele = Adafruit_NeoPixel(NUMPIXELS, 3);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, DODATNI);// Zmienne int IRNumb; int IRNumb2; int tęcza = 0; uint32_t rainbowColor = piksele. Color(0, 0, 0); wejście znaków = 0; znak input2 = 0; int r; intg; intb; int warunek_przerwania = 0; void setup() { // Inicjuje elementy, które nie muszą być powtarzane. lcd.begin(16, 2);//Definiowanie 16 kolumn i 2 wierszy wyświetlacza lcd.backlight();//Aby włączyć podświetlenie Serial.begin(9600); piksele.początek(); nieodwoł.enableIRIn(); Serial.println("Wprowadź 0, aby wyłączyć światła"); // Instrukcje początkowe Serial.println("Wprowadź 1, aby diody LED stały się białe"); Serial.println("Wprowadź 2, aby diody LED przełączały się między różnymi kolorami"); Serial.println("Wprowadź 3, aby ręcznie dostosować kolory LED"); } void loop() { IRNumb = 10; IRScan(); mainOpcje(); if (Serial.available() > 0) { // Sprawdza, czy znak jest dostępny? input = (char)Serial.read(); } // Wybiera różne opcje if (input == '1' || IRNumb == 1){ rainbowColor = colourChange(255, 255, 255); // Biały setAll(RainbowColor); // Aktualizuje diody LED } else if (input == '0' || IRNumb == 0){ rainbowColor = colorChange(0, 0, 0); // Off setAll(RainbowColor); // Aktualizuje diody LED } else if (input == '2' || IRNumb == 2){ breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println("Wprowadź wszystko, co nie jest 2, aby wyjść z tego efektu, a następnie dowolną z poprzednich opcji dla nowego efektu.");
lcd.clear(); //Wyczyść ekran lcd.setCursor(0, 0); lcd.print("Zakończ używając dowolnego-"); lcd.setCursor(0, 1); lcd.print("odrzuć to != 2"); for(int i = 0; i = 48 && wejście <= 57) || warunek przerwania == 1 || IRNumb != 2){ // Sprawdza, czy efekt wymaga wyjścia rainbowColor = colorChange(0, 0, 0); setAll(tęczaKolor); warunek przerwania = 1; przerwa; } rainbowColor = colorChange (i, 0, 0); setAll(tęczaKolor); pokażStrip(); opóźnienie (100); } for(int i = 0; i = 48 && wejście <= 57) || warunek przerwania == 1 || IRNumb != 2){ // Sprawdza, czy efekt wymaga wyjścia rainbowColor = colorChange(0, 0, 0); setAll(tęczaKolor); warunek przerwania = 1; przerwa; } g++; rainbowColor = colorChange (i, g, 0); setAll(tęczaKolor); pokażStrip(); opóźnienie (100); } for(int g = 0; g = 48 && wejście <= 57) || warunek przerwania == 1 || IRNumb != 2){ // Sprawdza, czy efekt wymaga wyjścia rainbowColor = colorChange(0, 0, 0); setAll(tęczaKolor); warunek przerwania = 1; przerwa; } r+= 2; rainbowColor = zmiana koloru (r, g, 0); setAll(tęczaKolor); pokażStrip(); opóźnienie (100); } for(int b = 0; b = 48 && wejście <= 57) || warunek przerwania == 1 || IRNumb != 2){ // Sprawdza, czy efekt wymaga wyjścia rainbowColor = colorChange(0, 0, 0); setAll(tęczaKolor); warunek przerwania = 1; przerwa; } r+= 2; g+= 5; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); opóźnienie (100); } mainOpcje(); } else if (wejście == '3' || IRNumb == 3){ r = 0; g = 0; b = 0;
Serial.println("Wprowadź n, aby wyjść");
Serial.println("Użyj w i s, aby zwiększyć lub zmniejszyć kolor czerwony"); Serial.println("Użyj r i f, aby zwiększyć lub zmniejszyć zielony kolor"); Serial.println("Użyj yih, aby zwiększyć lub zmniejszyć kolor niebieski"); lcd.clear();//Wyczyść ekran lcd.setCursor(0, 0); lcd.print("wyjście:0, 4/7:+/-czerwony"); lcd.setCursor(0, 1); lcd.print("5/8:zielony, 6/9:niebieski");
while (input2 != 'n' || IRNumb2 != 0){
if (Serial.available() > 0) { // czy znak jest dostępny? input2 = (char)Serial.read(); } //Serial.println(IRNumb2); IRLiczba2 = 10; IRScan2();
jeśli (IRNumb2 == 0){
przerwa; } if (wejście2 == 'w' ||IRNumb2 == 4){ r+= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); } else if (input2 == 's' || IRNumb2 == 7){ r-= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); } else if (input2 == 'r' || IRNumb2 == 5){ g+= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); } else if (input2 == 'f' || IRNumb2 == 8){ g-= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); }
inaczej if (input2 == 'y' || IRNumb2 == 6){
b+= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); }
inaczej if (input2 == 'h' || IRNumb2 == 9){
b-= 2; rainbowColor = zmiana koloru (r, g, b); setAll(tęczaKolor); pokażStrip(); } } mainOptions(); } setAll(tęczaKolor); pokażStrip(); } void showStrip() { piksele.show(); } void setAll(uint32_t color) { for(int i = 0; i < NUMPIXELS; i++) { piksele.setPixelColor(i, kolor); } } // Wprowadź wartość od 0 do 255, aby uzyskać wartość koloru. uint32_t colorChange (int r, int g, int b) { return pikseli. Color(r, g, b); } void mainOptions (){ // Wyświetla główne opcje efektu lcd.clear();//Wyczyść ekran lcd.setCursor(0, 0); lcd.print("0 dla wyłączonych świateł"); lcd.setCursor(0, 1); lcd.print("1: Światło białe"); opóźnienie (1000); lcd.clear();//Wyczyść ekran lcd.setCursor(0, 0); lcd.print("2: Efekt koloru"); lcd.setCursor(0, 1); lcd.print("3: Instrukcja"); opóźnienie (1000); } void IRScan (){ if (irrecv.decode(&wyniki)){
if (wyniki.wartość == 0XFFFFFFFF)
wyniki.wartość = klucz_wartość; else{ //Serial.println(results.value, HEX); if (wyniki.wartość == 0xFF6897 || wyniki.wartość == 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; // Serial.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; // Serial.println("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb = 6; // Serial.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; // Serial.println("9"); } } klucz_wartość = wyniki.wartość; nieodzysk.wznowienie(); } } void IRScan2 (){ if (irrecv.decode(&wyniki)){
if (wyniki.wartość == 0XFFFFFFFF)
wyniki.wartość = klucz_wartość; else{ // Serial.println(results.value, HEX); if (wyniki.wartość == 0xFF6897 || wyniki.wartość == 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; // Serial.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; // Serial.println("5"); } else if (results.value == 0x449E79F || results.value == 0xFF5AA5){ IRNumb2 = 6; // Serial.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; // Serial.println("9"); } } klucz_wartość = wyniki.wartość; nieodzysk.wznowienie(); } }
Krok 5: Montaż
Aby zamontować Arduino do ramy, po prostu przykleiłbym go i płytkę stykową, której użyłem do tylnej części ramy i próbowałem zakryć/ukryć kable, aby wyglądały dobrze.
Zalecana:
Lustro nieskończoności reagujące na dźwięk: 5 kroków
Sound Reactive Infinity Mirror: W tej instrukcji pokażę ci, jak możesz zrobić to lustro nieskończoności. Więc zacznijmy
Lustro i stół nieskończoności (z przypadkowymi narzędziami): 7 kroków (ze zdjęciami)
Lustro i stół nieskończoności (z przypadkowymi narzędziami): Cześć wszystkim, jakiś czas temu natknąłem się na to pouczenie i natychmiast zostałem z nim zabrany i chciałem zrobić własne, ale nie mogłem zdobyć 1) Jednokierunkowego lustra z pleksi, ani 2) Frezarka CNC. Po krótkich poszukiwaniach wymyśliłem
Lustro nieskończoności na ścianie bąbelkowej: 11 kroków
Bubble Wall Infinity Mirror: Witamy w projekcie lustra nieskończoności ściany bąbelkowej
Zrób kolorowe lustro nieskończoności: 12 kroków (ze zdjęciami)
Zrób kolorowe lustro nieskończoności: W mojej ostatniej instrukcji zrobiłem lustro nieskończoności z białymi światłami. Tym razem zrobię taki z kolorowymi światłami, używając taśmy LED z adresowalnymi diodami LED. Będę podążał za wieloma tymi samymi krokami od ostatniej instrukcji, więc nie jestem g
Lustro nieskończoności w 2x4: 9 kroków (ze zdjęciami)
Infinity Mirror Inside of 2x4: W tym hacku pokażę, jak zrobić nieskończone lustro wewnątrz 2x4. Pierwotnie był pomyślany jako podstawka pod napoje i wyczuwa, kiedy umieszczasz na niej napój lub butelkę wody za pomocą mikroprzełącznika wewnątrz. Możesz zobaczyć całą historię tego budynku