هذه المقالة مخصصة للمبتدئين. سنصف هنا كيفية إرسال الأوامر من تطبيق ويب باستخدام طلبات ajax إلى برنامج phyton النصي، والذي سينقلها عبر المنفذ التسلسلي مباشرة إلى اردوينو الخاص بنا.
لقد اشتريت لنفسك Arduino، وجربت بعض الأمثلة، ولعبت بالرسومات. لكن هذا لا يكفيك، فأنت تريد إدارة وإدارة كل هذا الخير عبر الإنترنت. أسهل طريقة هي شراء لوحة اسم بمنفذ Ethernet وتوصيله بـ Arduino (أو شراء لوحة مزودة بشبكة Ethernet مدمجة بالفعل). ولكنها أيضًا تكلف أكثر وتحتاج إلى تحسين إدارتها.
للعمل سنحتاج:
- خادم HTTP
- مترجم بايثون
- اردوينو
سأصف هنا مكان الحصول على الأول والثاني وكيفية تكوين صداقات بينهما
الآن بالترتيب. أستخدم Apache كخادم HTTP. تثبيته ليس بالأمر الصعب. إذا كنت مبتدئًا تمامًا وتستخدم Windows، فيمكنك الحصول على حزمة Denwer من الموقع الرسمي، وهي تتضمن Apache.
يمكن أيضًا تنزيل Python (استخدمت الإصدار 3.3) من الموقع الرسمي وتثبيته. نحن الآن بحاجة إلى تكوين صداقات بين Apache و python. أسهل طريقة هي تشغيل بايثون كـ CGI. للقيام بذلك، افتح ملف httpd.conf في مجلد conf في المكان الذي قمت بتثبيت Apache فيه (إذا قمت بتثبيت denwer، فسيكون المسار كما يلي: [حرف محرك الأقراص الظاهري]:\usr\local\bin\Apache )
نحن نبحث عن الخط
AddHandler cgi-script .cgi
نضيف .py في النهاية بمسافة ونتأكد من عدم وجود علامة # في بداية السطر. حفظ وإعادة تشغيل الخادم.
الآن، لاختبار الصداقة الوثيقة بين pythone وApache، يمكنك إنشاء ملف اختبار ووضعه في المجلد الرئيسي لديك.
#!/Python33/python.exe طباعة ("الحالة: 200 موافق\n\n") طباعة (" مرحبا بالعالم")
يرجى ملاحظة أنه في السطر الأول نعرض مكان تواجد مترجم اللغة الخاص بنا. على سبيل المثال، لدي في C:/Python33/python.exe. أعتقد أنك سوف معرفة ذلك. قم بتسميته كما تريد وقم بالوصول إليه من خلال المتصفح، على سبيل المثال، مثل هذا: localhost/my_first_test_phyton_file.py. إذا رأيت "مرحبا بالعالم"، فكل شيء على ما يرام.
رمز البرنامج النصي للتحكم الرئيسي في JavaScript بسيط للغاية:
// المنفذ الذي يتصل به Arduino var serialPort = "COM5"; // وظيفة التحكم مباشرة var Arduino = function(command, callback)( $.get("c.py",( c:command, p:serialPort ), callback); )
الشيء الوحيد الذي يجب تغييره هنا، كما خمنت، هو المنفذ الذي يتصل به اردوينو الخاص بك. يمكنك دائمًا مشاهدته في Windows باستخدام إدارة الأجهزة. سنقوم بنقله إلى برنامج python النصي الخاص بنا حتى يعرف المنفذ التسلسلي الذي سيتم إرسال البيانات المستلمة إليه.
الآن، إذا قمنا باستدعاء وظيفتنا، على سبيل المثال: Arduino(123)، فسيقوم البرنامج النصي بإنشاء طلب Ajax مثل c.py?c=123&p=COM5 وإرساله إلى برنامج python النصي c.py. دعونا نلقي نظرة على ما هو:
#!/Python33/python.exe import serial import cgi print ("الحالة: 200 موافق\n") req = cgi.FieldStorage(); ser = serial.Serial(req["p"].value, 9600, timeout=1) ser.write(bytes(req["c"].value,"latin")) ser. Close() print ("ok" ")
في الواقع، فإنه ببساطة يأخذ قيمة المعلمة "c"، ويمررها إلى المنفذ التسلسلي "p" ويكتب "ok". رخيص و مبهج.
بالنسبة لأولئك الذين لا يريدون العطاء فحسب، بل أيضًا التلقي، سنكتب المزيد من التعليمات البرمجية
دعونا نحسن جزء عملائنا قليلاً.
// وظيفة التحكم مباشرة var Arduino = function(sp, errorCallback) ( this.serialPort = sp; this.errorCallback = errorCallback || function())( console.log("Error"); ) this.send = function(data ، رد الاتصال)( var callback = callback; var self = this; data["p"] = this.serialPort; data["s"] = Math.round(Math.random()*1000); // فقط في حالة ، بحيث لا يقوم المتصفح بتخزين $.ajax(( url:"c.py", data:data, Success:function(data)( if($.trim(data) == "error")( self.errorCallback (); ) else ( if(typeof callback == "function") callback(data); ) ) ) //send this.set = function(command, callback)( this.send(( c:command, r:0 ) ، رد الاتصال)؛ ) // أرسل وانتظر الرد this.get = function(command, callback)( this.send(( c:command, r:1 // العلامة المسؤولة عن وضع "انتظار الاستجابة") ، أتصل مرة أخرى)؛ ) )
الآن، بما أننا حولنا Arduino إلى فصل دراسي، فإن أبسط استدعاء سيكون كالتالي:
var myArduino = new Arduino("COM5"); myArduino.set(113); // قم بإضاءة مؤشر LED الموجود على الدبوس 13 myArduino.get(36,function(data)(console.log(data))); // انظر إلى حالة الدبوس 6. واعرضه في وحدة التحكم
وبالطبع تحتاج إلى تغيير جزء الخادم قليلاً:
#!/Python33/python.exe import serial import cgi print ("الحالة: 200 موافق\n") req = cgi.FieldStorage(); حاول: ser = serial.Serial(req["p"].value, 9600, timeout=1) باستثناء: print("error")exit() ser.write(bytes(req["c"].value," latin))) if int(req["r"].value) == 1: res = ""; بينما ليس الدقة: res = ser.readline() print(res.decode("UTF-8")) else: print ("ok") ser. Close()
لم يتغير شيء تقريبًا هنا، باستثناء أنه عندما يتلقى الخادم المعلمة r=1 في الطلب، فإنه يتوقع استجابة من Arduino.
وقمنا بإضافة فحص لمعرفة ما إذا كان البرنامج النصي الخاص بنا قادرًا على فتح المنفذ التسلسلي. إذا لم يكن الأمر كذلك، فسيتم إرجاع الكلمة الأساسية "خطأ"
بعد ذلك، أضفت القليل من سحر واجهة المستخدم. لكنني لن أصف ذلك؛ يمكن لأي شخص مهتم أن يأخذه من الأرشيف مع المشروع.
بالنسبة لجزء الويب، استخدمت Bootstrap (فقط بسبب ملاءمته و"مطاطه") وjQuery (لـ ajax).
الآن دعونا نرى كيف يعمل.
تحتاج أولاً إلى الإشارة إلى المنفذ الذي يعمل عليه جهازك وعدد الدبابيس الموجودة به. ثم اختر أي دبوس لديك ما هو موجود عليه، ثم تابع التحكم.
تشمل عيوب هذا الأسلوب سرعة تبادل البيانات البطيئة نسبيًا. لمعرفة حالة الزر، على سبيل المثال، تحتاج إلى إرسال الطلبات، ولكن لا يمكن القيام بذلك كثيرًا، حيث قد نواجه منفذًا تسلسليًا مشغولًا. سيعمل بشكل أسرع على مآخذ الويب، لكن هذا موضوع أكثر تقدمًا قليلاً، وسأغطيه لاحقًا إذا أردت.
تم فحص كل شيء تحت نظام التشغيل Windows 8 x64. ربما تكون هناك بعض الميزات لتنفيذ كل هذا للأنظمة الأخرى، وسأكون سعيدًا لسماع ذلك في التعليقات.
الآن حول المكان الذي يمكن أن يكون فيه كل هذا مفيدًا: على سبيل المثال، يمكنك إنشاء موقف مظاهرة؛ السيطرة على موقف الكاميرا. قم بتوصيل مستشعر درجة الحرارة والأجهزة الأخرى ومراقبة بعض العمليات عن بعد، وما إلى ذلك.
الأرشيف مع المشروع
للتشغيل على جهاز iPad في وضع ملء الشاشة، استخدمت برنامج oneUrl المجاني
لم أقم بإدخاله في المحاور المواضيعية فقط بسبب نقص الكارما.
هذا هو مقالي الأول. سأكون سعيدًا بالإجابة على الأسئلة.
محدث: بناءً على طلب العمال، قمت أيضًا باختبار هذه الطريقة على نظام التشغيل MacOS. لم تكن هناك مشاكل خاصة. على نظام Mac، عادةً ما يتم تثبيت لغة python افتراضيًا؛ والشيء الوحيد الذي عليك فعله هو جعله صديقًا لـ Apache. السطر الأول في c.py سيكون
#!/usr/bin/python
أيضًا، قد لا يكون ملحق pyserial مثبتًا لديك؛ ويمكن تثبيته بأمر بسيط في وحدة التحكم:
easy_install -U pyserial
بعد ذلك، يرجى ملاحظة أن إصدار python المثبت مسبقًا عادةً ما يكون قديمًا جدًا وقد لا يعمل الخط
ser.write(بايت(req["c"].value،"latin"))
لقد استبدلته ب
ser.write(بايت(req["c"].value.decode("latin")))
كل شيء يعمل.
لا تنس إلقاء نظرة على المنفذ الذي سيتصل به جهازك. من الملائم مشاهدته، على سبيل المثال، من خلال برنامج Arduino نفسه. أدوات القائمة->المنفذ التسلسلي. على سبيل المثال، بدا الأمر كما يلي: /dev/cu.usbmodemfd141
أتمنى للجميع تجارب ناجحة.
العلامات:
تتناول المقالة كيفية إرسال أوامر Arduino للتحكم عن بعد في الأجهزة الطرفية.
أبسط مثال هو: التحكم في محرك التيار المستمر. أنا متأكد من أن الكثيرين سوف يهتمون بهذا المثال، لأن هذا هو الأساس لأتمتة منزلك الذكي. يمكنك استخدام المواد أدناه للتحكم في الستائر أو الستائر الدوارة، والتي تستخدم أيضًا محركات التيار المستمر، ولكن بقوة أعلى. لتنفيذ المشروع، ستحتاج إلى Arduino وبعض المهارات في العمل مع Node.js وJavaScript.
بالإضافة إلى Arduino Uno ولوحة الدائرة، ستحتاج إلى:
القائمة الكاملة للمكونات المطلوبة للمشروع:
بالإضافة إلى ذلك، سوف تحتاج إلى Node.js. فيه نقوم بتنفيذ واجهة المستخدم. تحميل Node.js
نحن بحاجة إلى توصيل المحرك والسائق بشكل صحيح. قم أولاً بتثبيت برنامج التشغيل L293D على لوحة الدائرة. نوصي بتثبيت برنامج التشغيل في منتصف لوحة الدائرة، كما هو موضح في الشكل أدناه. يبدأ السائق عند المسار 3 وينتهي عند المسار 10. الآن قم بتوصيل المسارين 8 و9 إلى Arduino 5V. دبوس 5 هو دبوس GND على اردوينو. هناك 3 جهات اتصال متبقية تعمل كمدخل و 2 كمخرج.
الدائرة التي تعمل من أجل الإخراج بسيطة: نقوم بتوصيل جهتي اتصال للإخراج بجهات اتصال محرك التيار المستمر. منافذ الإخراج هي 3 و 6. أول دبوس يتم توصيله هو الدبوس 1. ما يسمى بـ Enable pin. هذا هو جهة الاتصال التي نستخدمها لتشغيل/إيقاف المحرك وتغيير سرعة دورانه. قم بتوصيل هذا الدبوس بالدبوس 6 على Arduino. في النهاية، نريد توصيل الأطراف 2 و 7 من L293D إلى الأطراف 4 و 5 في Arduino. سيتم استخدام جهات الاتصال هذه لتغيير اتجاه حركة دوار محرك التيار المستمر. يظهر مخطط الاتصال الكامل في الشكل أدناه:
قبل تنفيذ جهاز التحكم عن بعد، تحتاج إلى التأكد من أن الدائرة الكهربائية مع برنامج التشغيل L293D تم رسمها وتوصيلها بشكل صحيح. للتحقق، سنقوم بتنفيذ رسم تخطيطي بسيط، بفضله سوف يتسارع المحرك ويدور دون توقف. للقيام بذلك نستخدم الرسم التالي:
// تهيئة جهات اتصال المحرك
إنت موتوربينبلوس = 4؛
int motorPinMinus = 5;
int motorPinEnable = 6;
Serial.begin(9600);
// قم بتعريف متغير لتخزين قيم السرعة
كثافة المحرك_سرعة؛
setMotor(true, motor_speed);
// وظيفة التحكم في المحركات
مجموعة باطلة للمحرك (تقدم منطقي، سرعة المحرك int)
أساس هذا الرسم هو وظيفة setMotor. سوف نستخدم هذه الوظيفة نفسها في بقية مشروعنا. دعونا ننظر إليها بمزيد من التفصيل:
// وظيفة التحكم في المحرك
محرك باطلة (منطقي للأمام، سرعة المحرك int)(
الكتابة الرقمية (motorPinPlus، إلى الأمام)؛
digitalWrite(motorPinMinus, !forward);
AnalogWrite(motorPinEnable, motor_speed);
هناك نوعان من المدخلات المعنية: الاتجاه والسرعة. الخطوة الأولى هي تنفيذ عمليتين للكتابة الرقمية () لتعيين اتجاه دوران دوار المحرك. يتلقى أحد الأطراف الموجودة على شريحة L293D إشارة 5 فولت والثاني - 0 فولت. نستخدم بعد ذلك الأمر AnalogWrite() لتغيير سرعة الجزء الدوار للمحرك باستخدام تعديل عرض النبض (PWM). مع هذه الوظيفة يمكنك تغيير اتجاه دوران المحرك. على سبيل المثال، للتسريع نستخدم:
// قم بتدوير دوار المحرك في اتجاه معين
لـ (سرعة المحرك = 0؛ سرعة المحرك
setMotor(true, motor_speed);
قم بتحميل المخطط أعلاه إلى Arduino ويجب أن يبدأ المحرك في التسارع إلى أقصى قيمة له. بعد ذلك ستنخفض السرعة إلى الصفر وسيبدأ التسارع من جديد. إذا سار كل شيء كما هو موضح أعلاه، فيمكننا الانتقال إلى الجزء التالي من مشروعنا.
في هذه المرحلة، قمنا بالفعل بتنفيذ التحكم بمحرك DC عبر Arduino. الآن دعونا نجمع كل شيء معًا ونطور واجهة ويب لمشروعنا.
أولاً، نحتاج إلى تعديل مخطط Arduino حتى يتمكن من استقبال البيانات من المضيف. بعد ذلك، نستخدم Node.js لتوفير واجهة مستخدم جميلة. إذا لم يسبق لك العمل مع تطبيقات الويب، فلا تقلق، فالدليل يغطي كل خطوة بالتفصيل.
لنبدأ برسم اردوينو. هذا هو المخطط الذي نستخدمه في هذا الجزء:
// المكتبات
#يشمل
// إنشاء aREST
aREST بقية = aREST();
// تهيئة دبابيس المحرك
إنت موتوربينبلوس = 4؛
int motorPinMinus = 5;
int motorPinEnable = 6;
الإعداد باطل (باطل)
// ابدأ تبادل البيانات عبر بروتوكول الاتصال التسلسلي وأعلن عن دبابيس المحرك
pinMode(motorPinPlus, OUTPUT);
pinMode(motorPinMinus, OUTPUT);
pinMode(motorPinEnable, OUTPUT);
Serial.begin(115200);
// أعط اسمًا ومعرفًا لجهازنا
Rest.set_id("001");
Rest.set_name("motor_control");
// التعامل مع مكالمات REST
Rest.handle(Serial);
عندما تدرس الرسم، ستلاحظ أنه مختلف عن الرسم السابق. وهو يحتوي على نفس الكتلة لتهيئة جهات الاتصال الحركية، ولكن يوجد أيضًا REST لتلقي الأوامر. على سبيل المثال، لتعيين سرعة معينة للمحرك، نقوم بتنفيذ طلب من الكمبيوتر مثل:
سنقدم طلبات مماثلة من لوحة التحكم الخاصة بنا لإدارة الدبابيس الأخرى. على سبيل المثال، الدبابيس المسؤولة عن الاتجاه.
تتكون الكتلة الأخيرة من تطوير واجهة ويب للتحكم عن بعد في سرعة المحرك. لهذا سوف نستخدم Node.js، والذي يسمح لك بتطوير التطبيقات التي تعمل على جانب الخادم في Javascript. لا يتعلق هذا البرنامج التعليمي بـ Node.js أو Javascript، ولكن يجب تغطية النقاط الرئيسية. وبطبيعة الحال، يتم تضمين جميع الملفات على جيثب.
نحتاج إلى إنشاء ثلاثة ملفات: ملف Node.js الرئيسي، والواجهة نفسها، وجزء من Javascript للتعامل مع النقرات في واجهة المستخدم الخاصة بنا. لنبدأ بملف Node.js. يبدأ الكود بتحميل وتكوين وحدة Express، وهي إطار عمل لإنشاء خادم بسهولة باستخدام Node.js:
var Express = require("express");
var app = Express();
// قم بتعريف المنفذ
منفذ فار = 3000؛
// عرض المحرك
app.set("عرض المحرك", "اليشم");
// قم بإعداد مجلد عام
app.use(express.static(__dirname + "/public"));
// واجهه المستخدم
app.get("/"، الوظيفة(req, res)(
res.render("dashboard");
بعد ذلك، نقوم باستيراد وحدة Node-aREST، التي توفر الاتصال بين الخادم الخاص بنا ولوحة Arduino:
var Rest = require("arest")(app);
في هذا الملف يجب علينا أيضًا تحديد المنفذ التسلسلي الذي تتصل به لوحة Arduino:
Rest.addDevice("serial"،/dev/tty.usbmodem1a12121"،115200)؛
وبطبيعة الحال، تحتاج إلى تغيير هذه القيمة وفقا للمنفذ التسلسلي الخاص بك. يمكنك العثور على المنفذ التسلسلي الخاص بك في Arduino IDE في قائمة الأدوات> المنفذ.
دعونا نلقي نظرة على ملف الواجهة الموجود في Dashboard.jade. Jade هي لغة تعمل بشكل أساسي على تبسيط كتابة علامات HTML. يحتوي Jade على وصف للواجهة، والتي تتم معالجتها بعد ذلك باستخدام Node.js & Express. يوجد أدناه ملف Jade لمشروعنا. يقوم بإنشاء زرين (للاتجاهات) ومنزلق واحد (لتغيير سرعة المحرك):
h1 التحكم في المحركات
Button.btn.btn-block.btn-lg.btn-primary#1 للأمام
Button.btn.btn-block.btn-lg.btn-danger#2 عكسي
الإدخال (النوع = "النطاق"، الحد الأدنى = "0"، الحد الأقصى = "255"، القيمة = "0"، المعرف = "سرعة المحرك")
في النهاية نحتاج إلى إضافة جافا سكريبت للتعامل مع نقرات المستخدم على الأزرار وشريط التمرير. هذا هو رمز زر "الأمام":
$("#1").انقر(وظيفة() (
$.get("/motor_control/digital/4/1"، وظيفة () (
$.get("/motor_control/digital/5/0");
كما نرى، تم ضبط الدبوس 4 على HIGH والدبوس 5 على LOW. تعمل الأزرار الأخرى عكس ذلك تمامًا. أي أنه عند الضغط عليهما، سيتحرك المحرك في الاتجاه المعاكس.
من أجل ضبط سرعة المحرك، نكتشف متى يقوم المستخدم بتحرير شريط التمرير. يتم تنفيذ ذلك باستخدام mouseup ():
$("#motorspeed").mouseup(function())(
// احصل على قيمة السرعة
السرعة = $("#motorspeed").val();
// أرسل الأمر
$.get("/motor_control/analog/6/" + speed);
الآن يمكننا الانتقال إلى اختبار مشروع التحكم بالمحركات عن بعد عبر الموقع الإلكتروني. لا تنس أنه يمكن العثور على كافة التعليمات البرمجية المصدرية للبرامج على GitHub. أولاً، قم بتحميل رسم Remote_motor إلى Arduino الخاص بك. بعد ذلك، تأكد من أنك قمت بتحميل كافة ملفات الواجهة وتكوين المنفذ التسلسلي الخاص بك في ملف app.js الرئيسي.
انتقل إلى هذا المجلد من خلال المحطة واكتب ما يلي:
Sudo npm تثبيت Express Jade Arest
بعد ذلك قم بتشغيل التطبيق باستخدام:
بعد ذلك، يمكنك الانتقال إلى المتصفح الخاص بك وكتابة ما يلي في شريط العناوين:
http://localhost:3000
ونتيجة لذلك، ستظهر الواجهة التالية:
ثم يمكنك الاختبار واللعب. على سبيل المثال، عن طريق تحديد اتجاه الدوران أو استخدام شريط التمرير لتغيير سرعة الدوران. يجب أن يستجيب المحرك لضغطاتك. يمكنك استخدام هاتفك الذكي أو جهازك اللوحي. للقيام بذلك، ما عليك سوى استخدام عنوان IP لجهاز الكمبيوتر الخاص بك وتغيير سرعة المحرك بأمان من جهازك المحمول.
يعد البرنامج التعليمي أعلاه مهمًا جدًا لفهم أساسيات التحكم في أجهزتك عن بعد باستخدام Arduino. الأساس هو مشروع بسيط بمهام بسيطة - تغيير سرعة واتجاه دوران دوار محرك التيار المستمر عن بعد عبر خادم الويب. ننصحك بقراءة جميع التوضيحات التي تم الكشف عنها في المقالة بالتفصيل. سيعطيك هذا أساسًا جيدًا لمزيد من المشاريع الأكثر تعقيدًا. أكمل الكود وقم بإثرائه. على سبيل المثال، يمكنك إضافة تحديد تأخير بين تغيير اتجاه دوران دوار المحرك، وما إلى ذلك. القيد الوحيد هو آفاقك وحماسك.
اترك تعليقاتك وأسئلتك وشارك تجاربك الشخصية أدناه. غالبًا ما تولد الأفكار والمشاريع الجديدة في المناقشات!
سنتعلم في هذا الدرس كيفية عمل نظام بسيط لفتح القفل باستخدام المفتاح الإلكتروني (العلامة).
في المستقبل، يمكنك تحسين وتوسيع الوظائف. على سبيل المثال، أضف وظيفة "إضافة مفاتيح جديدة وإزالتها من الذاكرة". في الحالة الأساسية، دعونا نفكر في مثال بسيط حيث يتم تعيين معرف مفتاح فريد مسبقًا في كود البرنامج.
سنحتاج في هذا البرنامج التعليمي إلى:
لتنفيذ المشروع نحتاج إلى تثبيت المكتبات:
2) أنت الآن بحاجة إلى توصيل صفارة، والتي ستصدر إشارة إذا كان المفتاح يعمل وفتح القفل، وإشارة ثانية عند إغلاق القفل.
نقوم بتوصيل الجرس بالتسلسل التالي:
اردوينو | صفارة |
---|---|
5 فولت | VCC |
أرض | أرض |
دبوس 5 | آيو |
3) سيتم استخدام محرك سيرفو كآلية لفتح القفل. يمكن تحديد أي محرك سيرفو، اعتمادًا على الحجم الذي تحتاجه والقوة التي يولدها محرك السيرفو. يحتوي السيرفو على 3 جهات اتصال:
يمكنك أن ترى بشكل أكثر وضوحًا كيفية ربط جميع الوحدات في الصورة أدناه:
الآن، إذا كان كل شيء متصلا، يمكنك المتابعة إلى البرمجة.
رسم:
#يشمل
دعونا نلقي نظرة على الرسم بمزيد من التفصيل:
من أجل معرفة UID الخاص بالبطاقة (العلامة)، تحتاج إلى كتابة هذا المخطط في اردوينو، وتجميع الدائرة الموضحة أعلاه، وفتح وحدة التحكم (مراقبة المنفذ التسلسلي). عندما تلمس علامة RFID، ستعرض وحدة التحكم رقمًا
يجب إدخال UID الناتج في السطر التالي:
إذا (uidDec == 3763966293) // قارن معرف العلامة الفريد، إذا كان مساويا للمعرف المحدد، ثم يفتح محرك المؤازرة الصمام.
كل بطاقة لها معرف فريد ولا يتكرر. وبالتالي، عند تقديم البطاقة التي قمت بتعيين معرفها في البرنامج، سيقوم النظام بفتح الوصول باستخدام محرك سيرفو.
فيديو:
هل فكرت يومًا في التحكم في أي أجهزة إلكترونية باستخدام هاتفك الذكي؟ أوافق، سيكون من الرائع التحكم في الروبوت أو أي جهاز آخر من هاتفك الذكي. نقدم درسًا بسيطًا للمبتدئين والدمى حول كيفية التحكم في الهاتف الذكي باستخدام Arduino عبر البلوتوث. إذا كنت ترغب بعد هذا الدرس في التعرف على Arduino بشكل أفضل، فيمكنك العثور على كتب عنه.
الأجهزة
الوحدة - وحدة بلوتوث HC 05/06
المجلس - اردوينو
الصمام الثنائي الباعث للضوء (LED)
المقاوم - 220Ω
جهاز أندرويد
برمجة
اردوينو بيئة تطوير متكاملة
Android Studio (في الواقع ليس ضروريًا، لأنك ستجد تطبيق Android أدناه)
عادةً ما نقوم بهذه الخطوة في النهاية، ولكن لكي تفهم ما يتعين علينا تحقيقه، انظر إلى النتيجة في هذه الخطوة المتوسطة. لقد نشرنا أيضًا مقطع فيديو تعليميًا خطوة بخطوة أدناه.
الدائرة الموجودة في برنامجنا التعليمي بسيطة جدًا وصغيرة جدًا لدرجة أننا نحتاج فقط إلى إجراء بعض التوصيلات:
دبابيس اردوينو ___________ دبابيس وحدة البلوتوث
RX (دبوس 0) _________________________________________ TX
تكساس (دبوس 1) _________________________________________ آر إكس
5V____________VCC
GND__________GND
قم بتوصيل السالب من LED إلى GND على Arduino، والموجب للطرف 13 من خلال مقاومة 220 أوم - 1 كيلو أوم. بشكل عام، في الشكل أدناه، كل شيء واضح تماما.
لا تقم بتوصيل مخرجات RX إلى RX و TX إلى TX Bluetooth بمخرجات Arduino، فلن تتلقى أي بيانات، هنا TX تعني إرسال، و RX تعني استقبال.
نحتاج الآن إلى كتابة برنامج وتحميله على Arduino الخاص بنا. إذا كنت لا تعرف كيفية القيام بذلك بعد، قم بتنزيل الكتب. الكود أدناه هو بالضبط ما نحتاج إلى تحميله في Arduino.
/* Bluetooh Basic: LED ON OFF * Coder - Mayoogh Girish * الموقع الإلكتروني - http://bit.do/Avishkar * تنزيل التطبيق: https://github.com/Mayoogh/Arduino-Bluetooth-Basic * يتيح لك هذا البرنامج للتحكم في مؤشر LED الموجود على السن 13 من Arduino باستخدام وحدة بلوتوث */ char data = 0; // متغير لتخزين البيانات المستلمة void setup () (Serial.begin (9600)؛ // يضبط الباود لنقل البيانات التسلسلية pinMode (13، OUTPUT)؛ // يعين الدبوس الرقمي 13 كدبوس الإخراج) حلقة باطلة () ( if(Serial.available() > 0) // أرسل البيانات فقط عندما تتلقى البيانات: ( data = Serial.read(); // اقرأ البيانات الواردة وقم بتخزينها في بيانات متغيرة Serial.print(data); // طباعة القيمة داخل البيانات في الشاشة التسلسلية Serial.print("\n"); // سطر جديد if(data == "1") // يتحقق مما إذا كانت قيمة البيانات تساوي 1 digitalWrite(13, HIGH); هو 1 ثم يتم تشغيل LED else if(data == "0") // يتحقق مما إذا كانت قيمة البيانات تساوي 0 digitalWrite(13, LOW); // إذا كانت القيمة 0 فسيتم إيقاف تشغيل LED))
تعمل وحدة HC 05/06 عبر قناة اتصال تسلسلية. يرسل تطبيق Android البيانات بشكل تسلسلي إلى وحدة Bluetooth عند الضغط على مفتاح معين. يستقبل Bluetooth على الطرف الآخر البيانات ويرسلها إلى Arduino عبر اتصال TX الخاص بوحدة Bluetooth (اتصال Arduino RX).
يتحقق الكود الذي تم تحميله في Arduino من البيانات المستلمة ويقارنها. إذا تم استلام "1"، يتم تشغيل مؤشر LED وينطفئ عند استلام "0". افتح شاشة المنفذ التسلسلي ولاحظ البيانات المستلمة.
في هذا البرنامج التعليمي لن نتطرق إلى إنشاء تطبيقات لأجهزة Android. يمكنك تنزيل التطبيق على جيثب.
كيفية استخدام التطبيق؟
بعد أن قمنا بالاتصال عبر البلوتوث، نحتاج إلى تنزيل وتثبيت تطبيق يستخدم الهاتف الذكي :) سيتحكم في مؤشر LED الخاص بنا عن بعد. يمكنك تنزيل التطبيق مجانًا على Amazon.com. نقوم بتوصيل الهاتف الذكي بوحدة Bluetooth HC 05/06:
بعد ذلك نقوم بتثبيت التطبيق على هاتفنا الذكي. لنفتحه. حدد جهازًا - حدد وحدة Bluetooth من القائمة (HC 05/06). بعد الاتصال الناجح، اضغط على زر التشغيل لتشغيل مصباح LED وزر إيقاف التشغيل لإيقاف تشغيل مصباح LED. ثم يمكنك النقر فوق الزر "قطع الاتصال" لقطع الاتصال بوحدة Bluetooth.
كان هذا دليلاً للدمى والمبتدئين حول كيفية توصيل وحدة Bluetooth مع Arduino. يمكن تحسين هذا المشروع والارتقاء به إلى مستوى أعلى، على سبيل المثال، لأتمتة المنزل من خلال التحكم في الهاتف الذكي، والروبوت الذي يتم التحكم فيه، وغير ذلك الكثير.
في الوقت الحالي، تحولت أنظمة مثل "المنزل الذكي" من كونها أنظمة غريبة ومذهلة، ولا يمكن الوصول إليها إلا للأفراد الأكثر ثراءً، إلى أنظمة شائعة يمكن لأي شخص الانضمام إليها. هناك الكثير للاختيار من بينها: لقد أتقن العديد من المطورين إنتاج أنظمة الأجهزة والبرامج هذه. ومن أشهرها شركة Arduino والتي سنتعرف الآن على منتجاتها.
هذا المصطلح له نظير أكثر قابلية للفهم - "أتمتة المنزل". جوهر هذه الحلول هو ضمان التنفيذ التلقائي للعمليات المختلفة التي تحدث في المنزل أو المكتب أو المرافق المتخصصة. أبسط مثال هو التشغيل التلقائي للإضاءة في اللحظة التي يدخل فيها أحد المقيمين إلى الغرفة.
في أي نظام للمنزل الذكي يمكن تمييز المكونات التالية:
تنقسم أنظمة المنزل الذكي الحديثة إلى عدة أنواع:
لا يستطيع النظام تنشيط جهاز معين فحسب، بل يمكنه أيضًا إبلاغ المستخدم بالحدث الذي حدث عن طريق إرسال رسالة إلى الهاتف أو بطريقة أخرى. وبالتالي، يمكن تعيين وظائف الإنذار، بما في ذلك إنذار الحريق.
يمكن أن تكون السيناريوهات أكثر تعقيدًا مما وصفناه في الأمثلة. على سبيل المثال، يمكنك تعليم النظام تشغيل الغلاية ونقل إمداد الماء الساخن إليها عند إيقاف الإمداد المركزي، في حالة اكتشاف وجود أحد السكان في المنزل (أجهزة استشعار بالأشعة تحت الحمراء والموجات فوق الصوتية، و أجهزة استشعار الحركة تساعد).
Arduino هي شركة إيطالية متخصصة في تطوير وإنتاج المكونات والبرامج لأنظمة المنزل الذكي البسيطة المخصصة لغير المتخصصين. من الجدير بالذكر أن هذا المطور جعل بنية الأنظمة التي أنشأها مفتوحة بالكامل، مما سمح لمصنعي الطرف الثالث بتطوير أجهزة جديدة ومتوافقة مع Arduino الحالية، بالإضافة إلى إصدار البرامج الخاصة بهم.
تحتوي مجموعة Arduino Uno على المكونات الضرورية لتنفيذ الأجهزة الموضحة في الكتاب المرفقلقد كفل هذا النهج شعبية كبيرة لأنظمة الشركة الإيطالية، ولكن له أيضًا عيبًا: نظرًا لحقيقة أنه، إذا جاز التعبير، فإن كل من ليس كسولًا جدًا يتولى إنتاج مكونات لأنظمة Arduino، فهو ليس كذلك من الممكن دائمًا شراء منتج عالي الجودة في المرة الأولى. غالبًا ما يتعين علينا التعامل مع مشكلة توافق المكونات من مختلف الشركات المصنعة.
يجب أن يعلم المستخدمون المحتملون أنه منذ عام 2008 كانت هناك شركتان تنتجان منتجات تحت العلامة التجارية Arduino. الأول، الذي بدأ هذا الاتجاه، لديه موقع رسمي على www.arduino.cc؛ والثاني، الذي تم تشكيله حديثًا - على www.arduino.org. ما تم تطويره قبل التقسيم يتم تقديمه بشكل متماثل على كلا الموقعين، ولكن نطاق المنتجات الجديدة مختلف بالفعل.
يأخذ برنامج أنظمة المنزل الذكي Arduino شكل غلاف البرنامج (يُسمى IDE) حيث يمكنك كتابة البرامج وتجميعها. توزع مجانا. البرامج مكتوبة بلغة C++.
تختلف أيضًا إصدارات برنامج Arduino IDE المعروضة على هذه المواقع اختلافًا كبيرًا، على الرغم من أنها تحمل نفس الاسم ليس فقط، ولكن أيضًا أرقام الإصدارات. ولهذا السبب، من السهل جدًا الخلط بينهم. الفرق هو أن كل برنامج يدعم مكتباته ولوحاته الخاصة.
تتكون "أجهزة" النظام من لوحة بها وحدة تحكم دقيقة (لوحة المعالج) وبطاقات توسعة مثبتة عليها، والتي تسمى عادة الدروع. يتيح لك توصيل الدرع بلوحة المعالج إضافة مكونات جديدة إلى المنزل الذكي. يمكن أن يكون النظام المجمع مستقلاً تمامًا أو يعمل جنبًا إلى جنب مع جهاز كمبيوتر عبر واجهة سلكية أو لاسلكية قياسية.
يجذب مجمع الأجهزة والبرامج هذا المستخدم بالمزايا التالية:
إذا بدأ Bootloader في التعطل، أو لم يكن هناك وحدة تحكم دقيقة تم شراؤها، فإن المستخدم لديه الفرصة لفلاشه بشكل مستقل. يوفر غلاف برنامج IDE الدعم لعدد من المبرمجين الأكثر سهولة وشعبية لهذا الغرض. بالإضافة إلى ذلك، تحتوي جميع لوحات معالجات Arduino تقريبًا على رأس يسمح بالبرمجة داخل الدائرة.
يتضمن برنامج Arduino IDE المعروض على موقع arduino.cc القدرة على إنشاء منصات برامج وأجهزة مخصصة، في حين أن إصدار البرنامج الموجود على arduino.org لا يحتوي على مثل هذه الوظيفة.
نظرًا لأن العديد من الشركات تعمل في إنتاج أجهزة الاستشعار والأجهزة المتوافقة مع Arduino، فإن نطاق هذه المنتجات واسع جدًا. إليك ما يتم استخدامه في أغلب الأحيان:
يتم تضمين بعض هذه الأجهزة في مجموعة Arduino Start الأساسية، والتي يطلق عليها بعض الشركات المصنعة اسم StarterKit.
الجزء التنفيذي يحتوي على مجموعة ضخمة من الأجهزة منها على سبيل المثال:
إذا كنت تخطط لتوصيل الإضاءة عبر مرحل Arduino، فمن الأفضل استخدام مصابيح LED كمصابيح. تحترق المصابيح المتوهجة بسرعة عند توصيلها عبر هذه المرحلات.
سنعرض عملية إنشاء وإعداد "المنزل الذكي" الخاص بـ Arduino باستخدام مثال النظام الذي سيتضمن الوظائف التالية:
سنقوم بتكوين النظام بحيث يمكن عرض البيانات باستخدام تطبيق خاص، بالإضافة إلى متصفح الويب، أي أنه يمكن للمستخدم القيام بذلك من أي مكان يتوفر فيه الوصول إلى الإنترنت.
الاختصارات المستخدمة:
بالنسبة لنظام المنزل الذكي Arduino ستحتاج إلى ما يلي:
جميع المكونات تكلف حوالي 90 دولارًا.
هذا هو الترتيب الذي يجب أن تتصرف به.
نقوم بتوصيل جميع المكونات وفقًا للمخطط.
يكتب المستخدم البرنامج بأكمله في غلاف Arduino IDE، حيث تم تجهيز الأخير بمحرر نصوص ومدير مشروع ومترجم ومعالج أولي وأدوات لتحميل كود البرنامج إلى المعالج الدقيق للوحة Arduino. تم تطوير إصدارات IDE لأنظمة التشغيل Mac OS X وWindows وLinux. لغة البرمجة هي C++ مع بعض التبسيطات. عادةً ما تسمى برامج المستخدم الخاصة بـ Arduino بالرسومات التخطيطية أو الرسومات التخطيطية؛ ويقوم برنامج IDE بحفظها في ملفات ذات الامتداد ".ino".
يتم إنشاء الدالة main()، الإلزامية في لغة C++، تلقائيًا بواسطة غلاف IDE، مع تحديد عدد من الإجراءات القياسية فيها. يجب على المستخدم كتابة الدالتين setup() (التي يتم تنفيذها مرة واحدة أثناء بدء التشغيل) وloop() (التي يتم تنفيذها في حلقة لا نهاية لها). كلتا الوظيفتين مطلوبتان لاردوينو.
ليست هناك حاجة لإدراج ملفات رأس المكتبات القياسية في البرنامج - يقوم IDE بذلك تلقائيًا. لا ينطبق هذا على مكتبات المستخدمين - يجب تحديدها.
تتم إضافة المكتبات إلى مدير مشروع IDE بطريقة غير معتادة إلى حد ما. كمصادر مكتوبة بلغة C++، تتم إضافتها إلى مجلد خاص في دليل العمل الخاص بقشرة IDE. بعد ذلك، ستظهر أسماء هذه المكتبات في قائمة IDE المقابلة. سيتم تضمين تلك التي يحددها المستخدم في قائمة التجميع.
يوفر IDE الحد الأدنى من الإعدادات، ولا توجد إمكانية لتخصيص المترجم على الإطلاق. وبالتالي، يتم حماية المبرمج المبتدئ من الأخطاء.
فيما يلي مثال على أبسط برنامج يجعل مؤشر LED المتصل بالطرف 13 من اللوحة يومض كل ثانيتين:
الإعداد الفارغ () (pinMode (13، OUTPUT)؛ // تعيين منفذ Arduino 13 كمخرج)
حلقة باطلة () (digitalWrite (13، HIGH)؛ // قم بتشغيل الدبوس 13، معلمة استدعاء الوظيفة digitalWrite HIGH - علامة على مستوى منطقي عالٍ
تأخير (1000)؛ // حلقة تأخير لمدة 1000 مللي ثانية - ثانية واحدة
الكتابة الرقمية (13، LOW)؛ // قم بإيقاف تشغيل الدبوس 13، واستدعاء المعلمة LOW - علامة على مستوى منطقي منخفض
تأخير (1000)؛ // تأخير الحلقة لمدة ثانية واحدة)
ومع ذلك، في الوقت الحالي، لا يواجه المستخدم دائمًا الحاجة إلى كتابة برنامج شخصيًا: يتم نشر العديد من المكتبات والرسومات الجاهزة على الإنترنت (انظر هنا: http://arduino.ru/Reference). يوجد برنامج جاهز للنظام المذكور في هذا المثال. يجب تنزيله وتفكيكه واستيراده إلى IDE. ويرد نص البرنامج مع تعليقات توضح مبدأ عمله.
عندما يضغط المستخدم على زر "تحديث" في المتصفح أو التطبيق المثبت على الهاتف الذكي، يرسل متحكم Arduino البيانات إلى هذا العميل. من كل صفحة من الصفحات، المعينة كـ "/tempin"، "/tempout"، "/rain"، "/window"، "/alarm"، يتم استلام رمز البرنامج، الذي يتم عرضه على الشاشة.
لتلقي البيانات من نظام المنزل الذكي عبر الإنترنت، يمكنك تنزيل تطبيق جاهز.
إليك ما يتعين على مالك الأداة فعله:
باستخدام هذا التطبيق، لا يمكنك تلقي المعلومات من نظام المنزل الذكي فحسب، بل يمكنك أيضًا التحكم فيه - تشغيل المنبه وإيقاف تشغيله. إذا تم تمكينه، فسيتم إرسال إشعار إلى التطبيق عند تشغيل مستشعر الحركة. يقوم التطبيق باستقصاء نظام Arduino لتنشيط مستشعر الحركة مرة واحدة في الدقيقة.
من خلال تفعيل أيقونة "الإعدادات"، يمكنك تعديل عنوان IP الخاص بك.
في شريط العناوين في متصفحك، أدخل XXX.XXX.XXX.XXX/all، حيث "XXX.XXX.XXX.XXX" هو عنوان IP الخاص بك. بعد ذلك، سيكون من الممكن تلقي البيانات من النظام وإدارتها.
يتيح لك رمز البرنامج المعروض هنا تشغيل وإطفاء الضوء من خلال المتصفح، في حين لا يتم تنفيذ هذه الوظيفة في تطبيق الهاتف الذكي الذي يعمل بنظام Android.
هذه الخطوة اختيارية، ولكنها مطلوبة إذا كنت تريد تعيين اسم مجال للعنوان. للقيام بذلك، تحتاج إلى التسجيل في الموقع https://www.noip.com/، انتقل إلى قسم "إضافة مضيف" وأدخل عنوان IP الخاص بالنظام.
تم الانتهاء من إنشاء المشروع، يمكنك التحقق من وظائف النظام.
نظرًا لحقيقة أن المكونات المتوافقة مع Arduino يتم إنتاجها من قبل العديد من شركات الطرف الثالث، والتي لا تتحكم Arduino نفسها في جودة منتجاتها، فمن المرجح أن يشتري المستخدم مكونًا لا يعمل بشكل صحيح تمامًا.
وقد تطور وضع مماثل في مجال تطوير الكمبيوتر الشخصي. في وقت واحد، جعلت IBM بنية أجهزة الكمبيوتر الخاصة بها مفتوحة، ونتيجة لذلك بدأت العديد من الشركات في إنتاج أجهزة كمبيوتر متوافقة مع IBM والمكونات الفردية. ونتيجة لذلك، انتشرت "المعدات الشخصية" من هذا النوع على نطاق واسع في جميع أنحاء العالم، إلا أن جودة المكونات ودرجة توافقها في كثير من الحالات لم تكن على أعلى مستوى. اتبعت شركة أبل التكتيكات المعاكسة. لقد حدت من عدد المطورين الذين لديهم إمكانية الوصول إلى البنية، ونفذت نفس السياسة في مجال تطوير البرمجيات. نتيجة لذلك، أصبحت أجهزة كمبيوتر Apple أقل شيوعا وأكثر تكلفة، لكن جودتها متفوقة على الأجهزة المتوافقة مع IBM التي تعمل بنظام Windows.
لاحظ المستخدمون ما يلي بخصوص بعض مكونات أنظمة الأردوينو:
لتجنب شراء مكونات منخفضة الجودة، يوصي المستخدمون ذوو الخبرة أولاً بدراسة المراجعات المنشورة على الإنترنت حولها. يمكن شراء أجهزة استشعار غير مكلفة في عدة أنواع لتختبر بنفسك أيها يعمل بشكل أفضل.
ربما لا يكون نظام المنزل الذكي من شركة Arduino هو الأعلى جودة، ولكن الاختيار الأوسع للمكونات وتكلفتها المعقولة جعله بالتأكيد واحدًا من أكثر الأنظمة شعبية. باستخدام نصائحنا، سوف تتعلم بسرعة كيفية إنشاء مشاريع Arduino، وأتمتة العمليات المنزلية المختلفة.