İçindekiler:
Video: Entegre Sinyalli DIY Givi V56 Motosiklet Topbox Işık Kiti: 4 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bir motosiklet sürücüsü olarak, yolda görünmezmişim gibi davranılmasına çok aşinayım. Bisikletlerime her zaman eklediğim bir şey, genellikle entegre bir ışığa sahip olan bir üst kutudur. Geçenlerde yeni bir bisiklete geçtim ve eşyalar için çok fazla alanı olduğu için Givi V56 Monokey kutusunu satın aldım. Bu kutu, her iki taraf için iki şerit LED'den oluşan bir fabrika ışık kiti için bir yere sahiptir. Sorun şu ki, bu kit yaklaşık 70 dolar ve sadece fren yapıyor. Muhtemelen benzer şeyler yapan ve kurulumu biraz daha kolay olabilecek bir satış sonrası kiti var, ancak fiyatınız 150 dolara çıkıyor. Becerikli bir insan olarak ve adreslenebilir LED şeritleri denemek için bir bahane arayan, sadece fren lambaları değil, aynı zamanda yanan ışıklar (hareket ederken yanar), dönüş sinyalleri ve dörtlü ikaz lambaları olan entegre bir sistem yapmaya karar verdim. Sırf bunun için bir başlangıç dizisi bile ekledim…. çünkü yapabilirdim. Anlamam gereken çok şey olmasına rağmen, bunun çok fazla iş gerektirdiğini unutmayın. Çalışmaya rağmen, bunun nasıl sonuçlandığından oldukça memnunum. Umarım bu başka biri için faydalı olur.
Bu sistemin nasıl çalıştığının temel işlemi, Arduino ünitesinin pinlerdeki sinyalleri aramasıdır: fren lambası, sol dönüş lambası ve sağa dönüş lambası. Motosikletten gelen 12 volt sinyalini okumak için 12V sinyali Arduino'nun okuyabileceği 5V sinyaline dönüştürmek için optoizolatörler kullandım. Kod daha sonra bu sinyallerden birini bekler ve ardından FastLED kitaplığını kullanarak komutları LED şeridine verir. Temel bilgiler bu, şimdi ayrıntılara girmek için.
Gereçler
Bunlar benim kullandığım şeyler çünkü çoğunlukla onları zaten ortalıkta dolaştırıyordum. Açıkçası, gerektiğinde değiştirilebilirler:
- Arduino - Boyutla ilgili hususlar için bir nano kullandım, ancak kullanmak için beş iğneniz olduğu sürece, istediğinizi kullanabilirsiniz.
- 5V regülatör - 1,5 amper kapasiteli bir L7805CV kullandım. Bu proje, LED'ler için 0,72 amper artı nano için güç kullanacak, bu nedenle 1.5 bu proje için harika çalışıyor.
- Kondansatörler - Voltaj regülatörünün düzgün çalışması için bir 0,33 uF ve bir 0,1 uF'ye ihtiyacınız olacaktır.
- 3x optoizolatörler - 12V'den 5V'a sinyal dönüşümünü yapmak için. Tek ihtiyacımız olan sadece dört pinli PC817X tipini kullandım.
- Dirençler - her türden üç tane olmak üzere iki türe ihtiyacınız olacak. Birincisi, optoizolatör IR LED üzerinden akımı azaltmak için yeterli olmalıdır. En az 600 ohm'a ihtiyacınız olacak, ancak motosiklette değişen voltajlarla başa çıkmak için 700 daha iyi bir fikir olacaktır. Optoizolatörün diğer tarafında hızlı bir sinyal için diğerinin 10k ile 20k arasında bir yerde olması gerekir.
- Prototip panosu - Küçük bir proje kutusuna sığacak kadar küçük, az miktarda kırpma ile bazılarına sahiptim.
- Proje kutusu - bileşenleri sığdırmak için yeterince büyük, ancak sığdırmak için yeterince küçük.
- Tel - Etrafta çok fazla olduğu için Cat 6 ethernet kablosu kullandım. Bu, tüm farklı bağlantılara yardımcı olan ve mevcut çekilişleri idare etmek için yeterince büyük bir ölçü olan, tümü renk kodlu sekiz kabloya sahiptir.
- Fişler - sistemin kolayca çıkarılabilmesini istediğiniz her yerde. Üst kutunun çıkarılmasını sağlamak ve üzerine gelen yağmur veya suları işlemek için su geçirmez bir fiş kullandım. LED şeritler için daha küçük fişlere de ihtiyacım vardı, böylece büyük delikler açmak zorunda kalmadım.
- Her şeyi yerinde tutmak için fermuarlı bağlar ve fermuarlı yapışkanlı bağlar.
- Bağlantıları düzenlemek için sargıyı küçültün.
Adım 1: Devreyi Kurmak
Açıkçası, benim yapımı takip ediyorsanız, yaptığım test miktarından geçmek zorunda kalmayacaksınız. Yaptığım ilk şey, kodumun çalıştığından emin olmaktı ve optoizolatörlerden düzgün bir şekilde sinyal alabilmemin yanı sıra LED şeritlerini düzgün bir şekilde kontrol edebiliyordum. Sinyal pinlerini izolatörlere en iyi nasıl bağlayacağımı bulmak biraz zaman aldı ama deneme yanılma yoluyla doğru yönü buldum. Sadece bir tane oluşturduğum için standart bir prototip panosu kullandım ve bir iz deseni bulmak, değerinden daha fazla zaman alacaktı. Devre kartının üst kısmı harika görünüyor, ancak alt kısmı biraz dağınık görünüyor, ama en azından işlevsel.
Temel tasarım, anahtarlı bir kaynaktan (sadece motosiklet açıkken açık olan bir kablo) 12V gücün girilmesiyle başlar. Bir bağlantı şeması bu kabloyu bulmaya gerçekten yardımcı olabilir. Bu, voltaj regülatörünün bir tarafına beslenir. 0.33 uF'lik bir kapasitör, bu girişi voltaj regülatöründeki toprağa bağlar ve daha sonra motosikletteki toprağa geri beslenir. Voltaj regülatörünün çıkışı, toprağa bağlı bir 0.1 uF kapasitöre sahip olacaktır. Bu kapasitörler, regülatörden gelen voltajı düzeltmeye yardımcı olur. Bunları devre kartının resminde bulamazsanız voltaj regülatörünün altındadır. Oradan, 5V hattı Arduino üzerindeki Vin'e, LED şeritlerini besleyecek güç pinine ve gerekli 5V sinyalini sağlayan Arduino pinlerini besleyecek optoizolatörün iki Kaynak tarafına gider.
Optoizolatörlere gelince, iki taraf vardır: biri IR LED'li, diğeri ise transistörlü ve IR dedektörlü. 12V sinyalini ölçmek için IR LED tarafını kullanmak istiyoruz. LED, 1,2V'luk bir ileri gerilime sahip olduğundan, seri olarak bir akım sınırlama direncine ihtiyacımız var. 12V - 1.2V = 10,8V ve LED'i 18 mA'da çalıştırmak için (ömür boyu sebeplerden dolayı her zaman 20 mA'dan daha az çalıştırmayı severim), R = 10.8V/0.018A = 600 ohm'luk bir dirence ihtiyacınız olacaktır. Araçlardaki voltajlar da daha yüksek, potansiyel olarak 14V'a kadar çalışma eğilimindedir, bu nedenle yaklaşık 710 ohm olan bunun için plan yapmak daha iyidir, ancak 700 makulden daha fazla olacaktır. LED tarafının çıkışı daha sonra toprağa geri beslenir. Optoizolatörün çıkış tarafı için giriş, regülatörden gelen 5V sinyalini kullanacak, ardından çıkış toprağa gitmeden önce başka bir dirence bağlanacaktır. Bu direncin sadece 10k - 20k ohm civarında olması gerekiyor, en azından veri sayfam bunu gösterdi. Bu, gürültülü bir ortamla uğraşmadığımız için hızlı bir sinyal ölçümü sağlayacaktır. Arduino pinine çıkış, direnç ile optoizolatörün çıkışı arasında çıkacaktır, böylece sinyal kapalıyken pin düşük, sinyal açıkken pin yüksek olur.
LED şerit ışıklarının kendileriyle ilişkili üç kablosu vardır: Güç, toprak ve veri. Güç 5V olmalıdır. Bu proje toplam 12 LED kullanıyor (şeritlerde daha fazla LED olmasına rağmen, ancak yalnızca her üç LED'den birini kullanıyorum) ve beyaz ışık tam parlaklıkta kullanıldığında her biri 60mA alıyor. Bu toplam 720 mA verir. Voltaj regülatörünün çıkış gücü içindeyiz, yani iyiyiz. Sadece telin gücü idare edecek kadar büyük bir ölçü olduğundan emin olun, 24 gauge Cat 6 ethernet kablosu kullandım. Ethernet kablosu, etrafta oturduğum bir şeydi ve 8 renk kodlu kabloya sahip, bu yüzden bu proje için iyi sonuç verdi. Daha sonra üst kutunun kendisine gitmesi gereken tek kablo, güç ve toprak (her ikisi de şeritler arasında bölünür) ve iki veri hattıdır (her şerit için bir tane).
Kablolamanın geri kalanı arduino üzerindeki pinlere bağlanıyor ve gücü besliyor. Bu proje için kullanılan pinler şunlardı:
- Vin - 5V'a bağlı
- Gnd - toprağa bağlı
- Pin2 - Sol şerit veri hattına bağlı
- Pin3 - Sağ şerit veri hattına bağlı
- Pin4 - optoizolatörden gelen Fren sinyaline bağlı
- Pin5 - optoizolatörden sola dönüş sinyaline bağlı
- Pin6 - optoizolatörden Sağa dönüş sinyaline bağlı
Adım 2: Kablolama ve Kurulum
Devre oluşturulduktan sonra, bunu gerçekten kablolamanın zamanı gelir. Bisikletiniz için kablo şemanızı kullanarak aşağıdakileri bulmanız gerekecek:
- Anahtarlamalı güç kaynağı
- Zemin
- Fren Sinyali Girişi
- Sol Dönüş Sinyali
- Sağa Dönüş Sinyali
Benim için, üzerinde bunların hepsinin bulunduğu tek bir fiş vardı, ben de onu kullandım. Yeterince zamanla, aynı fiş stilini bulabilir ve sadece bir eklenti modülü yapabilirdim, ama yapmadım, bu yüzden sadece yerlerindeki yalıtımı kaldırdım ve yeni kabloyu lehimledim. Bu eklenmiş bağlantılarda fişler kullandım, böylece gelecekte ihtiyacım olursa geri kalanını kaldırabilirim. Oradan, şu anda kapalı bir proje kutusunda olan Arduino'yu, taktığım koltuğun altına yerleştirdim. Çıkış kablosu daha sonra raf çerçevesi boyunca su geçirmez bir fişe doğru ilerler, ardından kutuya girer ve her iki taraf için ayrılacağı arka kapak boyunca ilerler. Kablolar, LED'lerin bağlantılarının bulunduğu noktaya kadar kapağın iç kısmından geçer. Tel, yapışkan bir arkalığa sahip Dış mekan sınıfı fermuarlı bağlantılara bağlı fermuarlı bağları kullanarak yerinde yardımcı olur. Bunları bir ev geliştirme mağazasında kablo tesisatı bölümünde bulabilirsiniz.
LED şeritlerinde iki adet mini JST fişi kullandım çünkü minimum çapta bir delikten geçecek kadar küçük bir fişe ihtiyacım vardı ve mevcut gereksinimleri karşılayacak kadar kablo olduğundan emin olmak istedim. Yine, aşırıya kaçmış olabilir ve kullanışlı üç telli küçük fişlerim yoktu. Işık şeridi tellerinin geçmesi için kutudaki delik, suyu dışarıda tutmak için kapatılmıştır. LED şeritlerin konumlandırılmasına gelince, aralarında hafif bir uyumsuzluk olduğu için (reflektördeki delikler ile LED'ler arasında yaklaşık 1 - 1.5 mm boşluk vardı) onları LED ile LED'ler arasındaki farkı ayıracak şekilde konumlandırdım. mümkün olduğunca delik. Daha sonra bunları yerinde tutturmak için sıcak tutkal ve alanı tamamen kapatmak için dolgu macunu kullandım. LED şeritlerin kendileri su geçirmezdir, bu nedenle ıslanmaları sorun olmaz. Kurulumu çok gibi görünse de, bu, sistemin gelecekte daha kolay çıkarılmasını veya olabileceği için parça değiştirilmesini kolaylaştırır.
Adım 3: Kod
Kaynak kodum bu Eğitilebilir Dosyanın başında olmalıdır. Kodumu her zaman yoğun bir şekilde yorumlarım, böylece daha sonra anlamak daha kolay olur. Yasal Uyarı: Ben profesyonel bir kod yazarı değilim. Kod, ilk başlarda daha kolay olan bir yöntemle yazılmış ve bazı iyileştirmeler yapılmış, ancak daha rafine olabileceğini biliyorum. Ayrıca zamanlama için ideal olmayan yoğun miktarda delay() işlevi kullanıyorum. Ancak, ünitenin aldığı sinyaller karşılaştırıldığında hızlı sinyaller değil, bu yüzden yine de millis() gibi bir şey kullanarak onları fazla tutmanın haklı olduğunu hissettim. Ben de çok meşgul bir baba ve kocayım, bu yüzden nihayetinde işlevi değiştirmeyecek bir şeyi geliştirmek için zaman harcamak listede üst sıralarda yer almıyor.
Bu proje için FastLED kütüphanesi olan sadece bir kütüphane gereklidir. Bu, WS2811/WS2812B tipi LED şeritlerini kontrol etmek için tüm kodlara sahiptir. Oradan, kullanılacak temel işlevleri ele alacağım.
Standart tanımların dışında ilki, iki şeridinizi bildirmektir. Her şerit için aşağıdaki kodu kullanacaksınız:
FastLED.addLeds(led'ler[0], NUM_LEDS);
Bu kod satırı, Pin 2'yi kurar, bu şeridi, benim durumumda 16'ya ayarlanan NUM_LEDS sabiti ile tanımlanan LED sayısı ile şerit 0 olarak tanımlar. İkinci şeridi tanımlamak için 2, 3 olur (pin3 için) ve şerit şerit 1 olarak etiketlenecektir.
Önemli olacak bir sonraki satır renk tanımıdır.
ledler[0][1] = Color_high CRGB(r, g, b);
Bu kod satırı, farklı görünümlerde olsa da kullanılır (kullanımın çoğu sabittir). Temel olarak, bu kod LED kanallarının her birine (kırmızı, yeşil, mavi) her parlaklığı tanımlayan bir değer gönderir. Parlaklık değeri 0 - 255 arasında tanımlanabilir. Her kanal için parlaklık seviyesini değiştirerek farklı renkler tanımlayabilirsiniz. Bu proje için ışığı olabildiğince parlak tutmak için beyaz bir renk istiyorum. Bu yüzden yaptığım tek değişiklik, parlaklık seviyesini üç kanalda da aynı şekilde ayarlamak.
Bir sonraki kod seti, her bir ışığı ayrı ayrı aydınlatmak için kullanılır. Her şerit için, her bir LED'in, eksi 1'e sahip en yüksek sayıdaki LED'e kadar, veri hattı bağlantısına en yakın olan için 0'dan başlayan bir adresi olduğunu unutmayın. Örnek, bunlar 16 LED şerididir, yani en yüksek olanıdır. 16 - 1 = 15. Bunun nedeni ilk LED'in 0 olarak etiketlenmesidir.
for (int i = NUM_LEDS-1; i > -1; i = i - 3) { // Bu, sondan birinciye giden her üç LED için ışığı değiştirecektir. led'ler[0] = Color_low; // Şerit 0 LED rengini seçilen renge ayarlayın. ledler[1] = Color_low; // Şerit 1 LED rengini seçilen renge ayarlayın. FastLED.show(); // Ayarlanan renkleri göster. led'ler[0] = CRGB::Siyah; // Bir sonraki renk için hazırlıkta ayarlanan rengi kapatın. ledler[1] = CRGB::Siyah; gecikme(150); } FastLED.show(); // Ayarlanan renkleri göster.
Bu kodun çalışma şekli, bir (i) değişkeninin LED adresi olarak bir for döngüsü içinde kullanılması ve ardından LED'lerin tam sayısına (NUM_LEDS) atıfta bulunulmasıdır. Bunun sebebi ise ışıkların şeridin başından değil sonundan başlamasını istemem. Ayar her iki şeride (ledler[0] ve ledler[1]) gönderilir, ardından değişikliği gösteren bir komut verilir. Bundan sonra bu ışık kapatılır (CRGB::Black) ve sonraki ışık yanar. Siyah referansı FastLED kitaplığındaki belirli bir renktir, bu yüzden aynı şeyi yapacak olsalar da her kanal için 0, 0, 0 vermem gerekmiyor. For döngüsü, yalnızca diğer tüm LED'leri kullandığım için bir seferde 3 LED'i (i = i-3) ilerletir. Bu döngünün sonunda, ışık dizisi bir LED'den diğerine, şerit başına yalnızca bir ışıkla, bir çeşit Knight Rider efektiyle gidecektir. Çubuğun oluşması için her bir ışığın yanmasını istiyorsanız, programdaki bir sonraki kod kümesinde meydana gelen LED'leri kapatan satırları kaldırmanız yeterlidir.
for (int i = 0; i < dim; i++) { // Işıkları hızla çalışan ışık seviyesine indir. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i < NUM_LEDS; i = i +3) { // Bu, konum ışığı için son üç ışığı yakar. ledler[0] = CRGB(rt, gt, bt); // Şerit 0 LED rengini seçilen renge ayarlayın. ledler[1] = CRGB(rt, gt, bt); // Şerit 1 LED rengini seçilen renge ayarlayın. } FastLED.show(); gecikme(3); }
LED'ler için kullandığım son kod örneği bir solma döngüsüdür. Burada, her kanal (rt, gt, bt) için parlaklık için geçici yuvalar kullanıyorum ve istediğim görünümü elde etmek için her gösterim arasında bir gecikmeyle bunları 1 artırıyorum. Ayrıca, bu kodun yalnızca son üç LED'i değiştirdiğini unutmayın, çünkü bu, çalışan ışıklarda soluyor, bu nedenle 0 yerine 9'da başlıyorum.
LED kodunun geri kalanı bunların yinelemeleridir. Diğer her şey, üç farklı kablo üzerinde bir sinyal aramaya odaklanmıştır. Kodun Döngü() alanı, durmadan önce bir kez yanıp sönecek olan fren lambalarını arar (bu istenirse ayarlanabilir) veya dönüş sinyallerini arar. Bu kod için, tehlikeler için sola ve sağa dönüş ışıklarının tam olarak aynı anda yanacağını varsayamadığım için, önce kodun birini aramasını sağladım, sonra küçük bir gecikmeden sonra her ikisinin de açık olup olmadığını kontrol ediyorum. tehlike ışıkları yanıyor. Zor olan kısım dönüş sinyalleriydi çünkü ışık bir süreliğine sönecek, yani hala açık ama kapalı olan sinyal ile iptal edilmiş bir sinyal arasındaki farkı nasıl anlarım? Bulduğum şey, sinyal flaşları arasındaki gecikmeden daha uzun sürecek şekilde ayarlanmış bir gecikme döngüsü uygulamaktı. Dönüş sinyali hala açıksa, sinyal döngüsü devam edecektir. Gecikme sona erdiğinde sinyal geri gelmezse, döngünün başına geri döner(). Gecikmenin uzunluğunu ayarlamak için, lightDelay'deki her 1 için hatırlama sabit lightDelay için sayıyı değiştirin. Gecikme 100ms değişir.
while (digitalRead(leftTurn) == LOW) { for(int i = 0; i < lightDelay; i++) { leftTurnCheck(); if(digitalRead(leftTurn) == YÜKSEK) { leftTurnLight(); } gecikme(100); } for (int i = 0; i < NUM_LEDS; i = i +3) { // Bu, sondan birinciye giden her üç LED için ışığı değiştirecektir. ledler[0] = CRGB(0, 0, 0); // Şerit 0 LED rengini seçilen renge ayarlayın. } for (int i = 9; i < NUM_LEDS; i = i +3) { // Bu, yalnızca son üçünü kullanan yanan ışıkları ayarlayacaktır. led'ler[0] = Color_low; // Şerit 0 LED rengini seçilen renge ayarlayın. } FastLED.show(); // Çıktı ayarları geri dönüyor; // Dönüş sinyali artık açık olmadığında, döngüye geri dönün. }
Umarım kodun geri kalanı açıklayıcıdır. Bu sadece tekrar eden bir dizi kontrol ve sinyallere göre hareket ediyor.
4. Adım: Sonuçlar
Şaşırtıcı olan kısım, bu sistemin onu bisiklete ilk bağladığımda çalışmasıydı. Şimdi, adil olmak gerekirse, bundan önce yedek kulübesinde yoğun bir şekilde test ettim, ancak yine de bir sorun veya ayarlama olmasını bekliyordum. Bağlantıların yanı sıra kodda da herhangi bir ayarlama yapmam gerekmediği ortaya çıktı. Videoda görebileceğiniz gibi, sistem başlatma sırasından geçer (ki buna sahip olmanız gerekmez), ardından varsayılan olarak yanan ışıklara geçer. Bundan sonra frenleri arar, bu durumda tüm LED'leri tam parlaklığa kadar yakar ve frenler bırakılana kadar açık kalmadan önce bir kez yanıp söner. Bir dönüş sinyali kullanıldığında, dönüşün gösterildiği taraf için kaydırma efekti yaptım ve diğer taraf yanıyorsa yanan ışıklar veya fren lambası olacak. Tehlike ışıkları diğer ışıklarla aynı anda yanıp sönecektir.
Umarım bu ek ışıklarla diğer insanlar tarafından daha görünür olurum. En azından, fayda sağlarken kutumu diğerlerinden biraz daha fazla öne çıkarmak için güzel bir ek. Umarım bu proje, bir motosiklet üst kutusu aydınlatması ile çalışmasalar bile başkası için de faydalıdır. Teşekkürler!
Önerilen:
Nest Hello - Entegre Trafolu Kapı Zili Zil İngiltere (220-240V AC - 16V AC): 7 Adım (Resimlerle)
Nest Hello - Entegre Transformatörlü Kapı Zili Zil İngiltere (220-240V AC - 16V AC): Evde bir Nest Hello kapı zili kurmak istedim, 16V-24V AC ile çalışan bir cihaz (NOT: 2019'daki bir yazılım güncellemesi Avrupa'yı değiştirdi sürüm aralığı 12V-24V AC'ye kadar). Standart kapı zili, İngiltere'de şu anda mevcut olan entegre transformatörlere sahip
Akıllı Motosiklet HUD Prototipi (adım adım Navigasyon ve Çok Daha Fazlası): 9 Adım
Akıllı Motosiklet HUD Prototipi (adım adım Navigasyon ve Çok Daha Fazlası): Merhaba !Bu Talimatlar, motosiklet kasklarına monte edilmek üzere tasarlanmış bir HUD (Heads-Up Display) platformunu nasıl tasarladığımın ve inşa ettiğimin hikayesidir. "Haritalar" yarışması bağlamında yazılmıştır. Maalesef tamamen bitiremedim
Programlanabilir LED'leri Kullanan Entegre Flaşörlü Motosiklet Kuyruk Lambası: 4 Adım
Programlanabilir LED'leri Kullanan Entegre Flaşörlü Motosiklet Kuyruk Lambası: Merhaba! Bu, motosikletiniz veya muhtemelen WS2812B (bireysel olarak adreslenebilir led'ler) ve Arduinos kullanan herhangi bir şey için özel bir Programlanabilir RGB Kuyruk Lambasının (entegre flaşörler/göstergelerle) nasıl yapılacağına dair biraz kolay bir DIY. . 4 aydınlatma modu vardır
Müzikle Tepkisel Işık--Masaüstünü Harika Hale Getirmek için Süper Basit Müzik Tepkisel Işık Nasıl Yapılır.: 5 Adım (Resimlerle)
Müzik Reaktif Işık||Masaüstünü Harika Hale Getirmek için Süper Basit Müzik Reaktif Işığı Nasıl Yapılır.: Hey naber arkadaşlar, Bugün çok ilginç bir proje inşa edeceğiz.Bugün müzikle reaktif ışık oluşturacağız. aslında düşük frekanslı ses sinyali olan bas. Yapımı çok basit. Biz
20$/20dk Ticari Kaliteli Katlanır Işık Kutusu / Işık Çadırı: 7 Adım (Resimlerle)
20$/20dk Ticari Kalitede Katlanır Işık Kutusu / Işık Çadırı: Ürün veya yakın çekim fotoğraflar için bir DIY ışık kutusu arıyorsanız, çok sayıda seçeneğiniz olduğunu zaten biliyorsunuzdur. Karton kutulardan çamaşır sepetlerine kadar, projenin ölümüne yapıldığını düşünüyor olabilirsiniz. Fakat bekle! 20 dolar için