İçindekiler:

Etkileşimli Ortam Işığı: 8 Adım
Etkileşimli Ortam Işığı: 8 Adım

Video: Etkileşimli Ortam Işığı: 8 Adım

Video: Etkileşimli Ortam Işığı: 8 Adım
Video: Az Uyu, Erken Kalk - Kaliteli Uyku Rehberi (8 adım) 2024, Kasım
Anonim
Etkileşimli Ortam Işığı
Etkileşimli Ortam Işığı
Etkileşimli Ortam Işığı
Etkileşimli Ortam Işığı
Etkileşimli Ortam Işığı
Etkileşimli Ortam Işığı

Bu benim ilk talimatım! Ben düzgün İngilizce yazmakta zorlanırken lütfen bana tahammül edin. Beni düzeltmek için çekinmeyin! Bu projeye 'Parlasın' yarışması başladıktan hemen sonra başladım. Keşke çok daha fazlasını yapsaydım ve yapmak istediklerimi bitirseydim. Ama okul ve iş arasında istediğim kadar zamanım kalmadı. Yine de, burada deneylerimin bir raporunu öğretici olarak bırakıyorum, böylece herkes benim yaptığımı deneyebilir ve yapabilir. Bu talimat, bir rehber olarak hizmet etmek ve bu mekanizmanın nasıl yapıldığını öğretmek anlamına gelmez. Elektroniğe yeni başlayanlar için bir rehber değildir. Daha çok, takip etmek istediğim bir fikri ve hedefi paylaşmak gibi. Elektronikte yeni başlayan/tam cahil iseniz ve böyle bir şey yapmak istiyorsanız, üzgünüm! Ama sana her zaman yardım etmeyi deneyebiliriz. Son adıma bakın. Zaten birçok ortam ışığı projesi gördük. Çoğu RGB LED'leri kullanır: - Bir odayı tek renkle aydınlatmak, ruh halinize uygun bir atmosfer ayarlamak - TV/Monitör renginden veya sesten ışık efektleri oluşturmak için. Hatta instructables.com'da birkaç tane var İlgili:DIY Ambient Light SystemsLight Bar Ambient LightingKendi ambiyans rengi aydınlatma barlarınızı oluşturma Bu yarışmayı bahane ederek bir süredir aklımda olan bir projeye başladım. Her zaman bu ortam ışıklarına benzer bir şey yapmak ve odamın duvarlarını RGB LED'lerle doldurmak istemişimdir. Ancak bir adım daha ileri giderek hepsini ve her birini kontrol edilebilir hale getiriyor. Bu proje, umarız, hobiler ve elektronik tamircileri için donanım/yazılım korsanlığına ve duyusal entegrasyona izin veren açık kaynaklı bir elektronik kit ile sonuçlanacaktır. İşte yaptıklarımın küçük bir önizlemesi:

Adım 1: Fikri Keşfetmek

Odamdaki duvarları RGB LED'lerle doldurabilmek, her led için renk ve parlaklığı kontrol edebilmek istiyorum. Kullanım kolaylığı ve sağladığı esneklik için bir mikrodenetleyici kullanacağım. Maalesef mikrodenetleyicilerde bulunan birkaç pin ile yüzlerce LED'i kontrol edemiyorum. Bu kadar çok LED'in kontrolünü kodlamak bile zor olurdu. Bu yüzden tüm LED'leri birkaç küçük çubuğa bölmem gerektiğine ve her çubuk için bir mikrodenetleyici kullanabileceğime karar verdim. Sonra mikrodenetleyicilerin iletişim yeteneklerini aralarında bilgi paylaşmak için kullanırdım. Bu bilgi LED'lerin rengi ve parlaklığı, renklerin desenleri/dizileri ve duyusal bilgiler olabilir. Her çubuk için 16 RGB LED kullanmaya karar verdim. Bu, ne çok büyük ne de küçük bir çubukla sonuçlanır. Bu şekilde her led için kabul edilebilir sayıda kaynak kullanırım ve her bir bar için maliyeti düşürürüm. Bununla birlikte, 16 RGB LED, mikrodenetleyicinin kontrol etmesi için 48 LED'dir (3*16=48). Maliyetleri göz önünde bulundurarak kullanmaya karar verdim. kullanabileceğim en ucuz mikrodenetleyici. Bu, mikrodenetleyicinin yalnızca 20 I/O pinine sahip olacağı anlamına gelir, 48 LED için yeterli değildir. Projenin amacı bir odayı aydınlatmak olduğundan, charlieplexing veya bir tür zaman bölme sürücüsü kullanmak istemiyorum. Düşünebildiğim alternatif, bir tür kilitli kaydırma yazmacı kullanmaktır! Devam etme: - Etkileşimli ortam ışığı yapın - Standart bir kontrol edilebilir LED çubuğu yapın - Bir odayı doldurmak için birkaç çubuğu bağlama imkanı - Kullanıcı uyarlamasına/yapılandırmasına ve duyusal entegrasyona izin verin

2. Adım: Donanım

Donanım
Donanım
Donanım
Donanım

Önceki adımda söylediğim gibi, bir odayı aydınlatmak için birkaç çubuk yapmak istiyorum. Bu da akıllara maliyet sorununu getiriyor. Her çubuğu mümkün olan en uygun maliyetli şekilde yapmaya çalışacağım. Kullandığım mikrodenetleyici bir AVR ATtiny2313 idi. Bunlar oldukça ucuz ve etrafta birkaç tane yattım. ATtiny2313 ayrıca, aşağıdaki adımlarda iyi bir şekilde kullanılacak bir Evrensel Seri Arabirim ve bir USART arabirimine sahiptir. Ayrıca üç adet MCP23016 - I2C 16bit G/Ç bağlantı noktası genişleticim vardı, tam da doğru sayı! 16 LED'in bir rengini kontrol etmek için her bir port genişleticiyi kullandım. LED'ler… Ne yazık ki bulabildiğim en ucuzu bunlardı. 48 kırmızı, yeşil ve mavi ~10000mcd 5mm, 20 derecelik açıyla. Bunun şimdilik bir önemi yok, çünkü bu sadece bir prototip. Bu gerçeğe rağmen, sonuç oldukça güzel! Mikrodenetleyiciyi 8 MHz'de çalıştırıyorum. I2C veri yolu 400 kHz'de saatlidir. LED anahtarlama frekansı yaklaşık 400 Hz'dir. Bu şekilde, sınırı zorlamadan 48 LED kullanabiliyorsam, daha sonra daha fazlasına yer açacağım!

Adım 3: Montaj

toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı
toplantı

Devreyi tasarladıktan sonra, prototipleme amacıyla birkaç devre tahtasına kurdum. Birkaç saat kabloları kesip devreyi kurduktan sonra şu sonucu aldım: 48 LED'li ve tonlarca telden oluşan dev bir devre tahtası!

4. Adım: Kontrol?

Kontrol?
Kontrol?

Bu, projenin en zorlu kısmıdır. Desenleri/dizileri işlemek ve ayrıca her bir LED'in parlaklığını ve rengini kontrol etmek için yeterince genel bir kontrol algoritması yapmak istedim. LED'leri kontrol etmek için MCP23016'ya 4 baytlık bir çerçeve göndermem gerekiyor. (1 bayt = 8 bit). Renge karşılık gelen IC muhabirinin adresi ile bir bayt, "yaz" komutuyla 1 bayt ve 16 bit (LED'ler) değeriyle 2 bayt. IC LED'lere "sink" olarak bağlı yani pindeki bir lojik değer olan 0 led'i yakacak. Şimdi de işin zor kısmı 48 led için PWM kontrolü nasıl yapılır? Tek led için PWM çalışalım! PWM @ Wikipedia açıkladı. LED'in parlaklığını %50'de istiyorsam, PWM değerim %50'dir. Bu, LED'in bir süre içinde kapalı olduğu süre kadar açık olması gerektiği anlamına gelir. 1 saniyelik bir periyot alalım. %50 PWM, bu 1 saniyede açma süresinin 0,5 saniye ve kapanma süresinin 0,5 saniye olduğu anlamına gelir. %80 PWM? 0,2 saniye kapalı, 0,8 saniye açık! Kolay, değil mi? Dijital dünyada: 10 saat döngüsü ile %50, LED'in 5 döngü için açık olduğu ve diğer 5 döngü için LED'in kapalı olduğu anlamına gelir. %20? 2 döngü açık, 8 döngü kapalı. %45? Pekala, gerçekten %45'i elde edemeyiz… Periyot döngüler halinde olduğundan ve sadece 10 döngümüz olduğundan, PWM'yi yalnızca %10'luk adımlarla bölebiliriz. Bu, pimin evriminin %50 olması gerektiği anlamına gelir: 1, 1, 1, 1, 1, 0, 0, 0, 0, 0; Hatta 1, 0, 1, 0, 1, 0, 1, 0, 1, 0; Programlamada bu diziyi açıp kapama sırasını yapabiliriz. Her bir döngü için pine çıktı aldığımız indeksin değeri döngü idi. Buraya kadar mantıklı mı yaptım? LED0'ı %50 ve LED1'i %20 yapmak istiyorsak, her iki diziyi de ekleyebiliriz. LED0 pinini sürmek için: 1, 1, 1, 1, 1, 0, 0, 0, 0, 0;LED1 pinini sürmek için: 2, 2, 0, 0, 0, 0, 0, 0, 0, 0;Sonuç olarak LED0 +LED0: 3, 3, 1, 1, 1, 0, 0, 0, 0, 0;Port genişletici IC'de bu sayı dizisini çıkarsak, %50 parlaklıkta LED0 ve %20 parlaklıkta LED1 elde ederiz!! 2 LED için basit, değil mi? Şimdi bunu her renk için 16 LED için yapmamız gerekiyor! Bu dizilerin her biri için, her renk için bir parlaklık kombinasyonumuz var (16 LED) Her başka bir renk kombinasyonu istediğimizde, bu diziyi değiştirmeliyiz.

Adım 5: Kolaylaştırın

Kolaylaştırın!
Kolaylaştırın!
Kolaylaştırın!
Kolaylaştırın!

Bir önceki adım, basit bir dizi yapmak için çok fazla iş… Bu yüzden dizinin bir adımında her bir LED'in renklerini söylediğimiz ve adımın üç dizisini elde ettiğimiz bir program yapmaya karar verdim. Bu programı zaman kısıtlaması nedeniyle LabView'da yaptım.

Adım 6: İlk Deneyler

İlk Deneyler
İlk Deneyler

Mikrodenetleyiciye birkaç adım yüklüyoruz ve şöyle bir şey alıyoruz: Videoların kalitesiz olduğu için üzgünüm! Bir dizinin maksimum adım sayısını 8 olarak tanımladım ve PWM'yi %20 atlamalarla sınırladım. Bu karar, kullandığım kontrol türüne ve ATtiny2313'ün ne kadar EEPROM'a sahip olduğuna dayanmaktadır. Bu deneylerde ne tür etkiler yapabileceğimi görmeye çalıştım. Sonuçtan memnun olduğumu söylemeliyim!

7. Adım: Gerçek Zamanlı Kontrol

Gerçek Zamanlı Kontrol
Gerçek Zamanlı Kontrol
Gerçek Zamanlı Kontrol
Gerçek Zamanlı Kontrol
Gerçek Zamanlı Kontrol
Gerçek Zamanlı Kontrol

Önceki adımlarda bahsettiğim gibi, odamdaki LED'leri kontrol eden tüm mikrodenetleyicilerle iletişim kurmak istiyorum. Bu yüzden ATtiny2313'te mevcut USART arayüzünü kullandım ve bilgisayarıma bağladım. Ayrıca LabView'da LED barı kontrol etmek için bir program yaptım. Bu programda mikrodenetleyiciye bir dizinin ne kadar uzun olduğunu, her bir LED'in rengini ve bir dizinin adımları arasındaki süreyi söyleyebiliyorum. Bir sonraki videoda LED'lerin rengini nasıl değiştirebileceğimi ve dizileri nasıl tanımlayabileceğimi göster.

Adım 8: Sonuçlar

Sonuçlar
Sonuçlar
Sonuçlar
Sonuçlar
Sonuçlar
Sonuçlar
Sonuçlar
Sonuçlar

Projemin bu ilk yaklaşımında başarılı olduğumu düşünüyorum. 16 RGB LED'i çok az kaynak ve kısıtlamayla kontrol edebiliyorum. Her bir LED'i ayrı ayrı kontrol ederek istenilen sırayı oluşturmak mümkündür.

Gelecek iş:

İnsanlardan olumlu geri dönüşler alırsam, bu fikri daha da geliştirebilir ve baskılı devre kartları ve montaj talimatları ile eksiksiz bir DIY Elektronik Kiti yapabilirim.

Bir sonraki versiyonum için: - Mikrodenetleyiciyi ADC ile değiştireceğim - MCP23016'yı LED'lerden daha fazla akım çekebilecek başka bir tür seri giriş paralel çıkış için değiştireceğim - Mikrodenetleyici ile iletişim kurmak için açık kaynaklı yazılım yapacağım ve LED'leri kontrol edin -Birkaç mikrodenetleyici arasındaki iletişimi geliştirin.

Herhangi bir öneriniz veya sorunuz var mı? Veya bir yorum bırakın!

Let It Glow'da Finalist!

Önerilen: