Mündəricat:
- Təchizat
- Addım 1: Güzgü və Güzgü Filminin Qurulması
- Addım 2: LED şeridinin qurulması
- Addım 3: IR Sensorunun və LCD -nin quraşdırılması (İsteğe bağlı)
- Addım 4: Kod
- Addım 5: Montaj
Video: LCD və IR Sensorlu Sonsuzluq Güzgü: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Bu layihə, Sonsuzluq Güzgüsünün necə yaradılacağını sizə göstərəcək. Əsas konsepsiya, güzgüdə olan LED -lərin arxa güzgüdən ön güzgüyə sıçrayan bir işıq yaratmasıdır ki, içəridə görə biləcəyimiz işıq, bəziləri arxa güzgüyə əks olunaraq sonsuz effekt verir. Bu, Hack Sioux Falls tərəfindən öyrədilən Ultra Sonic Sensorlu Infinity Mirror və JunezRiyaz tərəfindən Arduino Uno -ya I2C Lcd Ekranı necə bağlamaq olar.
Təchizat
1. Kölgə qutusu (50 dollar)
2. Bir tərəfli Güzgü Filmi (17 dollar)
3. RGB LED işıq şeridi (30 dollar)
4. Arduino (35 dollar)
5. Güzgü (10 dollar)
İsteğe bağlı:
1. IR Sensor və Uzaqdan (20 dollar)
2. LCD (20 dollar)
3. 7 Qadın -Kişi Bağlayıcıları
4. 3 Kişi -Kişi Bağlayıcıları
Alətlər
1. Havya
2. Tel kəsici və soyucu
3. Güzgünü kəsmək üçün bir şey
*CAD və ölçülərdəki bütün qiymətlərin istifadə etdiyiniz qutudan asılı olacağını unutmayın.
Addım 1: Güzgü və Güzgü Filminin Qurulması
Ediləcək ilk şey, kölgə qutusunun arxasında olacaq güzgünü quraşdırmaqdır. İstədiyiniz ölçüdə və ya daha böyük olanı almaq və ya kəsmək istəyirsiniz. Ancaq bunun üçün filmdən deyil, aynadan istifadə etməlisiniz, çünki bütün işığın geri əks olunmasını istəyirik, güzgü filmi də şüşə deyilsə üzərindəki materialın nümunəsini götürə bilər.
Güzgü qurarkən, kölgə qutusuna bağladığınızdan əmin olun, aynanın hərəkət etmədiyinə əmin olmaq üçün kiçik taxta və dırnaqlardan istifadə etməyi məsləhət görürəm. Bu layihəni tamamlamalı olduğum müddətdə güzgüm yox idi, buna görə filmdən istifadə etdim (Şəkillərdə görə bilərsiniz). Konsepsiya işləyir, amma çox yaxşı deyil və fikrimcə yaxşı görünməyən bucaqlı və xaotik bir görünüş verir.
Hər bir güzgü filmi bir az fərqli olacaq, amma aldığım filmin üstünə qoyduğumuz şüşəni təmizlədiyini söylədi, sonra bir tərəfdəki qoruyucu filmi çıxarmaq üçün lentdən istifadə edərək sabunlu suyu spreydə istifadə etdi. şüşə filmi şüşəyə qoyun. Sonra hava baloncuklarından və artıq sudan qurtulmaq üçün kredit kartı və ya süpürgə istifadə edin. Bir daha şüşəm yox idi, amma yenə də eyni şəkildə işləyir. Sonra şüşəni bir gecədə qurumağa buraxın və bu edilməlidir.
Addım 2: LED şeridinin qurulması
LED -lər üçün çərçivəyə yapışdırmaq üçün daxil olan iki tərəfli lentdən istifadə etdim və telin çıxması üçün bir çuxur düzəltdim. Hər küncdə, kənarları yuvarlaqlaşdırılmadan qutunun formasını saxlamaq üçün başqa bir zolağa bağlanmaq üçün aparatları lehimlədim. Şeritləri yalnız bunun baş verməsinə imkan verən kontaktların olduğu yerlərdə kəsdiyinizə əmin olun və LED -lərin polariteyi geri çevirmək kimi tanınan istiqamətini dəyişdirməyin. Əlimdə olan zolağın bunun baş vermədiyinə əmin olmaq üçün oxları vardı, buna görə də hamısının eyni istiqamətə işarə etdiyini yoxlayın.
Kabeli qutunun kənarına keçirtmək üçün kiçik bir çuxur açdım, sahib olduğum LED -lər 3 pinli ünvanlı LED idi, buna görə güc, torpaq və məlumat bağlayıcılarım var idi. Məlumat konnektoru üçün Digital Pin 3 istifadə etdim, çərçivəyə yapışdırmadan əvvəl işlədiklərindən əmin olmaq üçün LED şeridlərinizi sınadığınızdan əmin olun və 5-6 V olan mənim üçün yalnız tövsiyə olunan gərginliyi istifadə edin.
Addım 3: IR Sensorunun və LCD -nin quraşdırılması (İsteğe bağlı)
İşıqlandırma effektlərini dəyişdirmək üçün IR sensoru və pultdan istifadə etməyi və istifadəçiyə effektlər üçün olan variantları göstərmək üçün LCD istifadə etməyi seçdim.
LCD və IR sensoru quraşdırmaq üçün isti yapışqan tabancasından istifadə edərək çərçivənin yuxarısına yapışdırıb hər şeyi arxaya bağladım, amma onların düzəldilməsini istəmədim, çünki layihədən sonra onları çıxarmaq məcburiyyətində qaldım. edilir.
LCD və İQ Alıcısını bağlamaq üçün Arduino'ya qoşulan və Kişi və Dişi Bağlayıcılardan istifadə edərək məlumat və yer və güc əldə etdim. Hər şeyi bağlamaq üçün IR sensoru məlumat pinindəki 2 kΩ rezistorlu 12 -ci pin, LCD -nin SDA -sı üçün Analoq Pin A4 və LCD -nin SCL -si üçün Analog Pin 5 -dən istifadə etdim.
Addım 4: Kod
Bu layihə üçün istifadə etmək üçün yükləməli olduğunuz bir neçə kitabxanadan istifadə edirəm. Onları bura qoyacağam, unutmayın ki, pəncərələrdəyəm, buna görə Mac və ya Linux -da olsanız təsir edə bilər.
LED sayından asılı olaraq piksel sayını dəyişdirməlisiniz. Bir IR sensoru istifadə etmirsinizsə, bu şəkildə əlaqə qura biləcəyiniz üçün bir Serial Monitor interfeysi də qurdum.
// Kitabxanalar
#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results nəticələri; işarəsiz uzun key_value = 0; const int NUMPIXELS = 27;
Adafruit_NeoPixel pikselləri = Adafruit_NeoPixel (NUMPIXELS, 3);
LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZİTİF); // IRNumb dəyişənləri; int IRNumb2; göy qurşağı = 0; uint32_t göy qurşağıColor = piksel. Color (0, 0, 0); char girişi = 0; char giriş2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Təkrara ehtiyacı olmayan elementləri başlatır. lcd.begin (16, 2); // 16 sütun və 2 sıra lcd ekran lcd.backlight (); // Arka işığı açmaq üçün Serial.begin (9600); piksel.begin (); irrecv.enableIRIn (); Serial.println ("İşığı söndürmək üçün 0 daxil edin"); // Başlanğıc Təlimatları Serial.println ("LEDləri ağa çevirmək üçün 1 daxil edin"); Serial.println ("LEDlərin fərqli rənglərdə dövr etməsi üçün 2 daxil edin"); Serial.println ("LED rənglərini əl ilə tənzimləmək üçün 3 daxil edin"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Bir xarakterin olub olmadığını yoxlayır? input = (char) Serial.read (); } // Müxtəlif variantları seçərsə əgər (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Ağ setAll (göy qurşağıColor); // LEDləri yeniləyir} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (göy qurşağıColor); // LEDləri yeniləyir} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;
Serial.println ("Bu effektdən çıxmaq üçün 2 olmayan hər şeyi daxil edin, sonra yeni effekt üçün əvvəlcədən seçilmiş variantlardan birini daxil edin.");
lcd.clear (); // Ekranı təmizləyin lcd.setCursor (0, 0); lcd.print ("İstənilən istifadə edərək çıxın"); lcd.setCursor (0, 1); lcd.print ("uyuşmuş! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Təsirin göy qurşağı rəngindən çıxması lazım olub olmadığını yoxlayırColor = colourChange (0, 0, 0); setAll (göy qurşağı Rəngi); breakCondition = 1; fasilə; } göy qurşağıColor = colourChange (i, 0, 0); setAll (göy qurşağı Rəngi); showStrip (); gecikmə (100); } üçün (int i = 0; i = 48 && giriş <= 57) || breakCondition == 1 || IRNumb! = 2) {// Təsirin göy qurşağıColor = colourChange (0, 0, 0) çıxması lazım olub olmadığını yoxlayır; setAll (göy qurşağı Rəngi); breakCondition = 1; fasilə; } g ++; rainbowColor = colourChange (i, g, 0); setAll (göy qurşağı Rəngi); showStrip (); gecikmə (100); } üçün (int g = 0; g = 48 && giriş <= 57) || breakCondition == 1 || IRNumb! = 2) {// Təsirin göy qurşağıColor = colourChange (0, 0, 0) çıxması lazım olub olmadığını yoxlayır; setAll (göy qurşağı Rəngi); breakCondition = 1; fasilə; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (göy qurşağı Rəngi); showStrip (); gecikmə (100); } üçün (int b = 0; b = 48 && giriş <= 57) || breakCondition == 1 || IRNumb! = 2) {// Təsirin göy qurşağıColor = colourChange (0, 0, 0) çıxması lazım olub olmadığını yoxlayır; setAll (göy qurşağı Rəngi); breakCondition = 1; fasilə; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); gecikmə (100); } mainOptions (); } if if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;
Serial.println ("Çıxmaq üçün n daxil edin");
Serial.println ("Qırmızı rəngi artırmaq və ya azaltmaq üçün w və s istifadə edin"); Serial.println ("Yaşıl rəngi artırmaq və ya azaltmaq üçün r və f istifadə edin"); Serial.println ("Mavi rəngi artırmaq və ya azaltmaq üçün y və h istifadə edin"); lcd.clear (); // Ekranı təmizləyin lcd.setCursor (0, 0); lcd.print ("çıxış: 0, 4/7: +/- qırmızı"); lcd.setCursor (0, 1); lcd.print ("5/8: yaşıl, 6/9: mavi");
while (input2! = 'n' || IRNumb2! = 0) {
if (Serial.available ()> 0) {// bir simvol mövcuddur? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();
əgər (IRNumb2 == 0) {
fasilə; } if (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); } else if (input2 == 's || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); } if if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); } if if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); }
başqa əgər (input2 == 'y' || IRNumb2 == 6) {
b+= 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); }
başqa əgər (input2 == 'h' || IRNumb2 == 9) {
b- = 2; rainbowColor = colourChange (r, g, b); setAll (göy qurşağı Rəngi); showStrip (); }} mainOptions (); } setAll (göy qurşağıColor); showStrip (); } etibarsız showStrip () {piksel.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {piksel.setPixelColor (i, color); }} // Rəng dəyəri əldə etmək üçün 0 ilə 255 arasında bir dəyər daxil edin. uint32_t colourChange (int r, int g, int b) {pikselləri qaytarın. Rəng (r, g, b); } void mainOptions () {// Əsas effekt seçimlərini göstərir lcd.clear (); // Ekranı təmizləyin lcd.setCursor (0, 0); lcd.print ("İşıqları söndürmək üçün 0"); lcd.setCursor (0, 1); lcd.print ("1: Ağ İşıq"); gecikmə (1000); lcd.clear (); // Ekranı təmizləyin lcd.setCursor (0, 0); lcd.print ("2: Rəng effekti"); lcd.setCursor (0, 1); lcd.print ("3: Manual"); gecikmə (1000); } boş IRScan () {if (irrecv.decode (& nəticələr)) {
əgər (results.value == 0XFFFFFFFF)
results.value = key_value; başqa {//Serial.println(results.value, HEX); əgər (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; // 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"); }} key_value = results.value; irrecv. resume (); }} etibarsız IRScan2 () {if (irrecv.decode (& results)) {
əgər (results.value == 0XFFFFFFFF)
results.value = key_value; başqa {// Serial.println (results.value, HEX); əgər (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; // 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"); }} key_value = results.value; irrecv. resume (); }}
Addım 5: Montaj
Arduino'yu çərçivəyə bağlamaq üçün onu və çərçivənin arxasına yapışdırdığım çörək taxtasını yapışdırıb, yaxşı görünməsi üçün kabelləri örtməyə/gizlətməyə çalışardım.
Tövsiyə:
Sonsuzluq güzgü saatı hazırlayın: 15 addım (şəkillərlə)
Sonsuzluq Güzgü Saatı yaradın: Əvvəlki bir layihədə sonsuzluq güzgüsü qurmuşdum, burada əsas məqsədim onu saata çevirmək idi. (Rəngarəng Sonsuzluq Güzgüsü düzəldin) Bunu qurduqdan sonra bunu davam etdirmədim, çünki sərin görünsə də, bir neçə şey var idi
Əlinizdə bir Galaxy! Sonsuzluq güzgü qutusu: 3 addım (şəkillərlə birlikdə)
Əlinizdə bir Galaxy! Sonsuzluq Güzgü Kutusu: Bu dərslik içəridə çoxlu əkslər yaradan kiçik bir forma hazırlamaqdan ibarətdir. İşıq üçün hər açıdakı deşiklər və görmək üçün kiçik bir pəncərə ilə əlinizdəki bu sonsuzluq proseslərini izləyə bilərsiniz! Fikir sonsuzluq mirrini seyr etməkdən irəli gəldi
Sonsuzluq güzgü sahil gəmisi: 8 addım (şəkillərlə birlikdə)
Sonsuzluq güzgü sahil gəmisi: Bu layihədə sizə xüsusi 3D çaplı korpus ilə sonsuz güzgü sahil gəmisinin necə qurulacağını göstərəcəyəm
Sonsuzluq Güzgü Küpü hazırlayın: 12 addım (şəkillərlə)
Sonsuzluq Güzgü Küpü yaradın: İlk sonsuzluq güzgüsünü hazırlayarkən məlumat axtararkən, sonsuzluq kublarının bəzi şəkillərinə və videolarına rast gəldim və mütləq özümdən birini etmək istədim. Məni saxlayan əsas şey, bunu başqa cür etmək istəməyim idi
Potensiometrlərlə Sonsuzluq Güzgü Saatı: 3 addım
Potensiometrlərlə Sonsuzluq Güzgü Saatı: Sonsuzluq güzgüsünə rast gəldim və həqiqətən də sərin olduğunu gördüm. Bu mənə sonsuz güzgü düzəltmək üçün ilham verdi, amma bir məqsəd üçün buna ehtiyacım var idi. Beləliklə, işləyən bir sonsuz güzgü saatı düzəltmək qərarına gəldim. Bu imkan verən sonsuz güzgüdür