Kali ini, saya mengusulkan untuk melakukan sihir kecil (mengapa tidak?) Dan membuat kristal ajaib untuk kebutuhan kita sehari-hari. Kami akan menggunakannya untuk tujuan yang dimaksudkan - untuk ramalan berbagai entitas dan peristiwa yang tidak jelas. Dan kita hanya perlu dua bahan untuk membuat artefak ini - Arduino Mega Server dan pengontrol nirkabel strip LED SD111-180 nooLite .Kristal tidak akan dekoratif (untuk menipu publik yang mudah tertipu), tetapi yang paling fungsional, dengan banyak sifat magis.Jadi, mari kita mulai ...Sekolah Sihir
Seperti yang Anda sendiri pahami, Anda tidak bisa begitu saja mengambil dan melakukan keajaiban, Anda harus terlebih dahulu melewati sekolah sihir dan mempelajari dasar-dasar seni yang sulit ini. Dan di sini saya merujuk Anda ke serangkaian artikel ( satu , dua , tiga ) tentang integrasi peralatan nooLite dalam sistem otomasi rumah dan merekomendasikan agar Anda membiasakan diri dengan mereka sebelum membaca lebih lanjut. Dalam artikel ini, semua rincian dasar dan teknis tentang cara kerja Server Arduino Mega dengan peralatan nirkabel nooLite dirinci. Oleh karena itu, saya akan melanjutkan seluruh narasi dengan asumsi bahwa Anda telah membaca artikel sebelumnya.Modul
Kami akan melakukan semua percobaan dengan pengontrol nirkabel nooLite SD111-180, yang memungkinkan Anda untuk mengontrol strip LED "over the air", tanpa kabel apa pun. Menghubungkan, seperti biasa dengan nooLite, yang paling sederhana adalah dua kabel ke catu daya untuk strip LED dan empat ke pita itu sendiri: plus dan tiga saluran R, G, B.
Bagian perangkat lunak
Artikel sebelumnya berbicara tentang inti kontrol nooLite yang terintegrasi ke dalam sistem Server Arduino Mega. Dan juga disebutkan di sana bahwa serangkaian fungsi inti untuk mengendalikan perangkat nooLite diimplementasikan di kernel dan ditawarkan kepada semua orang yang ingin, secara analogi, untuk menambahkan fungsi lain yang diperlukan ke kernel. Sekarang kita akan memfasilitasi tugas ini dan menambahkan fungsi untuk kontrol nirkabel strip LED ke kernel.Pertama-tama, kita menambahkan fungsi "utama", yang menghasilkan perintah kontrol untuk modul MT1132 nooLite .void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
byte buf[12];
ledLastState[0] = r;
ledLastState[1] = g;
ledLastState[2] = b;
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = r;
buf[7] = g;
buf[8] = b;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
Ini adalah saudara perempuan dari fungsi nooSendCommand, yang kita bahas dalam artikel pertama. Hanya sedikit dimodifikasi untuk kebutuhan spesifik pengontrol strip LED. Menambahkan instalasi 6, 7, 8 byte dari perintah kontrol, yang berisi kecerahan pada tiga saluran R, G, B. Dan sebuah array ditambahkanbyte ledLastState[] = {127, 127, 127};
berisi nilai warna set terakhir dari strip LED. Ini diperlukan agar Anda dapat menyalakan dan mematikan lampu, sambil mempertahankan nilai warna yang disetel. Jika ini tidak dilakukan, maka setelah mematikannya dan kemudian menyalakannya, warna akan diatur ulang menjadi putih, yang sangat tidak nyaman.Dan untuk bekerja dengan strip LED, pilih saluran ketigabyte const NOO_CHANNEL_3 = 2;
Anda dapat memilih salah satu dari 32 saluran yang bekerja dengan modul nooLite MT1132.Sekarang kita memiliki fungsi dasar yang mengontrol operasi pengontrol strip LED nooLite SD111-180, dan, dengan demikian, strip LED itu sendiri. Dan sekarang kita dapat mulai menulis fungsi pembungkus yang membuatnya lebih mudah bagi kita untuk menulis kode untuk mengontrol warna cahaya rekaman itu.Bungkus dasarvoid nooLed (byte ch, byte r, byte g, byte b) {
nooSendCommandLed(ch, 6, r, g, b, 3);
}
Cukup tunjukkan saluran dan warna cahaya. Kami siap melayani 16 juta warna. Selanjutnya, kami menulis fungsi pembungkus untuk warna dasar (Anda dapat menambahkan fungsi tersebut untuk warna favorit Anda).void nooRed (byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, 0, 3);}
void nooGreen (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, 0, 3);}
void nooBlue (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, v, 3);}
void nooCyan (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, v, 3);}
Cukup tunjukkan saluran dan intensitas cahaya dalam kisaran dari 0 hingga 255. Dan beberapa fungsi "konseptual" lainnya. Intensitas putih, hitam dan abu-abu.void nooBlack (byte ch) {nooSendCommandLed(ch, 6, 0, 0, 0, 3);}
void nooWhite (byte ch) {nooSendCommandLed(ch, 6, 255, 255, 255, 3);}
void nooGray (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, v, 3);}
Dan fungsi terakhir, yang akan kita tambahkan ke inti nooLite dalam sistem Arduino Mega Server, adalah fungsi untuk mengembalikan warna terakhir dari cahaya pita (modul nooLite sendiri tidak mengingat nilai ini). Fungsi ini digunakan untuk menghidupkan kaset (setelah mematikannya, yang mengatur ulang warna menjadi putih).void nooSetLedLastState(byte ch) {
nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);
}
Ini adalah kode lengkap untuk kernel manajemen nooLite baru.Kode kernel lengkap
#ifdef NOO_FEATURE
byte const PIN_TX = 18;
byte const PIN_RX = 19;
byte const NOO_CHANNEL_1 = 0;
byte const NOO_CHANNEL_2 = 1;
byte const NOO_CHANNEL_3 = 2;
byte const NOO_CHANNEL_4 = 3;
byte const NOO_CHANNEL_5 = 4;
void nooInit() {
Serial1.begin(9600);
modulNoo = MODUL_ENABLE;
started("nooLite");
}
void nooWork() {
}
void nooSendCommand(byte channel, byte command, byte data, byte format) {
byte buf[12];
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = data;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
byte ledLastState[] = {127, 127, 127};
void nooSendCommandLed(byte channel, byte command, byte r, byte g, byte b, byte format) {
byte buf[12];
ledLastState[0] = r;
ledLastState[1] = g;
ledLastState[2] = b;
for (byte i = 0; i < 12; i++) {
buf[i] = 0;
}
buf[0] = 85;
buf[1] = B01010000;
buf[2] = command;
buf[3] = format;
buf[5] = channel;
buf[6] = r;
buf[7] = g;
buf[8] = b;
int checkSum = 0;
for (byte i = 0; i < 10; i++) {
checkSum += buf[i];
}
buf[10] = lowByte(checkSum);
buf[11] = 170;
for (byte i = 0; i < (12); i++) {
Serial1.write(buf[i]);
}
}
void nooBind (byte ch) {nooSendCommand(ch, 15, 0, 0);}
void nooUnbind (byte ch) {nooSendCommand(ch, 9, 0, 0);}
void nooOn (byte ch) {nooSendCommand(ch, 2, 0, 0);}
void nooOff (byte ch) {nooSendCommand(ch, 0, 0, 0);}
void nooTrigger(byte ch) {nooSendCommand(ch, 4, 0, 0);}
void nooCancel (byte ch) {nooSendCommand(ch, 10, 0, 0);}
void nooUp (byte ch) {nooSendCommand(ch, 3, 0, 0);}
void nooDown (byte ch) {nooSendCommand(ch, 1, 0, 0);}
void nooRevers (byte ch) {nooSendCommand(ch, 5, 0, 0);}
void nooValue (byte ch, byte v) {nooSendCommand(ch, 6, v, 1);}
void nooLed (byte ch, byte r, byte g, byte b) {nooSendCommandLed(ch, 6, r, g, b, 3);}
void nooBlack (byte ch) {nooSendCommandLed(ch, 6, 0, 0, 0, 3);}
void nooWhite (byte ch) {nooSendCommandLed(ch, 6, 255, 255, 255, 3);}
void nooGray (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, v, 3);}
void nooRed (byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, 0, 3);}
void nooGreen (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, 0, 3);}
void nooBlue (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, 0, v, 3);}
void nooYellow (byte ch, byte v) {nooSendCommandLed(ch, 6, v, v, 0, 3);}
void nooMagenta(byte ch, byte v) {nooSendCommandLed(ch, 6, v, 0, v, 3);}
void nooCyan (byte ch, byte v) {nooSendCommandLed(ch, 6, 0, v, v, 3);}
void nooSetLedLastState(byte ch) {nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);}
#endif
Itu saja, dengan ini, dengan deskripsi dari kernel add-ons, kita mengakhiri dan pergi ke antarmuka manajemen warna strip AMS LED.Antarmuka Manajemen Strip LED
Pada artikel sebelumnya, Anda akan mengingat antarmuka kontrol instrumen nooLite dari sistem Arduino Mega Server. Kami tidak akan sangat canggih dan hanya menambahkan bagian lain ke tiga yang ada (dua bagian untuk mengendalikan perangkat dan satu bagian untuk "mengikat" / "melepaskan ikatan" modul).
Tangkapan layar bagian lain dengan penjelasan terperinci dapat dilihat di artikel sebelumnya tentang integrasi AMS dengan sistem nooLite. Bagian baru memungkinkan untuk menghidupkan dan mematikan strip LED dan memilih warna cahaya dari beberapa opsi yang telah ditentukan.Ini hanya contoh integrasi dan Anda dapat membuat antarmuka lain berdasarkan contoh ini. Anda dapat membuat pilihan warna, mengubah warna dengan lancar, atau memberikan skenario untuk menghidupkan, mematikan, dan mengubah warna lampu latar, dll., Dll.Dapur domestik
Antarmuka kontrol hanya bagian dari fitur yang disediakan oleh Arduino Mega Server dengan inti kendali instrumen nooLite terintegrasi. Dan ini, bisa dikatakan, adalah bagian permukaan gunung es. Dan bagian bawah air adalah kemampuan untuk menggunakan fungsi wrapper dalam kode sistem itu sendiri. Anda dapat dengan mudah, secara harfiah dalam satu baris kode, mengontrol cahaya pita dan menggunakannya untuk menunjukkan parameter sistem internal (suhu, fungsi keamanan, menyalakan perangkat, dll.) Dan yang eksternal yang datang melalui jaringan dalam bentuk perintah dari perangkat lain di Smart Home .Dan di sini kita pergi ke yang paling menarik.Kristal ajaib
Sekarang mari kita bicara tentang "kristal ajaib" itu sendiri. Apa yang kamu bicarakan Bayangkan setiap lingkungan buatan seseorang - interior apartemen atau kantor, aula untuk mengadakan acara apa pun, lingkungan perkotaan kota kita (halte, kutub, batu tepi jalan, dll.), Dll. Jadi, idenya adalah bahwa pada tingkat perkembangan teknologi saat ini, subjek apa pun dapat dijadikan "indikator" peristiwa dan parameter apa pun. Anda dapat melangkah lebih jauh dan menjadikan subjek apa pun interaktif atau "hidup", Anda juga dapat melengkapi subjek apa pun dengan suara berbeda, dll. (Hai, Alice!), Tapi ini adalah topik untuk artikel lain, kami akan membicarakannya lain kali.
Ambil, misalnya, kamar Anda. Di rak, di sebelah TV, atau di tengah "kekacauan kreatif" di atas meja, mungkin ada benda kecil, misalnya, "bola ajaib" yang, tergantung pada parameter atau peristiwa apa pun, mengubah warna, warna, atau kecerahan cahaya. Itu tidak mengganggu siapa pun dan tidak menarik perhatian, tidak membuat suara, tetapi Anda hanya perlu melihatnya sebentar dan menjadi jelas bagi Anda apa suhu di jalan, apakah Anda menerima email melalui email, berapa banyak bir yang tersisa di lemari es, apakah sudah waktunya untuk memberi makan ikan atau minum pil sclerosis yang diresepkan oleh dokter Anda.
Peristiwa yang sangat penting "kristal ajaib" dapat ditunjukkan dengan berkedip atau bahkan suara. Dan Anda mengatur sendiri semua parameter sistem ini, tergantung pada kebutuhan dan imajinasi Anda: warna dan intensitas cahaya, peristiwa dan parameter yang bereaksi terhadap "kristal ajaib", dll. Ada beberapa "kristal" seperti itu dan dapat apapun, tidak harus dalam bentuk bola.Sekarang, dari hal-hal kecil dan “tidak mencolok”, mari beralih ke bentuk sedang. Bisa berupa pencahayaan lantai atau langit-langit, dinding bercahaya (bagian dinding) atau relung, dll. Elemen interior. Misalnya, lampu latar dapat berfungsi sebagai jam warna, ketika pada malam hari ia mengubah cahaya tergantung pada waktu, dan di pagi hari cahaya itu secara bertahap menjadi lebih terang dan berfungsi sebagai jam alarm "alami".
Dan akhirnya, ini adalah gudang ide yang tak habis-habisnya untuk berbagai pertunjukan dan desain acara massa, seperti pesta, acara perusahaan, dll. Pertemuan orang-orang, di mana kristal ajaib kecil berubah menjadi kubus dan bola 2 meter yang berubah warna tergantung pada , misalnya, hasil pemungutan suara untuk atau melawan sesuatu.
Kesimpulan
Dan yang Anda butuhkan untuk mewujudkan semua ide ini adalah Arduino Mega Server , pengontrol strip nirkabel LED nooLite SD111-180 dan sedikit imajinasi. Semua inovasi yang dijelaskan dalam artikel ini akan muncul di versi 0.15 berikutnya dari sistem AMS, dan yang paling tidak sabar dari Anda dapat mengambil kode modul kernel nooLite dari artikel ini dan mulai bekerja dengan baik sekarang.Artikel sebelumnya:Peralatan Nirkabel nooLite dan Smart Home (Bagian 1).Peralatan Nirkabel Arduino nooLite dan Smart Home (Bagian 2).Peralatan Nirkabel Arduino Mega Server nooLite dan Smart Home (Bagian 3).Promo stasiun solder Arduino Mega Server di Youtube, menunjukkan hasil kerja dengan sistem promo Arduino Mega Server nyata