جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
سيوضح لك هذا Instructable كيفية بناء الروبوت الخاص بك المتصل بالويب (باستخدام وحدة تحكم Arduino الصغيرة و Asus eee pc). لماذا تريد روبوتًا متصلًا بالويب؟ للعب مع بالطبع. قم بقيادة الروبوت الخاص بك من جميع أنحاء الغرفة أو في جميع أنحاء البلاد ، باستخدام سكايب ومتصفح الويب (لا شيء لتثبيته على جهاز الكمبيوتر المتحكم). بعد ذلك؟ ابحث في البرنامج وقم بتكييفه كيفما تشاء ، أضف نظام تحديد المواقع العالمي (GPS) حتى تتمكن من مشاهدة المكان الذي تقود فيه على الخريطة ، أو أضف مستشعرات درجة الحرارة لتعيين تدرجات درجة الحرارة في منزلك ، أو مستشعرات السونار لإضافة عناصر تحكم على ما أنت على الويب يمكن للسائقين ولا يمكنهم أن يصطدموا. سمات:
- غير مكلف - (حوالي 500 دولار إذا اشتريت جميع الأجزاء الجديدة وأرخص بكثير إذا قمت بالحفر في سلة الأجزاء الخاصة بك)
- بمجرد بدء التشغيل والتشغيل ، يتطلب التحكم في الروبوت متصفح ويب فقط - (وسكايب إذا كنت تريد معرفة المكان الذي تقود إليه القيادة)
- مفتوح المصدر وقابل للتكيف بسهولة - (يستخدم وحدة تحكم دقيقة من Arduino ، ومعالجة لخادم الويب ويمكن تشغيل جميع البرامج على Linux (يتم أيضًا تعليق جميع التعليمات البرمجية بشكل كبير لتسهيل القفز وتغيير الأشياء))
- تصميم معياري (ليس نظامًا متكاملًا تمامًا ، إذا كنت ترغب في استخدام خدمة مؤتمرات فيديو مختلفة فلا داعي للقلق ، أو إذا كان لديك طابع أساسي بدلاً من Arduino ، فما عليك سوى إدخال جزء صغير من الكود وفتحه)
إليكم مقطع فيديو سريعًا لروبوتي المتصل بالويب وهو يخرج من المطبخ.
الخطوة 1: الأجزاء والأدوات
مطلوب فقط أجزاء قليلة: الروبوت: Arduino Controled Servo Robot - (SERB) (175 دولارًا @ oomlout.com) أو (اصنع بنفسك)
روبوت مفتوح المصدر يستخدم وحدة تحكم دقيقة من Arduino كدماغ
(يمكن استخدام أي منصة روبوت مؤازرة مزدوجة مع اردوينو (الخيار 1) (يرجى مراسلتي إذا اكتشفت أي خيارات أخرى) الكمبيوتر: Asus eee PC 4G (280 دولارًا) (@ Best Buy)
كمبيوتر محمول صغير غير مكلف ومثالي لهذا الغرض
(يمكن استخدام أي كمبيوتر محمول (أو سطح مكتب إذا كنت تريد تشغيله باستخدام وتر) قادر على تشغيل الرسومات التخطيطية) مكتب الكمبيوتر المحمول: Laser Cut Acrylic (25 دولارًا (@ oomlout)) أو (قم ببناء الخطوة 3 الخاصة بك)
بضع قطع أكريليك إضافية مثبتة على (SERB) لمنحها مكتبًا للكمبيوتر المحمول
الصواميل والمسامير: (متوفرة في مستودع المنزل)
- برغي 3 مم × 10 مم (× 4)
- برغي 3 مم × 15 مم (× 4)
- صامولة 3 مم (× 8)
الخطوة 2: قطع القطع والتجميع
هناك ثلاثة خيارات للحصول على قطع لمكتب الكمبيوتر المحمول الخاص بك. خيار القطع 1: (الشراء من oomlout.com)
تتوفر قطع المكتب بالليزر والأجهزة اللازمة من oomlout مقابل 25 دولارًا (هنا)
الخيار 2: (قطع على قاطع الليزر الخاص بك أو Ponoko.com)
- قم بتنزيل الملف أدناه (03-WEBB-Acrylic Parts.cdr or 03-WEBB-Acrylic Parts (Ponoko P2).eps)
- قصها من 3 مم (1/8 بوصة) أكريليك
الخيار 3: (منشار التمرير)
- قم بتنزيل نموذج المنشار التمرير من الأسفل (03-WEBB-ScrollSaw Pattern (A4).pdf (للورق بحجم A4) أو 03-WEBB-ScrollSaw Pattern (letter).pdf (للورق بحجم letter))
- تحقق جيدًا من عدم تحجيمها عند الطباعة (عن طريق قياس المساطر المطبوعة)
- ألصق قطعة من الأكريليك 3 مم (1/8 بوصة) واقطع القطع.
التجميع: قم بتنزيل دليل التجميع (04-WEBB-Assembly Guide.pdf) أدناه وقم بتجميع مكتب الكمبيوتر المحمول معًا.
الخطوة الثالثة: البرمجيات - (اردوينو)
لأولئك الجدد على Arduino ، تحقق من دليل البدء الرائع على Arduino.cc أولاً من البرنامج الذي يعمل على Arduino. إنه برنامج بسيط للغاية ، ما يفعله Arduino هو مراقبة المنفذ التسلسلي للبيانات ، ما تبحث عنه هو محادثة بطول 5 بايت.
- البايت 1-3 (تحقق من البايت "AAA")
- Byte 4 Command (يخبر Arduino ما يجب فعله) (الأوامر المدعومة 'F' - Forward، 'B' - Backward، 'L' - Left، 'R' - Right، 'S' - Speed، 'X' - SetSpeedLeft، 'Y' - SetSpeedRight ، 'C' - توقف)
- معلمة بايت 5 - بالنسبة لأوامر النقل ، يتم تفسير ذلك على أنه فاصل زمني (المعلمة * 100 مللي ثانية) ، وبالنسبة لأوامر السرعة ، يتم تفسير النسبة المئوية من 0-100
يتم التعليق على الكود بدقة ، ويجب أن تكون إضافة أوامر إضافية سهلة بالنظر إلى هذا الإطار ، وللتنزيل:
- قم بتنزيل الملف المضغوط المرفق. (05-WEBB-Arduino Code.zip)
- قم بفك الضغط إلى دليل Arduino Sketch. (افتراضي: المستندات / Arduino)
- افتح بيئة تطوير اردوينو الخاصة بك وقم بتحميلها على Arduino.
أن تنسخ وتلصق
- انسخ الرمز من الأسفل.
- الصق في بيئة تطوير Arduino.
- تحميل إلى Arduino الخاص بك.
الملحق: برنامج Arduino
/ * * Arduino Controlled Web Connected Robot (WEBB) - Serial Host * لمزيد من التفاصيل ، تفضل بزيارة: https://www.oomlout.com/serb * * السلوك: يستمع Arduino إلى المنفذ التسلسلي الخاص به للحصول على أمر * بتنسيق 254 ، 88 ، 88 ، (الأمر) ، (الوقت) * الأوامر المدعومة - 70 - للأمام * & aposB & apos - 66 - للخلف * & aposL & apos - 76 - لليسار * & aposR & apos - 82 - يمين * & أبوس - 83 - سرعة * & أبوسكس & أبوس - 88 - سرعة ضبط * & aposY & apos - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * الأوقات المدعومة - 0-255 (0 إلى 25.5 ثانية) القيمة * 100 مللي ثانية * sp * الأسلاك: إشارة المؤازرة اليمنى - الدبوس 9 * إشارة المؤازرة اليسرى - دبوس 10 * * الترخيص: هذا العمل مرخص بموجب رخصة المشاع الإبداعي * Attribution-Share Alike 3.0 Unported License. * لعرض نسخة من هذا الترخيص ، تفضل بزيارة * https://creativecommons.org/licenses/by-sa/3.0/ * أو أرسل رسالة إلى المشاع الإبداعي ، 171 Second * Street ، Suite 300 ، سان فرانسيسكو ، كاليفورنيا 94105 ، * الولايات المتحدة الأمريكية. * * / // --------------------------------------------- ---------------------------- // START OF ARDUINO SERIAL SERVER PREAMBLE // تحديد الثوابت المقابلة لكل أمر (أيضًا رقم رمز ascii) #define FORWARD 70 // F # حدد BACKWARD 66 // B # حدد LEFT 76 // L # حدد اليمين 82 // R # حدد SETSPEED 83 // S # حدد STOP 67 // C # حدد SETSPEEDLEFT 88 // X #define SETSPEEDRIGHT 89 // Y / * بايتات الاختيار الثلاثة (تُستخدم لمنع الروبوت من الاستجابة لبيانات تسلسلية * عشوائية) حاليًا "AAA" * / # حدد checkByte1 65 // "A" #define checkByte2 65 // "A "#define checkByte3 65 //" A "// -------------------------------------- ------------------------------------ // بدء تشغيل الروبوت المؤازر الذي يتحكم فيه أردوينو (SERB) #define LEFTSERVOPIN 10 // الدبوس المؤازر الأيسر متصل بـ # حدد RIGHTSERVOPIN 9 // الدبوس المؤازر الأيمن متصل بـServo leftServo ؛ مؤازرة صحيحة int leftSpeed = 50 ؛ // يحمل سرعة الروبوتات leftServo // نسبة مئوية بين 0 و 100int rightSpeed = 100 ؛ // يحمل سرعة الروبوتات الصحيحة // نسبة مئوية بين 0 و 100 // نهاية ARDUINO CONTROLLED SERVO ROBOT (SERB) PREAMBLE // ------------------- -------------------------------------------------- ----- // الحصول على كل شيء وتشغيله void setup () {Serial.begin (9600)؛ // يبدأ المنفذ التسلسلي serbSetup () ؛ // يعين حالة جميع المسامير الضرورية ويضيف الماكينات إلى المخطط الخاص بك} // حلقة البرنامج الرئيسي loopvoid () {serbPollSerialPort () ؛ // يبحث باستمرار عن المنفذ التسلسلي // إذا كانت هناك بيانات يقوم بمعالجتها} // ------------------------------ ----------------------------------------- // START OF ARDUINO SERIAL SERVER ROUTINES / * * أوامر العمليات التي تم تسليمها إلى منفذ arduino & aposs التسلسلي * / void serbPollSerialPort () {int dta؛ // متغير للاحتفاظ بالبايت التسلسلي إذا (Serial.available ()> = 5) {// إذا كان 5 بايت في المخزن المؤقت (طول pf طلب كامل) dta = Serial.read () ؛ if (dta = checkByte1) {// الشيكات لبايت الاختيار الأول dta = Serial.read () ؛ if (dta = checkByte2) {// التحقق من بايت الاختيار الثاني dta = Serial.read () ؛ if (dta = checkByte3) {// التحقق من ثالث بايت فحص الأمر int = Serial.read () ؛ // البايت الرابع هو الأمر int param1 = Serial.read () ؛ // البايت الخامس هو param1pretCommand (الأمر ، param1) ؛ // يرسل الطلب الذي تم تحليله إلى it & aposs handler}}}} / * * يأخذ الأمر والمعلمة ويمرره إلى الروبوت * / void translCommand (int command، int param1) {if (command == FORWARD) {goForward () ؛ تأخير (param1 * 100) ؛ goStop ()؛} // if forward else if (command == BACKWARD) {goBackward ()؛ تأخير (param1 * 100) ؛ goStop ()؛} // if backwards else if (command == LEFT) {goLeft ()؛ تأخير (param1 * 100) ؛ goStop ()؛} // إذا تركت وإلا إذا (الأمر == RIGHT) {goRight () ؛ تأخير (param1 * 100) ؛ goStop ()؛} // if right else if (command == SETSPEED) {setSpeed (param1)؛} // if ضبط السرعة else if (command == STOP) {goStop ()؛} // if stop else if (command == SETSPEEDLEFT) {setSpeedLeft (param1) ؛} // إذا كان تعيين السرعة اليسرى else if (command == SETSPEEDRIGHT) {setSpeedRight (param1) ؛} // إذا كان ضبط السرعة الصحيحة else {// إذا كان الأمر غير المعترف به يؤدي إلى القليل من اللمعان أذهب يسارا()؛ تأخير (150) ؛ اذهب يمينا()؛ تأخير (150) ؛ اذهب وقف()؛ }} // ---------------------------------------------- -------------------------- // START OF ARDUINO CONTROLLED SERVO ROBOT (SERB) ROUTINES / * * إعداد اردوينو الخاص بك لمعالجة SERB الخاص بك باستخدام الإجراءات المتضمنة * / void serbSetup () {setSpeed (leftSpeed) ؛ pinMode (LEFTSERVOPIN ، الإخراج) ؛ // يعين دبوس إشارة المؤازرة الأيسر // لإخراج pinMode (RIGHTSERVOPIN ، الإخراج) ؛ // يعين دبوس إشارة المؤازرة الأيمن // لإخراج leftServo.attach (LEFTSERVOPIN) ؛ // يعلق المؤازرة اليسرى rightServo.attach (RIGHTSERVOPIN) ؛ // يعلق المؤازرة الصحيحة goStop () ؛} / * * يضبط سرعة الروبوت بين 0- (توقف) و 100- (السرعة الكاملة) * ملاحظة: السرعة لن تغير السرعة الحالية يجب عليك تغيير السرعة * ثم اتصل بأحد من طرق go قبل حدوث التغييرات. * / void setSpeed (int newSpeed) {setSpeedLeft (newSpeed) ؛ // يعين السرعة اليسرى setSpeedRight (newSpeed) ؛ // يعين السرعة الصحيحة} / * * يضبط سرعة العجلة اليسرى * / باطل setSpeedLeft (int newSpeed) {if (newSpeed> = 100) {newSpeed = 100؛} // إذا كانت السرعة أكبر من 100 // اجعلها 100 if (newSpeed = 100) {newSpeed = 100؛} // إذا كانت السرعة أكبر من 100 // اجعلها 100 if (newSpeed <= 0) {newSpeed = 0؛} // إذا كانت السرعة أقل من 0 make // إنها 0 rightSpeed = newSpeed * 0.9 ؛ // مقياس السرعة ليكون} / * * يرسل الروبوت إلى الأمام * / void goForward () {leftServo.write (90 + leftSpeed) ؛ rightServo.write (90 - rightSpeed)؛} / * * يرسل الروبوت للخلف * / void goBackward () {leftServo.write (90 - leftSpeed) ؛ rightServo.write (90 + rightSpeed)؛} / * * يرسل الروبوت إلى اليمين * / void goRight () {leftServo.write (90 + leftSpeed) ؛ rightServo.write (90 + rightSpeed)؛} / * * يرسل الروبوت يسارًا * / void goLeft () {leftServo.write (90 - leftSpeed) ؛ rightServo.write (90 - rightSpeed)؛} / * * يوقف الروبوت * / void goStop () {leftServo.write (90)؛ rightServo.write (90) ؛} // روبوت ARDUINO الخاضع للتحكم (SERB) // ---------------------------- -----------------------------------------------
الخطوة 4: البرمجيات - روبوت كمبيوتر محمول (خادم الويب)
(المعالجة هي لغة برمجة مفتوحة المصدر وبيئة يسهل البدء بها. لمزيد من التفاصيل ، تفضل بزيارة المعالجة) البرنامج الذي يعمل على الكمبيوتر المحمول الروبوت بسيط للغاية أيضًا. إنه خادم ويب بدائي إلى حد ما (يستمع لطلبات صفحة الويب من متصفح الويب) ، وواجهة مستخدم صغيرة (لإعداده) ، وتسهيلات لتمرير الأوامر الواردة من خادم الويب إلى Arduino. (على النوافذ)
- قم بتنزيل الملف المضغوط أدناه (06-WEBB-Processing Webserver (windows exe).zip)
- قم بفك ضغطه وتشغيل ملف exe. (_WEBB_WebServer_RobotComputer.exe)
للتحرير في المعالجة:
- قم بتنزيل الملف المضغوط أدناه (06-WEBB-Processing Webserver (الملفات المصدر).zip)
- قم بفك ضغط أي مكان على جهاز الكمبيوتر الخاص بك.
- افتح بيئة المعالجة وافتح (_WEBB_WebServer_RobotComputer.pde)
لاختبار:
- تشغيل البرنامج.
- في المربع رقم 1 ، ستكون هناك قائمة بمنافذ الاتصال المتاحة على جهاز الكمبيوتر الخاص بك (انقر فوق المنفذ المتصل بـ Arduino. منفذ الاتصالات)
- في المربع رقم 2 ، اختبر لمعرفة ما إذا كان Arduino الخاص بك متصلاً. انقر فوق أحد الأسهم ونأمل أن يتحرك الروبوت الخاص بك في الاتجاه الذي تم النقر عليه لمدة نصف ثانية.
- في المربع رقم 3 ، انقر فوق الزر "ابدأ" لبدء خادم الويب.
- افتح مستعرض ويب (على Robot Laptop) وقم بزيارة https://127.0.0.1:12345/ControlPage.html (نأمل أن تظهر صفحة ويب التحكم التي تحتوي على أزرار) - تفاصيل حول كيفية استخدام هذه الصفحة في الخطوة التالية -
ماذا يحدث:
- يستمع خادم الويب إلى المنفذ 12345 لطلبات http (ما يتم إرساله عند كتابة عنوان صفحة الويب)
- هناك نوعان من الطلبات التي تستجيب لها.
1. يستمع إلى "ControlPage.html" ويرسل صفحة ويب التحكم 2. يستمع إلى طلبات النموذج "/ request؟ command = F & param1 = 100" (هذه الأوامر يتم تحليلها وإرسالها إلى Arduino (قد ينتج عن هذا المثال في الروبوت يتقدم للأمام لمدة 10 ثوانٍ) الملحق: (رمز خادم الويب)
/ * * الروبوت المتصل بالويب المتحكم فيه من Arduino (WEBB) - خادم الويب * لمزيد من التفاصيل ، تفضل بزيارة: https://www.oomlout.com/serb * * السلوك: يستمع البرنامج إلى طلبات http (صفحة الويب) في النموذج * "/ الطلب ؟ command = F & param1 = 100 "ثم يمررها إلى * Arduino * الأوامر المدعومة - & aposF & apos - 70 - للأمام * & aposB & apos - 66 - للخلف * & aposL & apos - 76 - Left * & aposR & apos - 82 - Right * & apos - 83 - Speed * & aposX & apos - 83 - Speed * & aposX & apos - 83 - 88 - SetSpeedLeft * & aposY - 89 - SetSpeedRight * & aposC & apos - 67 - Stop * param1 & aposs - 0 - 255 (0 to 25.5 Seconds) value * 100 milliseconds * * يخدم أيضًا صفحة التحكم على الويب للمتصفح إذا طلب ControlPage.html * * العملية: 1. انقر فوق منفذ Comm الذي يتصل به Arduino * 2. استخدم أزرار الاختبار لمعرفة ما إذا كان اردوينو الخاص بك يستمع * (سوف يتحرك في الاتجاه الذي تم النقر عليه لمدة نصف ثانية) * 3. انقر فوق Start وسيقوم خادم الويب الخاص بك أن تستمع للطلبات * * * الترخيص: هذا العمل مرخص بموجب المشاع الإبداعي * Attribu نشوئها على حد سواء 3.0 رخصة غير محمولة. * لعرض نسخة من هذا الترخيص ، تفضل بزيارة * https://creativecommons.org/licenses/by-sa/3.0/ * أو أرسل رسالة إلى المشاع الإبداعي ، 171 Second * Street ، Suite 300 ، سان فرانسيسكو ، كاليفورنيا 94105 ، * الولايات المتحدة الأمريكية. * * / import Processing.serial. * ؛ // استيراد المكتبة التسلسلية لاستخدام Serial (للتحدث إلى Arduino) import Processing.net. * ؛ // استيراد مكتبة الشبكة لاستخدام الخادم (للتحدث إلى الإنترنت) / * المتغيرات ذات الصلة بالمنفذ التسلسلي * / int serialPortIndex = -1 ؛ // فهرس المنفذ التسلسلي الذي نستخدمه في Serial.list () listString commOptions ؛ // متغير لتخزين Serial.list () فيه لذلك ليست هناك حاجة لاستقصاء // المنافذ التسلسلية في كل مرة نرغب في تبريدها (يؤدي الاستقصاء إلى // قفزة في أجهزة اردوينو) Serial serialPort؛ // يجعل المنفذ التسلسلي قابلاً للعنونة خلال هذا الرسم التخطيطي / * Graphic and Rendering Related Variables * / PFont font؛ // يجعل الخط عامًا لذا يجب تحميله مرة واحدة فقط (Arial-72) / * متغيرات مرتبطة بالشبكة * / Server wServer؛ // الخادم الذي يتعامل مع طلبات الويب عبر المنفذ = 12345 ؛ // المنفذ الذي يستمع إليه الخادم toint cycleCount = 0 ؛ // يحسب عدد مرات تنفيذ حلقة السحب (تُستخدم // لتحريك النص "الجاري") / * متغيرات الأداة المساعدة * / PImage bg؛ // صورة الخلفية حاليًا / WEBB-background.png / * * Button Related Variables * (يتم تنفيذ الأزرار تقريبًا ، ويتم تخزين المربعات المحيطة ويتم رسم الرسوم والنص * على صورة الخلفية) أي. لن تتحرك متغيرات الزر المتحرك في ظهور الأزرار * / Button comm1 ؛ زر comm2 ؛ زر comm3 ؛ زر comm4 ؛ // الأزرار لاختيار المنفذ التسلسلي الصحيح زر الحق. زر اليسار زر لأسفل ؛ // أزرار الاتجاه لاختبار ما إذا كان الروبوت يستجيب. // الزر لبدء webServer / * * يحدد كل شيء يصل * / void setup () {frameRate (5)؛ // يبطئ الرسم قليلاً بحيث لا يكون ضرائب على النظام bg = loadImage ("WEBB-background.png") ؛ // يقوم بتحميل صورة الخلفية (المخزنة في مجلد الرسم) بحجم (700 ، 400) ؛ // يعين حجم نافذة الرسم الخط = loadFont ("ArialMT-72.vlw") ؛ // يقوم بتحميل الخط الذي سنستخدمه من خلال أوامر الرسم التخطيطي هذه = Serial.list () ؛ // يستقصي المنافذ التسلسلية ويحصل على قائمة بالمنافذ المتاحة // (يؤدي القيام بذلك مرة واحدة فقط إلى منع الروبوت من الارتعاش في كل مرة يتم فيها استقصاء المنفذ التسلسلي & aposs) تحديد الأزرار () ؛ // يحدد المربعات المحيطة لكل زر خلفية (bg) ؛ // يرسم صورة الخلفية (تحتوي هذه الصورة على كل رسومات الأزرار)} / * الحلقة الرئيسية للرسومات * / void draw () {if (cycleCount == 0) {// - call draw routines drawCommBox ()؛ // يرسم emelments في Comm Box (المربع 1) drawTestBox () ؛ // يرسم جميع العناصر الموجودة في مربع الاختبار (المربع 2) drawWebServerBox () ؛ // يرسم جميع العناصر الموجودة في WebServer Box (المربع 3)} // - call working routines pollWebServer () ؛ // يستطلع رأي خادم الويب لمعرفة ما إذا كانت أي طلبات قد وردت عبر الشبكة} // ------------------------------ ---------------------------------------------- // بداية رسم إجراءات (تقسيم فقط لجعل الكود أجمل للقراءة) / * * روتين تحديث الرسم (يتم تنفيذه في كل دورة) للعناصر الموجودة في مربع الأوامر (المربع 1) * / void drawCommBox () {fill (0، 0، 0) ؛ // اضبط التعبئة على النص الأسود (الخط ، 15) ؛ // اضبط الخط على الحجم المناسب لـ (int i = 0؛ i 0) {running = running + "."؛} // يعتمد عدد النقاط على cycleCount if ((cycleCount / 1)> 1) { run = running + "."؛} if ((cycleCount / 1)> 2) {running = running + "."؛} if ((cycleCount / 1)> 3) {cycleCount = 0؛} text (قيد التشغيل ، 520 ، 210) ؛ } cycleCount ++ ؛ // في كل مرة من خلال cycleCount يتم زيادة عددهم بمقدار واحد} // نهاية إجراءات الرسم // ------------------------------- ------------------------------ // ------------------ ------------------------------------------- // إجراءات بدء الخدمة / * * mousePressed في كل مرة يتم فيها الضغط على الماوس ، هذا * يتحقق مما إذا كان الماوس داخل أي من المربعات المحيطة بالزر * وإذا كان الإجراء المناسب يسمى * / void mousePressed () {if (comm1.pressed ()) { updateSerialPort (0)؛} // التغييرات في منفذ الاتصال في الفهرس 0 في Serial.list () وإلا إذا (comm2.pressed ()) {updateSerialPort (1)؛} // التغييرات في منفذ الاتصال في الفهرس 1 في المسلسل.list () else if (comm3.pressed ()) {updateSerialPort (2)؛} // التغييرات في منفذ الاتصال في الفهرس 2 في Serial.list () وإلا إذا (comm4.pressed ()) {updateSerialPort (3) ؛} // التغييرات على منفذ الاتصال في الفهرس 3 في Serial.list () وإلا إذا (up.pressed ()) {sendRobotCommand ("F"، 5)؛} // يرسل أمرًا لنقل الروبوت إلى الأمام لمدة 0.5 ثواني أخرى إذا (left.pressed ()) {sendRobotCommand ("L"، 5)؛} / / يرسل أمرًا لتحريك الروبوت لليسار لمدة 0.5 ثانية إذا (right.pressed ()) {sendRobotCommand ("R"، 5)؛} // يرسل أمرًا لتحريك الروبوت لليمين لمدة 0.5 ثانية وإلا إذا (down. pressed ()) {sendRobotCommand ("B"، 5)؛} // يرسل أمرًا لنقل الروبوت للخلف لمدة 0.5 ثانية وإلا إذا (webServer.pressed ()) {startWebServer () ؛} // يبدأ webServer cycleCount = 0 ؛ الخلفية (bg) ؛ // يعيد رسم صورة الخلفية (تحتوي هذه الصورة على جميع رسومات الأزرار عليها) رسم () ؛} / * * تم استدعاؤها بمجرد تنفيذ يتحقق من الخادم لمعرفة ما إذا كان هناك أي اتصالات قيد الانتظار * إذا كان هناك اتصال قيد الانتظار فإنه يسحبه خارج الطلب وتمريره إلى روتين parseRequest (String) * لإزالة النص الإضافي. يتم إرسال هذا بعد ذلك إلى إجراءpretRequest (String) * لاستدعاء روتين الإجراء المناسب (أي إرسال التعليمات إلى الروبوت).* * يتم تمرير الطلب عن طريق إدخال عنوان الكمبيوتر والمنفذ في متصفح الويب * للجهاز المحلي "https://127.0.0.1:12345/request؟command=F¶m1=100" * * نموذج طلب: * GET / request؟ command = F & param1 = 100 HTTP / 1.1 * User-Agent: Mozilla / 5.0 (Windows؛ U؛ Windows NT 5.1؛ en-US) AppleWebKit / 525.19 (KHTML ، مثل Gecko) * Accept: * // * * Accept-Language: en-US، en * Accept-Charset: ISO-8859-1، *، utf-8 * Accept-Encoding: gzip، deflate، bzip2 * Host: 127.0.0.1:12345 * Connection: Keep-Alive * * مثال للرد (للطلب المعالج) * HTTP / 1.1 200 OK * Connection: close * Content-Type: text / html * * command: F param1: 100 * / void pollWebServer () {if (wServer! = null) {// If the webServer يقوم بتشغيل طلب العميل = wServer.available () ؛ // قم بتحميل العميل التالي في السطر في الخادم // (فارغ إذا لم تكن هناك طلبات تنتظر) إذا (طلب! = فارغ) {// إذا كان هناك طلب يعالجها String fullRequest = request.readString () ؛ // تخزين محتويات الطلب كسلسلة String ip = request.ip () ؛ // تخزين عنوان IP للعملاء كسلسلة String requestString = parseRequest (fullRequest.toUpperCase ()) ؛ // قم بإزالة جميع // المعلومات الإضافية تاركًا سلسلة الطلب فقط (النص بعد GET) // (التحولات إلى الأحرف الكبيرة لتسهيل اختبار السلسلة) if (requestString.indexOf ("REQUEST؟")! = -1) { // للتحقق مما إذا كان الطلب يحتوي على "REQUEST؟" String response =pretRequest (requestString) ؛ // يرسل الطلب إلى طلب مترجم الطلب. الكتابة ("HTTP / 1.1 200 موافق / n الاتصال: إغلاق / n نوع المحتوى: نص / html / n / n" + رد) ؛ // يرسل الرد 200 ليقول أن الطلب تمت // تمت معالجته وسلسلة "الرد" كاستجابة wServer.disconnect (الطلب) ؛ // Disconnects the Client} else if (requestString.indexOf ("CONTROLPAGE")! = -1) {// إذا كان الطلب لصفحة التحكم على الويب String webPageArray = loadStrings ("WEBB-ControlPage.html") ؛ // يقوم بتحميل صفحة ويب التحكم من / data / WEBB-ControlPage.html // (تم تحميلها كمصفوفة من الأسطر) String webPage = ""؛ // لتسهيل التحرير ، تُركت صفحة الويب مع // فواصل أسطر ، لذا فإن حلقة for هذه تزيل تلك السطور من أجل (int i = 0 ؛ i portIndex) {// إذا كان portIndex الذي تم تمريره هو فهرس صالح في Serial.list () // (أي ليس الخيار الثالث في قائمة من اثنين) serialPortIndex = portIndex؛ // اضبط متغير serialPortIndex على فهرس المنفذ التسلسلي الجديد // (يستخدم هذا لعرض النقطة بجانب المنفذ النشط)} إذا (serialPortIndex! = -1) {// تحقق للتأكد من اختيار منفذ في وقت ما سابقًا إذا (serialPort! = null) {serialPort.stop ()؛} // إذا كان المنفذ التسلسلي قيد الاستخدام بالفعل ، فقم بإيقافه قبل تحميل منفذ تسلسلي واحد جديد = مسلسل جديد (this، Serial.list () [serialPortIndex]، 9600)؛ // أنشئ كائنًا تسلسليًا جديدًا للتواصل مع Arduino 9600 Baud}} / * * يأخذ سلسلة طلب (على سبيل المثال: "request؟ command = F & param1 = 100") وسيخرج الأمر * و param1 ويمرره إلى arduino (إضافة معلمات إضافية أو أوامر غير اردوينو ستتم هنا) * / StringpretRequest (String requestString) {String returnValue = "OK"؛ // تحضير أمر سلسلة متغير returnValue ؛ // تستخرج الأسطر الثلاثة التالية القيمة بعد "الأمر =" // (السطر الإضافي يكون في حالة وجود معلمة الأمر في // نهاية الطلب وليس متبوعًا بعلامة & if (requestString.indexOf ("COMMAND =")! = -1) {الأمر = requestString.substring (requestString.indexOf ("COMMAND =") + "COMMAND =". length ()) ؛} else {command = "Z" ؛} if (command.indexOf (" & ")! = -1) {command = command.substring (0، command.indexOf (" & "))؛} else {command = command؛} String param1String؛ // تستخرج الأسطر الثلاثة التالية القيمة بعد" param1 = "// (يكون السطر الإضافي في حالة وجود معلمة الأمر في // نهاية الطلب ولا يتبعها & if (requestString.indexOf (" PARAM1 = ")! = -1) {param1String = requestString.substring (requestString.indexOf ("PARAM1 =") + "PARAM1 =". length ())؛} else {param1String = "0"؛} if (param1String.indexOf ("&")! = -1) {param1String = param1String.substring (0، param1String.indexOf ("&"))؛} else {param1String = param1String؛} int param1 = Integer.parseInt (param1String)؛ // تحويل سلسلة param1 إلى عدد صحيح sendRobotCommand (الأمر ، param1) ؛ // يرسل الأمر إلى الروتين الذي يرسله إلى Arduino returnValue = "command:" + command + "param1:" + param1؛ // في الوقت الحالي فقط الأمر الذي تم تحليله ولكن يتم إرسال // كـ html بحيث يمكن تضمين التنسيق returnValue ؛} / * * يأخذ أمرًا (حاليًا حرفًا واحدًا) ومعلمة (بايت واحد 0-255) ويرسله إلى arduino * الذي يستمع ويقيم * الأوامر المدعومة بشكل دوري * F - * / void sendRobotCommand (أمر سلسلة ، int param1) {println ("command:" + command + "time:" + param1) ؛ سلسلة checkString = "AAA" ؛ if (serialPort! = null) {serialPort.write (checkString + الأمر) ؛ serialPort.write (بايت (بارام 1)) ؛ }} // نهاية الإعداد / ليست إجراءات شائعة جدًا تسمى // ----------------------------------- -------------------------------------------------- // زر مثال ورمز RectButton من مثال process.org مع بعض التغييرات // تم إجراؤها في الغالب لتبسيط وإزالة التدحرج على الرسوم المتحركة // https://processing.org/learning/topics/buttons.html (2008-09-23) زر فئة {int x، y؛ عرض int ، ارتفاع زر (int ix، int iy، int iwidth، int iheight) {x = ix؛ ص = أنا ؛ العرض = iwidth ؛ الارتفاع = ارتفاع } boolean pressed () {if (overRect ()) {return true؛ } else {return false؛}} boolean overRect () {if (mouseX> = x && mouseX = y && mouseY <= y + height) {return true؛ } else {return false؛ }}}
الخطوة 5: البرمجيات - (صفحة الويب)
حسنًا ، لقد انتهينا تقريبًا من كل ما تبقى هو التحدث إلى الروبوت الخاص بك. للتحدث: (عبر شبكة محلية -على windows-)
- اكتشف عنوان IP المحلي للكمبيوتر المحمول. للقيام بذلك ، انتقل إلى "Start / Programs / Accesories / Command Prompt" وعندما تفتح نافذة المحطة الطرفية ، اكتب "ipconfig". اكتب "عنوان IP" وتوجه إلى جهاز كمبيوتر آخر على شبكتك المحلية.
- افتح مستعرض ويب ، واكتب "https:// (robot computer ip): 12345 / ControlPage.html
- يجب تحميل صفحة ويب التحكم ، في مربع "عنوان IP" اكتب عنوان IP لأجهزة الكمبيوتر الروبوتية.
- ابدأ في التحكم في الروبوت الخاص بك.
للتحدث: (عبر الإنترنت) الآن بعد أن أصبحت تعمل محليًا ، أصبح التحدث عبر الإنترنت على بعد خطوات قليلة فقط.
- (الخطوة الأكثر صعوبة) إعداد Port Forwarding - يحتاج جهاز الكمبيوتر الخاص بك إلى الاستماع إلى الإنترنت بدلاً من الشبكة المحلية فقط. للقيام بذلك ، تحتاج إلى إخبار جهاز التوجيه الخاص بك بتمرير طلبات معينة من خلال الكمبيوتر الذي يتحكم في الروبوت. هذا معقد بعض الشيء ويتجاوز نطاق هذا Instructable. ومع ذلك ، إذا قمت بزيارة PortForward.com فسوف يقدمون لك كل ما تحتاج لمعرفته حول تكوين جهاز التوجيه الخاص بك (تحتاج إلى إعادة توجيه المنفذ 12345 إلى الكمبيوتر المحمول الروبوت الخاص بك)
- بعد ذلك ، اكتشف عنوان IP الخاص بك على الإنترنت (قم بزيارة WhatIsMyIP.com)
- أخيرًا ، أطلق سكايب إعداد مكالمة فيديو واجعل من تتحدث معه لزيارة "https:// (internet IP): 12345 / ControlPage.html"
- اكتب عنوان IP للإنترنت في مربع "عنوان IP" في صفحة ويب التحكم ويتم توجيه الروبوت المتصل بالإنترنت من بعيد.
الخطوة 6: انتهى
حسنًا هذا كل شيء. أتمنى أن تقضي وقتًا ممتعًا في قيادة الروبوت الخاص بك من مسافة بعيدة. إذا كان لديك أي مشاكل مع البرنامج أو الجهاز ، فلا تتردد في ترك تعليق وسأحاول مساعدتك. إذا كنت ترغب في التحقق من المزيد من المشاريع الأنيقة ، فحاول زيارة: oomlout.com