الثلاثاء، 6 نوفمبر 2018

نشر بيانات اردوينو الخاصة بك إلى السحابة - Publish Your Arduino Data to the Cloud

Publish Your Arduino Data to the Cloud

المكونات

اردوينو نانو R3
DHT11 مستشعر درجة الحرارة والرطوبة
Everything ESP ESP8266 ESP-01
المقاوم 10K أوم
المقاوم 2.21k أوم

حول هذا المشروع
نظرة عامة
الهدف من هذا المشروع هو أن توضح لك كيف يمكنك الوصول عبر الإنترنت إلى ما تتم قراءته في أحد مسامير إدخال Arduino الخاصة بك.

يتم ذلك دون أي خادم ويب على Arduino الخاص بك ولكن باستخدام خدمة عبر الإنترنت.

في مشروعنا نحن نستخدم نموذج اردوينو نانو. لا توجد مشكلة في استخدام نموذج مجلس آخر - نانو هو واحد مع الموارد ليه - ولكن عليك أن تولي اهتماما بشأن التي هي دبابيس المناسبة لحالتك.

للوصول إلى شبكة الإنترنت سوف تستخدم وحدة ESP8266 WIFI
ما سنقرأه هو درجة حرارة البيئة. للحصول على التدابير التي اخترناها جهاز استشعار DHT11 نموذجي.


وأخيرًا ، للتخلص من جانب الخادم ، سنستخدم الخدمة عبر الإنترنت
هنـــــــــــــــــــــــــــــــــــــا        حيث يمكننا ربط الأجهزة والتطبيقات بحساب اجتماعي واحد.

تشغيل المكونات على
يرجى ملاحظة أن هذا هو برنامج تعليمي نموذجي وليس منتج قائم بذاته بشكل مثالي. ما أعنيه هو أنني سأستخدم مصدر جهد مثبت مختبريًا لتحقيق 3.3 فولت اللازم لـ ESP8266 ولن أقوم بنشر كل ما يلزم للحصول على هذا الجهد من 5 فولت أو بطاريات أو شبكة ... فقط لتسهيل الأمر.


... ولكن ، إذا قررت الحصول على هذه 3 ، 3V من مصدر آخر ، فيجب مراعاة ما يلي:

ESP8266 حساس جدا. سوف الفولت فوق 3.6V تقلى ذلك. هناك بعض المناقشات على الشبكة حول ما إذا كان يمكن أن تقف لمزيد من الجهد ، ولكن ذلك يعتمد على كيفية توصيل دبابيس أخرى أو أي صانع هو من. لا تأخذ المخاطر ، تذكر: أقل من 3.6V.
ما لم يقله أحد لي وربما يوفر عليك يومًا واحدًا هو أنك قد ترى الوحدة الخاصة بك تعمل بكفاءة ، مع المصابيح المتلألئة ... ولكن المشاكل المتكررة للوصول إلى الشبكة. يبدو أن تربيطا تحت الجهد الاسمي قد يفترض وجود نقص في الطاقة التي يمكن أن تؤثر على أداء الترددات اللاسلكية.
يجب أن تدرك أن ESP8266 قد تستهلك ما يصل إلى 250mA. لا تحاول أبدا أن مصدرها من دبوس "3.3V" الخاص بك نانو ، وأنها ليست قادرة على مصدر هذا التيار.
مرة أخرى ، من أجل البساطة ، لن أستخدم مصدر 5Vdc خارجي لتشغيل لوحة Nano حيث سيتم توصيله بالكمبيوتر مع منفذ USB (كما ستجد في هذا البرنامج التعليمي ، سيتم مراقبة الاتصال التسلسلي على USB لتصحيح الأخطاء) ).

... ولكن إذا قررت الحصول على 5V من مصدر آخر ، فعليك أن تأخذ بعين الاعتبار:

السماح للنانو ، وليس فقط الجهد 5V ، ولكن التيار الكافي. يجب أن يكون المصدر قادراً على توفير 1A أو أكثر.
توصيل المصدر على دبوس "فين" من نانو ، وليس في دبوس "5V". الأول هو المكان المناسب لأنه محمي من قبل جهة تنظيم داخلية (لا تخف من إعطاء 6V). والثاني هو الإخراج الذي يمكن أن يغذي مكونات أخرى (سيكون لطيفا لجهاز استشعار DHT11 لدينا).

توصيل وحدة WiFi إلى اللوحة
قبل أن نصل إلى لوحة ...

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

صناع عادة تعيينه إلى 9600 أو 115200 ، ولكن ربما معدل آخر.

قد ترغب في معرفة ذلك بعد طريقة التجربة والخطأ عند الترميز ، ومجرد محاولة معدلات الباود مختلفة ومعرفة ما إذا كان يعمل.

أو قد ترغب في توصيل جهاز الكمبيوتر الخاص بك بـ ESP8266 ، المتصل بين وحدة نمطية FTDI ، لطلب معدل الباود الفعلي باستخدام أوامر ATT. أوصي بهذه الطريقة لأنه أكثر توضيحًا بالإضافة إلى أنه يمكنك التأكد من أن الوحدة تعمل بشكل صحيح (وليس مقليًا أو تالفًا بصمت). ولتحقيق ذلك ، اتبعت هذا البرنامج التعليمي ، فهو جيد جدًا وواضح.

أوصي بتعيينه في 9600 bauds: سهل وبطيء للإلكترونيات الخاصة بك ، بسرعة كافية لصبرك. سيكون الأمر الصحيح هو AT + CIOBAUD = 9600.

الاتصال باللوحة
والآن بعد أن عرفنا معدل البث بالباود الذي لدينا على وحدة ESP8266 ، يمكننا المضي قدمًا.

لن نستخدم منفذ UR RX / TX الخاص بلوحة Nano للاتصال بـ ESP8266. هذا لأننا نريد الحصول على هذه القناة مجانًا لتصحيح الأخطاء من جهاز الكمبيوتر الخاص بنا.

ثم سنستخدم اثنين من دبابيس رقمية مختلفة أن يكون لها منفذ تسلسلي آخر ، ما يسمى "المنفذ التسلسلي للبرمجيات". دعونا اليوم D2 سيكون TX و D3 سيكون دبوس RX. لا تقلق بشأن كيفية تنفيذ هذا المنفذ الجديد ، ستجد في قسم الترميز مدى سهولة التعامل مع المكتبة.

ثم ، هذه هي الطريقة التي يجب أن يكون الاتصال بين ESP8266 واللوحة نانو.


لاحظ أنه يجب تمكين CHIN PIN على ESP8266 من خلال تعيين حالة عالية (3.3 فولت). يتم وضع المقاوم 10Kohm للحماية.

هناك مفهوم آخر يجب أخذه في الاعتبار هو أن de TX / RX مزروع بمستويات جهد مختلفة في كلا الجهازين. يعمل ESP8266 بين 0 و 3.3 فولت ، يعمل Nano بين 0 و 5 فولت. ونظرًا لأن Nano قادر على اكتشاف 3.3V كدولة عالية ، يمكنك توصيل RX على Nano مباشرةً إلى TX على ESP8266. ولكن على العكس من ذلك ينصح مقسم التوتر لحماية المدخلات RX مع الجهد المناسب 3.3V عندما عالية.

... الشيء هو أن لي والعديد من الآخرين قد فحص أنه يعمل بشكل جيد خلال أشهر دون الحاجز التوتر ، ويبدو ESP8266 المحمية بما فيه الكفاية. لكن لا تثق بي ، افعل ذلك جيداً.

ضبط جهاز استشعار درجة الحرارة
ما نراه هو أنه يحتوي على 3 دبابيس فقط. سيكون "+" هو المكان الذي سيتم فيه توفير 5 فولت ، حيث يتم توصيله بـ "5V" من لوحة Nano. "-" هي الأرضية المشتركة مع بقية المكونات. و "الخارج" ليس ناتجا تناظريا أو مقاوما كما قد يخمنه المرء ، بل هو في الواقع ناتج تسلسلي رقمي حيث أن هذا المستشعر مزود بمكونات ذكية على متنه.


لا تقلق بشأن هذا البروتوكول ، كما هو موضح في الأقسام التالية ، سنجد بسهولة مكتبة Arduino التي تسمح لك بإدارتها دون جهد. يبدو أن مواصفات هذا البروتوكول يصعب العثور عليها بسبب نقص المعلومات (باللغة الصينية فقط) فقط للحالة التي تهتم بها.

سنقرأ هذا الاتصال التسلسلي على رقم التعريف الشخصي 5 في مثالنا (نعم ، يمكن أن يكون أي دبوس رقمي آخر من اللوح الخاص بك بينما تضعه في الاعتبار عند الترميز).

لذلك ، الاتصال ببساطة كما يلي
الأداة الكاملة
يجب أن يكون كل ذلك متصلاً هكذا:


تسجيل دبوس على الخدمة عبر الإنترنت
اتبع العملية للاشتراك في circusofthings.com إذا لم يكن لديك حساب حتى الآن. انها حرة وتبحث عن اختبار.

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



ترميز وتحميل البرنامج
قبل ضبط الرمز ، سيكون عليك الحصول على بعض مكتبات Arduino:

مكتبة DHT الاستشعار ، للتواصل مع مجس. أحضره هنا.
CircusWifiLib ، لتنفيذ API للمجتمع عبر الإنترنت. أحضره هنا.
(أنت لا تحتاج إلى أي lib لـ Wifi / ESP8266 كما تتم بواسطة CircusWifiLib).

الآن يمكننا إلقاء نظرة على الكود:
#include <CircusWifiLib.h>
// ------------------------------------------------
// These are the CircusWifiLib related declarations
// ------------------------------------------------
int TXPinForWifiModule = 2; // IO port in your arduino you will use as TX for serial communication with the wifi module
int RXPinForWifiModule = 3; // IO port in your arduino you will use as RX for serial communication with the wifi module
char ssid[] = "your_ssid_here"; // your wifi network SSID
char pass[] = "your_wifi_password_here"; // your wifi network password
int wifiSerialBaudRate = 9600; // Baud rate between your arduino and your wifi module. Did you check that your module actually uses this baud rate?
int debugSerialBaudRate = 9600; // Baud rate between your arduino and your computer
char token[] = "your_token_here"; // Your API token for Circus
char analogSignalTemperatureKey[] = "944668525"; // The key of the signal you have created at circusofthings.com
SoftwareSerial ss(RXPinForWifiModule,TXPinForWifiModule);
CircusWifiLib circus(Serial,&ss,ssid,pass,DEBUG_YES,KEEP_ALIVE);
// ------------------------------------------------
// These are the Example related declarations
// ------------------------------------------------
#define DHTPIN 5 // digital for serial propietary portocol of sensor DHT11
#define DHTTYPE DHT11 // exact model of temperature sensor DHT 11 for the general library
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(debugSerialBaudRate);
ss.begin(wifiSerialBaudRate);
dht.begin();
circus.begin();
}
void loop() {
float t = dht.readTemperature();
if (isnan(t)) {
t=-1; // if so, check the connection of your DHT11 sensor
}
delay(3000);
circus.write(analogSignalTemperatureKey,t,token);
}

ضع SSID الخاص بـ WIFI بدلاً من your_wifi_SSID_here.

ضع كلمة مرور WIFI بدلاً من your_wifi_password_here.

ضع رمز حسابك بدلاً من your_user_token_here.

ضع مفتاح الإشارة التي أنشأتها بدلاً من your_signal_key_here.

سيحصل الرمز أعلاه على قيمة المستشعر كل 3 ثوانٍ وسيقوم بنشره على الإشارة المحددة بواسطة المفتاح الذي تملكه.

كما يلي


وفتح الشاشة التسلسلية من IDE (إشعار في حالتنا قمنا بتعيين 9600 baud لتصحيح)


هل تصل إلى الويب؟

إذا سار كل شيء بشكل صحيح ، فيجب أن تشاهد الإشارة  والتي توضح درجة الحرارة التي لديك بالفعل في غرفتك

الآن ، يمكنك تعديل مستوى رؤيتها في لوحة التحكم وتعيينها للجمهور.

ثم لديك الرابط لمشاركتها مع أولئك الذين ليس لديهم حساب 

يمكن الوصول إليه الآن من خلال أي جهاز أو تطبيق آخر في العالم.

يمكن لأي شخص يتابع البرنامج التعليمي التالي لدينا الحصول على البيانات من السحابة إلى Arduino الخاص بك وقراءة هذه الإشارة من لوحة اردوينو.

آمل أن تكون مثيرة للاهتمام بالنسبة لك. شكرا على انتباهك

السبت، 7 يوليو 2018

متتبع حركة الشمس عن طريق اردوينو- Dual Axis Solar Tracker Panel with Auto and Manual Mode

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

المواد المطلوبه
اردوينو اونو او اردوينو جينون
مقاومة متغيرة عدد 2
دايود ضوئي عدد 2
بوش بتن عدد 1
سيرفو موتور عدد 2
مقاومة ضوئية عدد 4
مقاومة 10 كيلو اوم عدد 5
مقاومة 221 اوم عدد 2

أردنا تنفيذ وضعين في المنتج النهائي.

الوضع اليدوي - التي تسيطر عليها اثنين من الأواني.
وضع تلقائي - يتم التحكم فيه باستخدام أربعة مستشعرات ضوئية.

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


كود البرمجة
#include <Servo.h>
//Initialize variables
int mode = 0;             
int buttonState = 0;      
int prevButtonState = 0;  
int topLeftLight = 0;     
int topRightLight = 0;
int bottomLeftLight = 0;
int bottomRightLight = 0;
int LeftLight = 0;
int RightLight = 0;
int TopLight = 0;
int BottomLight = 0;
//Declare two servos
Servo servo_9;
Servo servo_10;

void setup()
{
  pinMode(7, INPUT);    //Mode Button
  pinMode(12, OUTPUT);  //Led indicator for manual mode
  pinMode(11, OUTPUT);  //Led indicator for auto mode
  pinMode(A0, INPUT);   //Potentiometer for right-left movement
  pinMode(A1, INPUT);   //Potentiometer for up-down movement
  pinMode(A2, INPUT);   //Light sensor up - left
  pinMode(A3, INPUT);   //Light sensor up - right
  pinMode(A4, INPUT);   //Light sensor bottom - left
  pinMode(A5, INPUT);   //Light sensor bottom - right
  servo_9.attach(9);    //Servo motor right - left movement
  servo_10.attach(10);  //Servo motor up - down movement
}

void loop()
{
  buttonState = digitalRead(7);
  if (buttonState != prevButtonState) {
    if (buttonState == HIGH) {
      //Change mode and ligh up the correct indicator  
      if (mode == 1) {
        mode = 0;
        digitalWrite(12, HIGH);
        digitalWrite(11, LOW);
      } else {
        mode = 1;
        digitalWrite(11, HIGH);
        digitalWrite(12, LOW);
      }
    }
  }
  prevButtonState = buttonState;
  delay(50); // Wait for 50 millisecond(s)
  if (mode == 0) {
    //If mode is manual map the pot values to degrees of rotation
    servo_9.write(map(analogRead(A0), 0, 1023, 0, 180));
    servo_10.write(map(analogRead(A1), 0, 1023, 0, 180));
  } else {
    //if mode is auto map the sensor values to 0-100 ligh intensity. 
    //Every light sensor has different sensitivity and must be first tested 
    //for it's high and low values
    topLeftLight = map(analogRead(A2),50,980,0,100);
    topRightLight = map(analogRead(A3),200,990,0,100);
    bottomLeftLight = map(analogRead(A4),170,970,0,100);
    bottomRightLight = map(analogRead(A5),250,1000,0,100);
    //Calculate the average light conditions
    TopLight = ((topRightLight + topLeftLight) / 2);
    BottomLight = ((bottomRightLight + bottomLeftLight) / 2);
    LeftLight = ((topLeftLight + bottomLeftLight) / 2);
    RightLight = ((topRightLight + bottomRightLight) / 2);
    //Rotate the servos if needed
    if (abs((RightLight - LeftLight)) > 4) {    //Change position only if light difference is bigger then 4%
      if (RightLight < LeftLight) {
        if (servo_9.read() < 180) {
          servo_9.write((servo_9.read() + 1));
        }
      }
      if (RightLight > LeftLight) {
        if (servo_9.read() > 0) {
          servo_9.write((servo_9.read() - 1));
        }
      }
    }
    if (abs((TopLight - BottomLight)) > 4) {  //Change position only if light difference is bigger then 4%
      if (TopLight < BottomLight) {
        if (servo_10.read() < 180) {
          servo_10.write((servo_10.read() - 1));
        }
      }
      if (TopLight > BottomLight) {
        if (servo_10.read() > 0) {
          servo_10.write((servo_10.read() + 1));
        }
      }
    }
   }
}




الجمعة، 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 من اردوينو في تفضيلات!