معدات لاسلكية NooLite والمنزل الذكي (الجزء 1). اردوينو

nooLite

مرحبًا أعزائي قراء Geektimes! هذه المرة ، أود أن أوجه انتباهكم إلى سلسلة من المقالات حول دمج معدات nooLite اللاسلكية في أنظمة التشغيل الآلي للمنزل. ستكون هذه الدورة مشابهة لسلسلة المقالات المنشورة بالفعل ( واحد ، اثنان ، ثلاثة ) حول دمج وحدات Laurent في أنظمة Smart Home ، فقط ستتحدث عن نظام nooLite وبعد قراءة هذه الدورة ، لن يكون لديك أي أسئلة حول إدارة أجهزة nooLite من Smart في المنزل.

حول سلسلة المقالات


تنقسم الدورة إلى ثلاثة أجزاء. في الجزء الأول ، ستتعرف على مبادئ تشغيل المعدات اللاسلكية nooLite وكيفية إدارتها من مشروعات Arduino. في الثاني جزء سيتم شرحه بالتفصيل عن التكامل بين وحدة التحكم MT1132 في اردوينو ميجا Server و فتحة في هذا الصدد الفرص للسيطرة على المنزل الذكي. و الثالثة سوف سلسلة من المقالات poveschena موضوع مثير للاهتمام جدا - مفهوم إنشاء أجهزة "100 1" على أساس اردوينو ميجا خادم. سيتم فحص مثال لإنشاء محطة لحام لاسلكية على AMS بالتفصيل من أي شيء حرفيًا - استنادًا إلى جهاز لاسلكي واحد فقط nooLite. سيكون هناك أيضًا الجزء الرابع الذي ستتعلم منه كيفية إنشاء بلورة سحرية.

بالمناسبة ، محطة اللحام ، التي سيتم مناقشتها في المقالة الثالثة ، موجودة بالفعل في أحدث مجموعة خادم Arduino Mega تحت الرقم 0.14. ولا يمكن للقراء الأكثر فضولًا انتظار المقالة الثالثة ، ولكن تنزيل مجموعة التوزيع على الفور ومعرفة كيفية عمل كل شيء بمفردهم.

محطة لحام

والشيء العظيم هو أنه يمكن أن يكون هناك المئات من هذه الأجهزة في AMS ، وفي نفس الوقت. على سبيل المثال ، محطة لحام ، أو محطة أرصاد جوية ، أو وحدة أمان ، أو وحدة تحكم بالاحتباس الحراري ، وما إلى ذلك. وكل هذا يمكن أن يعمل في وقت واحد أو "يبدأ" عن طريق تحميل صفحة ويب أو حتى موقع كامل مخصص لجهاز معين.

ولكن دعونا لا نتقدم على أنفسنا ، دعنا نترك الأكثر إثارة للاهتمام في النهاية ، ولكن الآن سنقوم بالإعداد النظري اللازم. أعدك بأن كل شيء سيتم ذكره بأبسط الطرق وأكثرها وضوحا. لذلك دعونا نبدأ.

معدات NooLite


تعد معدات NooLite نظامًا معروفًا وشائعًا بالفعل وهناك الكثير من المعلومات حوله على الإنترنت. سأحاول تلخيص النقاط الرئيسية هنا.

المفهوم بسيط للغاية - هناك وحدات طاقة للتحكم في الضوء والأحمال المختلفة ، ولوحات تحكم ترسل أوامر إلى وحدات الطاقة هذه. وكل هذا يعمل بشكل طبيعي دون مشاركة الاتصالات السلكية. في الواقع كل شيء. يكمن جمال النظام في أن جميع المكونات مدروسة ومُصنعة جيدًا وتفعل ما تقوله بالضبط - فهي تتحكم بشكل موثوق في المعدات المتصلة.

هناك أيضًا مستشعرات لاسلكية ، والتحكم في الجهاز من هاتف ذكي وأكثر من ذلك بكثير ، ولكن من المستحيل تغطية كل شيء في مقال واحد ، وهنا سنركز فقط على دمج nooLite مع منصة DIY الشهيرة - Arduino.

من بين مجموعة واسعة من معدات nooLite ، سنكون مهتمين بوحدة التحكم MT1132 لأنها مصممة للاتصال بأجهزة Arduino ذات اللوحة الواحدة مثل Raspberry Pi. ويعمل على واجهة تسلسلية بسيطة. بالنظر إلى المستقبل قليلاً ، سأقول إنني أحببت الوحدة بسبب بساطتها وإمكانية التنبؤ بها وتشغيلها الموثوق به. وقد تمكنت من تقدير هذه الصفات بعد شهر من الصراع العقيم مع وحدة الشبكة على شريحة W5500 ، التي لم ترغب في العمل بشكل طبيعي.

وحدة MT1132

وقد أحببت بشكل خاص حقيقة أنه (بصرف النظر عن مصدر الطاقة) ، فإن الوحدة متصلة بـ Arduino بسلك واحد (!) واحد فقط (RX). يمكن حذف (TX) الثاني تمامًا. الوحدة "أحادية الاتجاه" ، أي أنها مصممة فقط لإرسال إشارات التحكم. تتضمن خطط شركة Nootehnika تطوير وإصدار نسخة "ثنائية الاتجاه" من الوحدة.

SU111-300

العنصر الثاني الذي نحتاجه من معدات nooLite هو وحدة التحكم في الطاقة ، على سبيل المثال ، SU111-300. اتصال الوحدة أساسي ويمكن رؤيته في الرسم التوضيحي. يتم توصيل سلكين بشبكة 220 فولت ، والآخران بالحمل. الشيء الوحيد الذي أود الانتباه إليه هو أن الوحدات مزودة بموصل يحجب وضع التعتيم ، وإذا كنت تريد ضبط الطاقة ، فأنت بحاجة إلى قطع هذا الطائر (وتذكر عزل الأسلاك العارية الناتجة).

PU311-2

لن أتطرق إلى أجهزة التحكم عن بعد لأن هذا عنصر تحكم "يدوي" ، ونحن ، فيما يتعلق بالأتمتة ، أكثر اهتمامًا بالأتمتة. لا يسعني إلا أن أقول أن التجارب أجريت باستخدام جهاز التحكم عن بعد PU311-2 ، الذي تم إجراؤه على شكل مفتاح حائط وأظهر نفسه بأفضل طريقة ، أي أنه تم تشغيله وإيقافه بوضوح وبدون أي أعطال. ما هو في الواقع معدات جيدة ومختلفة عن السيئة - أنت فقط لا تلاحظ جيدًا.

مفهوم العمل. ملزم وفك الارتباط


قبل أن تتمكن من تشغيل وإيقاف الأجهزة الكهربائية باستخدام نظام nooLite ، تحتاج إلى "ربط" وحدات التحكم بوحدات الطاقة المقابلة. يتم ذلك باستخدام ما يسمى الإجراء. "الربط" و "فك الارتباط" الموصوف بالتفصيل في وثائق nooLite. باختصار ، كل شيء يتعلق بالضغط على زوج من الأزرار على الكتل المرتبطة ولا يمثل أي صعوبات.

في حالة استخدام وحدة التحكم MT1132 بدلاً من وحدة التحكم عن بعد ، يحدث الإجراء بطريقة مختلفة قليلاً. وهي: بما أن الوحدة لا تحتوي على أزرار ، فأنت بحاجة إلى إنشاء أمر تحكم وإرساله برمجيًا على القناة المطلوبة ، ثم الضغط على الزر الموجود في وحدة الطاقة ، لتأكيد "الربط" أو "untying".

القنوات هي "خطوط تحكم" وهناك 32 منها في وحدة MT1132 ، كما يتضح من آخر رقمين في الاسم. هذا يعني أنه باستخدام هذه الوحدة يمكنك إدارة 32 مجموعة منفصلة من المعدات ، وهو ما يكفي لأكثر من شقة أو منزل صغير. إذا كان لديك منزل كبير ، فيمكن أن تعمل الوحدات بالاقتران والقياس إلى أي عدد من القنوات.

وصف البروتوكول


هناك وثيقة رائعة على موقع شركة Nootehnika تصف بشكل شامل وتفصيلي اتصال الوحدة وبروتوكول التحكم الخاص بها. لن أزعج المقالة بالتفاصيل التقنية غير الضرورية ، يمكن لأي شخص قراءة هذا المستند ، سأصف فقط النقاط الرئيسية.

للتحكم في الوحدة ، نحتاج إلى تشكيل أمر تحكم يتكون من 12 بايت. تم توضيح مبادئ تشكيل هذا الفريق في الوثيقة أعلاه. وكما سترى أدناه ، فإن جميع هذه القواعد مبرمجة بالفعل في وظائف التحكم ونحتاج فقط إلى استخدامها لإصدار أوامر للوحدة النمطية.

فرق الاختبار


يحتوي nooLite على نظام أوامر مطور إلى حد ما ، والذي سنختار منه أبسطها وأكثرها شيوعًا ونوضح النظام باستخدام مثالهم.

  • التقط
  • فك
  • الدمج
  • متوقف
  • إعداد الطاقة (يعتم)

من خلال فهم كيفية عمل الفرق الأساسية ، يمكنك بسهولة استخدام أي فريق آخر.

توصيل وحدة MT1132


كما قلت بالفعل ، فإن وحدة MT1132 متصلة حرفياً بسلك واحد (باستثناء الطاقة). يمكن تشغيل الوحدة بجهد 5 فولت وبجهد 3.3 فولت. لذلك ، لم تكن هناك مشاكل في الاتصال بـ Arduino Mega بجهد 5 فولت أو Arduino Due بجهد 3.3 فولت. النقطة الوحيدة هي أنه مع انخفاض الطاقة ، ينخفض ​​نطاق التشغيل الموثوق للنظام. ويجب أن يؤخذ هذا في الاعتبار إذا كنت ترغب في تشغيل الوحدة من جهد 3.3 فولت.

اردوينو

تحتوي الوحدة على دبابيس RX و TX لاستقبال وإرسال الإشارات عبر الواجهة التسلسلية. يعتبر توصيل RX أمرًا بالغ الأهمية لتشغيل الوحدة ، لتلقي أوامر التحكم من وحدة التحكم. وفقًا لذلك ، يتم توصيل دبوس RX الموجود على جانب الوحدة بطرف TX (18) على جانب Arduino. هذا الدبوس صالح لكل من Arduino Mega و Arduino Due.

جزء البرنامج


الآن دعونا نكتشف كيفية إدارة كل هذا الاقتصاد من الرسومات على Arduino. أولاً ، قم بتهيئة Serial1 ، الذي وصلنا به وحدة MT1132 (يتم ذلك على التردد القياسي 9600):

Serial1.begin(9600);

الآن رمز وظيفة التحكم الرئيسية:

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]);
  }
}

من حيث المبدأ ، لا نحتاج حتى إلى معرفة كيف يعمل ، يمكننا استخدامه في وضع "الصندوق الأسود" أو نوع من واجهات برمجة التطبيقات ، مع وجود واجهة معينة بارزة. نحتاج فقط إلى معرفة كيفية استخدام هذه الواجهة.

كما ترى ، هناك أربعة معلمات فقط - القناة والأمر والبيانات والتنسيق. يمكنك قراءة أي مبدأ يمكن قراءة الطلبات إلى واجهة برمجة التطبيقات هذه في المستند المذكور أعلاه ، ولكننا سنبسط مهمتنا أكثر ونلف هذه الواجهة في أوامر بسيطة للتحكم في جهاز nooLite.

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 nooValue (byte ch, byte v) {nooSendCommand(ch,  6, v, 1);}

الفريق المعقد نسبيًا هو الأخير فقط ، بالإضافة إلى القناة ، يتم تعيين مستوى الطاقة أيضًا. هناك أيضًا فرق في الرسم التخطيطي لن نتطرق إليها الآن ، ولكن يتم تشكيلها بنفس السهولة.

في الواقع ... هذا كل شيء! ليس هناك مكان أسهل. في التعليمات البرمجية ، تبدو أوامر التحكم كما يلي:

nooBind(ch);
nooUnbind(ch);
nooOn(ch);
nooOff(ch);
nooValue(ch, v);

الآن دعونا ممارسة ممارسة إدارة وحدة الطاقة nooLite. لذا ، نربط كتلة الطاقة على القناة الصفرية:

nooBind(0);

يبدأ مؤشر LED الموجود بوحدة الطاقة في الوميض. اضغط على الزر الموجود على الكتلة - توقف LED عن الوميض - تم توصيل كتلة الطاقة. بدلاً من القناة الصفرية ، يمكنك استخدام أي قناة أخرى. ويمكنك بسهولة إنشاء رقم القناة في رمز الرسم وفقًا لاحتياجاتك.

نقوم بتشغيل المصباح (إذا ربطنا المصباح على القناة صفر ، فنحن بحاجة إلى إرسال أوامر له على هذه القناة):

nooOn(0);

اضبط الطاقة (سطوع المصباح):

nooValue(0, 100);

هنا تحتاج إلى قول القليل عن قواعد تشكيل فريق يحدد مستوى القوة. لا تتغير قيمة الطاقة من 0 إلى 255 ، كما قد يعتقد المرء ، ولكن من 35 إلى 155. إذا كانت القيمة أكثر من 155 ، فستكون الطاقة كحد أقصى ، إذا كانت 0 ، فسيكون هذا معادلاً لأمر إيقاف التشغيل.

هنا (فقط في حالة) صيغة تترجم القيم "القياسية" من 0 إلى 100 إلى تنسيق تفهمه وحدة nooLite:

v = x * 1.2 + 34;

باستخدام هذه الصيغة ، يمكنك ضبط سطوع المصباح في النسبة المئوية المعتادة من الطاقة. وبالطبع ، إذا كنت بحاجة إلى ضبط الطاقة بشكل غير خطي ، فيمكنك إنشاء متغير v وفقًا لأي قانون أو حتى اختيار قيم ثابتة فقط. سيتم مناقشة هذا في الجزء الثالث من الدورة ، عندما نقوم بتعديل درجة حرارة التسخين لمحطة اللحام.

قم بإيقاف تشغيل الجهاز:

nooOff(0);

فك:

nooUnbind(0);

يبدأ مؤشر LED الموجود بوحدة الطاقة في الوميض. نؤكد عملية الفصل بالضغط على الزر الموجود في وحدة الطاقة. هذا كل شيء ، الآن توقفت وحدة الطاقة عن الاستجابة لأوامرنا ويمكننا "التقاطها" مرة أخرى على أي من القنوات الـ 32 لوحدة nooLite MT1132.

هنا الرسم الكامل.

كود رسم كامل
byte const PIN_TX = 18; // TX PIN (to RX noolite)
byte const PIN_RX = 19; // RX PIN (to TX noolite)

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]);
}
}

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 setup() {
Serial1.begin(9600);

/*
loop(), */

//nooBind(0);

//nooOn(0);
//nooOff(0);
//nooValue(0, 100);

//nooUnbind(0);
}

void loop(){

}

المجموع الفرعي


كما ترى ، لا يوجد شيء معقد في التحكم في وحدات الطاقة nooLite باستخدام Arduino ، على العكس من ذلك ، فإن التحكم بسيط بشكل غير عادي: الوحدة متصلة بسلك واحد ، والأوامر هي تقريبًا لغة بشرية طبيعية - "تشغيل القناة 0" ، "إيقاف تشغيل القناة 1" ، "لتعيين قوة 50 ٪ على القناة 3" في أي مكان أبسط.

مكافأة لأولئك الذين قرأوا حتى النهاية


في اليوم الآخر ، تم إصدار إصدار جديد من Arduino Mega Server برقم 0.14 ، حيث تم التغلب على جميع أمراض الطفولة للتكنولوجيا والتي تعمل بسرعة وثبات. ونفس الإصدار يحتوي على نواة متكاملة للتحكم في أداة nooLite وكيف يعمل كل شيء ، ستتعلم من المقالة التالية في سلسلة "المعدات اللاسلكية nooLite والمنزل الذكي (الجزء 2). خادم اردوينو ميجا ".

والثاني ، الثالث و الرابع جزء من دورة.

Source: https://habr.com/ru/post/ar389067/


All Articles