Hai teman-teman, saya sudah memiliki banyak lampu yang dikendalikan DMX di dalam rumah tetapi juga ingin memiliki beberapa di luar. Karena lampu RGB DMX ini agak mahal (sekitar 200 - 300€), saya mencari alternatif.
Apa yang saya temukan adalah banjir LED RGB yang sangat murah dengan unit kontrol IR. Ini sekitar 8€ / 10W RGB.
Jadi, yang harus saya lakukan adalah mengonversinya untuk memahami DMX.
Untuk menekan biaya dan ruang PCB yang dibutuhkan, semua 5 banjir hanya memiliki satu otak Arduino di kotak terpisah. Setiap lampu memiliki PWM 3 saluran yang dipicu PCB sumber arus konstan dan kabel konektor D-Sub 9. PCB ini sangat cocok dengan kompartemen kecil di bagian bawah lampu. Setiap saluran untuk LED disetel ke 350mA.
Semua 5 lampu terhubung ke kotak pusat dengan arduino dan penerima DMX nirkabel
Itu bertahan sejauh ini 3 minggu dalam hujan lebat, kotaknya tertutup rapat dan segelnya kedap air.
PCB tempat saya memasang Nano bersifat universal untuk semua proyek DMX saya, ia dapat mengubah sinyal bus DMX ke Ardunio dan juga merupakan breakout untuk bus I2C dan / atau semua 6 saluran PWM dengan MosFET (BUZ11). Saya juga menggunakannya dengan MosFET untuk memperbarui lampu bagian dalam ke DMX.
Jadi semuanya menghasilkan 5 lampu yang dikontrol secara individual (di sini untuk pagar kaca saya) yang dikontrol melalui DMX nirkabel melalui PC / ponsel.
Dalam unduhan, Anda akan menemukan file elang untuk PCB, salin&tempel sketsa Arduino saya, dan file definisi untuk lampu di perangkat lunak kontrol PC Freestyler.
DMX-Adresses adalah hard-code untuk memulai alamat 200 dan kemudian 5x 3 saluran R, G dan B tanpa saluran peredup.
Di Arduino-Sketch saya harus memanipulasi nilai untuk saluran merah, karena LED merah jauh lebih terang daripada hijau dan biru dan karena itu tidak akan bercampur menjadi putih murni.
Atau ada satu sketsa untuk pengujian / perbaikan bug di mana Anda dapat mengatur nilai RGB secara langsung melalui terminal Ardunio IDE
Total biaya untuk 5 lampu sekitar 110€, semua suku cadang (kecuali lampu) bersumber dari Reichelt.de, semua PCB dibuat oleh platinenbelichter.de (rekomendasi besar!)
Kode
- Versi DMX
- Versi masukan USB
- perlengkapan untuk Freestyler
Versi DMXArduino
Program kontrol untuk lampu RGB 5x 3channel// 15 PWM pada LED 5 RGB / DMX Start-Address 200 / 5x 3channel RGB#include #include #include Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();#define DMX_SLAVE_CHANNELS 15DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );int channel[16];int channelOut[16];int value[16];int ch =0;int red =0;int green =0;int blue =0;pengaturan batal() { Kawat.mulai(); // bergabung dengan i2c bus (alamat opsional untuk master) pwm.begin(); pwm.setPWMreq(120); // Ini adalah frekuensi PWM maksimum#ifdef TWBR // simpan bitrate I2C uint8_t twbrbackup =TWBR; // harus diubah setelah memanggil Wire.begin() (di dalam pwm.begin()) TWBR =12; // upgrade ke 400KHz!#endif // DMX set up dmx_slave.enable(); dmx_slave.setStartAddress (200); // setel semua PWM ke tinggi -> LED mati pwm.setPWM(0, 4096, 0 ); pwm.setPWM(1, 4096, 0 ); pwm.setPWM(2, 4096, 0 ); pwm.setPWM(3, 4096, 0 ); pwm.setPWM(4, 4096, 0 ); pwm.setPWM(5, 4096, 0 ); pwm.setPWM(6, 4096, 0 ); pwm.setPWM(7, 4096, 0 ); pwm.setPWM(8, 4096, 0 ); pwm.setPWM(9, 4096, 0 ); pwm.setPWM(10, 4096, 0 ); pwm.setPWM(11, 4096, 0 ); pwm.setPWM(12, 4096, 0 ); pwm.setPWM(13, 4096, 0 ); pwm.setPWM(14, 4096, 0 );}void loop() { // input DMX untuk (int j =0; j <=14; j++) { channel[j] =dmx_slave.getChannelValue (j+1); } // fine tune color channelOut[0] =map(channel[0], 0, 255, 0, 1400); // kurangi LED merah 1 channelOut[1] =peta(channel[1], 0, 255, 0, 4095); channelOut[2] =peta(channel[2], 0, 255, 0, 4095); channelOut[3] =peta(channel[3], 0, 255, 0, 1400); // kurangi LED merah 2 channelOut[4] =map(channel[4], 0, 255, 0, 4095); channelOut[5] =peta(channel[5], 0, 255, 0, 4095); channelOut[6] =peta(channel[6], 0, 255, 0, 1400); // kurangi LED merah 3 channelOut[7] =peta(channel[7], 0, 255, 0, 4095); channelOut[8] =peta(channel[8], 0, 255, 0, 4095); channelOut[9] =peta(channel[9], 0, 255, 0, 1400); // kurangi LED merah 4 channelOut[10] =map(channel[10], 0, 255, 0, 4095); channelOut[11] =peta(saluran[11], 0, 255, 0, 4095); channelOut[12] =peta(channel[12], 0, 255, 0, 1400); // kurangi LED merah 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =peta(channel[14], 0, 255, 0, 4095); //menetapkan nilai untuk (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0 ); } else { pwm.setPWM(i, 0, 4095 - channelOut[i] ); } }}
Versi masukan USBArduino
Versi debug dengan input langsung untuk lampu Nr. dan nilai RGB// 15 PWM pada LED 5 RGB#include #include // disebut dengan cara ini, ia menggunakan alamat default 0x40Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();// Anda bisa panggil juga dengan alamat berbeda yang Anda inginkan//Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver(0x41);int channel[15];int channelOut[15];int value[15];int ch =0;int red =0;int green =0;int biru =0;pengaturan batal() { Kawat.begin(); // bergabung dengan i2c bus (alamat opsional untuk master) Serial.begin(9600); Serial.println("Menunggu input:LED, R, G, B, [setiap 0-255]"); pwm.mulai(); pwm.setPWMreq(120); // Ini adalah frekuensi PWM maksimum // jika Anda ingin benar-benar mempercepat, Anda dapat masuk ke mode 'fast 400khz I2C' // beberapa perangkat i2c tidak begitu menyukai ini jadi jika Anda berbagi bus, tonton / / keluar untuk ini!#ifdef TWBR // simpan bitrate I2C uint8_t twbrbackup =TWBR; // harus diubah setelah memanggil Wire.begin() (di dalam pwm.begin()) TWBR =12; // tingkatkan ke 400KHz!#endif // setel semua PWM ke tinggi -> LED mati pwm.setPWM(0, 4096, 0 ); pwm.setPWM(1, 4096, 0 ); pwm.setPWM(2, 4096, 0 ); pwm.setPWM(3, 4096, 0 ); pwm.setPWM(4, 4096, 0 ); pwm.setPWM(5, 4096, 0 ); pwm.setPWM(6, 4096, 0 ); pwm.setPWM(7, 4096, 0 ); pwm.setPWM(8, 4096, 0 ); pwm.setPWM(9, 4096, 0 ); pwm.setPWM(10, 4096, 0 ); pwm.setPWM(11, 4096, 0 ); pwm.setPWM(12, 4096, 0 ); pwm.setPWM(13, 4096, 0 ); pwm.setPWM(14, 4096, 0 );}void loop() { //masukkan warna while (Serial.available()> 0) { ch =Serial.parseInt(); merah =Serial.parseInt(); hijau =Serial.parseInt(); biru =Serial.parseInt(); if (Serial.read() =='\n') {} ch =constrain(ch, 0, 4); merah =kendala(merah, 0, 255); hijau =kendala(hijau, 0, 255); biru =kendala(biru, 0, 255); // mencetak tiga angka :Serial.print("nilai baru:"); Serial.print("LED="); Serial.print(ch, DEC); Serial.print("R="); Serial.print(merah, DES); Serial.print (", G="); Serial.print(hijau, DES); Serial.print (", B="); Serial.println(biru, DES); } sakelar (ch) { kasus 0:saluran[0] =merah; saluran[1] =hijau; saluran [2] =biru; merusak; kasus 1:saluran[3] =merah; saluran[4] =hijau; saluran[5] =biru; merusak; kasus 2:saluran[6] =merah; saluran[7] =hijau; saluran[8] =biru; merusak; kasus 3:saluran[9] =merah; saluran[10] =hijau; saluran[11] =biru; merusak; kasus 4:saluran[12] =merah; saluran[13] =hijau; saluran[14] =biru; merusak; } // fine tune color channelOut[0] =map(channel[0], 0, 255, 0, 1400); // kurangi LED merah 1 channelOut[1] =peta(channel[1], 0, 255, 0, 4095); channelOut[2] =peta(channel[2], 0, 255, 0, 4095); channelOut[3] =peta(channel[3], 0, 255, 0, 1400); // kurangi LED merah 2 channelOut[4] =map(channel[4], 0, 255, 0, 4095); channelOut[5] =peta(channel[5], 0, 255, 0, 4095); channelOut[6] =peta(channel[6], 0, 255, 0, 1400); // kurangi LED merah 3 channelOut[7] =peta(channel[7], 0, 255, 0, 4095); channelOut[8] =peta(channel[8], 0, 255, 0, 4095); channelOut[9] =peta(channel[9], 0, 255, 0, 1400); // kurangi LED merah 4 channelOut[10] =map(channel[10], 0, 255, 0, 4095); channelOut[11] =peta(saluran[11], 0, 255, 0, 4095); channelOut[12] =peta(channel[12], 0, 255, 0, 1400); // kurangi LED merah 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =peta(channel[14], 0, 255, 0, 4095); //menetapkan nilai untuk (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0 ); } else { pwm.setPWM(i, 0, 4095 - channelOut[i] ); } }}
perlengkapan untuk FreestylerBatchFile
definisi saluran deskripsi untuk program kontrol DMX pada PCBuzzComments:""Outdoor LED3 0 0 RBG Outdoor.gif0000000 1 123RedGreenBlueMacros 2 0 0 0 1 0 02550000002550255025502550255025502550000-0-0-0-1Sliders 0
Skema
basis Nano universal dengan input DMX dan output PWM / I2C universaldmx_2ixt4yqoce.sch universaldmx_a0KdrmJqGU.brd5x 3 ch. Distribusi (15x PWM) dengan input 12V (+/-) verteiler_dmx_a0M4khDOMv.sch verteiler_dmx_P6etUU6zsN.brd3x 350mA / 12V sumber dengan input PWM 3xksq_rework_2VYUHjd5Xl.sch 3xksq_rework_4rpvCLaFrs.brd 3xksq_rework_qp87kzXQGy.txt universaldmx_GtNeOjMWZL.txt