İçindekiler:

Çoklu Elektronik Mumlar: 3 Adım
Çoklu Elektronik Mumlar: 3 Adım

Video: Çoklu Elektronik Mumlar: 3 Adım

Video: Çoklu Elektronik Mumlar: 3 Adım
Video: Selda Bağcan - Adaletin Bu mu Dünya 2024, Kasım
Anonim
Çoklu Elektronik Mumlar
Çoklu Elektronik Mumlar

Elektronik mumlar Instructables'a birçok kez gönderildi, peki neden bu?

Evde LED içgörüsü ve küçük bir pili olan bu küçük yarı saydam Noel evlerim var. Bazı evlerde mum efektli LED'ler, bazılarında ise sadece yanan LED'ler var. Küçük piller nispeten hızlı boşalır ve tüm evlerde mum etkisi yapmak istediğim için bunu bir PIC projesi yapmaya karar verdim. Elbette bunu bir Arduino projesine de dönüştürebilirsiniz.

Peki bu elektronik mumu özel yapan nedir? PIC ve Arduino'nun hepsinde, bir LED kullanarak bir mum efekti oluşturmak için kullanılabilen, gemide Darbe Genişlik Modülasyonu (PWM) donanımı var, ancak benim durumumda bir denetleyici kullanarak 5 bağımsız elektronik mum olmasını istedim ve bu yok, en azından yok bildiğim kapalı. Kullandığım çözüm bu beş bağımsız PWM sinyalini tamamen yazılım içinde yapmak.

Adım 1: Yazılımda Darbe Genişliği Modülasyonu

Darbe Genişliği Modülasyonu birkaç kez açıklanmıştır, örn. bu Arduino Makalesinde:

PIC ve Arduino, bu PWM sinyalini oluşturmayı kolaylaştıran özel PWM donanımına sahiptir. Yazılımda bir veya daha fazla PWM sinyali yapmak istiyorsak iki zamanlayıcıya ihtiyacımız var:

  1. PWM frekansını oluşturmak için kullanılan bir zamanlayıcı
  2. PWM görev döngüsünü oluşturmak için kullanılan bir zamanlayıcı

Her iki zamanlayıcı da tamamlandığında üretir ve kesintiye uğrar ve böylece PWM sinyalinin işlenmesi tamamen kesintiye dayalı olarak yapılır. PWM frekansı için PIC'nin 0 zamanlayıcısını kullanıyorum ve taşmasına izin veriyorum. 8 MHz'lik bir dahili osilatör saati ve 64'lük bir ön ölçek ile formül şöyledir: Fosc/4 / 256 / 64 = 2.000.000 / 256 / 64 = 122 Hz veya 8, 2 ms. Frekans, insan gözünün algılayamayacağı kadar yüksek olmalıdır. Bunun için 122 Hz'lik bir frekans yeterli. Bu zamanlayıcı kesme rutininin yaptığı tek şey, yeni bir PWM döngüsü için görev döngüsünü kopyalamak ve tüm LED'leri açmaktır. Bunu 5 LED'in tümü için bağımsız olarak yapar.

PWM görev döngüsünü işlemek için zamanlayıcının değeri, mum etkisini nasıl yaptığımıza bağlıdır. Yaklaşımımda, LED'in parlaklığını artırmak için görev döngüsünü 3 değeriyle artırarak ve LED'in parlaklığını azaltmak için 25 değeriyle azaltarak bu etkiyi simüle ediyorum. Bu şekilde mum benzeri bir etki elde edersiniz. Minimum 3 değerini kullandığım için bir bayt ile tam görev döngüsünü kontrol etmek için adım sayısı 255 / 3 = 85'tir. Bu, PWM görev döngüsü zamanlayıcısının frekansın 85 katı bir frekansta çalışması gerektiği anlamına gelir. 85 * 122 = 10.370 Hz olan PWM frekans zamanlayıcı.

PWM görev döngüsü için PIC'nin zamanlayıcı 2'sini kullanıyorum. Bu, otomatik yeniden yüklemeli bir zamanlayıcıdır ve aşağıdaki formülü kullanır: Dönem = (Yeniden Yükleme + 1) * 4 * Tosc * Zamanlayıcı2 ön ölçek değeri. 191 yeniden yükleme ve 1 ön ölçek ile (191 + 1) * 4 * 1/8.000.000 * 1 = 96 us veya 10.416 Hz'lik bir süre elde ederiz. PWM görev döngüsü kesinti rutini, görev döngüsünün geçip geçmediğini kontrol eder ve görev döngüsünün tamamlandığı LED'i kapatır. Görev döngüsü geçilmezse, görev döngüsü sayacını 3 ile azaltır ve rutini bitirir. Bunu tüm LED'ler için bağımsız olarak yapar. Benim durumumda bu kesme rutini yaklaşık 25 bizi alıyor ve her 96 us'de bir çağrıldığından, yazılımdaki PWM görev döngüsünü yönetmek için CPU'nun zaten %26'sı kullanılıyor.

2. Adım: Donanım ve Gerekli Bileşenler

Donanım ve Gerekli Bileşenler
Donanım ve Gerekli Bileşenler

Şematik diyagram nihai sonucu gösterir. Sadece 5 LED'i bağımsız olarak kontrol etmeme rağmen, diğer 5 LED'den biriyle birlikte çalışan 6. bir LED ekledim. PIC, bir port pininde iki LED'i çalıştıramadığı için bir transistör ekledim. Elektronik aksam, 6 volt / 100 mA DC adaptör ile beslenir ve sabit bir 5 Volt yapmak için düşük bir voltaj düşürme regülatörü kullanır.

Bu proje için aşağıdaki bileşenlere ihtiyacınız var:

  • 1 adet PIC mikrodenetleyici 12F615
  • 2 Seramik kapasitör: 2 * 100nF
  • Dirençler: 1*33k, 6*120 Ohm, 1*4k7
  • 6 Turuncu veya Sarı LED, yüksek parlaklık
  • 1 BC557 transistör veya eşdeğeri
  • 1 Elektrolitik kondansatör 100 uF / 16 V
  • 1 adet düşük voltaj regülatörü LP2950Z

Devreyi bir breadboard üzerine kurabilirsiniz ve resimde görüldüğü gibi fazla yer gerektirmez.

3. Adım: Kalan Yazılım ve Sonuç

Yazılımın kalan kısmı ana döngüdür. Ana döngü, görev döngüsünü rastgele ayarlayarak LED'lerin parlaklığını artırır veya azaltır. Sadece 3 değeriyle artırıp 25 değeriyle eksilttiğimiz için eksiltmelerin artışlar kadar sık olmamasına dikkat etmemiz gerekiyor.

Herhangi bir kitaplık kullanmadığım için doğrusal bir geri besleme kaydırma yazmacı kullanarak rastgele bir jeneratör yapmak zorunda kaldım, bakınız:

en.wikipedia.org/wiki/Linear-feedback_shif…

Mum etkisi, PWM görev döngüsünün ne kadar hızlı değiştiğinden etkilenir, bu nedenle ana döngü yaklaşık 10 ms'lik bir gecikme kullanır. Mum efektini ihtiyaçlarınıza göre değiştirmek için bu süreyi ayarlayabilirsiniz.

Ekli video, efekti iyileştirmek için LED üzerinde bir kapak kullandığım son sonucu gösteriyor.

Bu proje için programlama dili olarak JAL kullandım ve kaynak dosyayı ekledim.

Bunu Eğitilebilir hale getirerek ve tepkilerinizi ve sonuçlarınızı dört gözle beklerken eğlenin.

Önerilen: