İçindekiler:

64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu: 12 Adım (Resimlerle)
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu: 12 Adım (Resimlerle)

Video: 64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu: 12 Adım (Resimlerle)

Video: 64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu: 12 Adım (Resimlerle)
Video: AI Days - Görüntü İşleme (Computer Vision) | Eftal İnan 2024, Kasım
Anonim
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu
64 Piksel RGB LED Ekran - Başka Bir Arduino Klonu

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

Renkleri Karıştırmak için Darbe Genişliği Modülasyonu
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

Vardiya Kayıtları ve LED'lerle Konuşmak
Vardiya Kayıtları ve LED'lerle Konuşmak
Vardiya Kayıtları ve LED'lerle Konuşmak
Vardiya 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

Şematik
Şematik
Şematik
Ş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++ Kaynak Kodu
C++ Kaynak Kodu
C++ Kaynak Kodu
C++ Kaynak Kodu
C++ Kaynak Kodu
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

Bitmiş Gadget'ı
Bitmiş Gadget'ı
Bitmiş Gadget'ı
Bitmiş Gadget'ı
Bitmiş Gadget'ı
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

Uygulama: I²C Kullanarak Diğer Modüllerle Konuşmak
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ü":-)

Başvuru
Başvuru

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

Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / Animasyonları Görüntüleme - Quick Hack
Matrix'te Görüntüleri / 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

Neredeyse Ücretsiz Daha Fazla Işık
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: