İçindekiler:
- Gereçler
- Adım 1: Aynayı ve Ayna Filmini Takma
- Adım 2: LED Şeridi Ayarlama
- Adım 3: IR Sensörü ve LCD'yi Monte Etme (Opsiyonel)
- 4. Adım: Kod
- Adım 5: Montaj
Video: LCD ve IR Sensörlü Sonsuzluk Aynası: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Bu proje size nasıl Infinity Mirror yapabileceğinizi gösterecek. Temel konsept, aynadaki LED'lerin, arka aynadan ön aynaya yansıyan ve bir miktar ışığın kaçtığı, böylece içeriyi görebildiğimiz ve bazılarının arka aynaya geri yansıyan ve sonsuz etki yaratan bir ışık oluşturmasıdır. Bu, Hack Sioux Falls tarafından Talimat Verilebilen Ultra Sonic Sensörlü Sonsuzluk Aynasına ve JunezRiyaz'ın I2C Lcd Ekranını Arduino Uno'ya Nasıl Bağlayacağınıza dayanmaktadır.
Gereçler
1. Bir Gölge Kutusu (50$)
2. Tek Yönlü Ayna Filmi (17$)
3. Bir RGB LED ışık şeridi (30 $)
4. Arduino (35 $)
5. Bir ayna (10$)
İsteğe bağlı:
1. IR Sensörü ve Uzaktan Kumanda (20$)
2. Bir LCD (20$)
3. 7 Dişi - Erkek Konnektörler
4. 3 Erkek - Erkek Konnektör
Aletler
1. Havya
2. Tel Kesici ve Striptizci
3. Aynayı kesecek bir şey
* Tüm fiyatların CAD ve boyutlarının kullandığınız kutuya bağlı olduğunu unutmayın.
Adım 1: Aynayı ve Ayna Filmini Takma
Yapılacak ilk şey, gölge kutusunun arkasına gelecek olan aynayı monte etmektir. Ya doğru boyutta olanı almak ya da daha büyük olanı almak ve sonra kesmek istersiniz. Ama bunun için film değil ayna kullanmanız gerekiyor çünkü tüm ışığın geri yansımasını istiyoruz, ayna filmi cam değilse de üzerinde bulunduğu malzemenin desenini alabilir.
Aynayı takarken gölge kutusuna sabitlediğinizden emin olun, aynanın hareket etmemesi için küçük tahta parçaları ve çivi kullanmanızı tavsiye ederim. Bu projeyi tamamlamak zorunda kaldığımda aynam yoktu bu yüzden filmi kullandım (resimlerde görebilirsiniz). Konsept işe yarıyor ama çok iyi değil ve bence iyi görünmeyen açılı ve kaotik bir görünüm veriyor.
Her ayna filmi biraz farklı olacak ama bana filmi koyduğumuz camı temizle, sonra bir tarafta bulunan koruyucu filmi çıkarmak için bant kullan ve bir spreyde sabunlu su kullanarak söylendi. şişe filmi camın üzerine koydu. Ardından hava kabarcıklarından ve fazla sudan kurtulmak için bir kredi kartı veya silecek kullanın. Bir kez daha camım yoktu ama yine de aynı şekilde çalışıyor. Daha sonra camı gece boyunca kurumaya bırakın ve yapılmalıdır.
Adım 2: LED Şeridi Ayarlama
LED'ler için, çerçeveye yapıştırmak için birlikte verilen çift taraflı bandı kullandım ve telin çıkması için bir delik açtım. Her köşede, kutu şeklini yuvarlak kenarlar olmadan tutmak için uçları başka bir şeride bağlamak için lehimledim. Şeritleri yalnızca bunun olmasına izin verecek kontakların olduğu noktalardan kestiğinizden ve LED'lerin polariteyi tersine çevirme olarak bilinen birbirine bağlandığı yönü değiştirmediğinizden emin olun. Aldığım şeritte bunun olmaması için oklar vardı, bu yüzden hepsinin aynı yönü gösterdiğinden emin olun.
Kabloyu kutunun dışına geçirmek için küçük bir delik açtım, sahip olduğum LED'ler 3 pinli adreslenebilir LED'lerdi, bu yüzden güç, toprak ve veri konektörlerim vardı. Veri konektörü için Digital Pin 3 kullandım, LED şeritlerinizi çerçeveye yapıştırmadan önce çalıştıklarından emin olmak için test ettiğinizden ve benimki için sadece 5 - 6 V olan önerilen voltajı kullandığınızdan emin olun.
Adım 3: IR Sensörü ve LCD'yi Monte Etme (Opsiyonel)
Aydınlatma efektlerini değiştirmek için bir IR sensörü ve uzaktan kumanda kullanmayı ve kullanıcıya efektler için sahip oldukları seçenekleri göstermek için bir LCD kullanmayı seçtim.
LCD ve IR sensörünü monte etmek için sıcak tutkal tabancası kullanır ve bunları çerçevenin üstüne yapıştırır ve her şeyi arkaya bağlardım ama sabitlenmelerini istemedim çünkü projeden sonra onları çıkarmak zorunda kalabilirim yapıldı.
LCD ve IR Alıcıyı bağlamak için, toprak ve gücün yanı sıra veri için Arduino'ya takılan Erkek - Dişi Konnektörler kullandım. Her şeyi bağlamak için IR sensörü için veri pininde 2 kΩ dirençli pin 12'yi, LCD'nin SDA'sı için Analog Pin A4'ü ve LCD'nin SCL'si için Analog Pin 5'i kullandım.
4. Adım: Kod
Bu proje için, kullanmak için indirmeniz gereken birkaç kitaplık kullanıyorum. Onları buraya koyacağım, Windows'ta olduğumu unutmayın, bu yüzden Mac veya Linux kullanıyorsanız bir etkisi olabilir.
Sahip olduğunuz LED sayısına bağlı olarak piksel sayısını değiştirmeniz gerekecektir. Ayrıca, bir IR sensörü kullanmıyorsanız, bu şekilde arayüz oluşturabilmeniz için bir Seri Monitör arayüzü oluşturdum.
// Kitaplıklar
#include Adafruit_NeoPixel.h> #include #include #include // Pinler ve Sabit değerler // Pinler ve Sabit değerlerconst int RECV_PIN = 12; IRrecv geri dönüş(RECV_PIN); decode_results sonuçları; imzasız uzun anahtar_değeri = 0; const int SAYILAR = 27;
Adafruit_NeoPixel piksel = Adafruit_NeoPixel(NUMPIXELS, 3);
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZİTİF);// Değişkenler int IRNumb; int IRNumb2; int gökkuşağı = 0; uint32_t gökkuşağıColor = piksel. Color(0, 0, 0); karakter girişi = 0; karakter girişi2 = 0; int r; int g; int b; int breakKoşul = 0; void setup() { // Tekrarlanması gerekmeyen öğeleri sıfırlar. lcd.begin(16, 2);//16 sütun ve 2 satır lcd ekran tanımlama lcd.backlight();//Arka ışığı açmak için Serial.begin(9600); piksel.begin(); irrecv.enableIRIn(); Serial.println("Işıkları kapatmak için 0 giriniz"); // Başlangıç Talimatları Serial.println("LED'leri beyaza çevirmek için 1 girin"); Serial.println("LED'lerin farklı renkler arasında geçiş yapmasını sağlamak için 2 girin"); Serial.println("LED renklerini manuel olarak özelleştirmek için 3 giriniz"); } geçersiz döngü() { IRNumb = 10; IRScan(); anaSeçenekler(); if (Serial.available() > 0) { // Bir karakterin mevcut olup olmadığını kontrol eder mi? girdi = (char)Serial.read(); } // Farklı seçenekleri seçer if (input == '1' || IRNumb == 1){ gökkuşağıRenk = colorChange(255, 255, 255); // Beyaz setAll(gökkuşağıRenk); // LED'leri günceller } else if (input == '0' || IRNumb == 0){ rainbowColor = colorChange(0, 0, 0); // Off setAll(gökkuşağıRenk); // LED'leri günceller } else if (input == '2' || IRNumb == 2){ breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println("Bu efektten çıkmak için 2 olmayan herhangi bir şey girin, ardından yeni bir efekt için önceki seçeneklerden herhangi birini girin.");
lcd.clear(); //Ekranı temizle lcd.setCursor(0, 0); lcd.print("Herhangi birini kullanarak çıkın-"); lcd.setCursor(0, 1); lcd.print("uyuştu != 2"); for(int i = 0; i = 48 && giriş <= 57) || breakKoşul == 1 || IRNumb != 2){ // Efektten çıkılması gerekip gerekmediğini kontrol eder gökkuşağıColor = colorChange(0, 0, 0); setAll(gökkuşağıRengi); breakKoşul = 1; kırmak; } gökkuşağıRenk = colorChange (i, 0, 0); setAll(gökkuşağıRengi); showStrip(); gecikme(100); } for(int i = 0; i = 48 && giriş <= 57) || breakKoşul == 1 || IRNumb != 2){ // Efektten çıkılması gerekip gerekmediğini kontrol eder gökkuşağıColor = colorChange(0, 0, 0); setAll(gökkuşağıRengi); breakKoşul = 1; kırmak; } g++; gökkuşağıRenk = colorChange (i, g, 0); setAll(gökkuşağıRengi); showStrip(); gecikme(100); } for(int g = 0; g = 48 && giriş <= 57) || breakKoşul == 1 || IRNumb != 2){ // Efektten çıkılması gerekip gerekmediğini kontrol eder gökkuşağıColor = colorChange(0, 0, 0); setAll(gökkuşağıRengi); breakKoşul = 1; kırmak; } r+= 2; gökkuşağıRenk = colorChange (r, g, 0); setAll(gökkuşağıRengi); showStrip(); gecikme(100); } for(int b = 0; b = 48 && giriş <= 57) || breakKoşul == 1 || IRNumb != 2){ // Efektten çıkılması gerekip gerekmediğini kontrol eder gökkuşağıColor = colorChange(0, 0, 0); setAll(gökkuşağıRengi); breakKoşul = 1; kırmak; } r+= 2; g+= 5; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); gecikme(100); } mainOptions(); } else if (giriş == '3' || IRNumb == 3){ r = 0; g = 0; b = 0;
Serial.println("Çıkış için n giriniz");
Serial.println("Kırmızı rengi artırmak veya azaltmak için w ve s tuşlarını kullanın"); Serial.println("Yeşil rengi artırmak veya azaltmak için r ve f tuşlarını kullanın"); Serial.println("Mavi rengi artırmak veya azaltmak için y ve h kullanın"); lcd.clear();//Ekranı temizle lcd.setCursor(0, 0); lcd.print("çıkış:0, 4/7:+/-kırmızı"); lcd.setCursor(0, 1); lcd.print("5/8:yeşil, 6/9:mavi");
while (input2 != 'n' || IRNumb2 != 0){
if (Serial.available() > 0) { // bir karakter mevcut mu? input2 = (char)Serial.read(); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2();
if (IRNumb2 == 0){
kırmak; } if (input2 == 'w' || IRNumb2 == 4){ r+= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); } else if (input2 == 's' || IRNumb2 == 7){ r-= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); } else if (input2 == 'r' || IRNumb2 == 5){ g+= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); } else if (input2 == 'f' || IRNumb2 == 8){ g-= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); }
else if (input2 == 'y' || IRNumb2 == 6){
b+= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); }
else if (input2 == 'h' || IRNumb2 == 9){
b-= 2; gökkuşağıRenk = colorChange (r, g, b); setAll(gökkuşağıRengi); showStrip(); } } mainOptions(); } setAll(gökkuşağıRengi); showStrip(); } geçersiz showStrip() { piksel.show(); } void setAll(uint32_t color) { for(int i = 0; i < NUMPIXELS; i++) { piksel.setPixelColor(i, color); } } // Bir renk değeri elde etmek için 0 ile 255 arasında bir değer girin. uint32_t colorChange (int r, int g, int b) { pikselleri döndürür. Color(r, g, b); } void mainOptions (){ // Ana efekt seçeneklerini gösterir lcd.clear();//Ekranı temizler lcd.setCursor(0, 0); lcd.print("0 Işıklar Kapalı"); lcd.setCursor(0, 1); lcd.print("1: Beyaz Işık"); gecikme(1000); lcd.clear();//Ekranı temizle lcd.setCursor(0, 0); lcd.print("2: Renk efekti"); lcd.setCursor(0, 1); lcd.print("3: Manuel"); gecikme(1000); } void IRScan (){ if (irrecv.decode(&results)){
if (results.value == 0XFFFFFFFF)
sonuçlar.değer = anahtar_değer; else{ //Serial.println(sonuçlar.değer, HEX); if (sonuçlar.değer == 0xFF6897 || sonuçlar.değer == 0xC101E57B){ IRNumb = 0; //Serial.println("0"); } else if (sonuçlar.değer == 0x9716BE3F || sonuçlar.değer == 0xFF30CF){ IRNumb = 1; //Serial.println("1"); } else if (sonuçlar.değer == 0x3D9AE3F7 || sonuçlar.değer == 0xFF18E7){ IRNumb = 2; //Serial.println("2"); } else if (sonuçlar.değer == 0xFF7A85 || sonuçlar.değer == 0x6182021B){ IRNumb = 3; // Serial.println("3"); } else if (sonuçlar.değer == 0x8C22657B || sonuçlar.değer == 0xFF10EF){ IRNumb = 4; //Serial.println("4"); } else if (sonuçlar.değer == 0xFF38C7 || sonuçlar.değer == 0x488F3CBB){ IRNumb = 5; // Serial.println("5"); } else if (sonuçlar.değer == 0x449E79F || sonuçlar.değer == 0xFF5AA5){ IRNumb = 6; // Serial.println("6"); } else if (sonuçlar.değer == 0xFF42BD || sonuçlar.değer == 0x32C6FDF7){ IRNumb = 7; //Serial.println("7"); } else if (sonuçlar.değer == 0x1BC0157B || sonuçlar.değer ==0xFF4AB5){ IRNumb = 8; //Serial.println("8"); } else if (sonuçlar.değer == 0xFF52AD || sonuçlar.değer == 0x3EC3FC1B){ IRNumb = 9; // Serial.println("9"); } } anahtar_değer = sonuçlar.değer; irrecv.özgeçmiş(); } } void IRScan2 (){ if (irrecv.decode(&results)){
if (results.value == 0XFFFFFFFF)
sonuçlar.değer = anahtar_değer; else{ // Serial.println(sonuçlar.değer, HEX); if (sonuçlar.değer == 0xFF6897 || sonuçlar.değer == 0xC101E57B){ IRNumb2 = 0; //Serial.println("0"); } else if (sonuçlar.değer == 0x9716BE3F || sonuçlar.değer == 0xFF30CF){ IRNumb2 = 1; //Serial.println("1"); } else if (sonuçlar.değer == 0x3D9AE3F7 || sonuçlar.değer == 0xFF18E7){ IRNumb2 = 2; //Serial.println("2"); } else if (sonuçlar.değer == 0xFF7A85 || sonuçlar.değer == 0x6182021B){ IRNumb2 = 3; // Serial.println("3"); } else if (sonuçlar.değer == 0x8C22657B || sonuçlar.değer == 0xFF10EF){ IRNumb2 = 4; //Serial.println("4"); } else if (sonuçlar.değer == 0xFF38C7 || sonuçlar.değer == 0x488F3CBB){ IRNumb2 = 5; // Serial.println("5"); } else if (sonuçlar.değer == 0x449E79F || sonuçlar.değer == 0xFF5AA5){ IRNumb2 = 6; // Serial.println("6"); } else if (sonuçlar.değer == 0xFF42BD || sonuçlar.değer == 0x32C6FDF7){ IRNumb2 = 7; //Serial.println("7"); } else if (sonuçlar.değer == 0x1BC0157B || sonuçlar.değer ==0xFF4AB5){ IRNumb2 = 8; //Serial.println("8"); } else if (sonuçlar.değer == 0xFF52AD || sonuçlar.değer == 0x3EC3FC1B){ IRNumb2 = 9; // Serial.println("9"); } } anahtar_değer = sonuçlar.değer; irrecv.özgeçmiş(); } }
Adım 5: Montaj
Arduino'yu çerçeveye monte etmek için, onu ve kullandığım breadboard'u çerçevenin arkasına yapıştırır ve iyi görünmesi için kabloları örtmeye/gizlemeye çalışırdım.
Önerilen:
Arduino Gemma & NeoPixels ile Kolay Sonsuzluk Aynası: 8 Adım (Resimlerle)
Arduino Gemma ve NeoPixels ile Kolay Sonsuzluk Aynası: İşte! Büyüleyici ve aldatıcı derecede basit sonsuzluk aynasının derinliklerine bakın! Tek bir LED şeridi, sonsuz yansıma efekti yaratmak için aynalı sandviç üzerinde içeriye doğru parlıyor. Bu proje, introm Arduin'deki beceri ve teknikleri uygulayacak
2 Taraflı, Masaüstü Sonsuzluk Aynası Yapın: 14 Adım (Resimlerle)
2 Taraflı, Masaüstü Sonsuzluk Aynası Yapın: Gördüğüm sonsuzluk aynalarının çoğu tek taraflı ama ben biraz farklı bir tane oluşturmak istedim. Bu, 2 taraflı olacak ve masaüstü veya rafta sergilenebilecek şekilde tasarlanacak. Yapması kolay, çok havalı bir proje!
Küp Sonsuzluk Aynası: 5 Adım
Cube Infinity Mirror: Hiç yanlışlıkla sonsuz bir boşluğa düştüğünüzü ve harika bir yolculuğa çıktığınızı hayal ettiniz mi? Sonsuz bir boyut hayal edin, biz de kendi sonsuz küp sonsuzluk aynamızı yapabiliriz. bunu yapalım
Sese Duyarlı Sonsuzluk Aynası: 5 Adım
Sound Reactive Infinity Mirror: Bu Instructable'da size bu Infinity Mirror'ı nasıl yapabileceğinizi göstereceğim. O halde başlayalım
Kabarcık Duvar Sonsuzluk Aynası: 11 Adım
Kabarcık Duvar Sonsuzluk Aynası: Kabarcık duvar sonsuzluk aynası projesine hoş geldiniz