İçindekiler:

4 Kanallı DMX Dimmer: 6 Adım
4 Kanallı DMX Dimmer: 6 Adım

Video: 4 Kanallı DMX Dimmer: 6 Adım

Video: 4 Kanallı DMX Dimmer: 6 Adım
Video: Grand Ma 2 Robot ve Dimer tanımlamak Türkçe anlatım 2024, Kasım
Anonim
4 Kanallı DMX Dimmer
4 Kanallı DMX Dimmer

Konsept, taşınabilir bir dimmer tasarlamak ve oluşturmaktır.

Gereksinimler:

  • DMX512 Kontrol Edilebilir
  • 4 Kanal
  • Taşınabilir
  • Kullanımı kolay

Bu fikri WSU'daki profesörüme önerdim çünkü tutkularımı tiyatro ve bilgisayarlara birleştirmek istedim. Bu proje biraz tiyatro bölümündeki son projem gibi oldu. Herhangi bir yorumunuz veya sorunuz varsa, yardımcı olmak isterim.

Gelecekteki geliştirme, daha fazla kanal, 5 pinli DMX konektörü, DMX geçidi, kanalı değiştirmek için 8 dip anahtarı, baskılı devre kartı içerebilir.

Hâlâ popüler olduğu için bu projeyi https://danfredell.com/df/Projects/Entries/2013/1/6_DMX_Dimmer.html adresinden taşıdım sanırım. Ayrıca iWeb tohum dosyamı kaybettim, bu yüzden artık kolayca güncelleyemiyorum. İnsanların projeyle ilgili sorularını birbirleriyle paylaşmalarına izin vermek güzel olurdu.

Adım 1: Donanımı Toplama

Donanımı Toplama
Donanımı Toplama

Kullanılan Donanım: Çoğu Tayda Electronics'ten sipariş edildi. Daha küçük ve anlaşılması daha kolay seçim nedeniyle onları DigiKey'den daha çok seviyorum.

  1. ATMEGA328, Mikro denetleyici
  2. MOC3020, TRIAC Optokuplör. ZeroCross değil.
  3. MAX458 veya SN75176BP, DMX Alıcı
  4. ISP814, AC Optokuplör
  5. 7805, 5v Regülatör
  6. BTA24-600, 600V 25A TRİYAK
  7. 20MHz Kristal
  8. 9V Güç kaynağı

Yol boyunca öğrenilen birkaç engel ve ders

  • Kayıt uzmanı değilseniz, ATMEGA328P'ye bağlı kalın
  • Yanlış optokuplörler. Zero Cross istemiyorsun
  • Yüksek kanallar kararsızdı. 16MHz'den 20MHz'e geçmek bu sorunu çözdü
  • Kesinti çağrısının çok hızlı olması gerektiğinden DMX durum ışığına sahip olunamıyor
  • DC gücü son derece kararlı olmalıdır, herhangi bir dalgalanma DMX sinyalinin çok gürültülü olmasına neden olur

TRIAC tasarımı MRedmon'dan geldi, teşekkürler.

Adım 2: Devre Tasarımı

Devre tasarımı
Devre tasarımı

Devremi tasarlamak için Mac'te Fritzing 7.7 kullandım.

Üstteki MAX485, DMX sinyalini Arduino'nun okuyabileceği bir şeye dönüştürmek için kullanılır.

Soldaki 4N35, AC sinyalinin sıfır geçişini algılamak için kullanılır, böylece Arduino, Sinüs dalgası çıkışını ne zaman karartacağını bilir. Yazılım bölümünde donanım ve yazılımın nasıl etkileşime girdiği hakkında daha fazla bilgi.

Bu proje Avrupa'da 230V ve 50Hz ile çalışır mı sorusunu aldım. Avrupa'da yaşamıyorum ve bu tasarımı test edebilmek için sık sık oraya seyahat etmiyorum. Çalışması gerekir, farklı frekans zaman gecikmesi için sadece parlaklık zamanlama kod satırını değiştirmeniz gerekir.

Adım 3: Kovari'nin Devre Tasarımı

Kovari'nin Devre Tasarımı
Kovari'nin Devre Tasarımı
Kovari'nin Devre Tasarımı
Kovari'nin Devre Tasarımı

Web sitemi kurma sürecinde birkaç e-posta görüşmesi yapabildim. Biri, bu projeye dayalı bir devre tasarımı yapan ve tasarımını paylaşmak isteyen Kovari Andrei ile birlikteydi. Ben devre kartı tasarımcısı değilim ama bu bir Eagle projesi. Kullanırsanız, sizin için nasıl çalıştığını bana bildirin.

Adım 4: Giacomo'nun Devre Tasarımı

Giacomo'nun Devre Tasarımı
Giacomo'nun Devre Tasarımı

Zaman zaman insanlar bu öğretici ile yaptıkları heyecan verici uyarlamaları bana mesaj atacaklar ve bunları hepinizle paylaşmam gerektiğini düşündüm.

Giacomo devreyi değiştirdi, böylece bir merkeze bağlı transformatör gerekli değildi. Pcb tek taraflıdır ve evde çift taraflı yapamayanlar için (biraz zor) daha hesaplı bir çözüm olabilir.

Adım 5: Yazılım

Yazılım
Yazılım

Ben ticari olarak bir yazılım mühendisiyim, bu yüzden bu kısım en ayrıntılı kısımdır.

Summery:Arduino ilk başlatıldığında setup() yöntemi çağrılır. Orada daha sonra kullanılmak üzere birkaç değişken ve çıktı konumu ayarladım. AC pozitif voltajdan negatif voltaja her geçtiğinde zeroCrossInterupt() çağrılır/çalışır. Her kanal için zeroCross bayrağını ayarlayacak ve zamanlayıcıyı başlatacaktır. loop() yöntemi sürekli olarak sonsuza kadar çağrılır. Çıkışı açmak için TRIAC'ın yalnızca 10 mikrosaniye tetiklenmesi gerekir. TRIAC ve zeroCross'u tetikleme zamanı geldiyse, AC fazının sonuna kadar çıkış açılır.

Bu projeyi başlatmak için kullandığım çevrimiçi birkaç örnek vardı. Bulamadığım en önemli şey, birden fazla TRIAC çıkışına sahip olmaktı. Diğerleri çıkışı PWM için gecikme işlevini kullandı, ancak ATMEGA'nın her zaman DMX dinlemesi gerektiğinden bu benim durumumda işe yaramazdı. Bunu, sıfır geçişten sonra TRIAC'ı birçok ms'de titreştirerek çözdüm. TRIAC'ı sıfır çapraza yaklaştırarak daha fazla günah dalgası çıktısı alınır.

İşte yukarıda, bir osiloskopta yarım 120VAC sin dalgasının nasıl göründüğü.

ISP814, kesme 1'e bağlıdır. Dolayısıyla, AC'nin pozitiften negatife veya tam tersine geçiş yaptığı sinyalini aldığında, her kanal için zeroCross değerini true olarak ayarlar ve kronometreyi başlatır.

loop() yönteminde, her kanalı zeroCross'un doğru olup olmadığını kontrol eder ve etkinleştirme süresi geçmişse, TRIAC'ı 10 mikrosaniye boyunca titreştirir. Bu, TRIAC'ı açmak için yeterlidir. Bir TRIAC açıldığında, sıfıra kadar açık kalacaktır. DMX %3 civarındayken ışık titreyecekti, bu yüzden bunu önlemek için oraya kesmeyi ekledim. Bu, Arduino'nun çok yavaş olmasına neden oldu ve nabız bazen dalganın son %4'ü yerine bir sonraki günah dalgasını tetikleyecekti.

Ayrıca döngüde () durum LED'lerinin PWM değerini ayarladım. Bu LED'ler, Arduino tarafından üretilen dahili PWM'yi kullanabilir, çünkü AC'nin sıfırCross'u hakkında endişelenmemize gerek yoktur. PWM ayarlandıktan sonra Arduino, aksi söylenene kadar bu parlaklıkta devam edecektir.

En üstteki yorumlarda belirtildiği gibi, pin 2'de bir DMX kesintisi kullanmak ve 20MHz'de çalışmak için bazı Arduino uygulama dosyalarını düzenlemeniz gerekecektir. HardwareSerial.cpp'de bir kod parçasının silinmesi gerekir, bu bizim kendi kesme çağrımızı yazmamıza izin verir. Bu ISR yöntemi, DMX kesmesini işlemek için kodun altındadır. ISP programcısı olarak bir Arduino kullanacaksanız, yaptığınız değişiklikleri HardwareSerial.cpp'ye geri aldığınızdan emin olun, aksi takdirde breadboard üzerindeki ATMEGA328'e erişilemez. İkinci değişiklik daha kolay bir değişiklik. Boards.txt dosyası yeni 20MHz saat hızına değiştirilmelidir.

parlaklık[ch]=harita(DmxRxField[ch], 0, 265, 8000, 0);

Parlaklık 8000'e eşlenir çünkü bu, 60hz'de 1/2 AC sinüs dalgasının mikrosaniye miktarıdır. Böylece, tam parlaklık 256 DMX'de program, 8000us için AC sinüs dalgasının 1/2'sini AÇIK bırakacaktır. Tahmin ve kontrol yoluyla 8000 buldum. 1000000us/60hz/2 = 8333 matematiğini yapmak daha iyi bir sayı olabilir, ancak fazladan 333us'un kafanın üzerinde olması TRIAC'ın açılmasına izin verir ve programdaki herhangi bir titreme muhtemelen iyi bir fikirdir.

Arduino 1.5.3'te HardwareSerial.cpp dosyasının konumunu taşıdılar. Şimdi /Applications/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/HardwareSerial0.cpp 39. satırdan başlayarak bu if bloğunun tamamını yorumlamanız gerekecek: #ifdefined(USART_RX_vect)

Aksi takdirde şu hatayı alırsınız: core/core.a(HardwareSerial0.cpp.o): '_vector_18' işlevinde:

Adım 6: Paketleyin

Paketleme
Paketleme
Paketleme
Paketleme
Paketleme
Paketleme

Menards'ın elektrik bölümündeki gri proje kutusunu aldım. Elektrik fiş deliklerini kesmek için pistonlu testere kullandım. Dava, asmak için üste takılan bir tiyatro c-kelepçesine sahip. Herhangi bir sorun olup olmadığını teşhis etmeye yardımcı olmak için her giriş ve çıkış için durum ışıkları. Cihazdaki farklı portları açıklamak için bir etiketleme makinesi kullanıldı. Her fişin yanındaki sayılar, DMX kanal numarasını temsil eder. Devre kartını ve transformatörü biraz sıcak tutkalla yapıştırdım. LED'ler, led tutucularla yerine takılır.

Önerilen: