İçindekiler:
- Adım 1: Renkleri Karıştırmak için Darbe Genişliği Modülasyonu
- Adım 2: Kaydırma Kayıtları ve LED'lerle Konuşmak
- Adım 3: Şematik
- Adım 4: C++ Kaynak Kodu
- Adım 5: Bitmiş Gadget
- Adım 6: Uygulama: Perl Kullanan Linux için CPU Yük İzleyicisi
- 7. Adım: Uygulama: I²C Kullanarak Diğer Modüllerle Konuşmak
- Adım 8: Uygulama: "Oyun Küpü":-)
- 9. Adım: Matrix'te Görselleri / Animasyonları Görüntüleme - Quick Hack
- Adım 10: Depolanan Animasyonların Etkileşimli Kontrolü
- 11. Adım: Canlı Videoyu Gösterme
- Adım 12: Neredeyse Ücretsiz Daha Fazla Işık
Video: 64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu: 12 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:22
Bu ekran, 8x8 RGB LED Matrisine dayanmaktadır. Test amacıyla, 4 vardiya kaydı kullanılarak standart bir Arduino kartına (Diecimila) bağlandı. Çalıştırdıktan sonra, fabbed bir PCB üzerinde izin verdim. Kaydırmalı yazmaçlar 8 bit genişliğindedir ve SPI protokolü ile kolayca arayüzlenebilir. Darbe genişlik modülasyonu, renkleri karıştırmak için kullanılır, daha sonra daha fazlası. MCU'nun RAM'inin bir kısmı, görüntüyü tutmak için bir çerçeve arabelleği olarak kullanılır. Video RAM'i arka planda bir kesme rutini tarafından ayrıştırılır, böylece kullanıcı bir PC ile konuşmak, düğmeleri ve potansiyometreleri okumak gibi diğer faydalı şeyleri yapabilir. "Arduino" hakkında daha fazla bilgi: www.arduino.cc
Adım 1: Renkleri Karıştırmak için Darbe Genişliği Modülasyonu
Darbe genişliği modu - NEDİR? Darbe genişliği modülasyonu esasen bir elektrikli cihaza beslenen gücü oldukça hızlı bir şekilde AÇMAK ve KAPATMAKTIR. Kullanılabilir güç, bir periyot aralığında alınan kare dalga fonksiyonunun matematiksel ortalamasından elde edilir. İşlev ON konumunda ne kadar uzun süre kalırsa, o kadar fazla güç elde edersiniz. PWM, LED'lerin parlaklığı üzerinde AC ışıklarında bir dimmer ile aynı etkiye sahiptir. Önümüzdeki görev, 64 RGB LED'in (= 192 tek LED'in !) renk spektrumu. Tercihen titreme veya başka rahatsız edici etkiler olmamalıdır. İnsan gözünün sergilediği doğrusal olmayan parlaklık algısı burada dikkate alınmayacaktır (örneğin, %10 ile %20 arasındaki parlaklık farkı, %90 ile %100 arasındaki parlaklıktan "daha büyük" görünmektedir). Resim (1) çalışma prensibini göstermektedir. PWM algoritması. Diyelim ki LED(0, 0) parlaklığı için koda 7 değeri verildi. Ayrıca parlaklıkta maksimum N adım olduğunu bilir. Kod, olası tüm parlaklık seviyeleri için N döngü ve tüm sıralardaki her bir LED'e hizmet vermek için gerekli tüm döngüler çalıştırır. Parlaklık döngüsündeki döngü sayacı x'in 7'den küçük olması durumunda LED yanar. 7'den büyükse, LED kapanır. Bunu tüm LED'ler, parlaklık seviyeleri ve temel renkler (RGB) için çok hızlı bir şekilde yaparak, her LED istenen rengi gösterecek şekilde ayrı ayrı ayarlanabilir. Bir osiloskopla yapılan ölçümler, ekran yenileme kodunun yaklaşık %50 CPU zamanını aldığını göstermiştir. Geri kalanı bir PC ile seri iletişim yapmak, düğmeleri okumak, bir RFID okuyucu ile konuşmak, I göndermek için kullanılabilir.2C verileri diğer modüllere…
Adım 2: Kaydırma Kayıtları ve LED'lerle Konuşmak
Bir kaydırma yazmacı, verileri seri olarak yüklemeye ve paralel bir çıkışa izin veren bir cihazdır. Uygun çip ile ters işlem de mümkündür. Arduino web sitesinde kaydırma yazmaçları hakkında iyi bir eğitim var. LED'ler, 74HC595 tipi 8-bit kaydırma yazmaçları tarafından çalıştırılır. Her bağlantı noktası yaklaşık 25mA akım sağlayabilir veya azaltabilir. Batık veya kaynaklı çip başına toplam akım 70mA'yı geçmemelidir. Bu çipler son derece ucuzdur, bu nedenle parça başına yaklaşık 40 sentten fazla ödemeyin. LED'ler üstel akım/gerilim karakteristiğine sahip oldukları için akım sınırlayıcı dirençler olması gerekir. Ohm kanununu kullanarak:R = (V - Vf) / IR = sınırlayıcı direnç, V = 5V, Vf = LED'in ileri gerilimi, I = istenen akımKırmızı LED'ler yaklaşık 1.8V'luk bir ileri voltaja, mavi ve yeşil aralığa 2.5V ile 3.5V arasında sahiptir. Bunu belirlemek için basit bir multimetre kullanın. Doğru renk üretimi için birkaç şey dikkate alınmalıdır: insan gözünün spektral duyarlılığı (kırmızı/mavi: kötü, yeşil: iyi), belirli bir dalga boyunda ve akımda LED'in verimliliği. Pratikte sadece 3 potansiyometre alınır ve LED uygun beyaz ışık gösterene kadar bunları ayarlar. Elbette maksimum LED akımı aşılmamalıdır. Burada ayrıca önemli olan, satırları süren kaydırma yazmacının 3x8 LED'lere akım sağlaması gerektiğidir, bu nedenle akımı çok yükseğe itmemek daha iyidir. Tüm LED'ler için 270Ohm'luk sınırlayıcı dirençlerle başarılı oldum, ancak bu elbette LED matrisinin yapısına bağlıdır. Kaydırma yazmaçları SPI seri ile arayüzlenmiştir. SPI = Seri Çevre Birimi Arayüzü (Resim (1)). PC'lerdeki seri portların aksine (asenkron, saat sinyali yok), SPI'nin bir saat hattına (SRCLK) ihtiyacı vardır. Ardından, verinin ne zaman geçerli olduğunu cihaza bildiren bir sinyal hattı vardır (chip select / latch / RCLK). Son olarak iki veri hattı vardır, biri MOSI (master out slave in), diğeri MISO (master in slave out) olarak adlandırılır. SPI, tıpkı benim gibi, entegre devreleri arayüzlemek için kullanılır.2C. Bu proje MOSI, SRCLK ve RCLK'ya ihtiyaç duyar. Ayrıca etkinleştirme satırı (G) da kullanılır. RCLK çizgisini DÜŞÜK'e çekerek bir SPI döngüsü başlatılır (Resim (2)). MCU, verilerini MOSI hattına gönderir. Bunun mantıksal durumu, SRCLK çizgisinin yükselen kenarındaki kaydırma yazmacı tarafından örneklenir. Döngü, RCLK çizgisinin HIGH konumuna geri çekilmesiyle sonlandırılır. Artık veriler çıktılarda mevcuttur.
Adım 3: Şematik
Resim (1), vardiya yazmaçlarının nasıl kablolandığını gösterir. Zincirlemedirler, bu nedenle veriler bu zincire ve ayrıca onun aracılığıyla kaydırılabilir. Bu nedenle daha fazla vardiya kaydı eklemek kolaydır.
Resim (2), MCU, konektörler, kuvars ile şemanın geri kalanını gösterir… Ekli PDF dosyası, yazdırma için en iyi olan tüm işleri içerir.
Adım 4: C++ Kaynak Kodu
C/C++'da genellikle fonksiyonları kodlamadan önce prototip yapmak gerekir.#include int main(void);void do_something(void);int main(void) { do_something();}void do_something(void) { /* comment */ }Arduino IDE, fonksiyon prototipleri otomatik olarak oluşturulduğu için bu adımı gerektirmez. Bu nedenle fonksiyon prototipleri burada gösterilen kodda görünmeyecektir. Resim (1): setup() functionResim (2): ATmega168 çipinin donanım SPI'sini kullanan spi_transfer() fonksiyonu (daha hızlı çalışır)Resim (3): çerçeve arabelleği kodu kullanılarak a timer1 overflow interrupt. Yeni başlayanlar için biraz şifreli bir görünüme sahip kod parçaları, örn. while(!(SPSR & (1<<SPIF))) {} doğrudan MCU'nun kayıtlarını kullanır. Sözcüklerle bu örnek: "SPSR kaydındaki SPIF biti ayarlanmamışken hiçbir şey yapmayın". Sadece standart projeler için donanımla bu kadar yakından ilgili şeylerle uğraşmanın gerçekten gerekli olmadığını vurgulamak istiyorum. Yeni başlayanlar bundan korkmamalıdır.
Adım 5: Bitmiş Gadget
Tüm sorunları çözdükten ve kodu çalıştırdıktan sonra, bir PCB düzeni oluşturmam ve onu muhteşem bir eve göndermem gerekiyordu. Çok daha temiz görünüyor:-)Resim (1): tamamen doldurulmuş kontrol panosuResim (2): çıplak PCB'nin ön tarafıGörüntü (2): arka tarafATmega168/328 yongasının PORTC ve PORTD'sini ve 5V/GND'yi ayıran konektörler var. Bu portlar seri RX, TX hatlarını, I2C hatları, dijital I/O hatları ve 7 ADC hattı. Bu, kalkanları kartın arka tarafına istiflemek için tasarlanmıştır. Boşluk, perfboard (0,1 inç) kullanmak için uygundur. Önyükleyici, ICSP başlığı kullanılarak flash'lanabilir (adafruit'in USBtinyISP'si ile çalışır). Bu yapılır yapılmaz standart bir FTDI USB/TTL seri adaptör veya benzeri kullanın. Ayrıca bir otomatik sıfırlama-devre dışı bırakma atlama kablosu ekledim. Ayrıca, genellikle kutudan çıktığı gibi çalışmayan FTDI kablolarıyla otomatik sıfırlamayı sağlayan (RTS'ye karşı DTR satırı) küçük bir Perl betiği hazırladım (bloguma bakın). Bu, Linux'ta, belki MAC'de çalışır. Basılı devre kartları ve birkaç DIY KIT blogumda mevcuttur. SMD lehimleme gerekli! LED matrisleri için yapım talimatları ve kaynaklar için PDF dosyalarına bakın.
Adım 6: Uygulama: Perl Kullanan Linux için CPU Yük İzleyicisi
Bu, geçmiş grafiğine sahip çok temel bir yük monitörüdür. Bu, iostat kullanarak her 1 saniyede bir sistemin "yük ortalamasını" toplayan bir Perl betiğine dayanır. Veriler, her güncellemede kaydırılan bir dizide saklanır. Listenin en üstüne yeni veriler eklenir, en eski giriş dışarı itilir. Daha ayrıntılı bilgi ve indirmeler (kod…) blogumda mevcuttur.
7. Adım: Uygulama: I²C Kullanarak Diğer Modüllerle Konuşmak
Bu sadece bir ilke kanıtıdır ve bu iş için açık ara en basit çözüm değildir.2C, 127 "slave" kartına kadar doğrudan adreslemeye izin verir. Burada videonun sağ tarafındaki pano "master" (tüm transferleri başlatan), soldaki pano ise slave (veri bekliyor). ben2C'nin 2 sinyal hattına ve normal güç hatlarına (+, -, SDA, SCL) ihtiyacı vardır. Bus olduğu için tüm cihazlar ona paralel olarak bağlanır.
Adım 8: Uygulama: "Oyun Küpü":-)
Sadece ucube bir düşünce. Bu, giriş sayfasında gösterilen ahşap kasaya da uyar. Arka tarafında basit bir oyun oynamak için kullanılabilecek 5 düğme var. SON ?
9. Adım: Matrix'te Görselleri / Animasyonları Görüntüleme - Quick Hack
Bu yüzden sadece 8x8 piksel ve birkaç renk var. İlk olarak en sevdiğiniz görüntüyü tam olarak 8x8 piksele küçültmek için Gimp gibi bir şey kullanın ve onu ".ppm" ham formatı (ASCII değil) olarak kaydedin. PPM'nin bir Perl betiğinde okunması ve işlenmesi kolaydır. ImageMagick ve "convert" komut satırı aracını kullanmak düzgün çalışmayacak. Yeni arduino kodunu yükleyin, ardından denetleyiciye yüklemek için Perl betiğini kullanın. Titreşim, LED yenileme ve kameramın kare hızının uyumsuzluğundan başka bir şey değil. Kodu biraz güncelledikten sonra oldukça hareketli çalışıyor. Tüm görüntüler seri olarak gördüğünüz gibi canlı olarak aktarılır. Daha uzun animasyonlar, çeşitli tefsir panolarında olduğu gibi harici bir EEPROM'da saklanabilir.
Adım 10: Depolanan Animasyonların Etkileşimli Kontrolü
Neden tüm eğlenceyi mikrodenetleyiciye bırakalım? Arduino kültü tamamen fiziksel bilgi işlem ve etkileşimle ilgilidir, bu yüzden sadece bir potansiyometre ekleyin ve kontrolü elinize alın! 8 analogdan dijitale dönüştürücü girişlerinden birinin kullanılması bunu çok basit hale getirir.
11. Adım: Canlı Videoyu Gösterme
Bir Perl betiği ve birkaç modül kullanmak, X11 sistemlerinde yarı canlı video göstermeyi oldukça kolaylaştırır. Linux'ta kodlanmıştır ve MAC'lerde de çalışabilir. Şu şekilde çalışır: - fare imleci konumunu alın - imleç merkezli bir kutu NxN pikseli yakalayın - görüntüyü 8x8 piksele ölçeklendirin - LED panosuna gönderin- tekrarlamak
Adım 12: Neredeyse Ücretsiz Daha Fazla Işık
Sadece iki adımda parlaklık biraz artırılabilir. 270Ω dirençleri 169Ω olanlarla değiştirin ve IC5'e başka bir 74HC595 kaydırma yazmacı bindirin.
Önerilen:
RGB LED Piksel Tonları: 17 Adım (Resimlerle)
RGB LED Piksel Gölgeleri: Herkese merhaba, bu Eğitilebilir Kitapta size bir çift LED piksel gölgesinin nasıl yapıldığını göstereceğim. Başlangıçta bunları Noel / Yeni Yıl'da evin etrafında giymek için, bir tür mobil süs olarak yarattım, ama sonunda biraz daha siberpunk oldular
Retro Piksel Sanatı için Devasa 4096 LED Ekran Yapın: 5 Adım (Resimlerle)
Retro Piksel Sanatı için Devasa 4096 LED Ekran Yapın: ***** Mart 2019'da Güncellendi ****** Bu projeye devam etmenin, her şeyi sıfırdan oluşturmanın veya bir kit versiyonundan yararlanmanın birkaç yolu var. Bu Eğitilebilir Dosyada her iki yöntemi de ele alacağım. Bu Eğitilebilirlik, 64x64 veya 4.096 RGB LED kurulumunu kapsar
Elde Taşınabilir Oyun Konsolu - Arduboy Klonu: 6 Adım (Resimlerle)
Elde Taşınabilir Oyun Konsolu | Arduboy Clone: Birkaç ay önce, resmi web sitesine göre öğrenmeyi, paylaşmayı ve çevrimiçi oyun oynamayı kolaylaştıran 8 bitlik minyatür bir oyun platformu olan Arduboy ile tanıştım. Açık kaynaklı bir platformdur. Arduboy için oyunlar kullanıcı tarafından yapılır
Arduino Kullanan Kendin Yap Video Oyunu (Arduboy Klonu): 7 Adım (Resimlerle)
Arduino Kullanarak Kendin Yap Video Oyunu (Arduboy Klonu): Arduboy adında 8 bitlik, kredi kartı boyutunda, açık kaynaklı oyunları öğrenmeyi, paylaşmayı ve oynamayı kolaylaştıran bir oyun platformu var. Bu cihazda başkaları tarafından yapılan 8 bitlik oyunların keyfini çıkarabilir veya kendi oyunlarınızı yapabilirsiniz. Açık kaynak kodlu bir proje olduğu için
Tüp Screamer Klonu: 6 Adım (Resimlerle)
Tube Screamer Clone: Kendi gitar pedallarımı yapmayı hiç düşünmedim. Tonumu oluşturacak araçları oluşturmayı bir başkasına bırakmamın her zaman en iyisi olduğunu düşündüm. Gitarla ilk tanıştığımda akustik çalıyordum ve komik olan şuydu ki