الجمعة، 6 يوليو 2018

كيفية التحكم في مكيف الهواء في المنزل مع Arduino ، حتى عن بعد

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

المتطلبات

  2  Arduino Mega Arduino Uno
جهاز استقبال الأشعة تحت الحمراء TSOP1738
 دايود ضوئي
 330 أوم المقاوم
 بعض الكابلات المرنة

الخطوة 1: كيف يعمل النظام؟

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


الخطوة 2: كيفية إعداد البيانات المختلفة


كما ذكر في الصفوف السابقة ، يجب عليك الحصول على ترميزات جهاز التحكم عن بعد الخاص بنا لإعادة إرسالها إلى Arduino. للقيام بذلك ، سنستخدم مكتبة Arduino iRemote ، ولا سيما هذا الكود:

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
//  decode_results *results = (decode_results *)v
void dump(decode_results *results) {
  int count = results->rawlen;
  if (results->decode_type == UNKNOWN) {
    Serial.print("Unknown encoding: ");
  }
    else if (results->decode_type == NEC) {
    Serial.print("Decoded NEC: ");
  }
  else if (results->decode_type == SONY) {
    Serial.print("Decoded SONY: ");
  }
  else if (results->decode_type == RC5) {
    Serial.print("Decoded RC5: ");
  }
  else if (results->decode_type == RC6) {
    Serial.print("Decoded RC6: ");
  }
  else if (results->decode_type == SAMSUNG) {
    Serial.print("Decoded SAMSUNG: ");
  }
  else if (results->decode_type == JVC) {
    Serial.print("Decoded JVC: ");
  }
  else if (results->decode_type == PANASONIC) {
    Serial.print("Decoded Panasonic: ");
  }
  Serial.print(results->value, HEX);
  Serial.print("(");
  Serial.print(results->bits, DEC);
  Serial.println(" bits)");
  Serial.print("#define Something_DEC ");
  Serial.println(results->value, DEC);
  Serial.print("#define Something_HEX ");
  Serial.println(results->value, HEX);
  Serial.print("Raw (");
  Serial.print(count, DEC);
  Serial.print("): ");
  for (int i = 0; i < count; i++) {
    if ((i % 2) == 1) {
      Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
    }
    else {
      Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
    }
    Serial.print(" ");
  }
  Serial.println("");
}

void loop() {
  if (irrecv.decode(&results)) {
    dump(&results);
    irrecv.resume(); // Receive the next value
  }
}
بعد تحميل الرمز على Arduino ، يجب أن نضغط على الأزرار الموجودة على جهاز التحكم عن بعد وننسخ في مكان ما النتائج التي يظهرها المسلسل.
في حالتي ، حصلت على التسلسل التالي من الترميزات:
Accensione 20 C° Caldo
Raw (150): -5320 3000 -3000 3000 -4400 550 -1600 600 -550 550 -1650 550 -550 550 -550 550 -1650 550 -550 550 -1650 500 -550 550 -1650 550 -550 550 -500 600 -500 600 -550 550 -550 550 -1650 500 -550 550 -600 500 -1700 500 -550 550 -550 550 -550 550 -600 500 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -1650 500 -1650 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -500 550 -550 550 -1700 500 -1650 550 -550 550 -500 600 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 500 -1700 500 -550 550 -550 550 -550 550 -550 550 -550 550 -600 500 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -500 550 -1700 500 -550 550 -550 550 -550 550 -1650 550

Spegnimento
Raw (150): -3276 3100 -2900 2950 -4400 700 -1500 700 -400 700 -1500 700 -400 650 -450 550 -1650 550 -550 650 -1500 600 -500 600 -1600 600 -500 600 -500 600 -450 650 -450 600 -550 550 -550 550 -550 550 -600 500 -1600 600 -500 600 -500 600 -550 550 -500 600 -500 600 -550 550 -550 550 -1600 600 -500 600 -500 600 -500 550 -1650 550 -1600 600 -500 600 -500 600 -550 550 -550 550 -1600 600 -1600 550 -550 550 -550 550 -1650 550 -1600 600 -550 550 -500 600 -500 600 -550 550 -550 550 -500 600 -500 600 -1600 600 -1600 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -500 600 -550 550 -550 550 -500 600 -500 600 -500 600 -1600 600 -500 600 -1600 550 -550 550 -1600 600 -550 550 -550 550

Accensione 23 C° Freddo 2 FAN
Raw (150): -16044 3050 -3000 3000 -4400 550 -1600 600 -550 550 -1650 550 -550 550 -550 550 -1650 550 -500 600 -1600 550 -550 550 -1650 550 -1650 550 -1650 550 -550 550 -550 550 -500 600 -1600 550 -550 550 -550 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -500 600 -1650 500 -550 550 -600 500 -1700 500 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -500 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -500 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1600 600 -550 550

Accensione 20 C° Caldo e Swing
Raw (150): 18566 3000 -3000 3000 -4400 550 -1650 550 -500 600 -1600 600 -500 600 -500 600 -1600 550 -550 550 -1650 550 -500 600 -1600 600 -550 550 -550 550 -550 550 -1600 600 -500 600 -500 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -550 550 -1600 550 -550 550 -600 500 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -550 550 -1600 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -550 550 -550 550 -550 550 -550 500 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -1650 500 -1650 550 -550 550 -1700 500

Accensione 23 C° Freddo 2 FAN e Swing
Raw (150): 2084 2950 -3050 2950 -4400 550 -1600 600 -550 550 -1650 550 -550 550 -550 550 -1600 600 -500 600 -1600 550 -500 600 -1650 550 -1650 550 -1600 600 -500 600 -1600 600 -500 600 -500 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -500 600 -550 550 -500 600 -1650 550 -550 550 -1600 600 -500 600 -1600 550 -1600 600 -500 600 -500 600 -550 550 -500 600 -1650 550 -1600 600 -500 600 -500 550 -1650 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -500 600 -500 600 -500 600 -500 600 -500 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -550 550 -1650 550 -1650 550 -1600 600 -1600 550 -550 600 -500 550 -550 550 -550 550

الخطوة 3: إرسال أمر الأشعة تحت الحمراء إلى A / C



باستخدام التعليمة البرمجية التالية ، ستتمكن من إرسال أمر IR إلى A / C عبر Arduino:


#include "IRremote.h"

IRsend irsend;

void setup()
{
  Serial.begin(9600);
}

int khz=38; //NB Change this default value as neccessary to the correct modulation frequency
// ON and 2O C° with 1 FAN heat
unsigned heat[] = {3000,3000,3000,4400,550,1600,600,550,550,1650,550,550,550,550,550,1650,550,550,550,1650,500,550,550,1650,550,550,550,500,600,500,600,550,550,550,550,1650,500,550,550,600,500,1700,500,550,550,550,550,550,550,600,500,550,550,550,550,550,550,550,550,1650,550,1650,550,1650,500,1650,550,1650,550,550,550,550,550,550,550,550,550,1650,550,1650,550,500,550,550,550,1700,500,1650,550,550,550,500,600,550,550,550,550,550,550,550,550,550,550,1650,500,1700,500,550,550,550,550,550,550,550,550,550,550,600,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,500,550,1700,500,550,550,550,550,550,550,1650,550};
// OFF the A/C
unsigned OFF[] = {3100,2900,2950,4400,700,1500,700,400,700,1500,700,400,650,450,550,1650,550,550,650,1500,600,500,600,1600,600,500,600,500,600,450,650,450,600,550,550,550,550,550,550,600,500,1600,600,500,600,500,600,550,550,500,600,500,600,550,550,550,550,1600,600,500,600,500,600,500,550,1650,550,1600,600,500,600,500,600,550,550,550,550,1600,600,1600,550,550,550,550,550,1650,550,1600,600,550,550,500,600,500,600,550,550,550,550,500,600,500,600,1600,600,1600,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,500,600,550,550,550,550,500,600,500,600,500,600,1600,600,500,600,1600,550,550,550,1600,600,550,550,550,550};
// ON and 23° with 2 FAN cold
unsigned cold[] = {3050,3000,3000,4400,550,1600,600,550,550,1650,550,550,550,550,550,1650,550,500,600,1600,550,550,550,1650,550,1650,550,1650,550,550,550,550,550,500,600,1600,550,550,550,550,550,1650,550,550,550,550,550,550,550,550,550,550,550,550,550,500,600,1650,500,550,550,600,500,1700,500,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,1650,550,550,550,500,550,1650,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,550,550,550,550,550,550,550,550,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,1600,600,550,550};
// ON and 20 C° with 1 FAN heat and SWING
unsigned heat_with_swing[] = {3000,3000,3000,4400,550,1650,550,500,600,1600,600,500,600,500,600,1600,550,550,550,1650,550,500,600,1600,600,550,550,550,550,550,550,1600,600,500,600,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,550,550,1600,550,550,550,600,500,550,550,550,550,550,550,550,550,550,550,1650,550,1650,550,550,550,550,550,1600,550,1650,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,1650,550,550,550,550,550,550,550,550,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,1650,550,1650,500,1650,550,550,550,1700,500};
// ON and 23° with 2 FAN cold and SWING
unsigned cold_with_sqwing[] = {2950,3050,2950,4400,550,1600,600,550,550,1650,550,550,550,550,550,1600,600,500,600,1600,550,500,600,1650,550,1650,550,1600,600,500,600,1600,600,500,600,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,500,600,550,550,500,600,1650,550,550,550,1600,600,500,600,1600,550,1600,600,500,600,500,600,550,550,500,600,1650,550,1600,600,500,600,500,550,1650,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,500,600,500,600,500,600,500,600,500,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,1650,550,1650,550,1600,600,1600,550,550,600,500,550,550,550,550,550};

void loop() {

irsend.sendRaw(heat, sizeof(heat)/sizeof(int), khz);
delay(10000);
irsend.sendRaw(OFF, sizeof(OFF)/sizeof(int),khz);
delay(10000);
}

إذا خرجنا لتشغيل مكيف الهواء في المنزل ، فنحن على الطريق الصحيح لإكمال المشروع!
كما ذكر سابقا ، من الضروري استخدام اثنين من اردوينو ، واحد يدير خادم الويب ، والآخر الذي يعالج الاتصالات مع مكيف الهواء.
لتوصيل اثنين من اردوينو بطريقة صحيحة ، ينبغي الحرص على الصورة أدناه.
من الضروري على الجهاز المتصل بـ Ethernet Shield تحميل البرنامج الذي يحمل اسم AC_Webpage_Controller.ino ، بينما يقوم nell'Arduino بإرسال أوامر الأشعة تحت الحمراء ، فيجب تحميل البرنامج الذي يحمل اسم AC_Sender_Code.ino من هنا 


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

الخطوة 4: إعادة توجيه الميناء ، لوضع Arduino و A / C على WEB
تشغيل إعادة توجيه المنفذ ، يختلف من موجه إلى موجه ، ولكن بشكل عام ، يمكنك المتابعة كما يلي:

• تحديد عنوان IP لخادم الويب اردوينو
• تحديد عنوان IP للبوابة
• افتح المتصفح واكتب عنوان IP الخاص بالموجّه وأدخل بيانات الاعتماد
• اﻓﺗﺢ ﻗﺳم إﻋﺎدة ﺗوﺟﯾﮫ اﻟﻣﻧﻔذ وأدﺧل اﻟﺑﯾﺎﻧﺎت ﻣﺛل ﻣﻧﻔذ IP ﮐﻣﺎ ھو Arduino و 80.

الآن يمكننا أيضًا الوصول إلى خارج شبكتنا المحلية ، ببساطة عن طريق فتح صفحة ويب مع عنوان IP العام لاتصال ADSL (لاسترداد هذه القيمة ، اكتب ببساطة على Google.com "my ip").

الآن يمكننا أخيرًا اختبار مشروعنا!

الخطوة 5: تنزيل تطبيق Android!





إذا كنت لا ترغب في استخدام صفحة الويب ، فيمكنك تنزيل التطبيق على Android!


يمكنك القيام بذلك عن طريق كتابة RemoteAC من متجر Play ، أو استخدام هذا الرابط:  هنــــــــــــــــــا
تذكر أنه بمجرد فتح التطبيق تحتاج إلى ضبط IP من اردوينو في تفضيلات!




ليست هناك تعليقات:

إرسال تعليق