الصنّاع العرب

جو 4 – روبوت المنزل الذكي

في هذا الدرس سأقوم بشرح كيفية صناعة روبوت للتحكم بالأجهزة المنزليه عبر الإنترنت باستخدام تكنولوجيا إنترنت الأشياء IOT و لوحة الأردوينو وهو ما يعرف بأسم أتمتة المنازل Home Automation.

ولكن قبل أن نبدأ دعونا نتعرف على هذه التقنية كما تعودنا في الدروس السابقة…

ما هي إنترنت الأشياء؟

إنترنت الأشياء (Internet of things) بإختصار هو نظام توافقي يعمل على إدارة و ربط كافة الأجهزة الإلكترونية والآلات الميكانيكية والرقمية وكذلك الأشخاص في بعض الأحيان عند استخدام معرفات شخصية فريدة لها القدرة على نقل بياناتهم كالأجهزة الطبية التي تعمل على مراقبة الحالة الصحية للشخص، فهي تعتبر مظلة بيانات ضخمة تعمل من خلال شبكة الإنترنت تقوم بتداول المعلومات.

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

إذاً كيف يمكنني أن أصبح جزءاً من هذا العالم باستخدام لوحة أردوينو الخاصة بي؟

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

ملحوظة

المتحكم ESP8266 عادة ما يباع بدون درع للأردوينو لذلك أنصح بشراء المحول الخاص به ويسمى
ESP-01 adapter  وهو يجعل توصيل المتحكم أكثر سهولة و يسر.

بناء الروبوت

المكونات الإلكترونية لبناء المشروع

  • مجسم الروبوت (متوفر للتحميل في الخطوات اللاحقة)
  • لوحة أردوينو أونو
  • متحكم ESP8266 مع ESP-01
  • مرحل 4 إتجاهات (Relay 4 port)
  • شاشة عرض LCD 16*2
  • إضاءة LED مع مقاومة 220 أوم

الخطوة الأولى: تهيئة المتحكم ESP8266

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

1- قم بتوصيل الموديول كما يلي

2- في محرر أردوينو، من قائمة file اختر preferences لبدء عملية التهيئة

3- في خانة additional boards الصق الرابط التالي لتحميل المكتبة الخاصة به:
http://arduino.esp8266.com/stable/package_esp8266com_index.json

4- من قائمة boards اختر board manager و ابحث عن esp8266، ثم اضغط install

5- أصبح الأن البرنامج مهيأ للتعامل مع الموديول

الخطوة الثانية: تجميع قاعدة الروبوت

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

قم بتحميل النموذج من هنا: http://paper-replika.com/index.php?option=com_content&view=article&id=63

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

تعلم أكثر عن كيفية توصيل شاشة العرض LCD بلوحة الأردوينو من هنا:

https://www.arduino.cc/en/Tutorial/LiquidCrystalDisplay

الخطوة الثالثة: تجميع جسم الروبوت

يتكون الروبوت من قطعة واحدة فقط بها فتحتين أماميتين بحيث يمكنك وضع الإضاءة LED، كما يمكنك وضع كاميرا مراقبة منزلية وتشغيلها من خلال الانترنت.

الخطوة الرابعة: شرح دائرة المحول Relay

يجب استخدام نوع معين من المرحلات Relays متوافق مع لوحة الأردوينو والذي يسمح بالتحكم بجهد كهربائى عالي 110/220 فولت والموصل عليه الاجهزة المنزلية على سبيل المثال وفي هذا المشروع استخدمت Relay 4 port للتحكم بأربعة اجهزة.

ولكن عند التوصيل تأكد جيداً من (الفولت و الامبير) وأعلم جيداً انك تعمل مع دائرة إلكترونية ذات جهد عالي.

تحذير: يجب دائما أن نكون حذرين للغاية عندما نجرب المرحلات فالتوصيل الخاطيء يمكن أن يؤدى إلى حدوث إصابات خطيرة، وتذكر عدم لمس المرحل من الأسفل عند توصيل التيار.

 الخطوة الخامسة: الكود المستخدم

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

  •  تأكد من تضمين المكتبة الصحيحة # ESP8266WiFi.h
  •  تأكد من أنك تقرأ من البورت الصحيح 115200 وليس 9600 فهذا البورت هو المسؤول عن تشغيل موديول الواي فاي
  •  المشروع لا يحتاج إلى أي مصدر طاقة إضافي.
  •  تأكد من كتابة اسم شبكة الواي فاي وكلمة المرور بشكل صحيح داخل الكود.
  • الكود معد لتشغيل و إطفاء جهاز إلكتروني واحد، يمكنك التعديل حسب عدد الأجهزة المراد التحكم بها.
  • بمجرد فتح الشاشة التسلسلية serial monitor تأكد من أن عنوان النطاق يظهر مثل هذا:

  • استخدم عنوان النطاق هذا للاتصال:  http://192.168.1.100 انسخه في المتصفح. ستشاهد الشكل التالي، فقد أصبحت لوحة الأردوينو الآن جزء من شبكة المنزل الخاصة بك.

الكود

// Include WIFI module
#include 

// Include LCD
#include <LiquidCrystal.h>

// WiFi parameters
const char* ssid = "YOUR_SSID";//type your ssid wifi network name
const char* password = "YOUR_PASSWORD";//type your wifi password

// Relay pin (contcted to TV or Light)
int relayPin = 10; // GPIO2 of ESP8266 

int botled = 9; // this led will flash to help is if its working

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Create an instance of the server
WiFiServer server(80);
 
void setup() {
  Serial.begin(115200);
  delay(50);
 
  pinMode(relayPin, OUTPUT);
  pinMode(botled, OUTPUT);
  
  digitalWrite(botled, HIGH); // turn on robot led as a guide
     
  // Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to: ");
  Serial.println(ssid);
   
  WiFi.begin(ssid, password);
   
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
   
  // Start the server
  server.begin();
  Serial.println("Server started");
 
  // Print the IP address
  Serial.print("Use this URL to connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");


  //*************** set up the LCD's number of columns and rows: *** ********
  lcd.begin(16, 2);
  lcd.clear();
  
}
 
void loop() {

    // Sets the cursor to col 0 and row 0
    lcd.setCursor(0,0);
      // Print a message to the LCD.
    lcd.print("GO-4");
    
    lcd.setCursor(0,1); // Sets the cursor second line to write other msgs
    
    
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
   
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
   
  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();
   
  // Read the request from the web server
 
  int value = LOW;
  if (request.indexOf("/LED=ON") != -1) {
    digitalWrite(relayPin, HIGH);
    value = HIGH;

    BlinkRobotLed(2);
  } 
  if (request.indexOf("/LED=OFF") != -1){
    digitalWrite(relayPin, LOW);
    value = LOW;

    BlinkRobotLed(2);
  }
   
  // Return the response
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: text/html");
  client.println(""); //  do not forget this one
  client.println("");
  client.println("");
   
  client.print("Relay pin is now: ");
   
  if(value == HIGH) {
    client.print("On"); 
    lcd.print("Relay bin On"); // you can change the msg as you like
  } else {
    client.print("Off");
    lcd.print("Relay bin OFF"); // you can change the msg as you like
  }
  // this HTML code will show in your web browser 
  client.println("Go-4 Web Server");
  client.println("Click here turn the LED on pin 2 ON");
  client.println("Click here turn the LED on pin 2 OFF
");
  client.println("");
 
  delay(1);
  Serial.println("Client disconnected");
  Serial.println("");
}

void BlinkRobotLed(int x)
{
  //blink robot led
    for(int i = 0 ; i < x; i++)
    {
      digitalWrite(botled, LOW);
      delay(50);
      digitalWrite(botled, HIGH);
      delay(50);
    }
  }

Ahmed Azouz

مطور برمجيات ، مهتم بمجال التكنولوجيا والروبوت

7 تعليقات

اترك رداً على Ahmed Azouz إلغاء الرد

تابعنا