هذه المرة ، أقترح القيام ببعض السحر (لماذا لا؟) وإنشاء بلورة سحرية لاحتياجاتنا اليومية. سنستخدمها للغرض المقصود - لتقسيم مختلف الكيانات والأحداث غير الواضحة. ونحتاج إلى مكونين فقط لعمل هذه القطعة - Arduino Mega Server ووحدة تحكم قطاع LED اللاسلكية nooLite SD111-180 .لن تكون البلورة مزخرفة (لخداع الجمهور الساذج) ، ولكنها الأكثر وظيفية ، مع العديد من الخصائص السحرية.لذا ، دعنا نبدأ ...مدرسة السحر
كما تفهم بنفسك ، لا يمكنك فقط اتخاذ بعض المعجزات وتنفيذها ، يجب عليك أولاً الذهاب إلى مدرسة السحر وتعلم أساسيات هذا الفن الصعب. وهنا أحيلك إلى سلسلة من المقالات ( واحد ، اثنان ، ثلاثة ) حول دمج معدات nooLite في أنظمة التشغيل الآلي للمنزل وأوصيك بأن تتعرف عليها قبل قراءة المزيد. في هذه المقالات ، يتم تفصيل جميع الأساسيات والتفاصيل الفنية لكيفية عمل خادم Arduino Mega مع أجهزة لاسلكية nooLite. لذلك ، سأواصل السرد بأكمله بافتراض أنك قرأت بالفعل المقالات السابقة.الوحدة
سنجري جميع التجارب باستخدام وحدة التحكم اللاسلكية nooLite SD111-180 ، والتي تتيح لك التحكم في شرائط LED "على الهواء" ، بدون أي أسلاك. الاتصال ، كما هو الحال دائمًا مع nooLite ، الأبسط هو سلكان لمصدر الطاقة لشرائط LED وأربعة للشريط نفسه: بالإضافة إلى وثلاث قنوات R ، G ، B.
جزء البرنامج
تحدثت المقالات السابقة عن نواة التحكم nooLite المدمجة في نظام Arduino Mega Server. وقيل هناك أيضًا أن المجموعة الأساسية من الوظائف للتحكم في أجهزة nooLite تم تنفيذها في النواة وعرضت على كل من أراد ، عن طريق القياس ، إضافة وظائف ضرورية أخرى إلى النواة. الآن سنقوم بتسهيل هذه المهمة وإضافة وظائف للتحكم اللاسلكي في شرائط LED إلى النواة.بادئ ذي بدء ، نضيف الوظيفة "الرئيسية" ، التي تولد أوامر تحكم لوحدة nooLite MT1132 .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]);
}
}
هذه هي أخت دالة nooSendCommand ، التي تناولناها في المقالة الأولى. يتم تعديله قليلاً فقط للاحتياجات المحددة للتحكم في شرائط LED. تمت إضافة تثبيت 6 و 7 و 8 بايتات لأمر التحكم الذي يحتوي على السطوع على القنوات الثلاث R و G و B.byte ledLastState[] = {127, 127, 127};
تحتوي على قيمة اللون الأخيرة المحددة لشريط LED. يعد ذلك ضروريًا حتى تتمكن من تشغيل الضوء وإيقافه ، مع الحفاظ على قيمة اللون المحددة. إذا لم يتم ذلك ، فبعد إيقاف تشغيله ثم تشغيله ، سيتم إعادة تعيين اللون إلى اللون الأبيض ، وهو أمر غير مريح للغاية.وللعمل مع شريط LED ، حدد القناة الثالثةbyte const NOO_CHANNEL_3 = 2;
يمكنك اختيار أي من القنوات الـ 32 التي تعمل بها وحدة nooLite MT1132.الآن لدينا الوظيفة الأساسية التي تتحكم في تشغيل وحدة تحكم الشريط nooLite SD111-180 LED ، وبالتالي ، شريط LED نفسه. والآن يمكننا البدء في كتابة وظائف الغلاف التي تسهل علينا كتابة التعليمات البرمجية للتحكم في لون توهج الشريط.التفاف قاعدةvoid nooLed (byte ch, byte r, byte g, byte b) {
nooSendCommandLed(ch, 6, r, g, b, 3);
}
ما عليك سوى الإشارة إلى القناة وألوان التوهج. تحت تصرفنا 16 مليون ظلال. بعد ذلك ، نكتب دوال التفاف للألوان الأساسية (يمكنك إضافة مثل هذه الوظائف للألوان المفضلة لديك).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);}
ما عليك سوى الإشارة إلى القناة وشدة التوهج في النطاق من 0 إلى 255. وعدد قليل من الوظائف "المفاهيمية". كثافة الأبيض والأسود والرمادي.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);}
والوظيفة الأخيرة التي سنضيفها إلى جوهر nooLite في نظام Arduino Mega Server هي وظيفة استعادة اللون الأخير من توهج الشريط (وحدات nooLite نفسها لا تتذكر هذه القيمة). يتم استخدام هذه الوظيفة لتشغيل الشريط (بعد إيقاف تشغيله ، والذي يعيد تعيين اللون إلى الأبيض).void nooSetLedLastState(byte ch) {
nooSendCommandLed(ch, 6, ledLastState[0], ledLastState[1], ledLastState[2], 3);
}
هنا هو الرمز الكامل لنواة إدارة nooLite الجديدة.كود نواة كامل
#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
هذا كل شيء ، مع هذا ، مع وصف إضافات kernel ، ننتهي وننتقل إلى واجهة إدارة ألوان شريط AMS LED.واجهة إدارة قطاع الصمام
في المقالات السابقة ، ستتذكر واجهة التحكم بالأداة nooLite لنظام Arduino Mega Server. لن نكون معقدين بشكل خاص وسنضيف قسمًا آخر إلى الأقسام الثلاثة الحالية (قسمان للتحكم في الأجهزة وقسم واحد لـ "ربط" / "فك" الوحدات).
يمكن رؤية لقطات شاشة لأقسام أخرى مع شرح مفصل في مقالات سابقة حول تكامل AMS مع نظام nooLite. القسم الجديد يجعل من الممكن تشغيل وإيقاف شريط LED واختيار لون التوهج من عدة خيارات محددة مسبقًا.هذا مجرد مثال للتكامل ويمكنك إنشاء أي واجهة أخرى بناءً على هذا المثال. يمكنك تحديد خيارات الألوان أو تغيير الألوان بسلاسة أو تقديم سيناريوهات لتشغيل وإيقاف وتغيير لون الإضاءة الخلفية وما إلى ذلك.المطبخ المنزلي
تعد واجهة التحكم جزءًا فقط من الميزات التي يوفرها خادم Arduino Mega Server مع نواة التحكم المدمجة في أداة nooLite. وهذا ، إذا جاز التعبير ، هو الجزء السطحي من جبل الجليد. والجزء تحت الماء هو القدرة على استخدام وظائف الغلاف في كود النظام نفسه. يمكنك بسهولة ، حرفيا في سطر واحد من التعليمات البرمجية ، التحكم في توهج الشريط واستخدامه للإشارة إلى أي معلمات للنظام الداخلي (درجة الحرارة ، ووظائف الأمان ، وتشغيل الأجهزة ، وما إلى ذلك) والمعلمات الخارجية التي تأتي عبر الشبكة في شكل أوامر من أجهزة أخرى من المنزل الذكي .وهنا نذهب إلى الأكثر إثارة للاهتمام.البلورة السحرية
الآن لنتحدث عن "البلورة السحرية" نفسها. ما الذي تتحدث عنه؟ تخيل أي بيئة اصطناعية لشخص - داخل شقة أو مكتب ، وقاعة لعقد أي أحداث ، والبيئة الحضرية لمدننا (محطات ، أعمدة ، أحجار رصيف ، وما إلى ذلك) ، إلخ. لذا ، فإن الفكرة هي على المستوى الحالي لتطوير التكنولوجيا ، يمكن جعل أي موضوع "مؤشرا" على أي أحداث ومعلمات. يمكنك الذهاب إلى أبعد من ذلك وجعل أي موضوع تفاعليًا أو "مفعمًا بالحيوية" ، كما يمكنك تجهيز أي موضوع بصوت مميز ، وما إلى ذلك (مرحبًا ، أليس!) ، ولكن هذا موضوع لمقال آخر ، سنتحدث عن هذا في وقت آخر.
خذ على سبيل المثال غرفتك. على الرف ، بجوار التلفزيون ، أو ببساطة في منتصف "فوضى إبداعية" على الطاولة ، قد يكون هناك جسم صغير ، على سبيل المثال ، "كرة سحرية" ، والتي تغير ، حسب أي معلمات أو أحداث ، لونها أو ظلها أو سطوعها. لا يزعج أي شخص ولا يجذب الانتباه ، ولا يصدر أي ضجيج ، ولكن عليك فقط أن تلقي نظرة سريعة عليه ويتضح لك درجة حرارة الشارع ، سواء تلقيت بريدًا إلكترونيًا عبر البريد الإلكتروني ، أو كمية البيرة المتبقية في الثلاجة ، هل حان الوقت لإطعام الأسماك أو تناول أقراص التصلب التي يصفها لك الطبيب.
يمكن الإشارة إلى الأحداث المهمة بشكل خاص "البلورة السحرية" بالوميض أو حتى الصوت. وقمت بتعيين جميع المعلمات لهذا النظام بنفسك ، اعتمادًا على احتياجاتك وخيالك: لون وشدة التوهج ، والأحداث والمعلمات التي تتفاعل معها "البلورة السحرية" ، وما إلى ذلك. يمكن أن يكون هناك العديد من هذه "البلورات" ويمكن أن تكون أي نوع ، ليس بالضرورة على شكل كرة.الآن ، من الأشياء الصغيرة و "غير الواضحة" ، دعنا ننتقل إلى الأشكال المتوسطة. يمكن أن تكون إضاءة أرضية أو سقف ، جدران مضيئة (أجزاء من الجدران) أو منافذ ، إلخ. العناصر الداخلية. على سبيل المثال ، يمكن أن تعمل الإضاءة الخلفية كساعة ملونة ، عندما يتغير الضوء في الليل اعتمادًا على الوقت ، وفي الصباح يصبح أكثر إشراقًا بشكل تدريجي ويعمل كمنبه "طبيعي".
وأخيرًا ، هذا مخزن لا ينضب للأفكار لمختلف العروض وتصميم الأحداث الجماعية ، مثل الحفلات ، وأحداث الشركات ، وما إلى ذلك تجمعات الأشخاص ، حيث تتحول بلورة سحرية صغيرة إلى مكعبات وكرات بطول 2 متر وتغير لونها اعتمادًا على ، على سبيل المثال ، نتائج التصويت لصالح شيء ما أو ضده.
الخلاصة
وكل ما تحتاجه لإدراك كل هذه الأفكار هو خادم Arduino Mega Server ، ووحدة تحكم قطاع LED اللاسلكية nooLite SD111-180 وقليل من الخيال. ستظهر جميع الابتكارات الموضحة في هذه المقالة في الإصدار 0.15 القادم من نظام AMS ، ويمكن لأكثر صبر منك أخذ كود وحدة نواة nooLite من هذه المقالة والبدء في العمل عجائب الآن.المقالات السابقة:معدات لاسلكية nooLite والمنزل الذكي (الجزء 1).معدات Arduino nooLite اللاسلكية والمنزل الذكي (الجزء 2).المعدات اللاسلكية Arduino Mega Server nooLite والمنزل الذكي (الجزء 3).العرض الترويجي لمحطة Arduino Mega Server على Youtube ، مما يدل على العمل مع نظام الترويجي Arduino Mega Server الحقيقي