İçindekiler:

Arduino İnteraktif LED Sehpa: 6 Adım (Resimli)
Arduino İnteraktif LED Sehpa: 6 Adım (Resimli)

Video: Arduino İnteraktif LED Sehpa: 6 Adım (Resimli)

Video: Arduino İnteraktif LED Sehpa: 6 Adım (Resimli)
Video: How to Make a Modern LED Infinity Illusion Mirror 2024, Temmuz
Anonim
Image
Image
Arduino İnteraktif LED Sehpa
Arduino İnteraktif LED Sehpa

Nesne masanın üzerine konulduğunda bir nesnenin altındaki led ışıkları açan interaktif bir sehpa yaptım. Sadece o cismin altındaki ledler yanacaktır. Bunu, yakınlık sensörlerini etkili bir şekilde kullanarak yapar ve yakınlık sensörü, bir nesnenin yeterince yakın olduğunu algıladığında, o nesnenin altındaki bir düğümü aydınlatır. Ayrıca, yakınlık sensörlerine ihtiyaç duymayan, ancak gerçekten sevdiğim harika bir efekt ekleyen animasyonlar koymak için bir Arduino kullanıyor.

Yakınlık sensörleri fotodiyotlardan ve IR yayıcılardan oluşur. Yayıcılar (insan gözünün göremediği) kızılötesi ışığı tablodan dışarı doğru aydınlatmak için kullanır ve fotodiyotlar bir nesneden yansıyan kızılötesi ışığı alır. Yansıtılan ışık ne kadar fazlaysa (nesne ne kadar yakınsa), fotodiyotlardan gelen voltaj dalgalanmaları o kadar fazla olur. Bu, hangi düğümün yanacağını söylemek için bir gösterge olarak kullanılır. Düğümler, ws2812b ledleri ve bir yakınlık sensörü koleksiyonudur.

Ekli video, tüm yapım sürecini gözden geçirirken, aşağıda daha fazla ayrıntıyı özetliyorum.

Gereçler

  1. ws2812b LED Ampuller -
  2. 5V Güç Kaynağı -
  3. 2560'ı kullandığım herhangi bir Arduino -
  4. fotodiyotlar
  5. IR Yayıcılar
  6. 10 Ohm Dirençler
  7. 1 MOhm Dirençler
  8. 47 pF kapasitör
  9. CD4051B Çoklayıcılar
  10. SN74HC595 Kaydırma Kayıtları
  11. ULN2803A Darlington Dizileri
  12. Ledler için büyük bir tahta olarak kullanılacak herhangi bir alt tabaka, ev deposundan bir kağıt kompozit levha kullandım.

Adım 1: Kartı Oluşturun ve LED'leri Yerleştirin

Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin
Kartı Oluşturun ve LED'leri Yerleştirin

İlk yaptığım şey sehpanın içine koyacağımız ledlerin yer aldığı panoyu oluşturmak oldu. Ev deposundan bir parça kağıt kompozit levha kullandım ve sahip olduğum sehpa için uygun boyutlarda kestim. Tahtayı boyuta göre kestikten sonra, ledlerin gittiği tüm delikleri açtım. Tahtanın kendisinde 3 inç aralıklı 8 sıra ve 12 sütun ws2812b led vardı ve bunlar serpantin bir düzende bağlıydı. Yerlerine sabitlemek için sıcak tutkal kullandım.

Ayrıca düğüm olacak şeyin ortasına delikler açmak zorunda kaldım: Bir kare oluşturan 4 ws2812b led, bunun ortasındaki daha küçük bir karede 2 foto diyot ve 2 IR emitör. Düğümün ortasındaki bu 4 delik, fotodiyotlar ve ir emitörler (her birinden 2 adet) için noktalar olacaktır. Maksimum pozlamayı sağlamak için onları değiştirdim ve her bir düğümün ortasına yaklaşık 1 inç aralıklarla yerleştirdim. Bunları sıcak yapıştırmam gerekmiyordu, diğer taraftan çıkmamalarını sağlamak için diğer taraftaki uçları büktüm. Ayrıca, devrede doğru şekilde yönlendirilmeleri için pozitif ve negatif uçları belirli yönlerde büktüğümden emin oldum. Tüm pozitif uçlar tahtanın arkasının sol tarafındaydı, tüm negatif uçlar ise tahtanın sağ tarafındaydı.

Adım 2: Devreyi Anlayın

Devreyi Anlayın
Devreyi Anlayın
Devreyi Anlayın
Devreyi Anlayın
Devreyi Anlayın
Devreyi Anlayın

Not: Tüm animasyonlu çizimler uygulamaya tam olarak uymuyor (bazı arduino pinleri farklıdır ve birkaçını zincirleme, daha sonra daha fazlasını yapacağım). Sonuç, devrenin karmaşıklığı nedeniyle biraz farklıydı, ancak tüm animasyonlu devreler, her bir parçanın nasıl prototipleneceğini anlamak için harika bir temel görevi görüyor. Normal şema ve devre şeması projede kullanılan PCB'deki gibidir.

KiCad projesini ve gerber dosyalarını içeren PCB kodu burada bulunabilir: https://github.com/tmckay1/interactive_coffee_tabl…, PCB'leri kendiniz sipariş etmek ve benzer bir proje oluşturmak isterseniz. Panoları oluşturmak için NextPCB'yi kullandım.

Bu tabloyu oluşturan temel olarak üç farklı devre vardır. İlki detayına girmeyeceğiz ve ws2812b ledlerine güç veren basit bir devre. Arduino'dan ws2812b led ampullere bir PWM veri sinyali gönderilir ve hangi renklerin nerede gösterileceğini kontrol eder. Tek tek adreslenebilir oldukları için ws2812b ledleri kullanıyoruz, bu sayede hangi ledlerin açılıp hangilerinin kapatılacağını kontrol edebileceğiz. ws2812b ledleri 5V harici bir güç kaynağından güç alır, çünkü arduino tek başına tüm ışıkları yakmak için yeterli güce sahip değildir. Ekli animasyonlu şemada 330 Ohm'luk bir çekme direnci kullanıyorlar, ancak bunu yapımda kullanmıyorum.

İkinci devre IR yayıcıları açar. Bu devre, IR yayıcılara güç gönderen bir darlington dizisini kontrol etmek için bir kaydırma yazmacı kullanır. Kaydırmalı yazmaç, yalnızca küçük miktardaki pimlerden YÜKSEK ve DÜŞÜK sinyalleri birden çok pime gönderebilen tümleşik bir devredir. Bizim durumumuzda, 3 girişten kontrol edilebilen ancak 8'e kadar çıkışı kontrol edebilen bir SN74HC595 kaydırma yazmacı kullanıyoruz. Bunu arduino ile kullanmanın yararı, arka arkaya 8 adede kadar vardiya kaydına zincirleme bağlayabilmenizdir (arduino bunlardan yalnızca 8 tanesini işleyebilir). Bu, 64 IR yayıcıyı açıp kapatmak için arduino'dan yalnızca 3 pime ihtiyacınız olduğu anlamına gelir. Darlington dizisi, giriş sinyali YÜKSEK ise harici bir kaynaktan bir cihaza güç vermenizi veya giriş sinyali DÜŞÜK ise o cihazın gücünü kapatmanızı sağlar. Örneğimizde, 5V'luk bir harici güç kaynağının 8 adede kadar IR yayıcısını açıp kapatmasına izin veren bir ULN2803A darlington dizisi kullanıyoruz. IR yayıcılardan maksimum amper elde etmek için IR yayıcılarla seri olarak 10 Ohm'luk bir direnç kullanıyoruz.

Üçüncü devre, fotodiyotlardan çoklu girişler almak için bir çoklayıcı kullanır ve çıkışı bir veri sinyali olarak gönderir. Çoklayıcı, okumak istediğiniz birden fazla girişi almak için kullanılan ve bu girişlerden okumak için yalnızca birkaç pime ihtiyaç duyan bir cihazdır. Bunun tersini de yapabilir (demultiplex), ancak biz onu burada o uygulama için kullanmıyoruz. Yani bizim durumumuzda fotodiyotlardan 8 sinyale kadar almak için bir CD4051B çoklayıcı kullanıyoruz ve bu sinyalleri okumak için sadece 3 girişe ihtiyacımız var. Ayrıca 8 çoklayıcıya kadar zincirleme bağlayabiliriz (arduino bunlardan en fazla 8 tanesini işleyebilir). Bu, arduino'nun sadece 3 dijital pinden 64 fotodiyot sinyalini okuyabileceği anlamına gelir. Fotodiyotlar, pozitif voltaj kaynağına bağlı pozitif uç ile normal yönde yönlendirilmiş olmak yerine, negatif ucu pozitif voltaj kaynağına atadığımız anlamına gelen ters kutuplanmıştır. Bu, fotodiyotları, aldığı ışık miktarına bağlı olarak direnci değişen foto dirençlere dönüştürür. Daha sonra, toprağa yüksek dirençli 1 MOhms direnç ekleyerek fotodiyotların değişen direncine bağlı bir voltajı okumak için bir voltaj bölücü oluştururuz. Bu, fotodiyotların ne kadar IR ışığı aldığına bağlı olarak arduinoya daha yüksek ve daha düşük voltajlar almamızı sağlar.

Bu tasarımın çoğunu burada bunu yapan başka bir kişiden takip ettim: https://www.instructables.com/Infrared-Proximity-S… Bu tasarımda 1 MOhm direncin karşısına bizim yaptığımız gibi 47pF kapasitör de eklediler. fotodiyotlarla voltaj bölücü oluşturmak için kullanılır. Bunu eklemesinin nedeni, bir PWM sinyali ile IR emitörlerini açıp kapaması ve bunu yaparken IR emitörleri hemen açıldığında fotodiyotlardan küçük bir voltaj düşüşü çekmesiydi. Bu, bir nesneden daha fazla IR ışığı almadığında bile foto diyotların direncini değiştirmesine neden oldu çünkü IR yayıcılar fotodiyotlarla aynı 5V güç kaynağını paylaştı. Kondansatör, IR yayıcılar açılıp kapatıldığında voltaj düşüşü olmadığından emin olmak için kullanıldı. Başlangıçta aynı stratejiyi yapmayı planlamıştım, ancak test etmek için zamanım tükendi, bu yüzden bunun yerine IR yayıcıları her zaman açık bıraktım. Bunu gelecekte değiştirmek isterim, ancak kodu ve devreyi yeniden tasarlayana kadar, şu anda PCB, IR ışıklarının her zaman açık olması için tasarlandı ve yine de kapasitörleri tuttum. Bu PCB tasarımını kullanıyorsanız kapasitöre ihtiyacınız olmayacak, ancak PCB'nin, IR yayıcılarını açıp kapatmanıza izin verecek kaydırma yazmacına ek bir giriş kabul eden başka bir PCB sürümünü tanıtacağım. Bu, güç tüketiminde çok tasarruf sağlayacaktır.

Arduino'nuzda test etmek için bir prototip kurulumu için ekli animasyonlu diyagramları kontrol edebilirsiniz. Ayrıca her devre için elektronik cihazların kurulumunu ve oryantasyonunu özetleyen daha ayrıntılı bir renkli şema vardır. Ekli PCB şemasında toplam 4 devremiz, IR emitörleri açmak için kullanılan 2 devre ve fotodiyotlardan okumak için kullanılan 2 devremiz var. 1 IR emiter devresi ve 1 fotodiyot devresinden oluşan bir grup ile PCB üzerinde yan yana 2 grup yönlendirilir, böylece tek bir PCB içine 8 düğümlü 2 kolon konulabilir. Ayrıca iki devreyi birbirine zincirleme bağlarız, böylece arduino'dan gelen üç pin iki kaydırma yazmacını kontrol edebilir ve 3 ek pin de karttaki iki çoklayıcıyı kontrol edebilir. Ek PCB'lere zincirleme bağlantı yapabilmek için ek bir çıkış başlığı vardır.

Prototipleme için takip ettiğim birkaç kaynak:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Adım 3: Düğüme Lehim Telleri

Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri
Düğüme Lehim Telleri

Artık devrenin nasıl yapıldığını anladığınıza göre, devam edin ve kabloları her bir düğüme lehimleyin. Fotodiyotları paralel (sarı ve gri teller) ve ir emitörlerini seri (turuncu tel) lehimledim. Daha sonra 5V güç kaynağına bağlanacak fotodiyotlara paralel olarak daha uzun sarı bir kablo ve pcb'nin fotodiyot girişine eklenecek mavi bir kablo lehimledim. 5V güç kaynağına bağlanmak için kullanılacak IR emitör devresine uzun kırmızı bir kablo ve PCB'nin IR emitör girişine bağlanacak siyah bir kablo lehimledim. Aslında kabloları biraz zamansız hale getirdim, bu yüzden sonunda her sütundaki düğümlerden sadece 5'ini bağlayabildim (7 yerine). Bunu daha sonra düzeltmeyi planlıyorum.

Adım 4: PCB Bileşenlerini Lehimleyin ve Panoya Takın

PCB Bileşenlerini Lehimleyin ve Panoya Takın
PCB Bileşenlerini Lehimleyin ve Panoya Takın
PCB Bileşenlerini Lehimleyin ve Panoya Takın
PCB Bileşenlerini Lehimleyin ve Panoya Takın
PCB Bileşenlerini Lehimleyin ve Panoya Takın
PCB Bileşenlerini Lehimleyin ve Panoya Takın

Not: Ekli resimdeki PCB, güç girişleri ve çıkışları olmayan ve ayrıca her bir iç devre için bir zincirleme çıkışı olmayan ilk yaptığım versiyondur. Yeni PCB tasarımı bu hatayı düzeltir.

Burada bileşenleri PCB'ye lehimlemek için PCB şemasını izlemeniz yeterlidir ve ardından bu yapıldıktan sonra PCB'yi karta lehimleyin. Tüm sarı ve kırmızı kablolara dağıttığım 5V güç sinyalini bağlamak için harici devre kartları kullandım. Geriye dönüp baktığımda, bu kadar uzun kırmızı ve sarı kablolara ihtiyacım yoktu ve düğümleri birbirine bağlayabilirdim (ortak bir harici devre kartına bağlamak yerine). Bu, tahtanın arkasındaki dağınıklığı gerçekten azaltmış olacaktır.

8 sıra ws2812b led'im ve 12 sütunum olduğundan, 7 satır ve 11 sütun düğümü (toplamda 77 düğüm) ile bitirdim. Buradaki fikir, PCB'nin bir tarafını bir düğüm sütunu için ve diğer tarafı diğer sütun için kullanmaktır. 11 sütunum olduğu için 6 PCB'ye ihtiyacım vardı (sonuncusu yalnızca bir grup bileşene ihtiyaç duyuyordu). Kabloları çok kısa yaptığım için sadece 55 düğüm, 11 sütun ve 5 sıra bağlayabildim. Resimde görebilirsiniz, bir hata yaptım ve ham telleri tahtaya lehimledim, teller yeterince ince olsaydı iyi olurdu, ama benim durumumda çok kalınlardı. Bu, her bir IR emitör girişi ve fotodiyot girişi için birbirine çok yakın yıpranmış tel uçlarım olduğu anlamına geliyordu, bu nedenle tüm tel kısa devrelerinden çok fazla hata ayıklama oluyordu. Gelecekte, kısa devreleri önlemek ve işleri temizlemek için PCB'yi tahtadaki tellere bağlamak için konektörler kullanacağım.

Arduino sadece 8 vardiya yazmacına ve çoklayıcıya kadar zincirleme bağlayabildiğinden, biri ilk 8 sütunu ve diğeri kalan 3 sütunu alan iki ayrı zincir oluşturdum. Daha sonra her zinciri sadece 2 çoklayıcıya sahip başka bir pcb'ye bağladım, böylece bu iki çoklayıcıdan gelen her bir çoklayıcı veri sinyali zincirini arduino'ya okuyabildim. Bu iki çoklayıcı da papatya dizilimiydi. Bu, arduino'da kullanılan toplam 16 çıkış sinyali ve 2 analog giriş olduğu anlamına gelir: ws2812b led'lerini kontrol etmek için 1 çıkış sinyali, birinci kaydırma yazmaç zinciri için 3 çıkış sinyali, birinci çoklayıcı zinciri için 3 çıkış sinyali, İkinci kaydırma yazmaç zinciri için 3 çıkış sinyali, ikinci çoklayıcı zinciri için 3 çıkış sinyali, her PCB veri sinyalini toplayan 2 çoklayıcı için 3 çıkış sinyali ve son olarak 2 toplu çoklayıcıdan gelen her veri sinyali için 2 analog giriş.

Adım 5: Kodu İnceleyin

Not: Aşağıdaki interaktif koda ek olarak ws2812b ledleri için animasyonları üretmek için 3. parti bir kütüphane kullandım. Bunu burada bulabilirsiniz:

Kullandığım kodu burada bulabilirsiniz:

En üstte PCB'nin her bir parçasına bağlanacak arduino pinlerini tanımlıyorum. Kurulum yönteminde çoklayıcılar için çıkış pinlerini ayarlıyorum, IR emitörleri açıyorum, her fotodiyot için ortam ışığı okumasını takip eden bir baseVal dizisi ayarlıyorum ve ws2812b ledlerine yazacak FastLED'i başlatıyorum. Döngü yönteminde ws2812b şeridinde açık olması için atanan ledlerin listesini sıfırlıyoruz. Daha sonra çoklayıcı zincirlerindeki fotodiyotlardan değerleri okuruz ve eğer düğümdeki fotodiyottan okuma, ortam ışığı okumalarının taban değerinden belirli bir tanımlanmış eşiğin üzerindeyse, açık olması gereken ws2812b ledlerini ayarlarız. Daha sonra, açık olması gereken düğümde herhangi bir değişiklik varsa LED'leri oluşturuyoruz. Aksi takdirde, işleri hızlandırmak için bir şeyler değişene kadar döngüye devam eder.

Kod muhtemelen geliştirilebilir ve bunu yapmayı düşünüyorum, ancak masaya bir nesne yerleştirildikten sonra ışıkların açılmasından itibaren yaklaşık 1-2 saniyelik bir gecikme var. Temel sorunun, FastLED'in masadaki 96 led'i işlemesi biraz zaman aldığına ve kodun döngüye girip tablodan 77 girişi okuması gerektiğine inanıyorum. Bu kodu 8 led ile denedim ve neredeyse anında buldum, ancak bu kodla çalışacak ve neredeyse anında olacak ve kodu iyileştirecek LED'lerin tatlı noktasına bakıyorum.

Adım 6: Arduino'yu açın

Arduino'yu açın!
Arduino'yu açın!
Arduino'yu açın!
Arduino'yu açın!
Arduino'yu açın!
Arduino'yu açın!

Şimdi tek yapmanız gereken arduino'yu açmak ve tablo fonksiyonunu görmek! Daha önce bahsettiğimiz animasyon kitaplığını kullanarak ws2812b led animasyonları koyabilir veya sehpa kodunu koyabilir ve her bölümde yandığını görebilirsiniz. Herhangi bir soru veya görüşünüzü yorum yapmaktan çekinmeyin, size zamanında geri dönmeye çalışacağım. Şerefe!

Önerilen: